Localizable.strings无法加载其他所有版本?

bet*_*eta 10 iphone xcode ios

我在Cocoa内置的本地化系统遇到了一个奇怪的问题.我使用genstrings为我的项目创建一个localizable.strings文件,该文件加载并替换我的应用程序中预期的字符串.

但是,它似乎只适用于所有其他构建.我将使用XCode构建代码,在我的设备上测试它,它将显示正确的字符串没有问题.然而,下一个构建将无法加载字符串文件(至少,这就是我所假设的.)这不是随机的,但可以预见的是每个其他构建.我对Localizable.strings文件一无所知.

我不知道从哪里开始诊断这个问题,我想知道是否有人有过在Cocoa上进行本地化的经验.

我在我的代码库中使用NSLocalizedString,如下所示:

NSLocalizedString(@"ReallyNewGame", @"Are you sure you want to start a new game?")
Run Code Online (Sandbox Code Playgroud)

我的Localizable.strings文件中的相应条目:

/* Are you sure you want to start a new game? */
"ReallyNewGame" = "Do you really want to start a new game?";
Run Code Online (Sandbox Code Playgroud)

以下是我的Info.plist的相关部分:

<key>CFBundleDevelopmentRegion</key>
<string>English</string>
Run Code Online (Sandbox Code Playgroud)

以下是应用程序的每个其他版本的截图:

正确: 它的外观如何正确

不正确: 它的外观如何不正确

我很困惑为什么会这样.我没有使用Localizable.strings文件手动执行任何操作,并且我已经在XCode上多次清理了我的项目.任何指向正确方向的人都会非常感激.如果您需要更多信息,我会尝试提供.

谢谢!

Dav*_*d H 7

我不能给你一个直接的答案,但可以提出一些方法来继续.我现在实际上并没有多语言应用程序,因此大部分内容都是我通过阅读收集到的(我可能很快就会有一个,所以我的问题是我感兴趣的):

1)Apple已弃用了English.lproj的用户,转而使用en.lproj.在任何情况下,重要的是,如果您使用"英语"作为您的CFBundleDevelopmentRegion值,该文件夹将被命名为"英语"而不是"en".

2)你的字符串文件应该是UTF16,并在文件检查器中注明(Xcode中最右边的窗格)

3)有一个很好的前一个问题,它有一些关于确保你的本地化文件在Xcode中正确输入的图形指针(因此Xcode知道,并知道它必须处理它们).

4)您的文件可能已损坏,资源指南说您可以在其上运行"plutil -lint Localizable.strings"以验证其正确性

5)作为旁注,许多人指出Mac App Store App是一个很好的实用程序来合并(而不是覆盖)字符串文件(当你添加时).

6)如果事情看起来还不错,那么当应用程序首次启动时,将以下内容添加到AppDelegate"didFinishLaunchingWithOptions"(位于顶部):

NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSLog(@"Strings file: %@", [bundel pathForResource:@"Localizable" ofType:@".strings"]);
NSLog(@"Localizations: %@" [bundle localizations]);
NSLog(@"Local Dict: %@", [bundle localizedInfoDictionary]];
NSLog(@"localizedStringForKey: %@", [bundle localizedStringForKey:@"ReallyNewGame"value:@"WTF???" table:nil];
NSLog(@"Localized String: %@", NSLocalizedString(@"ReallyNewGame", @"Are you sure you want to start a new game?"));
exit(0); // just testing the above for now
Run Code Online (Sandbox Code Playgroud)

多次运行应用程序.输出应该是相同的.如果它没有对此答案添加评论,我们可以进一步深入研究.如果它是相同的,那么在你的应用程序中进一步导致腐败.


use*_*215 6

万一它可以帮助其他人:

我遇到了完全相同的问题:每个其他构建本地化都无法正常工作.我在检查捆绑包内容时发现en.lproj中的Localizable.strings已损坏 - 文件只有76个字节,应该是4k.腐败的下一个构建已经消失,然后又回来了,然后又消失了......

事实证明,当我从另一个项目复制一个文件夹时,我已经将一个额外的Localizable.strings文件夹复制到我的项目中.当我删除额外的Localizable.strings文件夹时,一切都神奇地起作用.呼!