8

我已经开始在我的项目中添加更多语言,并且没有太多麻烦地本地化了字符串和图形。

我有最后一个问题,它与 plist 文件有关。

此 plist 文件包含应用程序的默认类别名称,并在字典中填充了英文字符串。

我的问题是:有没有办法本地化 plist 文件?我虽然想将本地化字符串添加到 plist 但不知道如何。

我不想在代码中决定要采用哪个 plist 文件,因为默认 plist 文件在第一次使用时会被用户覆盖。

4

1 回答 1

24

本地化的 Plist 文件

这里更简单的解决方案是本地化整个 plist。通过这样做,您将为每种支持的语言提供不同的 plist 文件。

选择项目中的 plist 文件,然后在File Inspector菜单中选择Localize 。

文件本地化图片

它将为每种支持的语言创建一个包含 Plist 文件的新文件夹。

从:

虚拟列表

到:

> en.lproj
>  >  dummy.plist
> es.lproj
>  >  dummy.plist
> de.lproj
>  >  dummy.plist

本地化的 Plist 内容

另一种解决方案是在 plist 中使用本地化字符串,并NSLocalizedString在打印出提取的字符串之前简单地调用。

想象一下,你有一个这样的 Plist: 原始列表

您可以通过将键添加到Localizable.strings文件中来简单地本地化其字符串。例如,在西班牙语中:

"My menu title" = "Mi título del menú";
"My menu description" = "Mi descripción del menú";

或者,我的建议是将您的母语字符串从 Plist 移出到一个字符串文件,并用可本地化的键替换 Plist 字符串: 本地化的 plist 内容

还有你Localizable.strings的英语:

"MY_MENU_TITLE" = "My menu title";
"MY_MENU_DESCRIPTION" = "My menu description";

和西班牙语:

"MY_MENU_TITLE" = "Mi título del menú";
"MY_MENU_DESCRIPTION" = "Mi descripción del menú";

我发现最新的更容易维护和更容易本地化新语言,因为所有必需的字符串都在同一个文件中。

最后更改您的代码以使用NSLocalizableString而不是从 Plist 文件中读取的纯字符串。例如,假设您有以下代码:

NSDictionary* plistDict = [[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"menuElements" ofType:@"plist"]];

menuTitleLabel.text = plistDict[@"menuTitle"];
menuDescriptionLabel.text = plistDict[@"menuDescription"];

只需将其更改为:

NSDictionary* plistDict = [[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"menuElements" ofType:@"plist"]];

menuTitleLabel.text = NSLocalizedString(plistDict[@"menuTitle"], nil);
menuDescriptionLabel.text = NSLocalizedString(plistDict[@"menuDescription"], nil);

如果这是您的情况,您可以完全摆脱 plist 文件:

menuTitleLabel.text = NSLocalizedString(@"MY_MENU_TITLE", nil);
menuDescriptionLabel.text = NSLocalizedString(@"MY_MENU_DESCRIPTION", nil);
于 2013-03-20T11:11:30.057 回答