Rob Keniger 是对的。我还想补充一点:
第二个参数可以用作.. 默认值!!
(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 文件将在每次构建时更新,即,新的本地化字符串将添加到您的 Localized.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";
由于'view_settings_title'的key == value,自定义LocalizedStringHandler将返回注释,即'Settings'
瞧 :-)