现在,在本地化的标准行为中,iOS确定当前设置的iPhone语言,并使用Localizable.strings文件设置相应的文本。
但是,我的客户端需要一个多语言iOS应用程序,其中语言在应用程序中设置,独立于本机iOS首选语言。即,应用程序可能与iOS目前在iPhone上设置的语言不同。
有任何关于如何实施此方案的想法吗?
我的想法:
答案 0 :(得分:4)
你可以:
将翻译字符串存储在每种语言的.plist文件(string_key / translation)中;
在NSDictionary中阅读相应的plist(取决于当前设置的语言);
访问要显示的每个字符串的字典(就像使用NSLocalizeString一样)。
答案 1 :(得分:1)
我曾经不得不创建一个flashchards应用程序,客户端需要随意更改语言。我现在在我的框中没有它的源代码,但我记得使用这个tutorial。另请查看他们使用的示例代码。
附注 - 公开诋毁你的客户真是不专业。
答案 2 :(得分:1)
使用所需语言创建plist文件。我使用{LANG} _ {CLASS NAME}和{CLASS NAME}作为所有本地化字符串的默认值。
之后我创建了一个方法来检查是否存在正确的文件,如果丢失则接受或默认,并根据设备语言返回NSDictionary对象,在类init上调用。如果通过将nib名称添加到字符串文件来实现本地化的nib,也可以使用这个想法。
+ (NSDictionary *) getLocalized: (NSString *) contollerName andLang:(NSString *) lang {
NSString *fullPath = nil;
// You can use device lang if needed
NSString * curLang=[[NSLocale preferredLanguages] objectAtIndex:0];
fullPath = [[NSBundle mainBundle] pathForResource: [NSString stringWithFormat:@"%@_%@",contollerName,lang] ofType: @"plist"];
if (!fullPath) {
fullPath = [[NSBundle mainBundle] pathForResource:contollerName ofType:@"plist"];
}
return [NSDictionary dictionaryWithContentsOfFile:fullPath];
}
所以,它可以被类似的东西调用:
[tools getLocalized:[Controller.class description] andLang:@"XX"];
答案 3 :(得分:0)
您可以使用标准本地化(.strings文件和本地化.xibs)并强制您的应用使用iOS语言设置以外的语言。有关如何实现此目的的详细信息,请参阅此帖子:Change language of the ios application
请注意,如果您(或者更确切地说是您的客户端!)想要在使用应用程序时动态切换语言,那将会更复杂 - 您需要实现某种刷新功能并确保重新加载xib