一者冤、說明
多語言一般為了實現(xiàn)下面兩個目標:
- App展示的語言為目標客戶的第一語言惜互,如繁體中文如暖、英語
- 在其它國家瘾英,默認展示語言為特定語言,如:英語
二证舟、實現(xiàn)步驟
注:此例實現(xiàn)的語言有:繁體中文硕旗、英語,當iPhone設置的語言為其它語言時女责,默認展示英語
-
Xcode
添加相應語言
Xcode設置 -
選擇目標語言后漆枚,彈框選擇
finish
,最終如下:
語言選擇結果
- 設置不同語言下的應用名稱
3.1) 新建用來展示應用名稱的多語言文件Strings File
string 文件
- 命名為
InfoPlist
- 選中此文件抵知,在
Xcode
右邊的File inspector
點擊Localize
:
Localize 按鈕
3.2) 選擇繁體中文墙基,點擊Localize
:
- 再單擊此
InfoPlist.strings
文件,選擇Base刷喜、English残制、Chinese(Traditional)
選擇多語言
這時候,InfoPlist.strings
文件就多了下拉箭頭掖疮,打開后發(fā)現(xiàn)有多個文件初茶,如上圖
-
InfoPlist.strings(English)
當iPhone設置語言為英語時,App名稱為此文件中配置的名稱 -
InfoPlist.strings(Chinese(Traditional))
當iPhone設置語言為繁體中文時浊闪,App名稱為此文件中配置的名稱 -
InfoPlist.strings(Base)
當iPhone設置語言為其它語言時恼布,App名稱為此文件中配置的名稱
- 配置不同語言下的App名稱。因為當iPhone設置語言為其它語言時搁宾,我們展示的名稱為英語折汞,所以
InfoPlist.strings(Base)
的內容與InfoPlist.strings(English)
內容相同,則3個文件中的內容分別為:
CFBundleDisplayName = "Space App";
CFBundleDisplayName = "國際化應用";
- 設置不同語言下猛铅,NSString的取值
同上字支,新建
Strings File
文件,此處取名為:Localizable.strings
注:此處.string的文件名稱可以修改,對應的取值方法不同堕伪,下面有說明-
同上揖庄,選擇此文件的Base、English欠雌、Chinese Traditional蹄梢,
最后生成文件如下:
Localizable.strings文件 因為Base 與 English 中配置相同,Base 文件便忽略富俄,不再說明禁炒。
如我們配置
facebook登錄
的NSString,
Localizable.strings(English)
:
"facebook_login" = "Facebook Login";
Localizable.strings(Chinese(Traditional))
:
"facebook_login" = "Facebook登錄";
由上我們可以看到命名規(guī)則:
- 形式:
key = value
-
key
霍比、value
需要用雙引號
包裝起來 - 沒有
@
- 行尾有分號
;
4.2) 調用方法:
NSLocalizedString(@"facebook_login", nil)
第二個值comment一般傳nil即可幕袱。此官方宏很簡單,看官方解釋即會使用
- 如果上面命名此文件為其它名稱悠瞬,需要使用下面官方宏來獲取相應語言的字符串:
NSLocalizedStringFromTable(key, tbl, comment)
如果是在
framework
中们豌,實現(xiàn)的多語言。需要將.string
文件打包在bundle
中浅妆,用官方宏NSLocalizedStringFromTableInBundle
來獲取望迎,假設此bundle
名稱為YHSDK.bundle
,
NSString *mainBundlePath = [[NSBundle mainBundle] resourcePath];
NSString *languageBundlePath = [mainBundlePath stringByAppendingPathComponent:@"YHSDK.bundle"];
NSBundle *targetBundlePath = nil;
targetBundlePath = [NSBundle bundleWithPath:languageBundlePath];
// if ([[NSFileManager defaultManager] fileExistsAtPath:languageBundlePath]) {
// NSLog(@"targetBundlePath:%@ 地址不存在", targetBundlePath);
// }
NSString *string = NSLocalizedStringFromTableInBundle(key, nil, targetBundlePath, nil);
三凌外、其它注意事項
有時候iPhone設置成其它語言時辩尊,如法語,App展示的語言不是英語康辑,而是繁體中文摄欲,是因為iPhone的設置導致的,將偏好的語言順序中將繁體中文刪除或調整到英文之后即可: