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技术。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容

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