iphone - 自定义 NSLocalizedString?

标签 iphone xcode localization nslocalizedstring localizable.strings

是否可以将 NSLocalizedString 基础结构(基于 localized.strings)与自定义定义的“本地化”结合使用?

问题是,有些语言对男性和女性有不同的措辞。我想在首次启动时询问用户的性别,然后使用适当的短语。当然,两者都基于相同的语言。我可以使用自己的代码来完成此操作,但如果可能的话,我宁愿采用简单的方法。

最佳答案

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

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

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。使用它!

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

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

Shell: /bin/sh
Shell script content: find . -name \*.m | xargs genstrings -o MyProjectFolder

因此,当您在代码中添加这一新行时:

self.title = NSLocalizedString(@"view_settings_title", @"Settings");

然后执行构建,您的 ./Localizable.scripts 文件将包含以下新行:

/* Settings */
"view_settings_title" = "view_settings_title";

由于“view_settings_title”的 key == value,自定义 LocalizedStringHandler 将返回注释,即“Settings”

瞧:-)

关于iphone - 自定义 NSLocalizedString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6593561/

相关文章:

ios/iphone - [NSNull dataUsingEncoding :]: unrecognized selector sent to instance

iphone - UIWebView、Word办公文档及分页

ios - 如果用户取消了 InApp 购买或只是另一个失败状态,如何处理

xcode - Swift:如何将 UIImageView 的缩放区域显示到另一个 UIImageView 中

c# - 创建多语言网站我应该知道和考虑什么

django - 如何使用 django.views.i18n.set_language() 函数?

iphone - 像 Reeder 应用一样捏合以全屏拍照

iphone - ios在另一个 View 的tableview中导航和显示数据

objective-c - NSDictionary 中的 NSDictionary

ios - Uber iOS SDK 字符串本地化