NSLocalizedString 有时会加载字符串,但并非总是如此

Posted

技术标签:

【中文标题】NSLocalizedString 有时会加载字符串,但并非总是如此【英文标题】:NSLocalizedString loads the string sometimes, not always 【发布时间】:2013-01-23 18:34:50 【问题描述】:

NSLocalizedString 仅在我取回所引用键的预期值的一半时间内起作用。其他时候,我会取回 NSLocalizedString 中指定的键名,并且在每次运行时始终如一地发生。

目前,我目前只支持英语。

我在打电话:

NSString *someText = NSLocalizedString(@"mystring.keyname", nil);

en.lproj/Localizable.strings 的内容:

"mystring.keyname" = "Hello there!";

当它不能正常工作时,someText's 的值为mystring.keyname

这是我测试可靠性的方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
    NSLog(@"Strings file: %@", [bundle pathForResource:@"Localizable" ofType:@".strings"]);
    NSLog(@"Localizations: %@", [bundle localizations]);
    NSLog(@"Local Dict: %@", [bundle localizedInfoDictionary]);
    NSLog(@"localizedStringForKey: %@", [bundle localizedStringForKey:@"mystring.keyname"value:@"Wha happened?" table:nil]);
    NSLog(@"Localized String: %@", NSLocalizedString(@"mystring.keyname", @"Are you sure you want to start a new game?"));

这会每隔一次运行打印出预期值:

Run #1:
Local Dict: (null)
localizedStringForKey: Hello there!
Localized String: Hello there!

Run #2:
Local Dict: (null)
localizedStringForKey: Wha happened?
Localized String: mystring.keyname

我的文件是这样排列的:

WORKSPACE_DIR/ 
  my_workspace_name.xcworkspace
  PROJECT_DIR/
    - my_project_name.xcodeproj
    RESOURCES_DIR/
      - en.lproj/
          Localizable.strings

XCode 的项目级设置:

1) Build Phases has Localizable.strings listed in the "Copy Bundle Resources".

2) Build Settings:
   Convert Copied Files => YES
   Property List Output Encoding => binary
   Strings file Output Encoding => UTF-16        

3) Info.plist's: CFBundleDevelopmentRegion => 'en'

Localizable.strings 配置为 UTF-16,尽管我在文件检查器中没有看到选择了字符串文件的文本设置选项。但是我已经通过在 TextWrangler 中打开文件来验证编码类型,该文件确实显示编码为 Unicode (UTF-16) 和 Unix LF。

关于如何让它一直工作的任何建议?

【问题讨论】:

您找到解决方案了吗?遇到同样的问题,其他运行本地化不起作用。 【参考方案1】:

如果您的可本地化文件中有任何多余的分号,它会构建但无法本地化。

【讨论】:

【参考方案2】:

您的目标中应该有多个名为“Localizable.strings”的文件。 Xcode 无法处理此问题。 您可以重命名一个,并使用“NSLocalizedStringFromTable”从中加载。 具体可以参考: Localisation strings not always work having ShareKit in a project

【讨论】:

【参考方案3】:

在寻求解决方案几分钟后,我找到了。 我已经包含了来自第三方的另一个 Localizable.strings 。一旦我删除它,每隔一次运行就不会再丢失翻译。

【讨论】:

以上是关于NSLocalizedString 有时会加载字符串,但并非总是如此的主要内容,如果未能解决你的问题,请参考以下文章

NSLocalizedString - 强制国家特定的字符串文件

swift NSLocalizedString 字符串获取值错误

Objective C 中的 NSLocalizedString

在 Swift 中带有变量的 NSLocalizedString 不起作用

用js解析xml在html中显示,但是有时候xml中出现中文字符就会出现加载不上xml的情况,有时候又能正常显示

Localizable.strings 中的多行字符串