狠狠撸
Submit Search
17 Localization
?
0 likes
?
301 views
Tom Fan
国际化和本地化
Read less
Read more
1 of 25
Download now
Download to read offline
More Related Content
17 Localization
1.
Localization 范圣刚,princetoad@gmail.com,www.tfan.org
2.
国际化和本地化 ? ?首先我们来理解?一下国际化和本地化的概念 ? 所谓国际化,是指我们要确保我们的应?用中没有 本地?文化相关的信息被硬编码在?里?面。 ?
所谓的本地?文化相关的信息,我们指的是语?言, 货币,?日期格式,数字格式等。 ? ?而本地化,是指在我们的应?用程序要中基于?用户 的“语?言”和“区域格式”的设置提供恰当的数据。
3.
多语?言环境
4.
$ 和 区域:中国 ?
我们现在的区域设置 是“中国”,应?用?里?面有 关货币符号的显?示却 是$ ? 这是因为我们把 $ 符 号硬编码到我们的程 序中了
5.
硬编码的?一个例?子 [[cell valueLabel] setText: [NSString stringWithFormat:@"$%d",
[p valueInDollars]]];
6.
使?用 NSLocale 进?行国际化
7.
? 在 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]]];
8.
使?用 NSLocale 之后
9.
? 然后我们来看?一下 NSLocale
的使?用 ? 当我们发送?一个 currentLocale 消息给 NSLocale 时,表?示?用户区域设置的?一个NSLocale 的实例就 被返回。 ? 拿到 NSLocale 的实例以后,我们就可以向它请求 我们感兴趣的本地化信息,例如货币符号等 ? 向 NSLocale 请求信息我们通过向它发送 objectForKey: 消息,参数就是?一个 NSLocale 常量 NSString *currentSymbol = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]; [[cell valueLabel] setText:[NSString stringWithFormat:@"%@%d", currentSymbol, [p valueInDollars]]];
11.
? 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]]];
12.
资源的本地化
13.
? 应?用程序资源本地化的过程: ? ?生成资源的多份拷?贝,像图?片,声?音,以及为不同的
地域和语?言设置的界?面 ? 创建和访问 strings table 把?文本翻译成不同的语?言 ? 只要是资源都可以被本地化,本地化以后的资源 再放?一份到 application bundle 中
14.
? 这些资源被组织到特定语?言相关的??目录?里?面,也 就是 lproj
??目录 ? 这些??目录的名字加上特定语?言的后缀 ? 这?一章节我们来本地化 Homepwner 的界?面: DetailViewController.xib ?文件 ? 我们将?生成英?文和中?文的本地化,也就是说?生成 两个 lproj ??目录,每个??目录包含?一个版本的 DetailViewController.xib 的版本
15.
? 第?一步,启?用本地化。选中 DetailViewController.xib ?文件,在
File inspector 中 点击“Localization” 后?面的 “Make localized...”按钮 ? 在弹出的对话框中确认要“Localize”
16.
? 第?二步,增加本地化。选中 project,
在右边的 info 下?面,点击 localization下?面的 + 号,选择中?文 ? 这将会在左边 project navigator 中再?生成?一个 DetailViewController.xib ?文件
17.
? 第三步,导出 string。 ?
打开 Terminal,进?入项??目的en.lproj??目录 ? 运?行: ibtool --export-strings-file ~/Desktop/ DetailViewController.strings DetailViewController.xib ? 忽略命令?行提?示的警告
18.
? 第四步,翻译。 ? 打开导出的
string ?文件
19.
? 第五步,把新的 string
?文件写?入到中?文 XIB ?文件中 ? 打开 Terminal,输?入后?面的内容但不要回?车: ibtool --import-strings-file ~/Desktop/ DetailViewController.strings --write ? 把zh-Hans.lproj ??目录下的 DetailViewController.xib ?文件拖到 Terminal 窗?口中,再把 en.lproj 下?面的 DetailViewController.xib ?文件拖进terminal 窗?口 (后?面拖?入的两个?文件的路径会被附加到前?面输 ?入的命令后?面) ? 回?车
20.
? 第六步,打开中?文的 xib
?文件确认?一下。
21.
? 第七步,运?行看?一下
22.
NSLocalizedString 和 Strings
Table
23.
? 本地化程序?里?面的字符串,对 ItemViewController
的标题进?行本地化 ? ?首先定位到 ItemViewController.m 的 init 函数中, 修改设置 title 的代码 // 本地化 Homepwner 的标题 // [n setTitle:@"Homepwner"]; [n setTitle:NSLocalizedString(@"Homepwner", @"Name of application")];
24.
? ?生成 string
table ? 打开 Terminal 窗?口,定位ItemsViewController 所 在??目录,输?入: genstrings ItemsViewController.m ? 将会在同?一??目录?生成名为 Localizable.strings 的?文 件 ? 拖到我们的项??目??目录中
25.
? 像前?面?一样对它进?行 make
localization ? 选中?文件,在右边属性?面板的 localization 区域勾 选上,Chinese ? 这样会?生成?一个中?文版的 string table ? 进?行翻译 ? 运?行程序
Download