
攻略 / 幕後花絮
我們如何把手機遊戲翻譯成 14 種語言
讓我們的 Android 遊戲支援 14 種語言需要哪些功夫:我們如何安排文字檔、為什麼複數規則和字型很重要、一再出現的翻譯錯誤、只會影響歐洲手機的 bug,以及為什麼 14 種語言等於 16 個商店資訊頁面。
我們的六款遊戲都已完整翻譯成 14 種語言:英文、德文、西班牙文、法文、克羅埃西亞文、印尼文、義大利文、日文、韓文、葡萄牙文、俄文、斯洛維尼亞文、土耳其文和繁體中文。前四款《Idle Ronin》、《Idle Summoner》、《Idle AI Factory》和《Block Brain》合計約有 2,100 條英文文字,從《Block Brain》的 254 條到《Idle Ronin》的 1,253 條,每一條都翻譯了 13 次。《Idle Restaurant: Miami》和《ONI Snakes》也以同樣的 14 種語言推出。以下是這件事需要的功夫,以及我們下次還會再做的事。
每種語言一個文字檔,附上下文
每款遊戲的每種語言各有一個純文字檔。一個條目由標記 @ 的英文原文行,以及接在後面、標記 = 的譯文組成,大多數條目還附有寫給譯者的註解。這是《Idle Summoner》英文檔中的第一隻怪物:
# monster name with its number in the summon chain (1-55); names appear on small labels
@ {0}. Slime
這些註解是我們加過最有用的東西。《Idle Summoner》的英文檔中,258 條文字有 156 條附註解。知道某段文字會出現在小小的標籤上,或知道 {0} 是數字的譯者,犯的錯會比只能從字面猜測的譯者少得多。
直接用英文文字當鍵值,能讓檔案容易閱讀,但也有陷阱。兩欄相同的文字,不一定就是必須保留英文的名稱:在《Idle Ronin》中,前 1,185 個條目裡約有 680 個和英文完全相同。只有真正的專有名詞會保留英文,也就是 19 位守護者的名字、機體名稱和 12 套服裝,而我們的建置腳本會鎖定的正是這些。
複數規則不是可有可無
英文有兩種形式:1 unit、2 units。許多語言有更多形式,規則也各不相同。我們的 Loc 程式碼遵循 Unicode CLDR 表格中的整數複數規則:
| 語言 | 我們程式碼使用的形式 |
|---|---|
| 英文、德文、西班牙文、義大利文 | one、other |
| 法文、葡萄牙文 | one(0 和 1)、other |
| 克羅埃西亞文 | one、few、other |
| 俄文 | one、few、many |
| 斯洛維尼亞文 | one、two、few、other |
| 土耳其文、印尼文、日文、韓文、中文 | 只有一種形式 |
最讓人意外的是斯洛維尼亞文:它有專門給「二」用的形式,所以「2 enoti」和「5 enot」的詞形不同。如果你的程式碼只認得單數和複數,這些語言都會在某個地方顯示錯誤的文法。
字型:你沒發現缺少的字
《Idle Summoner》的內文字型是 Noto Sans KR Black 的精簡版,缺少 č、š、ž、ć、西歐語言的重音符號、土耳其文字母和繁體中文。缺少的字不是改用手機的字型顯示,就是根本顯示不出來。我們用表格中用到的每一個字重建了字型,並加入日文用的 Noto Sans JP 和繁體中文用的 Noto Sans TC。遊戲像素字型的標籤,只有在文字能用該字型內的字寫出來時,才會繼續使用那個字型。
字型也可能造成誤會。在《Idle Ronin》的韓文字型裡,大寫 N 的畫法讓 ON 和 OFF 看起來像「OΠ」。我們把這些開關改成韓文的 켜기 和 끄기,這樣本來就更好讀。
每種語言都一再出現的錯誤
不管用什麼方式翻譯遊戲,第一版譯稿很少能直接使用。我們的譯稿幾乎在每種語言都重複同樣幾個錯誤,而最早抓到這些錯誤的,是我們自己的斯洛維尼亞文審稿:
- 畫面設定「Particle」被譯成物理學用語,而不是「特效」。
- 指機體額外複本的「Stack」被保留英文,或譯成「一堆」而不是「複本」。
- 擊敗名為 Treasure Chest 的怪物的任務,被譯成打破寶箱。
- 只放得下一兩個字的列和徽章,放進了完整長度的譯文。
- 「FIGHT FLOOR {0}」多了一個多餘的動詞,讓按鈕太長。
所以我們寫了一個檢查工具,能為任何語言列出這些文字,並在翻譯開始前就把清單交出去。拿著清單翻譯的兩種語言完全不需要修正,沒有清單的語言則各需要大約 6 處修正。
檢查畫面,而不只是檔案
檔案可能已經完整,畫面上卻仍然顯示英文。我們的測試方法是:把遊戲切換成另一種語言,收集畫面上所有看得到的文字,再和英文檔比對。仍然是英文的,就是程式碼從來沒有翻譯的標籤。在《Idle Ronin》中,這樣的檢查找到了一個永遠顯示的 OPEN 按鈕,以及卡在第一次開啟選單時所用語言的設定按鈕。
接著在真實的手機解析度下檢查是否放得下。我們會用最長的幾種語言,以及日文、韓文、中文和俄文,在 1080 x 2400 下查看每一個畫面;我們寧可縮短文字,也不要把字縮到沒人看得清楚。
在歐洲弄壞存檔的逗號
有一個 bug 和文字完全無關。在我們正在開發的一款遊戲裡,存檔用逗號把數字串起來。在語言以逗號表示小數的手機上,例如歐洲大部分地區,7392.58 會變成 7392,58,多出來的逗號把數字切成兩半,後面的每個數值都往後錯開一格。用英文測試的開發者永遠不會看到這個問題。解決方法是在啟動時用一行程式碼把數字格式固定為不變文化,再加上一道保護,讓已經壞掉的存檔也能載入。
14 種語言,16 個商店資訊頁面
Google Play 的西班牙文分成西班牙和拉丁美洲,葡萄牙文分成葡萄牙和巴西,各有獨立的商店資訊頁面。我們在遊戲中每種語言只保留一份翻譯,但商店文字會依市場分別撰寫,使用各自的搜尋字詞。因此每款遊戲有 16 個商店資訊頁面,每一頁都有自己的標題、簡短說明、完整說明和螢幕截圖。我們的網站也採用相同的做法,至於怎麼打造,請看另一篇文章。
下次還會再做的事
- 為每一條文字寫上下文註解。
- 在建置中鎖定專有名詞,而不是交給譯者記住。
- 在第一份譯稿送達前實作複數規則。
- 確認你的字型包含表格用到的每一個字。
- 維護一份已知問題文字清單,並事先交出去。
- 用其他語言逐一檢查畫面,找出遺留的英文。
- 用不變文化寫入存檔資料。
- 規劃 16 個商店資訊頁面,而不是 14 個。
想看看成果嗎?在《Idle Ronin》、《Idle Summoner》、《Idle AI Factory》、《Block Brain》、《Idle Restaurant: Miami》或《ONI Snakes》中切換語言:每一款都支援全部 14 種語言。
資料來源
- Unicode CLDR,Language Plural Rules。
- ONI Games 遊戲程式碼,2026 年 9 月:Idle Summoner(Loc.cs、LocFonts.cs、Localization/Summoner/en.txt)、Idle Ronin(Localization/Ronin)、Idle AI Factory(Localization/AIFactory)、Block Brain(Localization/Brain)。








