探讨 NSLocalizedString 的使用

{app.params.name}} {app.params.name}} {app.params.name}}

程序本地化是扩展应用市场的重要砝码.iOS提供了简便的方法来实现本地化,其中用的最多的就是NSLocalizedString.

首先查看下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)]

这里我们只看第一个

这是一个宏,本质上是调用了函数 locakizedStrigForKey:.这样,这个宏做的其实就是在当前bundle中查找资源文件名Localizable.strings

中键值key所指向的字符串.这样就不难理解还有诸如:NSLocalizedStringFromTable的宏了.

下面我们就来具体实现一下.

新建任一工程,然后添加新文件Localizable.strings,如图:

然后选择文件属性中的"Make File Localizable",页面自然跳转,再选择"General"选项卡时就会发现"Add Localization"了.

默认有English,我们可以添加zh-hans ,然后在相应的文件中输入: "NAME" = "你好",这样在代码中只需要简单的调用:

nameLabel.text = NSLocalizedString(@"NAME",nil);

此时在工程文件下出现了 *.lpjo的文件夹,下面安置了相应的本地化文件.由此可以判断,对于其他资源文件如图片,xib文件都可以进行本地化.

最后,我们再实现对程序名称的本地化.

在工程的info.plist文件的属性中选择"Make File Localizable",然后会发现工程下出现InfoPlist.strings的文件,如法炮制,添加zh-hans,并在

相应的文件中添加"CFBundleDisplayName" = "中文名称" 即可.这样,你会发现你的机器上程序名称变成了中文.

PS:我还遇到一个问题,就是在本地化的时候语言代码是需要手工添加的,apple的文档上说所有的语言代码可以从ISO639( http://www.loc.gov/standards/iso639-2/php/English_list.php)查询,可这个列表上中文对应的是chi/zho.而这显然没有区分简体和繁体中文.



版权声明

davidzhang 创作并维护的 Gowhich 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 Gowhich 博客( https://www.gowhich.com ),版权所有,侵权必究。

本文永久链接: https://www.gowhich.com/blog/287

comments powered by Disqus