我已经开始在我的项目中添加更多语言,并且没有太多麻烦地本地化了字符串和图形。
我有最后一个问题,它与 plist 文件有关。
此 plist 文件包含应用程序的默认类别名称,并在字典中填充了英文字符串。
我的问题是:有没有办法本地化 plist 文件?我虽然想将本地化字符串添加到 plist 但不知道如何。
我不想在代码中决定要采用哪个 plist 文件,因为默认 plist 文件在第一次使用时会被用户覆盖。
我已经开始在我的项目中添加更多语言,并且没有太多麻烦地本地化了字符串和图形。
我有最后一个问题,它与 plist 文件有关。
此 plist 文件包含应用程序的默认类别名称,并在字典中填充了英文字符串。
我的问题是:有没有办法本地化 plist 文件?我虽然想将本地化字符串添加到 plist 但不知道如何。
我不想在代码中决定要采用哪个 plist 文件,因为默认 plist 文件在第一次使用时会被用户覆盖。
这里更简单的解决方案是本地化整个 plist。通过这样做,您将为每种支持的语言提供不同的 plist 文件。
选择项目中的 plist 文件,然后在File Inspector菜单中选择Localize 。
它将为每种支持的语言创建一个包含 Plist 文件的新文件夹。
从:
虚拟列表
到:
> en.lproj
> > dummy.plist
> es.lproj
> > dummy.plist
> de.lproj
> > dummy.plist
另一种解决方案是在 plist 中使用本地化字符串,并NSLocalizedString
在打印出提取的字符串之前简单地调用。
想象一下,你有一个这样的 Plist:
您可以通过将键添加到Localizable.strings
文件中来简单地本地化其字符串。例如,在西班牙语中:
"My menu title" = "Mi título del menú";
"My menu description" = "Mi descripción del menú";
或者,我的建议是将您的母语字符串从 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);