NSLocalizedString不默认为基本语言

我在testing本地化function的小型iOS 7项目中遇到以下问题。

  • 我有一个默认的项目,有一个VC,在场景中间有一个button
  • 在我的VC我有一个IBOutlet我的button叫myButton
  • 在VC的viewDidLoad方法我设置button的标题:
NSString *title = NSLocalizedString(@"MY_BUTTON", @"My comment for my button"); [self.myButton setTitle:title forState:UIControlStateNormal]; 
  • 我生成Localizable.strings文件结束启用它为以下语言的本地化:基地,荷兰语
  • 每个文件的内容如下:

/ *我对我的button的评论* /“MY_BUTTON”=“我的[VALUE]button”; VALUE = Base,荷兰语; 所以标签应该是我的基本button和我的荷兰button

问题:如果我使用模拟器的语言(如荷兰语)启动我的应用程序,标签是(如预期的)“我的荷兰button”。 如果我用英文启动它,标签是“我的基本button”(好的…)

但是,如果我将手机的语言设置为法语,并且之前将其设置为荷兰语,则该button的标签不会默认为“基本”,而是会再次显示“我的荷兰语button”

对此有何想法?

谢谢

默认语言的顺序是在OSX上的用户设置,在iOS上不可编辑(AFAIK)
但仍然坚持!

该应用程序通过指定要尝试的语言的数组AppleLanguages(或左右)。 NSLocalizedStringmacros会尝试按照它们出现的顺序加载数组中的每种语言,直到它find一个工作的语言,然后使用它

比较: 如何强制NSLocalizedString使用特定的语言

我创build了以下类,它支持可定制语言的回退。 在我的情况下,我使用Base.lproj作为我的默认语言内容的文件。

StringUtilities.h

 @interface StringUtils : NSObject #define GetLocalizedString(key) [StringUtils getLocalizedString:key comment:nil] //#define GetLocalizedString(key,comment) [StringUtils getLocalizedString:key comment:comment] + (NSString*) getLocalizedString:(NSString*)key comment:(NSString*)comment; @end 

StringUtilities.m

 #import "StringUtilities.h" @implementation StringUtils //Returns a localized string, with fallback to version of Base + (NSString*) getLocalizedString:(NSString*)key comment:(NSString*)comment { NSString* localizedString = NSLocalizedString(key, nil); //use base language if current language setting on device does not find a proper value if([localizedString isEqualToString:key]) { NSString * path = [[NSBundle mainBundle] pathForResource:@"Base" ofType:@"lproj"]; NSBundle * bundle = nil; if(path == nil){ bundle = [NSBundle mainBundle]; }else{ bundle = [NSBundle bundleWithPath:path]; } localizedString = [bundle localizedStringForKey:key value:comment table:nil]; } return localizedString; } @end 

如何使用

导入头文件并使用GetLocalizedStringmacros而不是NSLocalizedStringmacros。

 #import "StringUtilities.h" NSString* str = GetLocalizedString(@"your.text.key"); 
Interesting Posts