iOS應用本地化

聲明:html

  • 最後更新時間:2019年3月13日
  • 爲保證時效性,持續更新地址爲:iOS應用本地化

一. 語言配置

不管本地化文本、圖片、xib/storyboard,都須要配置本地化的語言,操做步驟如圖:python

圖例

點擊「+」以後彈出對話框如圖:git

圖例

Main.storyboard和LaunchScreen.storyboard至少選擇一個,若是選擇的文件無用,那麼在Finish以後刪除便可。不然添加語言配置不成功。github

二. 應用程序名稱

  1. 在語言配置好以後,新建資源文件(文件名必須爲InfoPlist.strings):Xcode -> File -> New File -> Resource -> Strings File。
  2. 本地化資源文件:選中InfoPlist.strings文件 -> File Inspection(Xcode右側面板的文件檢查器) -> Localize 如圖:

    圖例

  3. 生成相應的語言文件:選中InfoPlist.strings文件 -> File Inspection(Xcode右側面板的文件檢查器) -> 勾選相應的語言文件,InfoPlist.strings下會多出相應的語言文件 如圖:

    圖例

  4. 在相應的語言文件中添加本地化的文本(key/value形式), 如圖:

    圖例
    圖例

  5. App啓動時根據系統語言加載相應語言的InfoPlist.strings, 本地化處理過的文本能夠進行相應語言的顯示。
  6. 若是前5步以後仍不能達到效果,編輯Info.plist,添加一個新的屬性Application has localized display name, 設置其類型爲Boolean,並將其value設置爲YES。

三. 文本

  1. 在語言配置好以後,新建資源文件(文件名:系統默認Localizable.strings):Xcode -> File -> New File -> Resource -> Strings File,文本顯示時,默認文件名用NSLocalizedString(key, comment),若是自定義文件名需用NSLocalizedStringFromTable(key, tbl, comment),其中tbl即爲文件名。
  2. 本地化資源文件:選中Localizable.strings文件 -> File Inspection(Xcode右側面板的文件檢查器) -> Localize 如圖:

    圖例

  3. 生成相應的語言文件:選中Localizable.strings文件 -> File Inspection(Xcode右側面板的文件檢查器) -> 勾選相應的語言文件,Localizable.strings下會多出相應的語言文件 如圖:

    圖例

  4. 在相應的語言文件中添加本地化的文本(key/value形式), 如圖:

    圖例
    圖例

  5. 項目中應用:NSLocalizedString(key, comment)或者NSLocalizedStringFromTable(key,文件名, comment),key即Localizable.strings中本身定義的key,comment即備註,可爲nil。如圖

    圖例

  6. App啓動時根據系統語言加載相應語言的Localizable.strings, 本地化處理過的文本能夠進行相應語言的顯示。系統根據某個key在Localizable.strings獲取對應的字符串時,若是沒有找到,那麼就會以key做爲value返回。
  7. Edit Scheme -> Options -> Application Language 能夠修改此項目的語言環境,不須要每次修改設備的語言環境。如圖:

    圖例

四. 圖片

因爲iOS中不支持Assets.xcassets的本地化,圖片的本地化主要有兩種方式:①本地化圖片名字,② 本地化圖片文件shell

  • 本地化圖片名字(參考本地化文本),代碼以下:segmentfault

    NSString *imageName = NSLocalizedString(@"icon", nil);
    UIImage *image = [UIImage imageNamed:imageName];
  • 本地化圖片文件app

    1. 本地化資源文件:選中圖片 -> File Inspection(Xcode右側面板的文件檢查器) -> Localize 如圖:
      圖例
    2. 生成相應的語言文件:選中圖片文件 -> File Inspection(Xcode右側面板的文件檢查器) -> 勾選相應的語言文件,圖片文件下會多出相應的語言文件 如圖:

      圖例

    3. 選中圖片文件 -> Show In Finder,發現本地化的文件根據語言類型分別在不一樣的目錄中,針對圖片能夠進行替換

      圖例

    4. 圖片替換以後,啓動時會根據語言環境加載相應的圖片資源。
    5. Edit Scheme -> Options -> Application Language 能夠修改此項目的語言環境,不須要每次修改設備的語言環境。如圖:

      圖例

五. 啓動圖

iOS 啓動圖配置有三種方式:①導入圖片文件,而且配置Info.plist,② Launch Image Source (Assets),③ LaunchScreen File。可是第② 種暫不支持本地化。啓動圖可行的兩種方式,都依賴於Info.plist文件的配置。工具

  • 引入圖片文件且配置Info.plist測試

    1. 首先將Launch Screen File置空,而且不選擇Launch Image Source (Asset)
    2. 此方法相似圖片的本地化(本地化圖片文件),額外的須要在Info.plist文件中配置,
    3. 圖片規格和plist配置結構(類比Assets中的 Launch Image),能夠在Assets中配置Launch Image後,App運行時打印Info.plist 查看 ,舉例以下::
    <key>UILaunchImages</key>
     <array>
         <dict>
             <key>UILaunchImageMinimumOSVersion</key>
             <string>8.0</string>
             <key>UILaunchImageName</key>
             <string>bubble_mine_green</string>
             <key>UILaunchImageOrientation</key>
             <string>Portrait</string>
             <key>UILaunchImageSize</key>
             <string>{414, 736}</string>
         </dict>
     </array>

注意:目前手機只有iPhone plus(5.5)和iPhone X 額外支持橫屏啓動圖配置,其它設備默認加載豎圖,具體查看Assets中的LaunchImages可配置的啓動圖。ui

  • LaunchScreen File

    1. 本地化LaunchScreen.storyboard,相似本地化圖片文件步驟,經測試此方法不可行(不能根據系統語言環境自動加載對應的本地化文件),猜想蘋果不同意不支持本地化,普通的xib/storyboard文件也不支持圖片的本地化(參見下一節:六. xib/storyboard)。
    2. 建立兩個LaunchScreen.文件,一個文件名爲LaunchScreen-English,一個文件名LaunchScreen-Chinese,參考應用程序名稱本地化,在InfoPlist.strings 配置Info.plist,以下:

      "UILaunchStoryboardName" = "LaunchScreen-Chinese";
      "UILaunchStoryboardName" = "LaunchScreen-English";

六. xib/storyboard

本地化XXX.storyboard,操做步驟與本地化圖片文件相同,可是storyboard內容的本地化發現只支持文本,而且xib/storyboard 元素較多,內容也較複雜。每次控件內容的修改都要同步到其它語言環境上。整理方法以下:

  1. 能夠在修改Base環境界面上的元素以後(最好暫存一下,以防後續操做失敗),先勾選掉其它語言環境的文件,再勾選切換從新生成(Replace file)storyboard,可是須要從新填寫每種語言的本地化文本。如圖
    圖例
  2. 能夠Base文件中查看ObjectID,在原來語言文件的基礎之上,對新添加控件依據格式進行補充整理:

    /* Class = "UILabel"; text = "Label"; ObjectID = "fSz-Ci-UcW"; */
    "fSz-Ci-UcW.text" = "Label";
  3. 終端利用工具ibtool,此方法相似第1條的從新勾選Replace file,都須要從新填寫本地化文本

    • 進入Base.lproj文件的目錄:
    • 用命令行工具ibtool根據Base文件產生一個.strings文件,對比新的.strings文件,在原來語言文件的基礎之上,對新添加控件依據格式進行補充整理,命令舉例以下:

      ibtool Main.storyboard --generate-strings-file ./temp.strings
    • 修改.strings文件中的字符串,相似從新填寫本地化文本的操做
    • 用命令行工具ibtool根據字符串文件從新生成對應語言的storyboard,命令舉例以下

      ibtool --strings-file temp.strings --write ../zh-Hans.lproj/Main.storyboard Main.storyboard
  4. 利用腳本保持Base和其它語言環境的本地化UI元素一致:腳本文件
    此方法參考文章,在TARGETS -> Build Phases -> Run Script(沒有能夠左上角「+」)增添腳本代碼:

    python  腳本本地路徑()  storyboard/xib路徑(會自動遍歷和查找子目錄)
  5. 連接到代碼中利用代碼本地化(相似文本本地化)

七. 後記

工程目錄:每種語言都有本身的文件夾xx.lproj,加載資源時從相應語言文件夾下加載。

本地化官方文檔地址

相關文章
相關標籤/搜索