ios 国际化

来源:互联网 发布:游戏算法书籍 编辑:程序博客网 时间:2024/06/06 01:14

1,在项目info ->Localizations ->Language 添加语言
2,创建 String File
iOS 的国际化。
分为两种,
(1).一种是应用程序名称国际化,这个是我们生成应用的时候自带的名字叫InfoPlist.strings
里面填写的是应用程序的名称如:

CFBundleDisplayName=”LocalizetionTest”;
CFBundleDisplayName =“国际化例子测试”;

(2).资源内容国际化
名字为Localizable,一般用NSLocalizedString进行国际化,如果用其它名字的话,国际化的时候要用NSLocalizedStringFromTable进行国际化,里面填写的内容
英语部分

"buttonName" = "button for test";"Name" = "zhangshan";   "age"="15"; "Sex" = "male";

简体中文部分

"buttonName" = "测试按钮";"Name"="张三";"Age"="15";"Sex"="男";

3,String File右侧 的Localize…,选择语言
4,项目中生成支持不同语言的 .strings文件,然后在不同文件中添加 “key” = “value”;结构类型数据

跟随系统语言类型

NSString *str = [NSString stringWithFormat:@"name:%@,age:%@,sex:%@",NSLocalizedString(@"Name", nil),                     NSLocalizedString(@"Age", nil),                     NSLocalizedString(@"Sex", nil)];

说到使用,就要了解下NSLocalizedString是什么

#define NSLocalizedString(key, comment) \        [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil] #define NSLocalizedStringFromTable(key, tbl, comment) \        [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:(tbl)] #define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \        [bundle localizedStringForKey:(key) value:@"" table:(tbl)] #define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \        [bundle localizedStringForKey:(key) value:(val) table:(tbl)]

其实就是宏,而宏定义的又是在资源文件中寻找对应的资源文件;在这里有个坑点,当你使用第一种实现多语言本地化,意味着你的多语言文件名字必须是Localizable,否则你的多语言实现,到最后显示的却只能是key;
(1).第一种适合于,让应用跟随系统的语言版本进行切换,而用户却不能手动进行切换;
(2). 我们要实现的是既可以跟随系统,又可以用户自己切换,就不能使用这一个了,那就要使用第二种:
NSLocalizedStringFromTable(key, tbl, comment);

tbl这个参数,就是我们自己命名的多语言文件名称;
因此我们暂且这样使用(这样直接使用,会跟随系统语言):

NSLocalizedStringFromTable(@"showTxt", @"ASLocalized", nil);

参数说明: 第一个参数,是多语言中的key, 第二个参数,是多语言文件的名字,第三个是对key的注释说明,一般为nil就可以了;
对于这样使用NSLocalizedString(“showTxt”, nil),切记多语言文件名必须是Localizable, 这里我们就不可以使用这种了;