ゲームが1週間で14の言語を覚えた話 🌍
2026年8月10日
はじめのころ、Blocks Beyond the Starsが話せる言語は2つだけでした。私たちが住んでいるのでドイツ語、そしてインターネットは英語を話すので英語です。今では14の言語を話します。ここでは、その道のりと、途中で壊れたあれこれをお話しします。🌍
はじまりはFrancescoでした。 数週間前、イタリアからプルリクエストが届きました。Francesco Quirinoが、ゲームをイタリア語に訳しはじめてくれたんです。しかも手作業で。290個すべてのブロック名と説明から、グループごとに少しずつ。そこで私たちは、言語に本気で向き合わなければと気づきました。それまでは、ゲームのテキストの半分が、そもそも翻訳できる形になっていなかったからです。300個を超えるサーバーメッセージが英語に固定されていました。そこでまず、Francescoの仕事の受け皿になるように、大掃除をしました。
つぎに来たのは、やっかいな問いでした。 言語を手作業で訳すには、何週間もかかります。私たちは家族であって、ローカライズ専門のスタジオではありません。そこで機械の出番ですが、ちゃんとした形で使います。言語ファイルをかたまりに分けて、言語モデルに訳してもらい、そのあとでチェックする小さなツールを作りました。文字列が抜けていないか? {0}のようなプレースホルダーが消えていないか? 存在しないキーを作り出していないか? もしそうなら、その結果は捨てます。ツールが安定して動くようになってはじめて、言語を足しはじめました。オランダ語、ブラジルポルトガル語、ポーランド語、トルコ語、そしてロシア語、ウクライナ語、中国語、日本語、韓国語です。
言葉より、トーンのほうが大変でした。 言語モデルは、放っておくと丁寧でかたい言い方で訳します。でも、子ども向けのゲームが銀行の手紙みたいに話しかけてきたら、ちょっと不気味ですよね。だから言語ごとにルールを決めました。オランダ語は「je/jij」、ポーランド語は「ty」、トルコ語は「sen」、ブラジルポルトガル語は「você」、ロシア語は「ты」、日本語はです/ます、韓国語は해요체です。オランダ語は、さらにもう1周必要でした。語頭のIJは両方の文字を大文字にするので、「Ijzererts」ではなく「IJzererts」なんです。これは機械には見つけられません。結果を読んで、はじめて気づけることです。
そして、空っぽの四角が現れました。 ロシア語の翻訳が完成してゲームを起動したら、メニューには四角形しか出ませんでした。私たちの書体Rajdhaniには、キリル文字がなかったんです。中国語、日本語、韓国語になるともっと厄介で、完全なCJKフォントは約16メガバイトもあります。3つ分で、50MBに近くなります。ブラウザでも動かしたいゲームには、とても無理な大きさです。そこで解決策として、私たちのテキストに出てくる文字だけを入れた、言語ごとの専用サブセットフォントを作りました。16MBが800KBになります。50MBではなく、2MBの増加で済みます。🔤
そこで学んだこと。 翻訳は、翻訳が2割で、残りの8割はそれ以外です。そもそも文字列をコードの外に出すこと、フォントを探すこと、文がボタンに収まるかを確かめること(ドイツ語は長いですが、ロシア語はもっと長いです)、そして、言語ファイルが読み込まれる前に出るエラーダイアログまで、きちんと訳すこと。この最後のメッセージは、14回ぶん直接コードに書き込まなければなりませんでした。気持ちとしてはモヤモヤしますが、これだけは絶対に読めなければいけないメッセージなんです。
正直にお伝えします。最初の訳は機械翻訳です。 品質は良く、抜けもなく、検証もしていますが、ネイティブスピーカーに読んでもらったわけではありません。14人の翻訳者がいるようなふりをせず、あえてそう言っています。だからこそ、Francescoのイタリア語は1文字も変えずに残してあります。私たちのツールはすき間を埋めるだけで、人間の翻訳を上書きすることは決してありません。人の手が入った場所では、人が優先されます。
これらの言語が話せる人は、1つだけでもいいので、ぜひ修正を教えてください。リポジトリには、貢献のしかたを1歩ずつ案内する翻訳ガイドがあります。GitHubが苦手でも、変に聞こえる文を教えてもらうだけで大丈夫です。ネイティブスピーカーなら、5分で、私たちが5時間かけても見つけられないことに気づけます。🌍✨
コメント