本地化的Plist文件
更简单的解决方案是将整个plist文件本地化。这样做,您将为每种支持的语言拥有一个不同的plist文件。
在项目中选择plist文件,在文件检查器菜单中选择本地化。
![文件本地化图像](https://istack.dev59.com/YQTdS.webp)
它会创建一个新文件夹,其中包含每种支持语言的Plist文件。
从:
dummy.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 字符串:
![Localized plist contents](https://istack.dev59.com/vhbs9.webp)
而您的英文
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)