3

我想在我的应用程序中使用 NSLocalizedString 但它总是失败。我要做的是:

  • 在项目属性中定义 3 个本地化(参见下面的屏幕截图)
  • 创建一个新文件:资源字符串文件
  • 如果存在 file.strings,请签入应用程序包

然后我使用 NSLocalizedStrings 如下,但它不起作用!

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    NSString *v1 = NSLocalizedString(@"MyWindow", nil);

    //NSString *v1 = [[NSBundle mainBundle] localizedStringForKey:(@"MyWindow") value:@"" table:nil];
    [label setStringValue:v1];
}

在我的 3 个 .strings 文件中,我定义了以下键/值: "MyWindow" = "Ma Fenetre";

通常,我的标签应该显示“Ma Fenetre”而不是“MyWindows”。您可以在此处下载示例项目并告诉我问题出在哪里

在我的应用程序包中查看 Resources 文件夹的内容:

DerivedData om$ find test/Build/Products/Debug/test.app/Contents/Resources/
test/Build/Products/Debug/test.app/Contents/Resources/
test/Build/Products/Debug/test.app/Contents/Resources//de.lproj
test/Build/Products/Debug/test.app/Contents/Resources//de.lproj/File.strings
test/Build/Products/Debug/test.app/Contents/Resources//en.lproj
test/Build/Products/Debug/test.app/Contents/Resources//en.lproj/File.strings
test/Build/Products/Debug/test.app/Contents/Resources//fr.lproj
test/Build/Products/Debug/test.app/Contents/Resources//fr.lproj/File.strings
test/Build/Products/Debug/test.app/Contents/Resources//MainMenu.nib

谢谢 Elfoiros

4

4 回答 4

36

NSLocalizedString默认使用Localizable.strings文件。更改您的File.strings姓名,然后重试。

于 2012-06-02T15:27:07.253 回答
9

每次您在 .Strings 文件中进行更改时,您都需要清理您的项目并从设备和模拟器中删除应用程序。这是开发本地化应用程序的唯一方法。祝你编码愉快。!

于 2013-06-23T05:56:47.687 回答
8

正如亚当所说,NSLocalizedString用于Localizable.strings查找表。要指定自定义表,请使用:

NSLocalizedStringFromTable(@"MyWindow", @"File");

文档

于 2012-06-02T15:30:43.560 回答
3

需要注意区分大小写的文件名:Localizable.strings 不是 localizable.strings。只需在 Finder 中重命名,删除 Xcode 项目中的引用并将 Localizable 字符串添加回项目。然后确保在文件检查器中选择了适当的本地化框。不知道是否有更好的光滑工艺。

于 2013-10-29T06:30:54.980 回答