根據(jù)用戶的本地語言,處理文本的輸入和輸出。
處理不同的日期,時(shí)間,數(shù)字顯示格式
利用合適的日歷和時(shí)區(qū)處理日期。
把不同國家的文字放在app的bundle中的分開的不同的文件中
iOS使用 .strings
文件擴(kuò)展名的文件來存儲所有的本地化字符串,每種支持的語言都有一個或多個。使用一個函數(shù)調(diào)用根據(jù)設(shè)備上使用的當(dāng)前語言檢索請求的字符串。
選擇菜單欄中的 File\New\File
,選擇 iOS\Resource\Strings File
并點(diǎn)擊 Next
。
命名為 Localizable
點(diǎn)擊Create
,Localizable.strings 是iOS默認(rèn)的用作本地化文字的文件名稱。除非在引入時(shí)每次輸入.strings
文件,否則不要命名成其他名字。
.strings 文件中包含鍵值對的文本內(nèi)容,像字典一樣。
"KEY" = "Content";
在 Localizable.strings
文件中添加以下內(nèi)容
"工作時(shí)長" = "work hours";
"你已經(jīng)工作了 %.1f 小時(shí)" = "You have been working for %.1f hours";
NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment)
是訪問這些本地化字符串的主要工具。其中tbl
, bundle
等參數(shù)有默認(rèn)值,所以只需要指定 key 和 comment 就可以了。 comment 參數(shù)是用來提示翻譯者這個字符串在APP中哪個地方使用的。
最長使用的是 NSLocalizedString(@"KEY", @"comment")
方法。
self.workTimeLabel.text = [NSString stringWithFormat: NSLocalizedString(@"你已經(jīng)工作了 %.1f 小時(shí)", nil), self.duration];
添加其他語言
點(diǎn)擊 project 找到 Info 標(biāo)簽, 在 Localizations 處點(diǎn)擊左下角的+
按鈕,添加在中文語言,下一步選中要國際化的文件,點(diǎn)擊確定。
在Xcode的右側(cè)面板中點(diǎn)擊 Localize... 。此時(shí) Xcode 會生成一些文件,lproj 結(jié)尾的文件夾,每一種語言對應(yīng)一個文件夾。App在尋找對應(yīng)的語言文件夾中的資源時(shí),如果沒找到,或者資源不存在,iOS會從 Base.lproj 中獲取資源。
在 Localizable.strings(Simplified) 文件中,添加中文
"工作時(shí)長" = "工作時(shí)長";
"你已經(jīng)工作了 %.1f 小時(shí)" = "你已經(jīng)工作了 %.1f 小時(shí)";
"過了半小時(shí)" = "過了半小時(shí)";
在Edit scheme… 中選擇中文語言,運(yùn)行。
國際化 Storyboards
可以把 Storyboards 中的所有UI控件通過IBOut連線到對應(yīng)的控制器中,在控制器中使用NSLocalizedString(_:tableName:bundle:value:comment:)
方法對屬性賦值,可以達(dá)到國際化Storyboards的目的。
這種方法比較麻煩,因?yàn)橛行︰I控件的文字是不變的,不需要連線到控制器中。有一種簡便的方式,點(diǎn)擊Xocde左邊的Main.storyboard左側(cè)的三角符號并展開折疊,在 Main.strings(Simplified)
中替換要國際化的文字。
/* Class = "UIButton"; normalTitle = "過了半小時(shí)"; ObjectID = "MJk-Y7-jXL"; */
"MJk-Y7-jXL.normalTitle" = "過了半小時(shí)";
/* Class = "UILabel"; text = "你已經(jīng)工作了5小時(shí)"; ObjectID = "dLk-5u-xPE"; */
"dLk-5u-xPE.text" = "你已經(jīng)工作了5小時(shí)";
/* Class = "UILabel"; text = "工作時(shí)長"; ObjectID = "m31-Xi-Gp2"; */
"m31-Xi-Gp2.text" = "工作時(shí)長";
Demo
要實(shí)現(xiàn)的效果如下
點(diǎn)擊下方的按鈕,第二行的文字會動態(tài)變化
添加要國際化的語言
確保要國際化的文件都選中,點(diǎn)擊 Finish
展開Main.storyboard文件,配置storyboard文字信息
新建Localizable.strings文件,并點(diǎn)擊右側(cè)的Localize...
在右側(cè)的Localize...區(qū)域,選中對應(yīng)的語言
編寫對應(yīng)的代碼
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *workTimeLabel;
@property (nonatomic, assign) CGFloat duration;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.duration = 5.0;
}
- (IBAction)timeButton:(UIButton *)sender {
self.duration += 0.5;
self.workTimeLabel.text = [NSString stringWithFormat: NSLocalizedString(@"你已經(jīng)工作了 %.1f 小時(shí)", nil), self.duration];
[self.workTimeLabel setHidden:NO];
}
@end