iOS本地化 NSLocalizedString

在iOS应用程序中,一个app可能会支持多个语言,此时根据不同的语言需要显示该语言对应的内容。适应应用程序以支持特定语言的过程通常被称为本地化。XCode中可以实现本地化支持。

Xcode本地化支持操作步骤:

1.项目的PROJECT中的info中的Localizations中点击加号选择语言添加。


iOS本地化 NSLocalizedString_第1张图片

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

iOS本地化 NSLocalizedString_第2张图片

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

iOS本地化 NSLocalizedString_第3张图片

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.运行程序,就达到效果了

你可能感兴趣的:(iOS本地化 NSLocalizedString)