




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發(fā)技術】如何實現(xiàn)iOS語言本地化國際化
這篇文章將為大家詳細講解有關如何實現(xiàn)iOS語言本地化/國際化,在下覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。前言語言本地化,又叫做語言國際化。是指根據(jù)用戶操作系統(tǒng)的語言設置,自動將應用程序的語言設置為和用戶操作系統(tǒng)語言一致的語言。往往一些應用程序需要提供給多個國家的人群使用,或者一個國家有多種語言,這就要求應用程序所展示的文字、圖片等信息,能夠讓講不同語言的用戶讀懂、看懂。進而提出為同一個應用程序適配多種語言,也即是國際化。語言國際化之所以又叫做語言本地化,這是站在每個用戶的角度而言的,是指能夠讓用戶本地、本土人群能夠看懂的語言信息,顧名思義,語言本地化。其實語言本地化==語言國際化!本文將分如下7個主要章節(jié)一步一步講解如何完全本地化一個App。配置需要國際化的語言(國際化的準備工作)App名稱本地化代碼中字符串本地化多人開發(fā)情況下的字符串本地化圖片本地化(兩種方式兩種方式)查看/切換本地語言storyboard/xib本地化配置需要國際化的語言配置需要國際化的語言,這也是國際化之前的準備工作,無論我們是國際化App名稱、代碼中的字符串、圖片、還是storyboard和xib,都需要進行這一步的準備工作(一個項目中需要且僅需要配置一次)。選中project->Info->Localizations,然后點擊"+",添加需要國際化/本地化的語言,如下圖(默認需要勾選UseBaseInternationalization):此處以添加法語為例,如下圖:彈出如下對話框,直接點擊finish,如下圖:同理,添加簡體中文、繁體中文、韓語,最終結果如下圖:備注:“zh-Hans”和“zh-Hant”是簡體中文和繁體中文的縮寫。這是標準的縮寫。H可大寫也可小寫。"en"是英語的縮寫。ko是韓語的縮寫,fr是法語的縮寫。其他語言請百度各國語言縮寫即可查詢。(一)應用名稱本地化/國際化應用名稱本地化,是指同一個App的名稱,在不同的語言環(huán)境下(也就是手機設備的語言設置)顯示不同的名稱。比如,微信在簡體中文環(huán)境下App名稱顯示為“微信”,在英語環(huán)境下顯示為“weChat”。下面就開始進行應用名稱本地化。選中Info.plist,按下鍵盤上的command+N,選擇StringsFile(iOS->Resource->StringsFile)文件名字命名為InfoPlist,且必須是這個名字(因每個人電腦設置差異,此處本人電腦沒有顯示strings后綴名):點擊create后,Xcode左側導航列表就會出現(xiàn)名為InfoPlist.strings的文件,如下圖:選中InfoPlist.strings,在Xcode的Fileinspection(Xcode右側文件檢查器)中點擊Localize,目的是選擇我們需要本地化的語言,如下圖:注意:在點擊Localize之前,一定要保證我們已經添加了需要本地化的語言,也就是上面配置需要國際化的語言那一步(步驟:project->Info->Localizations,然后點擊"+",添加需要國際化/本地化的語言)。點擊Localize后,會彈出一個對話框,展開對話框列表,發(fā)現(xiàn)下拉列表所展示的語言正是我們在上面配置的需要國際化的語言,選擇我們需要本地化的語言,然后點擊對話框的Localize按鈕,如下圖:注意:如果我們沒有在PROJECT中配置需要國際化的語言(project->Info->Localizations,然后點擊"+"),上圖下拉列表中將只會出現(xiàn)"Base"和"English"選項,English語言是系統(tǒng)默認的語言,其他需要國際化的語言(例如中文簡體、法語)必須通過上面的配置本地化語言那一步手動添加。然后我們發(fā)現(xiàn)Xcode右側的Fileinspection變成了下圖的樣式:接下來,勾選French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下圖:此時,Xcode左側的InfoPlist.stirings左側多了一個箭頭,點擊箭頭可以展開,如下圖所示:從上圖可以看出,InfoPlist.strings文件下包含了English、French、Chinese(Simplified)、Chinese(Traditional)、Korean這五種語言的文件。原理:程序啟動時,會根據(jù)操作系統(tǒng)設置的語言,自動加載InfoPlist.strings文件下對應的語言文件,然后顯示應用程序的名字。接下來,我們分別用不同的語言給InfoPlist.strings下的文件設置對應的名字。(1)在InfoPlist.strings(english)中加入如下代碼://
Localizable
App
Name是App在英語環(huán)境環(huán)境下顯示的名稱
CFBundleDisplayName
=
"Localizable
App
Name";備注:CFBundleDisplayName可以使用雙引號,也可以不使用雙引號?。?)在InfoPlist.strings(French)中加入如下代碼:CFBundleDisplayName
=
"Le
nom
de
la
localisation
de
l'App";(3)在InfoPlist.strings(Chinese(Simplified))中加入如下代碼:CFBundleDisplayName
=
"國際化App名稱";(4)在InfoPlist.strings(Chinese(Traditional))中加入如下代碼:CFBundleDisplayName
=
"國際化App名稱";(5)在InfoPlist.strings(Korean)中加入如下代碼:CFBundleDisplayName
=
"???
?
??";修改模擬器語言環(huán)境為English。App名稱如下圖:修改模擬器語言環(huán)境為Chinese(Simplified)。App名稱如下圖:修改模擬器語言環(huán)境為Chinese(Traditional)。App名稱如下圖:修改模擬器語言環(huán)境為Franch。App名稱如下圖:修改模擬器語言環(huán)境為Korean。App名稱如下圖:備注:過去本地化App名稱,需要在Info.plist文件中增加一個名為“Applicationhaslocalizeddisplayname”的BOOL類型的Key,并且需要將其值設置為YES(如下圖)。目的是讓App支持本地化App名稱。但現(xiàn)在可以忽略這一步。至此,本地化App名稱已經演示完畢,其步驟就是:在Project的設置中通過點擊"+"添加需要本地化的語言。然后在Xcode右側的Fileinspection中點擊Localize,選中需要本地化App名稱的語言。最后在每個語言對應的文件中以key=value(CFBundleDisplayName="App名稱";);的形式設置App的名稱。(二)代碼中字符串的本地化所謂字符串本地化,就是指App內的字符串在不同的語言環(huán)境下顯示不同的內容。比如,"主頁"這個字符串在中文語言環(huán)境下顯示“主頁”,在英語環(huán)境下顯示“home”。下面就開始進行字符串本地化。其實字符本地化和App名稱本地化過程如出一轍,只是創(chuàng)建的文件名成不一樣(連同后綴一起,文件名必須是Localizable.strings),其他步驟完全相同。為了能夠讓大家徹底了解,此處還是會把步驟一一貼出來。和應用名稱本地化一樣,首先需要command+N,選擇iOS->Resource->StringsFile文件名必須命名為Localizable備注:因本人電腦取消隱藏文件后綴名,所以會自動補全.strings后綴名。文件創(chuàng)建成功,查看Xcode左側導航列表,發(fā)現(xiàn)多了一個名為Localizable.strings的文件,如下圖:選中Localizable.strings文件,在Xcode的Fileinspection中點擊Localize,目的是選擇我們需要本地化的語言(和本地化App名稱同理),如下圖:依次選擇English->Localize,如下圖:然后我們發(fā)現(xiàn)Xcode右側的Fileinspection變成了下圖的樣式:然后勾選French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下圖:此時,Xcode左側的Localizable.stirings左側多了一個箭頭,展開后,如下圖所示:然后我們只需要在Localizable.strings下對應的文件中,分別以Key-Value的形式,為代碼中每一個需要本地化的字符串賦值,如下圖:本地化代碼中的字符串,如下圖:我們只需要使用Foundation框架自帶的NSLocalizedString(key,comment)這個宏根據(jù)Key獲取對應的字符串,然后賦值給代碼中的字符串。//
NSLocalizedString(key,
comment)
本質
//
NSlocalizeString
第一個參數(shù)是內容,根據(jù)第一個參數(shù)去對應語言的文件中取對應的字符串,第二個參數(shù)將會轉化為字符串文件里的注釋,可以傳nil,也可以傳空字符串@""。
#define
NSLocalizedString(key,
comment)
[[NSBundle
mainBundle]
localizedStringForKey:(key)
value:@""
table:nil]不同語言環(huán)境下運行效果,如下圖:英語環(huán)境下:法語環(huán)境下:簡體中文環(huán)境下:繁體中文環(huán)境下:韓語環(huán)境下:如此一來,我們就實現(xiàn)了代碼中字符串的本地化。技巧其實,我們不需要給Localizable.strings(English)文件添加Key-Value。原因如下:系統(tǒng)根據(jù)某個key去獲取對應的字符串時,如果沒有找到,那么就會以key作為value返回。所以如果我們在Localizable.strings(English)文件中沒有添加click="hit";那么在english環(huán)境下btn最終顯示的title會是click.切換語言無需在模擬器中設置,只需要在Xcode中進行如下設置:Edit->Scheme->Run->ArgumentsPassedOnLaunch->-AppleLanguages(語言代碼)。例如,我們模擬器此時雖然是韓語,如果通過上述步驟設置為zh-Hans,那么語言環(huán)境將會變?yōu)闈h語,如下圖:運行效果:如此一來,切換語言變得更加簡單,無需在模擬器的設置中進行繁瑣的語言切換。
(三)多人開發(fā)情況下的字符串本地化項目開發(fā)中,獨立開發(fā)的還是少數(shù)。經常會有多人開發(fā)的情況,這種情況,如果多人同時操作本地化文件,極有可能會存在沖突。另一方面,我們又不希望自己的本地化文件受到對方的污染,也就是說,我們不希望對方操作我們的本地化文件。但是上面介紹的代碼中字符串的本地化是使用的是默認的文件名"Localizable",因為啟動程序時,系統(tǒng)將根據(jù)語言加載相應的文件得到其對應的字符串文件,這個字符串可以通過系統(tǒng)將NSLocalizedString中的宏生成名為“Localizable.strings”的文件。那么如何讓系統(tǒng)加載我們自己命名的本地化文件而非系統(tǒng)默認的Localizable.strings呢?這就是NSLocalizedStringFromTable(<#key#>,<#tbl#>,<#comment#>)的用處。也就是說,如果你的strings文件名字不是Localizable而是自定義的話,如VVS.strings,那么你就得使用NSLocalizedStringFromTable這個宏來讀取本地化字符串。//
key:系統(tǒng)根據(jù)key取字符串
//
tbl:自定義strings文件的名字
//
comment:可以不傳
NSLocalizedStringFromTable(<#key#>,
<#tbl#>,
<#comment#>)#import
"ViewController.h"
@interface
ViewController
()
@property
(weak,
nonatomic)
IBOutlet
UIButton
*btn;
@end
@implementation
ViewController
-
(void)viewDidLoad
{
[super
viewDidLoad];
NSString
*title
=
NSLocalizedStringFromTable(@"click",
@"VVS",
nil);
[self.btn
setTitle:title
forState:UIControlStateNormal];
}
@end運行效果,如下圖:如此一來,我們就可以掙脫別人的strings文件和系統(tǒng)默認的Localizable.strings文件,自己另起爐灶。(四)圖片本地化本地化圖片,有兩種方式,第一種方式和本地化代碼中的字符串一樣,通過NSLocalizedString(key,comment)來獲取相應的字符串,然后根據(jù)這個字符串再獲取圖片。方式一NSString
*imageName
=
NSLocalizedString(@"icon",
nil);
UIImage
*image
=
[UIImage
imageNamed:imageName];
self.imageView.image
=
image;方式二首先需要添加需要本地化的語言,具體步驟參考第一章配置需要國際化的語言。因為我演示的demo中在本地化App名稱時已經添加了需要國際化的語言。所以不需要再設置。將圖片拖入工程中,例如“icon.png”,然后選中icon.png,展開Xcode右側的fileInspection,點擊Localize,如下圖:然后,右擊icon.png->showinFinder,我們發(fā)現(xiàn)在en.Iproj文件中多了一個名為icon.png的圖片,如下圖:當然,zh-Hans.Iproj文件夾下并沒有圖片,如下圖:我們只需給zh-Hans.Iproj添加一個名字也為icon.png的圖片。如下圖:然后把zh-Hans.Iproj中的icon.png拖到Xcode中,如下圖:然后發(fā)現(xiàn),icon.png左邊出現(xiàn)了一個可以展開的三角形。如下圖:展開后發(fā)現(xiàn)里面包含兩張圖片,如下圖:然后控制器中添加如下代碼:#import
"ViewController.h"
@interface
ViewController
()
@property
(weak,
nonatomic)
IBOutlet
UIImageView
*imageView;
@end
@implementation
ViewController
-
(void)viewDidLoad
{
[super
viewDidLoad];
NSString
*imageName
=
NSLocalizedString(@"icon",
nil);
UIImage
*image
=
[UIImage
imageNamed:imageName];
self.imageView.image
=
image;
}
@endenglish環(huán)境下運行效果如下:中文環(huán)境改下運行效果如下:其他語言環(huán)境,例如法語、中文繁體、韓語,操作步驟完全和上面相同。都是在對應的.Iproj文件夾下添加同名的圖片,然后把圖片拖放到Xcode中,不再贅述。
(五)查看/切換本地語言原理:應用啟動時,首先會讀取NSUserDefaults中的key為AppleLanguages對應的value,該value是一個String數(shù)組,也就是說,我們訪問這個名為AppleLanguages的key可以返回一個string數(shù)組,該數(shù)組存儲著APP支持的語言列表,數(shù)組的第一項為APP當前默認的語言。#import
"ViewController.h"
@interface
ViewController
()
@end
@implementation
ViewController
-
(void)viewDidLoad
{
[super
viewDidLoad];
NSArray
*languages
=
[[NSUserDefaults
standardUserDefaults]
valueForKey:@"AppleLanguages"];
NSString
*currentLanguage
=
languages.firstObject;
NSLog(@"模擬器當前語言:%@",currentLanguage);
}
@end-控制臺打印結果:同理,既然我們可以通過AppleLanguages這個key從NSUserDefaults中取出語言數(shù)組,那么我們也可以給AppleLangua
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度科研儀器租賃合同終止及數(shù)據(jù)共享協(xié)議
- 二零二五年度鋁合金門窗行業(yè)標準制定與執(zhí)行合同
- 二零二五年度餐飲業(yè)酒吧合作經營合同
- 二零二五年度物流園區(qū)安全責任協(xié)議書
- 二零二五年度廚師技能大賽賽事合作協(xié)議
- 2025年度食品研發(fā)代加工生產合同
- 二零二五年度正規(guī)欠款合同范本:供應鏈金融應收賬款融資合同
- 二零二五年度房屋抵押貸款與新能源車購置合同
- Unit 6 Whose dress is this?Period 1 Story time同步練習(含答案含聽力原文無聽力音頻)
- 學生會發(fā)言稿簡短
- 滁州城市職業(yè)學院單招《職業(yè)技能測試》參考試題庫(含答案)
- 基于單片機控制的充電樁設計
- SB-T 11238-2023 報廢電動汽車回收拆解技術要求
- 《商朝的發(fā)展》課件
- 開題報告-基于單片機的溫度控制系統(tǒng)設計
- 鋰電池正極材料行業(yè)分析
- 國家級省級化工園區(qū)列表
- 肩關節(jié)脫位手法復位課件
- 汽車懸架概述
- 中藥飲片處方審核培訓課件
- 周圍靜脈輸液操作并發(fā)癥的預防及處理
評論
0/150
提交評論