前言
也可以關(guān)注我的個(gè)人博客
??最近看了一下關(guān)于app本地化的一些嘗試,這里做了一些最基礎(chǔ)的總結(jié)。
??大致分三點(diǎn)來介紹:
- Bundle display name的本地化
- StoryBoard的本地化
- app內(nèi)字符串的本地化
Bundle display name的本地化
首先需要倒入需要的語言包,如下圖所示:

其次新建一個(gè)名為InfoPlist.strings的文件,注意大小寫:

點(diǎn)擊這個(gè)文件右側(cè)展開,點(diǎn)擊localize…,把剛才添加的語言設(shè)置按需選擇:

選擇

在相應(yīng)的strings文件里填寫app不同語言的名稱,分號千萬不能漏掉,否則編譯不通過。如果不知道字段的可以看下圖:

英語語言下:
"CFBundleDisplayName" = "Tea tree mushroom";

簡體中文語言下:
"CFBundleDisplayName" = "茶樹菇";

日語語言下:
"CFBundleDisplayName" = "茶の木キノコ";

韓語語言下:
"CFBundleDisplayName" = "? ?? 菇";

StoryBoard的本地化
這個(gè)設(shè)置跟上面差不多,同樣點(diǎn)擊需要本地化的sb文件,點(diǎn)擊localize…,選擇好之后會出現(xiàn)相應(yīng)的strings文件:

如果sb文件之前是有編輯過的,就是上面已經(jīng)有顯示控件的,生成string文件的時(shí)候會自動有 key-value的值,如下圖:

如果在以后添加了新的控件,沒有自動生成怎么辦?別著急。咱們仔細(xì)看一下這個(gè)規(guī)則就知道了。首先打開sb文件顯示xml代碼:

這里搜到這個(gè)id對應(yīng)的button,JNm-54-QzN.normalTitle拿到文字進(jìn)行修改即可,下次新其他控件按照這個(gè)規(guī)則直接可以改,這里normalTitle等屬性可以自行網(wǎng)上查到。
這里需要注意一點(diǎn),如果是sb的約束可能需要注意不同語言文字的長度問題。
app內(nèi)字符串的本地化
本地化的文件需要建一個(gè)名為Localizable.strings,注意大小寫。同理需要選擇右側(cè)localize…,這里就不再啰嗦了。然后就可以用key-value的形式定義不同語言下的字符串,在需要使用的文件中利用:
public func NSLocalizedString(_ key: String, tableName: String? = default, bundle: Bundle = default, value: String = default, comment: String) -> String
讀取字符串顯示在相應(yīng)的控件上。
這里總結(jié)了最基礎(chǔ)的本地化需要的操作,如果有更高級的用法,歡迎大家一起分享。