iOS開發之本地化

來源:互聯網
上載者:User

標籤:

一、簡介

  * 使用本地化功能,可以輕鬆地將應用程式翻譯成多種語言,甚至可以翻譯成同一語言的多種方言

  * 如果要添加本地化功能,需要為每種支援的語言建立一個子目錄,稱為”本地化檔案夾”,通常使用.lproj作為拓展名

  * 當本地化的應用程式需要載入某一資源時,像、屬性列表、nib檔案,應用程式會檢查使用者的語言和地區,並尋找相匹配的本地化檔案夾。如果找到了相應的檔案夾,就會載入這個檔案夾中的資源

 

二、預設的

工程目錄結構

 

運行(因為沒有使用本地化功能,所以不管使用者選擇什麼語言環境,啟動並執行效果都是一樣的)

  

 

現在想在中文語言環境下,換另一套實現,其中包括:

  * 更改nib檔案中的文字(nib本地化)

  * 更改登入按鈕下面的圖片(圖片本地化)

  * 更改對話方塊中的文字(Tip和Ok)(字串本地化)

  * 更改應用程式名稱(應用程式名稱本地化,即本地化Info.plist檔案)

 

三、本地化前的準備

其實就是先建立好中文的本地化檔案夾(zh-Hans.lproj),讓應用程式支援中文語言環境

 

選擇當前需要本地化的資源

 

選擇Finish後,會發現硬碟上多了一個中文的本地化檔案夾zh-Hans.lproj,至於en.lproj檔案夾是英文的本地化檔案夾,建立項目時預設就有的

 

項目中的MJViewController.xib、InfoPlist.strings檔案左邊也多了個可以展開的三角形,展開可以發現分別都有2個版本的檔案

 

MJViewController.xib(English)對應en.lproj檔案夾中的MJViewController.xib檔案

InfoPlist.strings(English)對應en.lproj檔案夾中的InfoPlist.strings檔案

MJViewController.xib(Chinese)對應zh-Hans.lproj檔案夾中的MJViewController.xib檔案

InfoPlist.strings(Chinese)對應zh-Hans.lproj檔案夾中的InfoPlist.strings檔案

 

準備工作做完後,就可以開始展開本地化工作了

 

四、nib檔案的本地化

開啟MJViewController.xib(Chinese)檔案,修改裡面的文字資訊(這裡不修改圖片)

 

五、應用程式名稱本地化(Info.plist本地化)

知識背景:Info.plist中有個叫CFBundleDisplayName的key決定了應用程式的名稱

1.為Info.plist添加一個key-value,讓應用程式支援名稱本地化,Info.plist就會去InfoPlist.strings載入CFBundleDisplayName對應的字串

 

2.在InfoPlist.strings(English)檔案中加入:

 

[java] view plaincopy
  1. CFBundleDisplayName="Localization";  

 

 

3.在InfoPlist.strings(Chinese)檔案中加入:

 

[java] view plaincopy
  1. CFBundleDisplayName="本地化";  

 

 

六、圖片本地化

(這裡示範本地化home.png,nib檔案中登入按鈕下面的房子圖片)

1.單擊選中home.png,然後查看右上方的視圖

 

2.選了Localize代表會將home.png加入到英語的本地化檔案夾en.lproj中去

 

3.添加圖片支援中文語言

 

4.查看下硬碟中home.png的情況

 

 

5.而且項目中的home.png左邊也多了個可以展開的三角形,展開可以發現有2個版本的檔案

home.png(English)對應en.lproj檔案夾中的home.png檔案

home.png(Chinese)對應zh-Hans.lproj檔案夾中的home.png檔案

 

6.用預先準備好的另外一張圖片替換zh-Hans.lproj檔案夾中的home.png

 

7.替換後查看項目中home.png的情況

 

8.在代碼中照常使用圖片即可

 

[java] view plaincopy
  1. [UIImage imageNamed:@"home.png"];  

注意:本地化完圖片檔案,記得Clean一下項目,而且最好先刪除應用程式,再重新安裝

 

 

七、字串的本地化

1.建立一個字串資源檔

 

2.檔案名稱最好是Localizable.strings,如果使用其他檔案名稱,使用字串時的調用會有些區別

 

3.為Localizable.strings添加多語言支援(跟上面圖片本地化類似),選中Localizable.strings檔案,查看右上方的視圖

 

 

4.選了Localize代表會將Localizable.strings加入到英語的本地化檔案夾en.lproj中去

 

 

 

5.添加支援中文語言

 

 

6.查看下硬碟中Localizable.strings的情況

 

7.而且項目中的Localizable.strings左邊也多了個可以展開的三角形,展開可以發現有2個版本的檔案

 

Localizable.strings(English)對應en.lproj檔案夾中的Localizable.strings檔案

Localizable.strings(Chinese)對應zh-Hans.lproj檔案夾中的Localizable.strings檔案

 

8.在Localizable.strings(English)檔案加入:

 

[java] view plaincopy
  1. Tip="Tip";  
  2.   
  3. Ok="Ok";  

 

 

9.在Localizable.strings(Chinese)檔案加入:

[java] view plaincopy
  1. Tip="提示";  
  2.   
  3. Ok="好的";  

 

10.在代碼中使用NSLocalizedString(key, comment)來讀取本地化字串,key是Localizable.strings檔案中等號左邊的字串,comment純粹是注釋

 

[java] view plaincopy
  1. NSString *tip = NSLocalizedString(@"Tip", nil);  
  2. NSString *ok = NSLocalizedString(@"Ok", nil);  

如果沒有對字串進行本地化 或者 找不到key對應的值,NSLocalizedString將直接返回key這個字串

 

注意:如果你的字串資源檔名不是Localizable.strings,如mj.strings,那麼你就得使用NSLocalizedStringFromTable()來讀取本地化字串:

 

[java] view plaincopy
  1. NSLocalizedStringFromTable(@"Tip", @"mj", nil);  

 

補充:產生字串資源檔的另一種方式(通過終端命令)

1.首先添加擷取字串的代碼,比如在MJViewController.m

 

[java] view plaincopy
  1. NSString *tip = NSLocalizedString(@"Tip", @"dialog title");  
  2. NSString *ok = NSLocalizedString(@"Ok", @"dialog button");  


2.開啟終端,定位到MJViewController.m所在的檔案夾,輸入genstrings命令,產生字串資源檔

 

 

3.開啟檔案夾,已經產生了字串資源檔

 

如果使用NSLocalizedStringFromTable(key, tbl, comment)來擷取字串,資源檔會以tbl參數作為檔案名稱,比如

[java] view plaincopy
  1. NSString *tip = NSLocalizedStringFromTable(@"Tip", @"mj", @"dialog title");  
  2. NSString *ok = NSLocalizedStringFromTable(@"Ok", @"mj", @"dialog button");  

產生的資源檔為:mj.strings

 

4.將資源檔匯入項目即可,然後開啟資源檔,可以發現已經產生了key和comment

 

[java] view plaincopy
  1. /* dialog button */  
  2. "Ok" = "Ok";  
  3.   
  4. /* dialog title */  
  5. "Tip" = "Tip";  

 

 

八、其他檔案的本地化

跟六中圖片本地化的原理是一樣的,重複六中的每個步驟即可

 

九、最終效果示範

1.英文環境下

 

  

 

2.中文環境下

 

  

iOS開發之本地化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.