iOS 本地化(IB篇)

級別:★★☆☆☆
標籤:「iOS 本地化」「Storyboard」「Xib」「圖片」「應用顯示名稱」
做者: WYW
審校: QiShare團隊php

最近項目須要作 「本地化」「本地化」 是讓app支持多種語言的過程。附:官方文檔html

我將從如下幾點介紹本地化內容:
  • iOS 本地化Storyboard、Xib、圖片、應用顯示名稱、版權信息。
  • 本地化非Interface Builder的文本。

我使用storyboard結合代碼建立了以下的一個Demo(QiShareLocalization)。git

Demo(QiShareLocalization)解讀:

  • QiShareLocalization對英文和簡體中文作了本地化處理。
  • QiShareLocalization有一個啓動頁面,啓動圖顯示的文本在英文環境下顯示「QiShareLocalization」,在中文環境下顯示「奇分享本地化」。
  • QiShareLocalization的首頁顯示的圖片,在英文環境下顯示爲**「奇分享的Logo圖片」,在中文環境下顯示爲「奇分享的二維碼圖片」;包括對文本「首頁」「跳轉」「奇分享首頁」**都作了本地化處理。
  • QiShareLocalization點擊跳轉後的頁面,對顯示的**「奇分享本地化文本"**,圖片應用名稱版權信息都作了本地化處理。

Demo效果:

  • 簡體中文環境: 啓動頁顯示不符合簡體中文 github

    啓動頁顯示和預期效果相符(zh-Hans

  • 英文環境: bash

1、本地化準備工做

1.1 給項目添加本地化語言
  • 添加中文簡體語言的方式以下:選中項目的PROJECT -> Info -> Localizations 添加簡體中文(zh-Hans表明簡體中文)

添加簡體中文: 微信

Reference Language: app

若是再次添加其餘本地化語言,注意File Types可選: 佈局

1.2 Use Base Internationalization

勾選做用:把文本從.storyboard.xib文件中分離出來動畫

  • 若是不選中Use Base Internationalization,那麼在添加本地化語言的時候,會建立多個相應語言的storyboardxib,那麼咱們還能夠調整不一樣語言下的界面佈局及顯示內容。
  • 若是選中Use Base Internationalization,那麼在添加語言的時候,會把當前的storyboardxib中的文本提取出來,咱們只須要在相應的新增的.strings文件中改變對應的文本便可。

1.若是不選中「Use Base Internationalization」操做步驟及生成的文件, 以下所示:ui

生成的文件:

  1. 若是選中「Use Base Internationalization」而且更改LaunchScreen.storyboard的File Types Interface Builder Storyboard後,操做步驟及生成的文件。以下所示:

  • 生成的文件:

而後咱們能夠調整.strings中的文件或者是調整相應語言的Storyboard均可以達到本地化Storyboard的效果

1.3 Reference Language
  • Reference Language指的是新建的語言文件參考的語言,若是新增中文繁體參考中文簡體,那麼新增的中文繁體的文件將和項目中中文簡體中的文件同樣。

1.4 File Types
  • 能夠選用Localizable strings 也可使用Interface Builder Storyboard
    File types

通過上述操做,能夠調整.strings中的文件或者是調整相應語言的Storyboard均可以達到本地化Storyboard的效果。

2、開始本地化:

2.1 可見文本的本地化

簡體

英文

簡體LaunchScreen.storyboard

英文LaunchScreen.storyboard

可是對於啓動的Storyboard,我作調整以後,並無起到效果。後來查到,其實能夠建立不一樣本地化語言相應的啓動Storyboard,經過修改InfoPlist.strings(注:這部份內容後邊會提到)中的UILaunchStoryboardName = "LaunchScreen_zhHans";指定對應的啓動的Storyboard便可作到本地化啓動Storyboard的效果。參考博客

2.2 iOS本地化App的顯示應用名及版權信息
  • 準備工做:在Info.plist中添加應用顯示名及版權信息鍵值對。
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2018-2108 QiShare.</string>
<key>CFBundleDisplayName</key>
<string>$(PRODUCT_NAME)</string>
複製代碼

Info.plist中添加

  • 建立InfoPlist.strings,示意圖以下:

  • 修改簡體中文的InfoPlist.strings的文本

  • 修改英文的InfoPlist.strings的文本

  • 項目中代碼使用:

// 應用顯示名
[[[NSBundle mainBundle] localizedInfoDictionary] objectForKey:@"CFBundleDisplayName"];
// 版權信息
[[[NSBundle mainBundle] localizedInfoDictionary] objectForKey:@"NSHumanReadableCopyright"];
複製代碼

簡體中文輸出內容: 奇分享本地化 版權 © 2018-2108 奇分享.
英文輸出內容: QiShare Localization Copyright © 2018-2108 QiShare.

對於上文提到指定相應的本地化啓動Storyboard,能夠看下列的指定方式:

至於查看Info.plist文件中的key能夠經過下圖Show Raw Keys/Values的方式:

Show Raw Keys/Values

2.3 iOS 本地化App的圖片資源文件
  • 本地化圖片資源:

  • 添加QiShareLogo簡體本地化支持:

  • 選中以支持QiShareLogo英文本地化支持:

  • 選中後效果:

選中相應的圖片Show In Finder更改英文的本地化圖片:

項目中獲取對應的圖片使用:

[UIImage imageNamed:@"QiShareLogo"];
複製代碼

[[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"QiShareLogo" ofType:@"png"]];
複製代碼

對於圖片的本地化,我目前分享的不包括Assets.xcassets中的圖片資源,我當前還沒找到比較合適的方式。 看了下其餘人分享的文章,有經過像本地化非IB的文本(下篇文章分享)的方式來指定不一樣的語言環境加載不一樣的圖片。 至於xib的本地化,此次先不分享細節了,若是作了本地化以後,後期又新增的xib,xib的本地化,能夠參考圖片的本地化,是同樣的。

好比:某xib,本地化前

某xib 本地化前

好比:某xib,本地化後

某xib 本地化後

工程源碼:GitHub地址

關注咱們的途徑有:
QiShare(簡書)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公衆號)

推薦文章:
iOS 文件操做簡介
iOS 關鍵幀動畫
iOS 小遊戲項目——數字速算升級版
iOS 小遊戲項目——你話我猜升級版
奇舞週刊

相關文章
相關標籤/搜索