ios 本地化

  • 目的 :
    应用国际化,提供多种语言支持
  • 目录结构:
    支持特定语言文件,放在特定的目录下。目录命名"<本地代号>.lprog",例如en.lprog,zh-Hans.lprog等。

需要本地化的内容

  • 文本信息 应用的名称、按钮、 警告提示信息、静态文本等。
  • XIB和故事板文件 同一界面和场景提供多个本地化版本。
  • 资源文件 图片(按钮图片、应用图标,其他图标等)、音视频等。

文本信息本地化

一般,系统按钮上的文本和系统提示的信息是不能修改的,始终是英文,如果需要中文显示就必须本地化。
步骤:
准备工作:PROJECT - >工程名 ->Localizations ->+ ->选择需要本地化的语言。
(一)创建strings文件,注意,不要试图使用默认文件,否则无效。
(二)选择创建的strings文件,打开其文件检查器,点击Localization中的Localize...按钮。
(三)添加需要的语言支持。
(四)打开添加的语言文件,添加该语言的本地化的信息。

  • 应用名称本地化

例如:创建InfoPlist.strings文件
InfoPlist.strings(Chinese)文件中输入:
CFBundleDisplayName = "中文应用名";
InfoPlist.strings(English)文件中输入:
CFBundleDisplayName = "English APP Name";

PS:苹果虽然没有规定应用名称的字符个数,但是宽度有限,一般中文大约5个,英文大约20多个。

  • 代码本地化
    代码中可以通过OC中定义的宏,进行本地化。
#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)]

例如:本地化导航控制器中第一个控制器的标题

在FirstViewController.m中,注意conment、tableName、bundle 可以省略,逗号不可以省略:

self.title = NSLocalizedString(@"First",);

strings 文件中:

//English
"First1" = "First1";      
//中文
"First1" = "第一";

XIB和故事板文件本地化

步骤: 选中需要本地化的xib,文件检查器,和文本信息本地化创建步骤相似。

例如Main.storyboard本地化

图片.png

Main.strings(English)

/* Class = "UILabel"; text = "用户ID:"; ObjectID = "6zX-7P-dFn"; */
"6zX-7P-dFn.text" = "User ID:";

/* Class = "UINavigationItem"; title = "注册"; ObjectID = "ENn-j0-X3J"; */
"ENn-j0-X3J.title" = "Register";

/* Class = "UINavigationItem"; title = "登录"; ObjectID = "Iab-Ax-Bfv"; */
"Iab-Ax-Bfv.title" = "Log in";

/* Class = "UIBarButtonItem"; title = "Cancel"; ObjectID = "QcN-K6-33q"; */
"QcN-K6-33q.title" = "Cancel";

/* Class = "UIButton"; normalTitle = "注册"; ObjectID = "Wbe-4S-5Vx"; */
"Wbe-4S-5Vx.normalTitle" = "Register";

/* Class = "UILabel"; text = "密码:"; ObjectID = "dxq-a1-6id"; */
"dxq-a1-6id.text" = "Password:";

/* Class = "UIBarButtonItem"; title = "Save"; ObjectID = "nAC-aF-YYg"; */
"nAC-aF-YYg.title" = "Save";

/* Class = "UIButton"; normalTitle = "登录"; ObjectID = "rd7-DX-Ugt"; */
"rd7-DX-Ugt.normalTitle" = "Log in";

/* Class = "UILabel"; text = "用户ID:"; ObjectID = "wc6-s4-0ii"; */
"wc6-s4-0ii.text" = "User ID:";

Main.strings(Simplifiled)

/* Class = "UILabel"; text = "用户ID:"; ObjectID = "6zX-7P-dFn"; */
"6zX-7P-dFn.text" = "用户 ID:";

/* Class = "UINavigationItem"; title = "注册"; ObjectID = "ENn-j0-X3J"; */
"ENn-j0-X3J.title" = "注册";

/* Class = "UINavigationItem"; title = "登录"; ObjectID = "Iab-Ax-Bfv"; */
"Iab-Ax-Bfv.title" = "登录";

/* Class = "UIBarButtonItem"; title = "Cancel"; ObjectID = "QcN-K6-33q"; */
"QcN-K6-33q.title" = "取消";

/* Class = "UIButton"; normalTitle = "注册"; ObjectID = "Wbe-4S-5Vx"; */
"Wbe-4S-5Vx.normalTitle" = "注册";

/* Class = "UILabel"; text = "密码:"; ObjectID = "dxq-a1-6id"; */
"dxq-a1-6id.text" = "密码:";

/* Class = "UIBarButtonItem"; title = "Save"; ObjectID = "nAC-aF-YYg"; */
"nAC-aF-YYg.title" = "保存";

/* Class = "UIButton"; normalTitle = "登录"; ObjectID = "rd7-DX-Ugt"; */
"rd7-DX-Ugt.normalTitle" = "登录";

/* Class = "UILabel"; text = "用户ID:"; ObjectID = "wc6-s4-0ii"; */
"wc6-s4-0ii.text" = "用户 ID:";

PS: 也可以使用Base Internationalization 技术
PS:还有一点,本地化后,如果再在xib上添加控件,且需要本地化,选中该控件 -> 标识检查器 ->Document ->Object ID,然后根据此ID,参考Strings文件中的格式,进行设置。

资源文件本地化

步骤:
选中需要本地化的图片或音视频,打开文件检查器,步骤和上述类似,就不多描述。
例如background.png本地化

选择background.png ->文件检查器 ->点击Localization ->点击Localized... ->选择需要支持的语言 。。。 。。。

PS:文本相关信息本地化后,一定要注意文本是否超出控件范围,本地化最好结合Auto Layout技术。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、介绍 国际化(Internationalization)是指应用程序在运行的时候,可以根据客户端请求来自的国家...
    JSOfJackChen阅读 4,066评论 0 5
  • 原文 http://www.cocoachina.com/ios/20141004/9827.html iOS和O...
    FengxinLi阅读 1,553评论 4 2
  • 1、本地化介绍 1、本地化分类 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方...
    JC_Wang阅读 775评论 1 0
  • iOS 本地化入门教程 iOS应用的本地化原理非常简单,是通过strings类型的文件,为同一种语言的不同翻译设置...
    秋刀生鱼片阅读 8,659评论 3 19
  • 在我接到通知书的那一刻,母亲已经病入膏肓。这一张纸已经没有了任何意义。我的命运,母亲的命运。她给我设定的命运,我设...
    任会宽阅读 174评论 0 1