SlideShare a Scribd company logo
Localization




范圣刚,princetoad@gmail.com,www.tfan.org
国际化和本地化
• ⾸首先我们来理解⼀一下国际化和本地化的概念
• 所谓国际化,是指我们要确保我们的应⽤用中没有
本地⽂文化相关的信息被硬编码在⾥里⾯面。
• 所谓的本地⽂文化相关的信息,我们指的是语⾔言,
货币,⽇日期格式,数字格式等。
• ⽽而本地化,是指在我们的应⽤用程序要中基于⽤用户
的“语⾔言”和“区域格式”的设置提供恰当的数据。
多语⾔言环境
$ 和 区域:中国
• 我们现在的区域设置
是“中国”,应⽤用⾥里⾯面有
关货币符号的显⽰示却
是$

• 这是因为我们把 $ 符
号硬编码到我们的程
序中了
硬编码的⼀一个例⼦子


[[cell valueLabel] setText:
[NSString
stringWithFormat:@"$%d", [p
valueInDollars]]];
使⽤用 NSLocale 进⾏行国际化
• 在 ItemsViewController.m 中,定位到
  tableView:cellForRowAtIndexPath: ⽅方法

• 当我们设置单元格的 valueLabel 的⽂文本时,我们
  使⽤用了字符串 “$%d”,这就使当前的货币符号永
  远是⼀一个美元符号。

• ⽤用下⾯面的代码把它替换掉我们就可以显⽰示针对⽤用
  户区域的正确的货币符号了
//    [[cell valueLabel] setText:[NSString
stringWithFormat:@"$%d", [p valueInDollars]]];
    // 对货币符号进⾏行那个国际化
    NSString *currentSymbol = [[NSLocale currentLocale]
objectForKey:NSLocaleCurrencySymbol];
    [[cell valueLabel] setText:[NSString
stringWithFormat:@"%@%d",
                               currentSymbol,
                               [p valueInDollars]]];
使⽤用 NSLocale 之后
• 然后我们来看⼀一下 NSLocale 的使⽤用
 • 当我们发送⼀一个 currentLocale 消息给 NSLocale
   时,表⽰示⽤用户区域设置的⼀一个NSLocale 的实例就
   被返回。

 • 拿到 NSLocale 的实例以后,我们就可以向它请求
   我们感兴趣的本地化信息,例如货币符号等

 • 向 NSLocale 请求信息我们通过向它发送
   objectForKey: 消息,参数就是⼀一个 NSLocale 常量
    NSString *currentSymbol = [[NSLocale currentLocale]
objectForKey:NSLocaleCurrencySymbol];

    [[cell valueLabel] setText:[NSString
stringWithFormat:@"%@%d",
                               currentSymbol,
                               [p valueInDollars]]];
17 Localization
• DetailViewController 中的⽇日期标签能够⾃自动根据
    区域设置进⾏行正确显⽰示

 • 这是因为我们在给这个标签设置⽂文本的时候使⽤用
    的是 NSDateFormatter 实例

 • NSDateFormater 有⼀一个 locale 属性,它被设置成
    设备当前的 locale。

 • 任何时候我们使⽤用 NSDateFormatter 来⽣生成⽇日
    期,它会检查它的 locale 属性,然后对应的设置
    格式。
- (void)viewWillAppear:(BOOL)animated
{
...
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];

    [dateLabel setText:[dateFormatter stringFromDate:[item dateCreated]]];
资源的本地化
• 应⽤用程序资源本地化的过程:
• ⽣生成资源的多份拷⻉贝,像图⽚片,声⾳音,以及为不同的
 地域和语⾔言设置的界⾯面

• 创建和访问 strings table 把⽂文本翻译成不同的语⾔言
• 只要是资源都可以被本地化,本地化以后的资源
再放⼀一份到 application bundle 中
• 这些资源被组织到特定语⾔言相关的⺫⽬目录⾥里⾯面,也
就是 lproj ⺫⽬目录

• 这些⺫⽬目录的名字加上特定语⾔言的后缀
• 这⼀一章节我们来本地化 Homepwner 的界⾯面:
DetailViewController.xib ⽂文件

• 我们将⽣生成英⽂文和中⽂文的本地化,也就是说⽣生成
两个 lproj ⺫⽬目录,每个⺫⽬目录包含⼀一个版本的
DetailViewController.xib 的版本
• 第⼀一步,启⽤用本地化。选中
DetailViewController.xib ⽂文件,在 File inspector 中
点击“Localization” 后⾯面的 “Make localized...”按钮

• 在弹出的对话框中确认要“Localize”
• 第⼆二步,增加本地化。选中 project, 在右边的 info
 下⾯面,点击 localization下⾯面的 + 号,选择中⽂文

• 这将会在左边 project navigator 中再⽣生成⼀一个
 DetailViewController.xib ⽂文件
• 第三步,导出 string。
• 打开 Terminal,进⼊入项⺫⽬目的en.lproj⺫⽬目录
• 运⾏行: ibtool --export-strings-file ~/Desktop/
 DetailViewController.strings
 DetailViewController.xib

• 忽略命令⾏行提⽰示的警告
• 第四步,翻译。
• 打开导出的 string ⽂文件
• 第五步,把新的 string ⽂文件写⼊入到中⽂文 XIB ⽂文件中
• 打开 Terminal,输⼊入后⾯面的内容但不要回⻋车:
 ibtool --import-strings-file ~/Desktop/
 DetailViewController.strings --write

• 把zh-Hans.lproj ⺫⽬目录下的 DetailViewController.xib
 ⽂文件拖到 Terminal 窗⼝口中,再把 en.lproj 下⾯面的
 DetailViewController.xib ⽂文件拖进terminal 窗⼝口
 (后⾯面拖⼊入的两个⽂文件的路径会被附加到前⾯面输
 ⼊入的命令后⾯面)

• 回⻋车
• 第六步,打开中⽂文的 xib ⽂文件确认⼀一下。
• 第七步,运⾏行看⼀一下
NSLocalizedString 和 Strings
           Table
• 本地化程序⾥里⾯面的字符串,对 ItemViewController
  的标题进⾏行本地化

 • ⾸首先定位到 ItemViewController.m 的 init 函数中,
  修改设置 title 的代码

        // 本地化 Homepwner 的标题
//        [n setTitle:@"Homepwner"];
        [n setTitle:NSLocalizedString(@"Homepwner",
@"Name of application")];
• ⽣生成 string table
• 打开 Terminal 窗⼝口,定位ItemsViewController 所
 在⺫⽬目录,输⼊入: genstrings
 ItemsViewController.m

• 将会在同⼀一⺫⽬目录⽣生成名为 Localizable.strings 的⽂文
 件

• 拖到我们的项⺫⽬目⺫⽬目录中
• 像前⾯面⼀一样对它进⾏行 make localization
• 选中⽂文件,在右边属性⾯面板的 localization 区域勾
 选上,Chinese

• 这样会⽣生成⼀一个中⽂文版的 string table
• 进⾏行翻译
• 运⾏行程序

More Related Content

PDF
14 Saving Loading and Application States
PDF
02 Objective-C
PDF
05 MapKit and Text Input
PDF
16 CoreData
PDF
07 View Controllers
PDF
03 Managing Memory with ARC
PDF
Network and Multitasking
PPT
J Query Learn
14 Saving Loading and Application States
02 Objective-C
05 MapKit and Text Input
16 CoreData
07 View Controllers
03 Managing Memory with ARC
Network and Multitasking
J Query Learn

What's hot (20)

PPTX
iOS程序设计-数据持久化
PPTX
Docker進階探討
PDF
CH04:認識物件
KEY
冲浪 Object-c
PPTX
Ch07 使用 JSTL
PDF
10. 資料永續與交換
PDF
twMVC#36C#的美麗與哀愁
PPTX
NoSQL-MongoDB介紹
PDF
AJAX Basic
PPTX
Ch05 Servlet 進階 API、過濾器與傾聽器
PDF
合久必分,分久必合
PPTX
Script with engine
PDF
04 Delegation and Core Location
PDF
CH09:Collection與Map
PDF
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
PDF
KISSY for starter
PDF
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
PDF
Servlet & JSP 教學手冊第二版 - 課後練習解答
PPTX
Ch03 請求與回應
PDF
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
iOS程序设计-数据持久化
Docker進階探討
CH04:認識物件
冲浪 Object-c
Ch07 使用 JSTL
10. 資料永續與交換
twMVC#36C#的美麗與哀愁
NoSQL-MongoDB介紹
AJAX Basic
Ch05 Servlet 進階 API、過濾器與傾聽器
合久必分,分久必合
Script with engine
04 Delegation and Core Location
CH09:Collection與Map
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
KISSY for starter
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Servlet & JSP 教學手冊第二版 - 課後練習解答
Ch03 請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Ad

Similar to 17 Localization (9)

PDF
[LaravelConf Taiwan 2018] 跨境電商的眉眉角角
PDF
设计师转型培训-工具篇
PDF
使用Dsl改善软件设计
PDF
领域驱动设计实践
PDF
Map&Location-Swift
PPTX
Artifacts management with CI and CD
PDF
模块一-Go语言特性.pdf
PDF
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
PDF
打造国际化产品:Strikingly的I18n实践
[LaravelConf Taiwan 2018] 跨境電商的眉眉角角
设计师转型培训-工具篇
使用Dsl改善软件设计
领域驱动设计实践
Map&Location-Swift
Artifacts management with CI and CD
模块一-Go语言特性.pdf
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
打造国际化产品:Strikingly的I18n实践
Ad

More from Tom Fan (20)

PDF
PhoneGap 通信原理和插件系统
PDF
HTML5 Web workers
PDF
Web sockets
PDF
Storage
PDF
Semantics
PDF
Multimedia
PDF
Intro to-html5
PDF
Html5 history
PDF
Geolocation
PDF
File api
PDF
Deviceaccess
PDF
Css3
PDF
Webstorage
PDF
Html5 最重要的部分
PDF
AT&T 的 HTML5 策略和应用现状
PDF
PhoneGap 2.0 开发
PDF
Android 平台 HTML5 应用开发
PDF
HTML5 生态系统和应用架构模型
PDF
18 NSUserDefaults
PDF
15 Subclassing UITableViewCell
PhoneGap 通信原理和插件系统
HTML5 Web workers
Web sockets
Storage
Semantics
Multimedia
Intro to-html5
Html5 history
Geolocation
File api
Deviceaccess
Css3
Webstorage
Html5 最重要的部分
AT&T 的 HTML5 策略和应用现状
PhoneGap 2.0 开发
Android 平台 HTML5 应用开发
HTML5 生态系统和应用架构模型
18 NSUserDefaults
15 Subclassing UITableViewCell

17 Localization