攻略 / 幕後花絮

我們如何把手機遊戲翻譯成 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 個商店資訊頁面,每一頁都有自己的標題、簡短說明、完整說明和螢幕截圖。我們的網站也採用相同的做法,至於怎麼打造,請看另一篇文章。

下次還會再做的事

  1. 為每一條文字寫上下文註解。
  2. 在建置中鎖定專有名詞,而不是交給譯者記住。
  3. 在第一份譯稿送達前實作複數規則。
  4. 確認你的字型包含表格用到的每一個字。
  5. 維護一份已知問題文字清單,並事先交出去。
  6. 用其他語言逐一檢查畫面,找出遺留的英文。
  7. 用不變文化寫入存檔資料。
  8. 規劃 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)。

更多攻略

所有攻略
我們為什麼拿掉 BOSS 戰後的強制廣告

幕後花絮

我們為什麼拿掉 BOSS 戰後的強制廣告

廣告出現在哪裡,比數量多少更重要。這是《Idle Ronin》BOSS 戰全螢幕廣告的故事:它換過兩次位置,最後被我們關閉;另外也介紹我們現在所有遊戲都遵守的廣告規則,以及背後的程式碼。

閱讀攻略 →

◆ 更多 ONI Games 作品

更多遊戲

滑動查看更多

ONI Snakes: Armored Arena
現已推出 · Google Play

ONI Snakes: Armored Arena

擊落對手的裝甲、長成巨蛇,在11種玩法中稱霸霓虹競技場,還能線上對戰、和好友一起玩。

探索遊戲 →
Idle Ronin: Cyber RPG
現已推出 · Google Play

Idle Ronin: Cyber RPG

化身最後一位電子浪人,踏入霓虹閃爍的未來。斬殺一波波機甲,組建改造人小隊,攀登霓虹之塔。就算你離線,你的刀刃也不會停歇。

探索遊戲 →
Idle Summoner: Pixel RPG
現已推出 · Google Play

Idle Summoner: Pixel RPG

召喚一支野獸軍團,攻陷冥界的城堡,每當進度放緩就轉生,變得更強。

探索遊戲 →
Block Brain: Block Puzzle Game
現已推出 · Google Play

Block Brain: Block Puzzle Game

擺放繽紛方塊、消除整排、串起連擊,看著你的腦腦夥伴從小小的萌芽,長成頭戴皇冠的天才。

探索遊戲 →
Idle AI Factory: Robot Tycoon
現已推出 · Google Play

Idle AI Factory: Robot Tycoon

經營一座充滿開朗機器人的工廠,讓每條生產線自動化,從小小的 AI 實驗室一路發展到月球基地。

探索遊戲 →
Idle Restaurant: Miami
現已推出 · Google Play

Idle Restaurant: Miami

把海灘上的一間小披薩店,打造成邁阿密閃耀霓虹的餐廳帝國:聘請經理、收集20道真實食譜,離線也能持續賺錢。

探索遊戲 →