在iOS应用程序中,一个app可能会支持多个语言,此时根据不同的语言需要显示该语言对应的内容。适应应用程序以支持特定语言的过程通常被称为本地化。XCode中可以实现本地化支持。
Xcode本地化支持操作步骤:
1.项目的PROJECT中的info中的Localizations中点击加号选择语言添加。

2.新建String File文件,命名命名为“Localizable,生成一个Localizable.strings文件(名字不要其他的) 。

3.选中新建的Localizable.strings文件,在文件属性栏点击localize选择需要本地化的语言。

4.选择本地话语言后Localizable.strings文件会变成文件夹样式,点击打开之后里面会有每个语言对应的文件。

5.在文件中以key=value的形式写需要本地化的文字,如:


6.用以下代码进行测试
NSString *str = NSLocalizedString(@"hello", nil);
NSLog(@"%@", str);
会发现在系统文字为中文和英文情况下获取到的数据会分别为"你好,世界"以及 "Hello World"。
获取本地化文字的方法
NSLocalizedString(key, comment):
#define NSLocalizedString(key, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]
可以发现NSLocalizedString(key, comment)是系统定义的宏,
其中参数key就是获取对应字符串的key,在上面的例子中相当于是@"hello"。
参数comment是对该内容的注释,可以为nil。
注意:在第二步创建本地化文件时,若新建的文件名不是默认的Localizable,则在table这个参数中需要传入文件名(如果命名为Localizable,则传nil就可以,系统会帮你找到)。
如新建时命名为A,则生成文件为A.strings,此时如果还是使用NSLocalizedString(@"hello", nil);来获取,则会发现不同系统语言下值相同。
此时可以用另外一个宏:NSString *str = NSLocalizedStringFromTable(@"hello", @"A", nil);表示获取A.strings中key为@"hello"的文字。
#define NSLocalizedStringFromTable(key, tbl, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:(tbl)]
其实这两个宏最终调用的都是- (NSString *)localizedStringForKey:(NSString *)key value:(nullable NSString *)value table:(nullable NSString *)tableName;方法。
应用程序国际化(如根据系统语言修改app名称)
1.在创建本地化文件时,命名文件为infoPlist,在不同语言的文件下写下对应的程序名。
如: 在InfoPlist.strings(English)中写CFBundleDisplayName = "Test";
在InfoPlist.strings(Chinese(Simplified))中写CFBundleDisplayName = "测试";
2.运行程序,就达到效果了
网友评论