当前位置:主页 > 捏脸代码 >   > 6.国际化代码的四个宏

6.国际化代码的四个宏

发布时间:2023-03-15 10:00:37 源自:佚名 阅读(0

1.启动项目国际化支持

首先在项目中添加需要支持的语言,默认为英文。 如图所示:

截图 2019-03-14 下午 5.28.26.png

无论是给APP名称添加国际化,还是给APP添加国际化,这一步都需要先完成。

2.国际化APP名称(CFBundleDisplayName)

创建一个新的字符串文件

截图 2019-03-14 下午 5.35.37.png

并确保将其命名为 InfoPlist.strings

注意后缀是strings,不是string。

然后选择新建的文件,点击右侧的Localization展开,选择需要支持的语言。

截图 2019-03-14 下午 5.41.25.png

选择支持的语言后,新建的InfoPlist.strings文件会变成一个可展开的列表。 子项目是支持的语言配置文件。

截图 2019-03-14 下午 5.44.45.png

然后写 CFBundleDisplayName = "EngName"; 在英文配置文件中

在中文配置文件中写入CFBundleDisplayName = "Chinese name";

完美世界国际版修改代码_完美国际修改代码文件_完美国际修改代码

然后运行,切换系统语言环境APP图标会对应显示EngName或“Chinese name”。

3. 应用内容国际化 如上创建一个Strings文件。 但命名为:Localizable.strings

这是默认名称。 如果不是这个名字,下次使用宏时必须指定文件名。

同上操作生成支持的国际化语言子文件。

1.假设有一个标签,在代码中设置它的文本。 这是写在代码里的。

self.label.text = NSLocalizedString(@"label_001_text", nil);

其中@"label_001_text"是一个key,宏NSLocalizedString(key, comment)的意思是去默认的Bundle中找到当前语言对应的默认本地化文件,找到这个key,得到值作为返回值, 并将其赋予标签文本赋值。

2.然后我们在Localizable.strings的子文件中输入英文配置文件

 "label_001_text" = "Is a EnglishText";

同样,在中文配置文件中输入:

 "label_001_text" = "我是一个标签";

这样,在不同系统语言之间切换的情况下,刚才的宏会搜索对应的文件,根据key值获取不同的值,完成国际化过程。

4.UIStoryBoard中直接输入的文字国际化

1、本文第一步创建国际化支持时,会弹出一个窗口,默认选中内置StoryBoard支持国际化。 该步骤完成后,StoryBoard 自动添加了国际化子文件。 该子文件与上述两种情况下手动创建的文件相同。 只不过是为这个UIStoryBoard配置的而已。

我们还需要在配置文件中写入对应的“key”=“value”。

但是这个密钥是从哪里来的呢? 这个可以从StoryBoard中,选择目标控件,右边可以得到控件的ID。如图

截图 2019-03-14 下午 6.16.35.png

完美国际修改代码文件_完美国际修改代码_完美世界国际版修改代码

这个标签的ID是:5TS-Zs-DwC

然后我们可以在语言配置文件中写

// 英文配置文件中这样写:
"5TS-Zs-DwC.text" = "Is a EnglishText";   
// 中文配置文件中这样写:
"5TS-Zs-DwC.text" = "我是一个标签";  

这样,根据标签的属性,完成了UIStoryBoard的国际化。

五、新的UIStoryBoard或xib文件国际化

自己创建的UIStoryBoard或者xib文件的国际化其实也是一样的。 选择文件后,点击右侧第一个选项卡中的 Localization(显示文件检查器)展开并选择要支持的语言。 然后选中的文件会自动配置相应的本地化文件。 然后如上写入相应的配置内容。

6. 国际化代码的四个宏 1. NSLocalizedString(key, comment)

NSLocalizedString 实际上默认是从mainBundle 中读取Localizable.string 中key 对应的值。 comment参数是对key的描述,有助于翻译者理解这个key的适用场景。

2. NSLocalizedStringFromTable(key, tbl, 评论)

NSLocalizedStringFromTable 从 mainBundle 中读取指定多语言文件中 key 对应的值。 tbl 参数是用于指定多语言文件名的参数。

3. NSLocalizedStringFromTableInBundle(key, tbl, bundle, 评论)

NSLocalizedStringFromTableInBundle会读取指定Bundle中指定的多语言文件中key对应的值。 bundle参数用于传入指定的Bundle。

4. NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, 评论)

NSLocalizedStringWithDefaultValue 从指定的 Bundle 中读取指定多语言文件中 key 对应的值。 如果无法获取到对应的值完美国际修改代码文件,则允许指定一个默认值。 val 参数用于传入默认值。

key: 获取值的key tbl: 国际化配置文件的文件名 bundle: 国际化配置文件所在的bundle comment: key的说明,看译者理解的说明 val: 默认值if找不到该值 VII. 项目后期创建国际化了怎么办:

1.启用国际化支持

2.使用某种正则模式来匹配代码文件,在需要复制字符串的地方添加国际化的宏。 (或者手动做。。。这个正则不是那么容易完美匹配的)

3.使用Xcode自带的命令行工具genstrings。 我们可以使用这个工具来生成需要的多语言文件。

首先打开终端,(安装xcode工具行命令时)切换到xcode命令工具

sudo xcode-select -switch /Applications/Xcode.app/

在项目目录下创建两个文件夹

cd 工程目录
mkdir en.lproj
mkdir zh-Hans.lproj

使用文件夹中的genstrings完美国际修改代码文件,根据之前代码文件中已经批量添加的国际化代码,将key=value批量写入配置文件。

注意:项目文件路径不能包含中文,否则无法识别中文路径。

find ./ -name \*.m -print0 | xargs -0 genstrings -o en.lproj
find ./ -name \*.m -print0 | xargs -0 genstrings -o zh-Hans.lproj

4.将生成的Localizable.strings文件拖到项目中,然后翻译替换门面上的值。

5、这样代码和对应的配置文件中就有了国际化的宏,就可以实现国际化了。

8、应用内实现实时语言切换

1、首先,上面的一些步骤需要有一个配置文件,这是第一个条件。

2.我们看国际化宏定义的性质:

#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)]

其实它只是使用了mainBundle的localizedStringForKey:一系列方法从指定的bundle、配置文件、key中读取值,不成功返回默认值。 那么我们可以自己写一个宏,然后动态修改文件参数或者bundle参数。 然后清空APP到根视图重新加载。 可以更换。

// 宏的本质
    NSBundle *mainBundle = [NSBundle mainBundle];
    NSString *value = [mainBundle localizedStringForKey:@"key" value:@"defaultValue" table:@"somefile.strings"];

9. NSUserDefaults 存储语言设置

应用启动时,会先读取NSUserDefaults中的key作为AppleLanguages对应的value。 该值是一个字符串数组。 也就是说,当我们访问名为AppleLanguages的key时,可以返回一个字符串数组,里面存放的是APP支持的值。 语言列表,数组第一项为APP当前默认语言。

10.xib或UIStoryBoard国际化时

创建视图并设置所有设置后,单击右侧的 Localizable 以展开并自动创建国际化文件。 在这种情况下,会自动写入一系列控件 ID 键值对格式。


网站地图 © 2020 - 看开服 蜀ICP备2022016416号-4 免责声明

完美国际私服是中国第一开服网,全年365天保持不间断更新,您可以在这里获得专业的完美私服信息,完善的新完美世界私服网游戏攻略专区,是玩家首选的网络游戏资讯门户网站。

所有作品版权归原创作者所有,与本站立场无关,如不慎侵犯了你的权益,请联系(搜搜搜完美国际私服-www.ssswm.com)告知,我们将做删除处理!