Objective c NSLocalizedString中的评论标准

Objective c NSLocalizedString中的评论标准,objective-c,cocoa,coding-style,localization,Objective C,Cocoa,Coding Style,Localization,人们如何为他们的NSLocalizedStrings写评论?是否有我们应该遵循的标准指南?例如,如果我有: NSLocalizedString(@"Tap your account to sign in", @""); 我的评论是“要求用户点击帐户登录的文本”,这有点含糊不清吗?如果这句话是不言自明的,我应该把它删掉吗 另一个问题是,如果我有一堆ProgressHUD,其中有一个文本设置为Logginging In,那么在我的应用程序项目中进行同步的简单方法是什么,这需要本地化为NSLoca

人们如何为他们的
NSLocalizedString
s写评论?是否有我们应该遵循的标准指南?例如,如果我有:

NSLocalizedString(@"Tap your account to sign in", @""); 
我的评论是“要求用户点击帐户登录的文本”,这有点含糊不清吗?如果这句话是不言自明的,我应该把它删掉吗


另一个问题是,如果我有一堆ProgressHUD,其中有一个文本设置为Logginging In,那么在我的应用程序项目中进行同步的简单方法是什么,这需要本地化为
NSLocalizedString(@“Loggin In”,@“some description”)
是否有执行此类任务的工具?

第二个参数是一条注释,如果您使用genstrings命令行实用程序,它可以通过扫描源代码为您创建字符串文件,则该注释将自动出现在字符串文件中

该注释对您的本地化程序很有用。例如:

NSLocalizedString(@"Save",@"Title of the Save button in the theme saving dialog");
运行GenString时,这将在Localizable.strings文件中生成如下项:

/* Title of the Save button in the theme saving dialog */
"Save" = "Save";
在您的具体示例中,很明显注释的意思是什么,但上下文不是。您可能应该添加一些上下文,如下所示:

NSLocalizedString(@"Tap your account to sign in", @"Instruct user to tap their account to sign in (Facebook account, main game preferences)");
这样,定位器就能准确地知道你指的是什么按钮

对于标有“共享”或其他非特定标签的按钮,这一点变得更加重要:

NSLocalizedString(@"Share", @"Label for sharing button on main image editing screen");

(这是我的答案的修改版本)。

第二个参数是一条注释,如果您使用genstrings命令行实用程序,它可以通过扫描源代码为您创建字符串文件,该注释将自动出现在字符串文件中

该注释对您的本地化程序很有用。例如:

NSLocalizedString(@"Save",@"Title of the Save button in the theme saving dialog");
运行GenString时,这将在Localizable.strings文件中生成如下项:

/* Title of the Save button in the theme saving dialog */
"Save" = "Save";
在您的具体示例中,很明显注释的意思是什么,但上下文不是。您可能应该添加一些上下文,如下所示:

NSLocalizedString(@"Tap your account to sign in", @"Instruct user to tap their account to sign in (Facebook account, main game preferences)");
这样,定位器就能准确地知道你指的是什么按钮

对于标有“共享”或其他非特定标签的按钮,这一点变得更加重要:

NSLocalizedString(@"Share", @"Label for sharing button on main image editing screen");

(这是我对答案的修改版本)。

罗布·凯尼格是对的。我还要补充一点: 第二个参数可以用作默认值

(NSLocalizedStringWithDefaultValue不能与genstring一起正常工作,这就是我提出此解决方案的原因)

下面是我的自定义实现,它使用NSLocalizedString,并将注释作为默认值:

1。在预编译的头(.pch文件)中,重新定义“NSLocalizedString”宏:

// cutom NSLocalizedString that use macro comment as default value
#import "LocalizationHandlerUtil.h"

#undef NSLocalizedString
#define NSLocalizedString(key,_comment) [[LocalizationHandlerUtil singleton] localizedString:key  comment:_comment]
2。创建一个类来实现本地化处理程序

#import "LocalizationHandlerUtil.h"

@implementation LocalizationHandlerUtil

static LocalizationHandlerUtil * singleton = nil;

+ (LocalizationHandlerUtil *)singleton
{
    return singleton;
}

__attribute__((constructor))
static void staticInit_singleton()
{
    singleton = [[LocalizationHandlerUtil alloc] init];
}

- (NSString *)localizedString:(NSString *)key comment:(NSString *)comment
{
    // default localized string loading
    NSString * localizedString = [[NSBundle mainBundle] localizedStringForKey:key value:key table:nil];

    // if (value == key) and comment is not nil -> returns comment
    if([localizedString isEqualToString:key] && comment !=nil)
        return comment;

    return localizedString;
}

@end
3。用它

确保在应用程序构建阶段添加运行脚本,以便在每次构建时更新Localizable.strings文件,即在Localizable.strings文件中添加新的本地化字符串:

我的构建阶段脚本是一个shell脚本:

Shell: /bin/sh
Shell script content: find . -name \*.m | xargs genstrings -o MyClassesFolder
因此,当您在代码中添加这一新行时:

self.title = NSLocalizedString(@"view_settings_title", @"Settings");
然后执行生成,./Localizable.scripts文件将包含以下新行:

/* Settings */
"view_settings_title" = "view_settings_title";
由于key==view\u settings\u title的值,自定义LocalizedStringHandler将返回注释,即“settings”


瞧——)

罗布·凯尼格是对的。我还想补充一点: 第二个参数可用作..默认值

(NSLocalizedStringWithDefaultValue不能与genstring一起正常工作,这就是我提出此解决方案的原因)

下面是我的自定义实现,它使用NSLocalizedString,并将注释作为默认值:

1.在预编译的头(.pch文件)中,重新定义“NSLocalizedString”宏:

// cutom NSLocalizedString that use macro comment as default value
#import "LocalizationHandlerUtil.h"

#undef NSLocalizedString
#define NSLocalizedString(key,_comment) [[LocalizationHandlerUtil singleton] localizedString:key  comment:_comment]
2.创建一个类来实现本地化处理程序

#import "LocalizationHandlerUtil.h"

@implementation LocalizationHandlerUtil

static LocalizationHandlerUtil * singleton = nil;

+ (LocalizationHandlerUtil *)singleton
{
    return singleton;
}

__attribute__((constructor))
static void staticInit_singleton()
{
    singleton = [[LocalizationHandlerUtil alloc] init];
}

- (NSString *)localizedString:(NSString *)key comment:(NSString *)comment
{
    // default localized string loading
    NSString * localizedString = [[NSBundle mainBundle] localizedStringForKey:key value:key table:nil];

    // if (value == key) and comment is not nil -> returns comment
    if([localizedString isEqualToString:key] && comment !=nil)
        return comment;

    return localizedString;
}

@end
3.使用它!

确保在应用程序构建阶段添加运行脚本,以便在每次构建时更新Localizable.strings文件,即在Localizable.strings文件中添加新的本地化字符串:

我的构建阶段脚本是一个shell脚本:

Shell: /bin/sh
Shell script content: find . -name \*.m | xargs genstrings -o MyClassesFolder
因此,当您在代码中添加这一新行时:

self.title = NSLocalizedString(@"view_settings_title", @"Settings");
然后执行生成,./Localizable.scripts文件将包含以下新行:

/* Settings */
"view_settings_title" = "view_settings_title";
由于key==view\u settings\u title的值,自定义LocalizedStringHandler将返回注释,即“settings”


瞧——)

看看Mac应用程序语言-我听说它非常适合帮助应用程序本地化。看看Mac应用程序语言-我听说它非常适合帮助应用程序本地化。