背景:專案在開發過程中都完全使用的中文開發環境,在**、配表、ui裡面有非常多的地方都直接使用了中文字串。專案需要上海外,而且支援多個語言版本,切支援個語言版本之間切換,預計會上六七種語言的版本。
思路:使用指令碼提取所有含有中文的字串,根據字串內容生成唯一的id,然後生成乙份id和內容的對映表,將生成的對映表作為原始檔案去翻譯,格式如圖:
id中文
繁體英文
俄語阿拉伯語
土耳其語
中文生成的id
提取的中文
翻譯的繁體……
……然後使用生成的id替換掉**和配置表中的字串,在顯示時在根據id和語言環境去讀取對應的字串。
**中的不少用+號拼接的字串,如:"血量 " + 1000
,在中文中ui顯示為:
血量 1000但在其他語言的語序可能是不一樣的,需要顯示成:
1000 血量所以直接提取"血量"進行翻譯語序就不對了;需要處理成格式化字串的形式:
strutils.format("血量 %s", 1000)
,這樣給到翻譯,翻譯可以動態的調整引數的位置,保證語序的正確性。
然後使用 python 指令碼或其他工具,提取所有**檔案中的字串,即單引號和雙引號之間的內容,然後將有中文的部分儲存,去重,生成上述格式的翻譯檔案。
通過搜尋:+ ", + ', " + 和 』 + 以快速找出用+好拼接的字串
原始配置表不做處理,處理的是由配置表匯出到**中配置檔案,比如js或者lua等,這樣流程就跟**一樣,直接提取其中的帶有中文的字串即可。
配置表需要注意的是,盡量將配置表中重複的部分,通過引數傳入,這樣可以減少需要文字的數量,比如描述列:
編號描述
其他10010
lv10大寶劍,增加10點攻擊
…10020
lv20大寶劍,增加20點攻擊
…20010
lv10鎧甲,增加10點攻擊
…20020
lv20鎧甲,增加20點攻擊
…直接提取出來就會有4個字串以下4個字串需要翻譯:
可以抽離成兩列, 不同部分通過引數傳入:
編號描述
描述引數
其他10010
lv%s%s,增加%s點%s
10;10
…10020
lv%s%s,增加%s點%s
20;20
…20010
lv%s%s,增加%s點%s
10;10
…20020
lv%s%s,增加%s點%s
20;20
…這樣就只有乙個雖然配表裡面有四個字串 「lv%s%s,增加%s點%s」,匯出的時候可以將其定義為乙個變數,在其他匯出檔案後,就只有乙個字串了。
const s1 =
"lv%s%s,增加%s點%s"
;const a1 =[10
,10]const a2 =[20
,20]let config =
;
在其他這個檔案的字串時,就只會有乙個 「lv%s%s,增加%s點%s」, 去掉了很多重複的內容,可以直接減少翻譯量,同事語言包和配置表大小也能得到減少,從而包體大小和占用的記憶體大小。
在做ui時,介面中有很多的靜態文字,是寫在在介面上的,不能根據語言版本,動態切換;需要刪除ui中的靜態文字,在**中去設定,後續過重就跟**中的文字一樣處理就可以了。
有一點需要注意的是,介面中有可能有多個文字拼接的文字,如 「血量 100」,可能因為對齊方式,或者字型顏色不一樣,使用了兩個文字「血量」和「100」,為了保證語序和對齊方式的正確性,需要將兩個文字合併到乙個文字中,變成「血量 100」,如果需要不同顏色,可以使用富文字。
前後端互動的協議中有很多字串,需要處理掉。
上行的字串很少,基本上都是不需要翻譯的,如果有,建議前後端約定好乙個數字id,用於互動。
下行的字串應該是很多,這一部分需要後端出來:
客戶端在收到協議之後,針對需要處理的協議,在其響應函式中對引數分別進行處理。
提供多語言版本的解決方案
提供多語言版本的解決方案 為了滿足客戶及今後維護問題,提供一種可便與擴充的語言本地化問題,經過小組討論最後定於是通過資源檔案來展開,最終提供乙份 dll 二進位制檔案 給客戶。期間遇到了乙個十分棘手的問題 由於工程很大,把所有工程的資源檔案都摘取出來必定存在名字重複的可能行,為了避免名字重複保證資源...
特殊的多語言解決方案
一直以來多語言問題都是個讓人頭疼的問題,不是這個問題有多難,而是很繁瑣,而我們目前的這個專案有點特殊,我希望最大限度的化繁為簡,以下是我解決這個問題的方案。我們的專案有這樣兩個前提 1 要支援多語言但最多三種語言,一般情況下就兩種語言,所以並沒有隨時切換語言的要求。2 我們希望有一種可以初期不用管語...
Winfrom支援多語言解決方案!(總結)
一直做窗體應用程式,前段時間客戶提出,要求系統支援多語言切換功能的需求。具體需求 1 系統登入時記錄系統當前的語言狀態。2 系統在執行過程中可以隨時切換系統的語言。3 在中 英 韓三種語言進行切換。解決方案一 1 登入視窗與主系統分開。2 登入系統時選擇系統語言。3 根據所選擇的系統語言載入相應的系...