现在的位置: 首页 > 综合 > 正文

iOS开发 – 应用国际化开发

2017年08月16日 ⁄ 综合 ⁄ 共 4167字 ⁄ 字号 评论关闭

_________________________________________________________

欢迎转载, 转载请注明出处:http://blog.csdn.net/hitwhylz/article/details/24494375

_________________________________________________________

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

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

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

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

1.应用程序名称

2.字符串

3.图片

4.其他文件

5.StoryBoard

下面逐一进行说明

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

(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)文件中加入:

CFBundleDisplayName ="myProgram"; 

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

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)文件中加入:

"myString" = "this is my test string....";

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

"myString" = "这是我的测试字符串....";

(4)使用字符串

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

    NSString *testStr = NSLocalizedString(@"myString", @"myString test_");
    NSLog(@"%@",testStr);

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

3.图片

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

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

"BtnCancel"="BtnCancelEn.png"; 

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

"BtnCancel"="BtnCancelCn.png"; 

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

CCSprite *btnCancel = [CCSprite spriteWithSpriteFrameName:NSLocalizedString(@"BtnCancel", nil)]; 
btnCancel.position=ccp(s.width/2,s.height/2-40); 
[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文件,好了,现在有了新的控件的值,可以翻译了。不过我的建议是,开发到最后在进行国际化设置,如果你觉得上面的方法麻烦,可以把现有的翻译保存下来,然后删除掉现在的,用我上面的方法重新生成一个。

学习的路上, 与君共勉。

抱歉!评论已关闭.