iOS多語言本地化流程的優化方案

2022-09-21 22:51:12 字數 2796 閱讀 4742

前言

多語言本地化,是我們在做ios專案的時候經常用的,下面根據自己的經驗和使用場景,來全面的說說多語言本地化的解決方案。本文從提公升效率和減少錯誤兩方面對傳統的多語言本地化方式進行了優化,雖然標題是ios,但其實macos也通用。下面話不多說了,來一起看看詳細的介紹吧。

在 localizable.strings 中寫入多種語言的版本,然後使用 nslocalizedstring 進行本地化:

# en.lproj/localizable.strings

"login程式設計客棧" = "login";

"logout" = "logout";

# zh-hans.lproj/localizable.strings

"login" = "登入";

"logout" = "退出";

# usage

loginbutton.title = nslocalizedstring("login", comment: "login")

logoutbutton.title = nslocalizedstring("logout", comment: "logout")

這有什麼問題呢?

繁瑣!每次都要寫nslocalizedstring(「***」, comment: 「***」),雖然有**補全,但依然很費時。

直接上**:

extension string

}於是現在的使用方式就變成了:

loginbutton.title = "login".localized

logoutbutton.title = "logout".localized

這樣**簡潔多了,也保留了**的自解釋。

但,依然還有問題,如果我不小心寫成了:

loginbuttonoistoubo.title = "login".localized

logoutbutton.title = "loguot".localized

編譯不會報錯,但logoutbutton的title卻出不來(注意「loguot」.localized),寫錯乙個字母,抓bug抓好長時間的經歷相信很多人都遇到過吧。

這裡涉及到編碼中的乙個小技巧:不要徒手寫同乙個需要多次使用的字串,盡量定義成常量進行呼叫。

還是直接上**:

extension string

static var localized_logout: string

}現在用起來就更爽了:

loginbutton.title = .localized_login

logoutbutton.title = .localized_logout

得益於xcode**提示補全的功能,我只需輸入」.」 「login」 回車,基本就就可以完成輸入: localized_login.png

乍一看,已經將寫字串時出錯的概率降到最低了,但這樣又要多寫一堆**,豈不是把之前好不容易提公升起來的效率又降低了,再加上萬一,我們在寫 localized_logout 時還是寫成了「loguot」.localized,這不是」辛辛苦苦大半年,一朝回到解放前」的節奏?

思路:使用指令碼讀取localizable.strings,然後輸出成我們需要的常量格式。

build phases中新建乙個 run script,填入以下指令碼:

# localizable.strings檔案路徑

localizablefile="$/$/support/en.lproj/localizable.strings"

# 生成的swift檔案路徑(根據個人習慣修改)

locoistouboalizedfile="$/$/source/utils/localizedutils.swift"

touch $localizedfile

# 將localizable.strings中的文字轉為swift格式的常量,存入乙個臨時檔案

sed "s/\" = \".*$/;/g" $ | sed "s/.*/& &/" | sed "s/^\"/ static var localized_/g" | sed "s/; \"/: string /g" > "$.tmp"

# 先將localized作為計算屬性輸出到目標檔案

echo -e "import foundation\n\nextension string " > "$"

# 再將臨時檔案中的常量增量輸出到目標檔案

cat "$.tmp" >> "$"

# 最後增量輸出乙個"}"到目標檔案,完成輸出

echo -e "\n}" >> "$"

# 刪除臨時檔案

rm "$.tmp"

以上指令碼的作用就是將localizable.strings中的內容轉換成swift的常量形式,並作為string的extension儲存起來,具體步驟看注釋。

其中有幾點需要注意:

指令碼效果:

本地化檔案:

# en.lproj/localizable.oistoubostrings

"login" = "login";

"logout" = "logout";

輸出檔案:

# localizedutils.swift

import foundation

extension string

static var localized_login: string

static var localized_logout: string

}至此,我們只要在寫好localizable.strings或有修改時 ⌘+b build一下,就能愉快的使用了。

總結本文標題: ios多語言本地化流程的優化方案

本文位址:

iOS的多語言本地化適配

nsarray languages nslocale preferredlanguages nsstring language languages objectatindex 0 系統預設語言 規則 未設定語言,則跟隨系統預設語言 設定乙個 klanguagekey 用於記錄語言型別 static ...

C 本地化實現多語言

visual studio 對於.net 程式的本地化提供了完整的支援,這裡僅介紹實現多語言版本本地化程式的簡單步驟.注意黑體處為關鍵點.一.窗體本地化 對於windows 窗體,你需要做的第一步是確定你的預設介面語言,預設語言是指當執行程式無法找到已定義的本地化資源時,預設使用的語言,由於.net...

uwp 多語言和本地化

1.在專案根目錄建立strings資料夾,再strings資料夾建立需要的語言名子目錄,再新增資源檔案resources.resw,目錄構如 strings en us resources.resw strings zh cn resources.resw 2.在各語言的resources.resw...