iOS开发 - 应用国际化开发

有时候, 我们的一款应用, 要面向各个领域, 各个国度的用户。而这个时候, 就涉及到了应用的国际化开发。

国际化开发, 通俗来讲, 就是应用能根据用户当前设备使用的语言(本地化)来自动调整应用的语言, 使得每个用户都能正常使用应用。

国际化开发的重要性不言而喻。

总的来说, 涉及以下几个部分:

1.应用程序名称

2.字符串

3.图片

4.其他文件

5.StoryBoard

下面逐一进行说明

1、在此之前, 先设置你的工程支持多语言开发。

新建工程

比如我这里建立了名为localTest的工程。

2、添加多语言

localTest ------> PROJECT ------> Localizations ------> + ------> Chinese (Simplified) -------> Finish

如图所示:


完成后可以看到Localizations下有3个项。分别是Base, Chinese(Simplified), English

至此, 多语言环境就设置好了。


下面对各个部分进行说明。

1.应用程序名称

(1)创建InfoPlist.strings

当我们新建工程后, 会自动创建InfoPlist.strings文件, 这个时候的InfoPlist.strings只是一个单一文件。但是当我们完成第0步(设置多语言环境后),会自动的划分为多个子项,你可以看到InfoPlist.strings的左边有个向下的展开箭头。(如果没有多个选项, 选中InfoPlist.strings 点击 XCode-> View-> Utilities -> File Inspector,在Localization中点“+”,添加chinese (zh-Hans)类型的为简体中文,english 应该会自动添加上。然后在InfoPlist.strings 左边会多出一个三角形,点击展开后可以看到InfoPlist.strings(english)和InfoPlist.strings(chinese)两个版本的文件;)

如图所示:


当然, 如果没有自动创建, 我们也可以自己手动创建一个这样的文件。点击“new file”然后在弹出窗口左侧选择IOS的resource项,在右侧就可以看到“String File”的图标。创建这个文件,命名为“InfoPlist”(一定是这个文件名) 就生成一个InfoPlist.strings文件;

(2)添加属性

每一个文件, 对应一种语言环境下的属性内容。 比如InfoPlist.strings(english)文件中设置的属性将在语言为英语的情况下使用, 其他同理。

在InfoPlist.strings(english)文件中加入:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. CFBundleDisplayName ="myProgram";   
在InfoPlis t .strings( C hinese)文件中加入:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. CFBundleDisplayName ="我的应用";  

注意:CFBundleDisplayName加不加双引号都行

(3)编辑localTest-Info.plist

打开localTest-Info.plist,添加一个新的属性Application has localized display name, 设置其类型为boolean,并将其value设置为YES即可

(4)查看效果

运行程序, 切换语言, 你可以发现程序显示不同的名称。(如果是在模拟器上, 按shift+command+h 模拟按下home键, 便可查看。 另外, 通过Settings -----> General -----> International -----> Language -----> 简体中文 来设置对应的语言)

如图所示:


2、字符串

操作和应用名称涉及的基本一样, 但是这里的.string文件需要我们自己创建。

(1)创建文件

类似“本地化应用程序名称”第一步,点击“new file”然后在弹出窗口左侧选择IOS的resource项,在右侧就可以看到“String File”的图标。创建这个文件,命名为“Localizable”(一定是这个文件名否则后面调用会有一些区别)就生成一个Localizable.strings文件;

(2) 添加语言

选中Localizable.strings 点击 XCode-> View-> Utilities -> File Inspector,在Localization中点“Localize” ------ > 添加Chinese (Simplified)类型的为简体中文 -------> 然后选择Localize。如图:


之后Localization中会出现相应选项, 选中即可。如图:


之后在Localizable.strings 左边会多出一个三角形,点击展开后可以看到Localizable.strings(english)和Localizable.strings(chinese)两个版本的文件;

(3)添加字符串

在Localizable.strings(english)文件中加入:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. "myString" = "this is my test string....";  

在Localizable.strings(Chinese)文件中加入:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. "myString" = "这是我的测试字符串....";  


(4)使用字符串

在代码中使用NSLocalizedString(<#key#>, <#comment#>)来读取本地化字符串。NSLocalizedString有两个参数, 一个是关键字, 一个是对应的注释。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSString *testStr = NSLocalizedString(@"myString", @"myString test_");  
  2. NSLog(@"%@",testStr);  

即可针对不同的语言环境显示不同的字符串。



3.图片

这里又分两种方法,第一种和本地化字符串方法类似,把中英文图片的名字分别存到中英文对应的strings文件,然后通过NSLocalizedString)来获取图片名称,如:

Localizable.strings(english)文件中加入:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. "BtnCancel"="BtnCancelEn.png";   

Localizable.strings(chinese)文件中加入:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. "BtnCancel"="BtnCancelCn.png";   

然后在代码中使用NSLocalizedString)来获取图片名称:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. CCSprite *btnCancel = [CCSprite spriteWithSpriteFrameName:NSLocalizedString(@"BtnCancel", nil)];   
  2. btnCancel.position=ccp(s.width/2,s.height/2-40);   
  3. [self addChild:btnCancel z:2 tag:104];   

第二种就比较正规化了:

点中你要本地化的图片,如“icon.png”,然后XCode-> View-> Utilities -> File Inspector,在Localization中点“+”添加chinese (zh-Hans);在图片左边就会出现一个倒三角,点开就会出现(english)和(chinese)的2张图,并且在项目文件夹中会出现en.lproj文件和zh-Hans.lproj文件;en.lproj文件存放的是英文版图片,zh-Hans.lproj存放的是中文版图片,中英文图片名字一样,我们在文件夹中直接替换图片就可以了,最后使用时直接使用正常名字就行了,如:“icon.png”。


4.其他文件

本地化其他文件和本地化图片第二种方法类似,先在Localization中添加语言,然后把对应版本拷贝到en.lproj和zh-Hans.lproj文件夹中,最后引用就行了。

5.StoryBoard

(1)打开你的工程文件,然后点击工程设置的地方如图所示,然后点击加号,然后选择你要添加的语言,然后不用管,提示关联了storyboard,点击finish,所添加的语言就会出现在列表中。这次我添加的是简体中文。

(2)然后你就会发现,你的storyboard多了一个三角的箭头,现在点击,打开他,会看到一个base文件和一个你添加的国际化语言。base就是原来你的storyboard,而下面那个就是对应你的story里面所有控件对应的,国际化语言。

(3)打开你添加的简体中文strings文件,会看到这些东西,就是对应国际化,这下你就知道怎么做了吧,把等号后面的改成你设置的语言,我这里设置的简体中文。

(4)当然你还可以在storyboard和strings文件的设置中点击这个,选择把他变成另一个storyboard,这样就有好几个storyboard了,每个语言一个,我不喜欢这么做,哈哈

(5)问题来了,当你发现,你改变了你的storyboard上面的控件之后,strings国际化文件没有变化,这确实是一个问题,目前有个解决办法是这样的。把你的新界面与现有的 MainStoryboard.strings 合并首先,启动“终端”应用程序。然后cd到项目文件夹的 Base.lproj 目录。例如:cd /Users/UserName/Projects/HelloWorld/HelloWorld/Base.lproj 在提示符后输入以下命令:ibtool MainStoryboard.storyboard --generate-strings-file New.strings (你也可以取别的名字(New.strings))最后在打开你的xcode的strings文件,好了,现在有了新的控件的值,可以翻译了。不过我的建议是,开发到最后在进行国际化设置,如果你觉得上面的方法麻烦,可以把现有的翻译保存下来,然后删除掉现在的,用我上面的方法重新生成一个。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值