在我的界面中,我显示了一个语言环境的显示名称:
[[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: identifier]
但这会使用系统的语言环境给出显示名称,这并不总是与应用程序的语言环境相同。例如,如果我将系统设置为法语并且我的应用程序没有法语本地化,它将在英语界面中提供法语显示名称。相反,我想在英文界面中有一个英文显示名称,这样我就不会混合使用这些语言。
在我的界面中,我显示了一个语言环境的显示名称:
[[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: identifier]
但这会使用系统的语言环境给出显示名称,这并不总是与应用程序的语言环境相同。例如,如果我将系统设置为法语并且我的应用程序没有法语本地化,它将在英语界面中提供法语显示名称。相反,我想在英文界面中有一个英文显示名称,这样我就不会混合使用这些语言。
您应该创建一个本地化的 plist 文件,在您的 plist 中存储相应本地化的正确语言环境标识符,当您使用代码片段时,您应该从该本地化 plist 文件加载语言环境并使用它来获取显示名称。
这样,您的语言环境将始终与屏幕界面语言相对应。我需要对一些我想格式化的日期执行此操作,而不是依赖系统,因为日历格式可以用另一种语言设置到系统......
希望有帮助...
- (NSDictionary*)getLocalizedCalendarStrings{
NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"calendar" ofType:@"plist"]; // will return the path of the plist in the right language-specific .lproj directory)
NSDictionary* calendar = [NSDictionary dictionaryWithContentsOfFile:plistPath];
return calendar;
}
并像这样使用它:
NSDictionary * calendar = [self getLocalizedCalendarStrings];
NSString * localeIdentifier = [calendar objectForKey:@"locale_identifier"];
[[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: localeIdentifier]
为了避免输入的语言环境字符串拼写错误等风险,或者如果您想要更好的面向代码的解决方案,您当然可以在 plist 中使用名为“default_language”的属性作为 BOOL 并将其设置为 YES 仅用于英语,在您的代码中只需检查此值,如果为 NO,则获取设备区域设置,如果为 YES,则您知道该应用程序是英文的,因为那是设备设置,或者是英文的,因为它不是支持设备的当前语言环境,因此默认情况下已经回到英语......所以“default_language”应该是YES,将语言环境硬编码为en_US,或者如果你是爱国的英国人,则为en_UK......
与此示例类似的内容可能会解决您的问题,这是 NSLocale 的一个类别,但这当然会使您需要为您支持的每种语言提供一个本地化的 plist...
@implementation NSLocale (AppLocale)
+(NSString*)applicationCurrentLocale{
NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"currentLocale" ofType:@"plist"];
NSDictionary* currentLocaleData = [NSDictionary dictionaryWithContentsOfFile:plistPath];
if([[currentLocaleData objectForKey:@"english_default"] boolValue] == YES){
return @"en_US";
}else{
NSString * deviceLocaleIdentifier = [[NSLocale currentLocale] localeIdentifier];
return [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:deviceLocaleIdentifier];
}
}
@end
我不确定这是否是您想要的...但这是查看您的应用程序正在运行的语言/本地化的好方法:
[[NSBundle mainBundle] preferredLocalizations]
如果您的应用程序同时支持英语和法语,它将按首选顺序返回两者的数组。在测试中,0 处的那个似乎是已加载并正在运行的 xib。