12p*_*2pm 22 iphone xcode objective-c ios
我正在为讲俄语的人开发应用程序.俄罗斯附近的很多国家都有第二语言 - 俄语.我的应用程序有两个本地化:俄语和英语.我需要设置默认的俄语本地化.英语应仅适用于使用英语的人,如设备的语言.
我知道Apple建议在设置中优先使用本地优先语言,但我有一个重要的理由不遵循此建议.
如何设置默认的俄语本地化?
eof*_*ter 12
您可能需要将Russian设置为CFBundleDevelopmentRegionInfo.plist中的值.
CFBundleDevelopmentRegion(String - iOS,OS X)指定包的本机区域.此键包含一个字符串值,该值通常对应于编写该包的人的本地语言.如果无法为用户的首选区域或语言找到资源,则此值指定的语言将用作默认语言.
如果您真的想要并且需要覆盖操作系统的语言优先级,则可以使用AppleLanguages用户默认密钥(但是,如您所知,不建议这样做):
[[NSUserDefaults standardUserDefaults] setObject:@[@“ru”, @“en”] forKey:@“AppleLanguages”];
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我的应用程序中只有俄语本地化和硬编码字符串,但我使用本地化包的库.图书馆的字符串默认为英文.因为NSBundle.mainBundle.preferredLanguages是[ "en" ].
在我使用CFBundleLocalizations密钥在Info.plist中指定应用程序本地化语言后,他们变成了俄语:
CFBundleLocalizations(Array - iOS,OS X)标识应用程序手动处理的本地化.如果您的可执行文件是非捆绑式的,或者未使用现有的捆绑软件本地化机制,则可以包含此密钥以指定应用程序确实处理的本地化.
此属性的数组中的每个条目都是一个字符串,用于标识支持的本地化的语言名称或ISO语言指示符.有关如何指定语言指示符的信息,请参阅"国际化文档中的国际化和本地化指南"中的"语言和语言环境指定".
我还没有找到正确的解决方案。只有一种适合我的问题的方法是NSLocalizedStringFromTableInBundle使用NSLocalizedString. 这种方式不允许本地化图像或笔尖,但对于字符串来说效果很好。
首先您需要定义当前设备语言:
NSString *lang = (NSString *)[[NSLocale preferredLanguages] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
接下来找到该语言的包:
NSBundle *myLangBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:lang ofType:@"lproj"]];
Run Code Online (Sandbox Code Playgroud)
如果找到捆绑包,则将其用于NSLocalizedStringFromTableInBundle:
_label.text = NSLocalizedStringFromTableInBundle(@"LabelText",nil,myLangBundle,nil);
Run Code Online (Sandbox Code Playgroud)
否则找到并使用默认包。
| 归档时间: |
|
| 查看次数: |
22580 次 |
| 最近记录: |