【Unity】關(guān)于編輯器本地化的一些學(xué)習(xí)記錄
前言
????本地化(Localization)就是把源語(yǔ)言翻譯成用戶語(yǔ)言,Unity已經(jīng)做了編輯器的本地化方案。只考慮在國(guó)內(nèi)范圍的話,也就是常說(shuō)漢化。雖說(shuō)已經(jīng)過(guò)了新手村,但是看到Timeline已經(jīng)有日語(yǔ)的本地化,還是覺(jué)得挺有意思。如果你考慮做Unity插件,做個(gè)本地化還是有必要的。

相關(guān)API




學(xué)習(xí)記錄
????其實(shí)除了需要最新版本外,我覺(jué)得麻煩的是還不夠簡(jiǎn)單粗暴,和只能在編輯器里面使用。所以我基于這套方案思路,簡(jiǎn)單做了一個(gè)嘗試。
PortableObject
????作為本地化的翻譯文件,具體格式說(shuō)明請(qǐng)自行網(wǎng)絡(luò)搜索,這類(lèi)文件應(yīng)該有工具自動(dòng)生成和編輯器翻譯。由于Unity已經(jīng)把*.po當(dāng)成編輯器資源,所以沒(méi)法重寫(xiě)*.po的Importer。這邊我用*.upo代替,文件格式都是一樣的。


????這樣一來(lái),Unity運(yùn)行時(shí)想用*.po文件的話,可以使用Importer自動(dòng)生成的TextAsset,用Newtonsoft.Json反序列化成Dictionary<string,string>就行?;蛘呤褂梦曳庋b的PortableObject類(lèi),先Open(string path),然后再CopyTo(Dictionary<string,string> other)。
切換本地化
????由于只是試驗(yàn)性質(zhì),我這邊魔改了一下Timeline包,拋棄原本Unity本地化,轉(zhuǎn)而切入我自己改的本地化方案。反正使用的po文件都一樣,翻譯效果也一樣。

自己來(lái)本地化

????如果你想做本地化,采用逐句翻譯的話,你可以文本方式打開(kāi)編輯,或者用專業(yè)的po編輯軟件,或者用我這邊做的簡(jiǎn)易編輯器。我這邊由于個(gè)人習(xí)慣,編輯完詞條后不會(huì)自動(dòng)保存,需要手動(dòng)按下Save按鈕。
????想批量機(jī)翻的話,你可以使用Save Id或Save Str導(dǎo)出json,用谷歌翻譯等的API翻譯完后,再用Load Str導(dǎo)入。(注:原本想是整合Google翻譯的功能,不過(guò)由于一些技術(shù)原因,常翻譯不成功,所以閹割掉了)
本地化對(duì)比




后記
????其實(shí)Unity編輯器本地化到現(xiàn)在,也沒(méi)有什么技術(shù)難點(diǎn)。官方已經(jīng)有一個(gè)簡(jiǎn)單可用的雛形了,最重要的是翻譯質(zhì)量。當(dāng)然個(gè)人沒(méi)什么號(hào)召力,不可能成立漢化組,去漢化各種官方還沒(méi)漢化的Package。寫(xiě)這篇文章的目的,只是給那些做開(kāi)源庫(kù)或AssetStore插件的作者,一個(gè)簡(jiǎn)單本地化的參考,多用L10n.Tr()即可,本地化靠第三方提供po文件就完事了。