iOS 应用本地化

2018-02-11 14:12:35来源:segmentfault作者:windtersharp人点击

分享
App本地化
一. 语言配置

无论本地化文本、图片、xib/storyboard,都需要配置本地化的语言,操作步骤如图:



点击“+”之后弹出对话框如图:



Main.storyboard和LaunchScreen.storyboard至少选择一个,如果选择的文件无用,那么在Finish之后删除即可。否则添加语言配置不成功。


二. 应用程序名称在语言配置好之后,新建资源文件(文件名必须为InfoPlist.strings):Xcode -> File -> New File -> Resource -> Strings File。
本地化资源文件:选中InfoPlist.strings文件 -> File Inspection(Xcode右侧面板的文件检查器) -> Localize 如图:

生成相应的语言文件:选中InfoPlist.strings文件 -> File Inspection(Xcode右侧面板的文件检查器) -> 勾选相应的语言文件,InfoPlist.strings下会多出相应的语言文件 如图:

在相应的语言文件中添加本地化的文本(key/value形式), 如图:


App启动时根据系统语言加载相应语言的InfoPlist.strings, 本地化处理过的文本可以进行相应语言的显示。
如果前5步之后仍不能达到效果,编辑Info.plist,添加一个新的属性Application has localized display name, 设置其类型为Boolean,并将其value设置为YES。三. 文本在语言配置好之后,新建资源文件(文件名:系统默认Localizable.strings):Xcode -> File -> New File -> Resource -> Strings File,文本显示时,默认文件名用NSLocalizedString(key, comment),如果自定义文件名需用NSLocalizedStringFromTable(key, tbl, comment),其中tbl即为文件名。
本地化资源文件:选中Localizable.strings文件 -> File Inspection(Xcode右侧面板的文件检查器) -> Localize 如图:

生成相应的语言文件:选中Localizable.strings文件 -> File Inspection(Xcode右侧面板的文件检查器) -> 勾选相应的语言文件,Localizable.strings下会多出相应的语言文件 如图:

在相应的语言文件中添加本地化的文本(key/value形式), 如图:


项目中应用:NSLocalizedString(key, comment)或者NSLocalizedStringFromTable(key,文件名, comment),key即Localizable.strings中自己定义的key,comment即备注,可为nil。如图

App启动时根据系统语言加载相应语言的Localizable.strings, 本地化处理过的文本可以进行相应语言的显示。系统根据某个key在Localizable.strings获取对应的字符串时,如果没有找到,那么就会以key作为value返回。
Edit Scheme -> Options -> Application Language 可以修改此项目的语言环境,不需要每次修改设备的语言环境。如图:


四. 图片

由于iOS中不支持Assets.xcassets的本地化,图片的本地化主要有两种方式:①本地化图片名字,② 本地化图片文件


本地化图片名字(参考本地化文本),代码如下:


NSString *imageName = NSLocalizedString(@"icon", nil);
UIImage *image = [UIImage imageNamed:imageName];

本地化图片文件

本地化资源文件:选中图片 ->File Inspection(Xcode右侧面板的文件检查器) -> Localize 如图:
生成相应的语言文件:选中图片文件 -> File Inspection(Xcode右侧面板的文件检查器) -> 勾选相应的语言文件,图片文件下会多出相应的语言文件 如图:

选中图片文件 -> Show In Finder,发现本地化的文件根据语言类型分别在不同的目录中,针对图片可以进行替换

图片替换之后,启动时会根据语言环境加载相应的图片资源。
Edit Scheme -> Options -> Application Language 可以修改此项目的语言环境,不需要每次修改设备的语言环境。如图:


五. 启动图

iOS 启动图配置有三种方式:①导入图片文件,并且配置Info.plist,② Launch Image Source (Assets),③ LaunchScreen File。但是第② 种暂不支持本地化。启动图可行的两种方式,都依赖于Info.plist文件的配置。

引入图片文件且配置Info.plist

首先将Launch Screen File置空,并且不选择Launch Image Source (Asset)
此方法类似图片的本地化(本地化图片文件),额外的需要在Info.plist文件中配置,
图片规格和plist配置结构(类比Assets中的 Launch Image),可以在Assets中配置Launch Image后,App运行时打印Info.plist 查看 ,举例如下::<key>UILaunchImages</key>
<array>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>bubble_mine_green</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{414, 736}</string>
</dict>
</array>

注意:目前手机只有iPhone plus(5.5)和iPhone X 额外支持横屏启动图配置,其它设备默认加载竖图,具体查看Assets中的LaunchImages可配置的启动图。

LaunchScreen File

本地化LaunchScreen.storyboard,类似本地化图片文件步骤,经测试此方法不可行(不能根据系统语言环境自动加载对应的本地化文件),猜测苹果不赞成不支持本地化,普通的xib/storyboard文件也不支持图片的本地化(参见下一节:六. xib/storyboard)。

创建两个LaunchScreen.文件,一个文件名为LaunchScreen-English,一个文件名LaunchScreen-Chinese,参考应用程序名称本地化,在InfoPlist.strings 配置Info.plist,如下:


"UILaunchStoryboardName" = "LaunchScreen-Chinese";
"UILaunchStoryboardName" = "LaunchScreen-English";六. xib/storyboard

本地化XXX.storyboard,操作步骤与本地化图片文件相同,但是storyboard内容的本地化发现只支持文本,并且xib/storyboard 元素较多,内容也较复杂。每次控件内容的修改都要同步到其它语言环境上。整理方法如下:

可以在修改Base环境界面上的元素之后(最好暂存一下,以防后续操作失败),先勾选掉其它语言环境的文件,再勾选切换重新生成(Replace file)storyboard,但是需要重新填写每种语言的本地化文本。如图

可以Base文件中查看ObjectID,在原来语言文件的基础之上,对新添加控件依据格式进行补充整理:


/* Class = "UILabel"; text = "Label"; ObjectID = "fSz-Ci-UcW"; */
"fSz-Ci-UcW.text" = "Label";

终端利用工具ibtool,此方法类似第1条的重新勾选Replace file,都需要重新填写本地化文本

进入Base.lproj文件的目录:

用命令行工具ibtool根据Base文件产生一个.strings文件,对比新的.strings文件,在原来语言文件的基础之上,对新添加控件依据格式进行补充整理,命令举例如下:


ibtool Main.storyboard --generate-strings-file ./temp.strings
修改.strings文件中的字符串,类似重新填写本地化文本的操作

用命令行工具ibtool根据字符串文件重新生成对应语言的storyboard,命令举例如下


ibtool --strings-file temp.strings --write ../zh-Hans.lproj/Main.storyboard Main.storyboard

利用脚本保持Base和其它语言环境的本地化UI元素一致:脚本文件
此方法参考文章,在TARGETS -> Build Phases ->Run Script(没有可以左上角“+”)增添脚本代码:


python脚本本地路径()storyboard/xib路径(会自动遍历和查找子目录)链接到代码中利用代码本地化(类似文本本地化)七. 后记

工程目录:每种语言都有自己的文件夹xx.lproj,加载资源时从相应语言文件夹下加载。


本地化官方文档地址

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台