从技术角度谈游戏国际化的一些建议:版本管理和文本翻译
隨著國內(nèi)游戲行業(yè)的迅速發(fā)展以及競爭的加劇,越來越多的游戲產(chǎn)品開始沖出國門,走向世界。對于國內(nèi)已經(jīng)成功上線運(yùn)營的產(chǎn)品,一般來說發(fā)布海外產(chǎn)品不會(huì)遇到什么技術(shù)上的的瓶頸,常常出現(xiàn)的是發(fā)布遲緩、bug頻出、版本管理混亂等問題。
本文試圖總結(jié)游戲國際化的一些經(jīng)驗(yàn),主要關(guān)于版本管理和文本翻譯這兩個(gè)方面,不討論跨國運(yùn)營或部署,不討論針對不同文化和習(xí)慣的本地化等問題。
1、不要為每個(gè)語言版本建立單獨(dú)分支。
通常項(xiàng)目開始做國際化版本時(shí)已經(jīng)有了一個(gè)比較穩(wěn)定的中文版,開始做國際化版本時(shí)為了保證中文版的穩(wěn)定,常常會(huì)新建一個(gè)國際化版本分支交給專人去維護(hù),這樣一來就掉進(jìn)了一個(gè)大坑。
看起來分支和主干互不影響,能最靈活地應(yīng)對國際化的特殊需求。實(shí)際上主干上開發(fā)的新功能最后總是要發(fā)布到國際化版本上的,分支上做的修改越多做代碼合并的工作量就越大,往往到后來靠一個(gè)人就忙不過來了,干脆成立新的項(xiàng)目組獨(dú)立開發(fā)國際化版本——這樣無疑是人力資源的極大浪費(fèi)。
所以合理的做法是不建立分支,開發(fā)一個(gè)多語言版本的游戲,而不是多個(gè)獨(dú)立的游戲。
2、盡量不要針對不同地區(qū)寫特殊代碼。
不同語言版本都會(huì)有一些特殊的需求,再加上由于設(shè)計(jì)的問題可能產(chǎn)生某些語言版本上的特殊bug,在不開分支的情況下,開發(fā)人員很容易就掉進(jìn)了第二個(gè)坑:在代碼中編寫大量針對不同地區(qū)的特殊代碼。
很顯然大量的特殊處理代碼會(huì)削弱代碼的可維護(hù)性,特別是多加一個(gè)語言版本時(shí)需要到打大量補(bǔ)丁,進(jìn)一步使代碼變得混亂不堪。
所以不到萬不得已,盡量不要針對不同地區(qū)寫特殊代碼,而是使用統(tǒng)一的機(jī)制來解決不同版本的差異性。比如不同地區(qū)上線不同的運(yùn)營活動(dòng),選擇使用配置文件進(jìn)行控制就比在代碼中寫死更恰當(dāng);比如UI中的文本在某些語言版本中顯示不全,與其針對不同語言設(shè)置不同的文本框長度,不如統(tǒng)一將文本框拉至合理的長度,當(dāng)然做成動(dòng)態(tài)改變文本框長度就更好了。
3、源代碼中不能出現(xiàn)漢字或直接用于顯示的字符串。
把用于顯示的字符串放進(jìn)統(tǒng)一的字典文件不僅使游戲翻譯更簡單,也便于策劃進(jìn)行維護(hù),即使不考慮做國際化版本也是很有必要的。手機(jī)靚號(hào)轉(zhuǎn)讓平臺(tái)只是很多程序員的自控能力比較弱,或者說保持代碼可維護(hù)的意識(shí)比較弱,經(jīng)常為了一時(shí)的快就繞過這個(gè)約束,帶來不必要的麻煩。
4、服務(wù)器代碼或配置中不能出現(xiàn)漢字或直接用于顯示的字符串。
游戲中的一些文本其實(shí)是服務(wù)器生成發(fā)往客戶端的,例如系統(tǒng)郵件、系統(tǒng)公告等。最佳實(shí)踐是把服務(wù)器做成是語言無關(guān)的,服務(wù)器發(fā)給客戶端的是字典Key,客戶端根據(jù)自己的語言解析后拼裝好文本并顯示。
這樣一來就不需要針對不同的語言版本打不同的服務(wù)器版本了,還可以實(shí)現(xiàn)多個(gè)語言版本連接同一臺(tái)服務(wù)器。
舉例說明,現(xiàn)在我們需要系統(tǒng)公告恭喜玩家Alice晉升至等級(jí)排行榜第1名,中文客戶端有如下字典配置:NoticeRank -> 恭喜玩家#user晉升至#rankName第#rank名,LevelRank -> 等級(jí)排行榜,服務(wù)器發(fā)給客戶端的消息類似于{Message:"NoticeRank", user:"Alice", rankName:"#LevelRank", rank:"1"},客戶端從字典中取出當(dāng)前語言的文本,再把參數(shù)替換進(jìn)去生成最終顯示用的文字。
5、盡量不要使用帶文字的圖片。
有時(shí)候游戲中為了實(shí)現(xiàn)特殊的美術(shù)效果,常常把文字直接畫在圖片資源中,其實(shí)這種做法對國際化特別不友好,容易在翻譯時(shí)遺漏,而且重新制作各種語言的不同圖片也增加美術(shù)的工作量,還會(huì)給資源打包帶來一些麻煩,所以建議盡量避免。
如果不得不使用帶文字的圖片,有以下幾點(diǎn)建議供參考:
開發(fā)中使用文檔記錄所有圖片中的文字,并與字典文件一齊交給翻譯人員,避免遺漏。
注意保留圖片源文件,便于快速替換。
體驗(yàn)降級(jí),對品質(zhì)要求不高的版本可以考慮直接退化成使用系統(tǒng)文字,減少工作量。
一些常見的游戲術(shù)語可以退化成統(tǒng)一使用英文。比如表示暴擊的Critical,表示力量的Str.。
訂制資源打包腳本,針對不同的語言版本打包不同資源。
6、設(shè)計(jì)結(jié)構(gòu)化的字典配置,減少冗余。
結(jié)構(gòu)化的意思是不同的字典詞條有層次上的區(qū)別,不同的詞條是可以互相引用的。
例如上文提到的系統(tǒng)公告中,NoticeRank詞條就引用了LevelRank詞條。假如不支持詞條互相引用,這個(gè)功能就需要恭喜玩家#user晉升至等級(jí)排行榜第#rank名,恭喜玩家#user晉升至戰(zhàn)斗力排行榜第#rank名,恭喜玩家#user晉升至聲望排行榜第#rank名等等多條幾乎完全重復(fù)的詞條。
使用結(jié)構(gòu)化的字典配置至少有3點(diǎn)好處。
首先易于維護(hù)。考慮一下我們想把公告中的恭喜換成祝賀,非結(jié)構(gòu)化的工作量就大了幾倍。再考慮如果把字典拆分成幾份交給不同的翻譯人員同時(shí)翻譯,很容易同一術(shù)語出現(xiàn)幾種不同譯法。
其次是更不容易犯錯(cuò),以前有個(gè)項(xiàng)目中角色叫做“英雄”,而實(shí)際我們在討論功能時(shí)用的詞是“武將”,策劃在配置文本時(shí)很容易誤用,于是游戲中一會(huì)兒是“英雄”一會(huì)兒是“武將”,特別混亂。如果所有詞條都引用同一個(gè)Hero詞條就不存在這個(gè)問題了。
第三點(diǎn)就是省錢——通常翻譯都是按行或字?jǐn)?shù)收費(fèi)的。
7、不要使用%d、%s等標(biāo)識(shí)文本中的變量。
很多程序員想當(dāng)然地讓策劃使用%d、%s來標(biāo)記變量,生成文本時(shí)直接使用sprintf函數(shù)。這里有個(gè)很大的陷阱就是sprintf是依賴于參數(shù)的次序的。
比如文本玩家%s對玩家%s造成了%d點(diǎn)傷害,可能在其他語言中語序變成玩家%s被玩家%s造成了%d點(diǎn)傷害,按照原本的次序填入?yún)?shù)后意思完全反過來了。甚至語序可能變成玩家%s將%d點(diǎn)傷害施加于玩家%s,程序在運(yùn)行時(shí)試圖將數(shù)字填入%s,導(dǎo)致內(nèi)存訪問越界程序崩潰。
考慮到語序的問題,上面的字典應(yīng)該配置成玩家#1對玩家#2造成了#3點(diǎn)傷害。更好的做法是使用有意義的變量名:玩家#attacker對玩家#defender造成#damage點(diǎn)傷害。
8、注意多義詞。
曾經(jīng)玩過一個(gè)漢化版的小游戲,這個(gè)游戲第1關(guān)的標(biāo)題處顯示的是“1級(jí)”,顯然原因是Level在英語中同時(shí)有“關(guān)卡”和“等級(jí)”的意思,原版游戲中這兩處同時(shí)使用了Level這個(gè)詞條。
所以我們要留意中文里的多義詞,當(dāng)兩個(gè)詞條中的同一詞匯意義不同時(shí),不能引用同一詞條。比如“注冊登陸”中的“登陸”和“搶灘登陸”中的“登陸”就要分開。(好吧其實(shí)應(yīng)該是“注冊登錄”不過這不是重點(diǎn)……)
9、留意UI中文字的長度問題。
UI中文字長度是國際化中的常見問題了,上文也有提到,這里再提供幾個(gè)思路供參考:
涉及大段文字時(shí),UI上的設(shè)計(jì)不要依賴于當(dāng)前語言版本的文本長度,最好使用帶滾動(dòng)的文本區(qū)域。
UI的設(shè)計(jì)不要太緊湊,為國際化后文本的長度變化預(yù)留一定的空間。
使用文檔記錄UI對文本長度的限制,與字典一并提供給翻譯人員。如“雜貨店”正常應(yīng)譯為”grocery”,但若是限制在6字符內(nèi)翻譯為”store”也沒問題,若是只有4字符的空間還可以用”shop”。
體驗(yàn)降級(jí),使用簡單的統(tǒng)一機(jī)制解決文本顯示不全的問題,比如按鈕文字顯示不全時(shí)自動(dòng)循環(huán)橫向滾動(dòng)。
總結(jié)
總的來說,游戲國際化并沒有技術(shù)上的難點(diǎn),主要是考驗(yàn)團(tuán)隊(duì)的管理規(guī)劃和繞坑的能力,最重要的是預(yù)判可能遇到的問題,提前想好應(yīng)對措施并嚴(yán)格執(zhí)行。
總結(jié)
以上是生活随笔為你收集整理的从技术角度谈游戏国际化的一些建议:版本管理和文本翻译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用Unity和Cardboard做一
- 下一篇: 游戏动作师使用Unity3D遇到过的所有