NSLocalizedString和设备支持的语言【转】
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];//得到当前用户默认设置
NSArray *language = [defaults objectForKey@"AppleLauages"];//获得设备支持的所有语言,
NSString *currentLanguage = [language objectAtIndex:0];//数组第一位的是用户当前使用的语言。
[defaults setObject:currentLanguage forKey:@"user_lang_string"];//设置用户当前语言为当前系统语言。
我的版本是IOS 5.1 其实大同小异了。
NSLocalizedString
是一个“宏”
#define NSLocalizedString(key, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key)
value:@"" table:nil]
上边这个是原型。
亲自试下,在一个项目里
Add一个新的File,类型为StringFlie,步骤Flie->New->File->IOS下边的Resource里边的StringsFile。
单击新加的StringFile文件(*.strings),在属性中修改他的名字为“Localizable.strings”
并在Localization下边,点左下的加号,第一次点击会闪一下,然后会出现一个English或者 Chinese取决于你当前的语言模式。随便添加一个例如我默认的是English,我添加了一个Chinese,然后右边的StringFile文件 (Localizable.strings)下边多出两个文件:
1、Localizable.strings(English)
在这个文件中添加内容:
"Master" = "Master...";
"Detail" = "Detail...";
2、Localizable.strings(Chinese)
在这个文件中添加内容:
"Master" = "主视图";
"Detail" = "详细视图";
这样当你使用NSLocalizedString时,系统会自动在目录下的StringFile文件(Localizable.strings)中找到当前设备所使用的语言,比如说是English的,那么他就会按照"Master" = "Master...";的格式将其他文件中的所有使用NSLocalizedString方法的的"Master"在你运行的时候显示成"Master...". 举个栗子:
self.title = @"Master";
那么这个标题在任何语言的系统中都会显示出Master。
但是你要是使用:
self.title = NSLocalizedString(@"Master",@"this is Master");
那么这个标题在英文版本中就会显示:Master...
中文版本中就会显示:主视图
(@"Master",@"this is Master");前边那个是Key,对应strings文件中的Key,后边那个this is Master是备注,写不写都行,可以为nil。