本地化的 Plist 文件
这里更简单的解决方案是本地化整个 plist。通过这样做,您将为每种受支持的语言提供不同的 plist 文件。
选择项目中的 plist 文件,然后在 File Inspector 菜单中选择 Localize。
它将为每种支持的语言创建一个包含 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 字符串:
还有你的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);