実績・トロフィーの翻訳と文字数制限 — ゲーム本体の外にあるテキスト
ローカライズの作業を一通り終えたとします。メニューも会話もストアページも訳し、別の人に頭から遊んでもらって問題も出ませんでした。ところが公開後、プレイヤーが実績解除のポップアップのスクリーンショットを投稿し、そこに映っている実績名だけが元の言語のままだった、ということが起こります。
ビルドが壊れているわけではありません。そのテキストは最初からビルドに入っていないからです。実績・トロフィーの名前と説明、リッチプレゼンス、DLCやバンドルの名称は、プラットフォームのパートナー向け管理画面にあります。何か月も前に入力フォームに打ち込み、以来そのサーバー上に置かれたままで、書き出しスクリプトにも、文字数の集計にも、翻訳者に渡したどのファイルにも一度も現れていません。
この記事では、そのテキストが実際どこにあるのか、なぜローカライズ作業で最も漏れやすいのか、翻訳したときに文字数制限がどう効いてくるのか、そしてゲーム本体と食い違わないように管理するにはどうするかを扱います。
プロジェクトの中に存在しないテキスト
最初にやることは、単に列挙することです。この一覧を紙に書いたことがないチームがほとんどで、だからこそ漏れます。細部はプラットフォームごとに違いますが、分類は共通です。自分の描画コードではなくプラットフォーム側が代わりに表示するテキストは、すべてファイルではなくフォームから登録したテキストです。
- 実績・トロフィーの表示名と説明文(非表示・隠し実績を含む)
- リッチプレゼンス — フレンドに見える「いま何をしているか」の一行。登録したトークンと、言語ごとにアップロードするローカライズ用ファイルから組み立てられるのが一般的です
- DLC・バンドル・パッケージ・エディションの名称。ストア、ライブラリ、そしてゲーム内の購入導線にも出てきます
- アプリ内課金アイテムの名称と説明(ある場合)
- リーダーボードや統計の表示名。自前UIではなくプラットフォームのUIで表示される場合
- ストアページの各項目:短い説明、詳細説明、機能一覧、動作環境の注記、スクリーンショットのキャプション
- アプリケーション名そのものと、プラットフォーム側の一覧に出る副題
なぜ毎回漏れるのか
このテキストは、漏れるための条件をすべて満たしています。作られた時期が違い、作った人が違い、置かれているツールが違います。実績はたいてい実績APIを実装した担当者が、元の言語のまま、二言語目のことを誰も考えていない時期に登録します。ローカライズの工程が始まるころにはその作業は終わっており、管理画面を開き直す人はいません。
工程の構造からも見えません。「文字列ファイルを書き出す → 文字数を数える → 外に出す → 戻ってきたものを取り込む → 差分を確認する」という、それ自体は正しい流れを組んでいても、そもそも文字列ファイルに入ったことのないテキストは、書き出しにも、集計にも、見積もりにも、翻訳者が開くファイルにも現れません。未翻訳として検出もされません。対応するキーが存在しない以上、「欠けている」と判定しようがないからです。
そして通常のテストでも見つかりません。ゲームは正常に動きます。実績のポップアップは解除の瞬間にしか出ず、それはプレイ開始から何時間も先かもしれません。テストはたいていビルドに対して行い、対象言語に切り替えた実アカウントで行うわけではありません。日本語で全編を通しでテストしても、実績通知を一度も見ないまま終わることは十分あり得ますし、実績一覧はクライアント側のさらに一画面奥にあって、テスト項目に書かれていないのが普通です。
こちらでは動かせない文字数制限
これらの項目にはそれぞれ上限文字数があり、自分で描いたテキストボックスと違って広げることができません。制限は入力の時点で効くのが普通で、フォームがそれ以上の入力を受け付けないか、保存時に切り詰められます。つまり問題が表面化するのは入稿の瞬間で、そのころには翻訳者はもう別件に移っており、エンジニアがその場で短い言い回しを考えることになります。
制限は文字数で数えられ、これが翻訳と正反対の二方向でぶつかります。ドイツ語・ロシア語・フィンランド語などに訳すと文字列は元より目に見えて長くなるので、ある言語では余裕で収まった名前が別の言語では弾かれます。日本語や中国語に訳すと文字数自体はたいてい短くなりますが、一文字あたりの表示幅がおよそ倍あるため、文字数の検査は通ったのに通知トーストや幅の狭い一覧では見た目が途切れる、ということが起こります。
厄介なのは後者です。何も弾かれないからです。管理画面は値を受け付け、検証も通り、プレイヤーが実際に読むまさにその場所で、静かに三点リーダーで切られます。気づく方法は、フォームではなく表示結果を見ることだけです。
実務的な結論は、上限文字数を翻訳者に渡すファイルの中に、各行に紐づくデータとして入れておくことです。送付メールの文面に書くのでも、あとで発覚するのでもなく、データとして渡します。上限があると分かっていれば翻訳者はその範囲で書きます。これはこの仕事では当たり前の制約です。伝えなければ、翻訳者は最良の訳を書き、こちらがそれを後から切り刻むことになります。
実績名はゲーム内で最も難しい短文
実績名は短いですが、単純ではありません。ダジャレ、慣用句、曲名、作中のセリフのもじりであることが多く、書き手が数語で遊べる数少ない場所です。文脈なしで訳せば、言葉遊びはただの説明的な語句になり、その下の説明文はもう何も説明していません。
名前と説明は一対であり、対で訳す必要があります。説明文が解除条件(「ノーダメージでボスを倒す」)を担い、名前が笑いを担っているのが典型です。スプレッドシート上で離れた行に置いたり、別々の翻訳者に割り振ったりすると、この関係は確実に壊れます。
翻訳者には「プレイヤーが何をして解除したのか」も必要です。ACH_BOSS_02_NODMG のような内部IDからは、どのボスなのか、物語のどのあたりなのか、名前が誰のセリフを踏まえているのかは何も分かりません。短い文字列の文脈問題そのものですが、実績テキストは周囲の情報が最も少なく、言葉遊びの密度がプロジェクト中で最も高いという点で、問題が凝縮されています。
ネタバレも独立した論点です。多くのプラットフォームでは、誰も解除していない段階から実績一覧が公開されており、ストアページやコミュニティから見えます。隠し実績の仕組みはありますが、何がどこまで隠れ、いつ表示されるかはプラットフォームやクライアントによって差があります。終盤の展開を隠す役目をプラットフォームに任せないでください。名前がネタバレになるなら、どの言語でもネタバレにならない書き方にします。
最後の落とし穴が用語のずれです。ゲーム本文では一つの訳語を当てているアイテムを、それを指す実績では別の言い方にしていると、プレイヤーはすぐ気づき、雑な仕事に見えます。実績テキストは別ファイル・別日・時には別の人という形で本文と切り離して訳されがちで、用語集が無視される場所としてプロジェクト中で最も多い箇所です。
正本は一か所に置き、管理画面は出力先として扱う
解決策は構造を変えることです。プラットフォームの管理画面を「このテキストが住んでいる場所」として扱うのをやめ、「publish する先」として扱います。テキストは他の文字列と一緒に — ローカライズ用ファイル、少なくとも翻訳者がすでに作業しているスプレッドシート — に置き、そこから管理画面に反映します。
そのために、通常の文字列にはない列をいくつか足します。どのプラットフォームのどの項目か、管理画面側での識別子、上限文字数、そしてプレイヤーが実際に何をしたのかを説明する文脈メモです。
platform,field,api_name,max_chars,context,ja,en steam,achievement.name,ACH_BOSS_02_NODMG,<管理画面の値>,"3章ボスの口癖をもじった名前",...,... steam,achievement.desc,ACH_BOSS_02_NODMG,<管理画面の値>,"解除条件: 3章ボスをノーダメージで撃破",...,... steam,dlc.name,DLC_SOUNDTRACK,<管理画面の値>,"ストアとライブラリに表示",...,... steam,richpresence,#Status_InDungeon,<管理画面の値>,"ダンジョン内でフレンドに表示。%area% が置換される",...,...
入稿・確認と、あとから変えられるもの
max_chars の列は推測ではなく、管理画面の入力欄で実際に確認した値を書き、ときどき見直してください。プラットフォーム側で変わることがあります。実績メタデータの一括アップロードやAPIが用意されているなら使ってください。何十本もの訳文をフォームに手で打ち込む作業は、言語違いの行が一つ紛れ込んでも誰も気づかない類の作業です。一括手段がない場合は、シートの行を上から順に消し込みます。実績単位ではなく言語単位で進めると、いま貼り付けている言語が常に同じになり、取り違えが減ります。
確認はビルドの外で行います。プラットフォームのクライアント、そしてそれとは別項目であることが多いアカウント側の言語設定を対象言語に切り替え、プレイヤーが見るとおりの実績一覧を開きます。一つ解除してポップアップも見てください。ポップアップは一覧より幅が狭く、切れるとしたらここが最初です。その言語で自分のストアページを開き、実績欄も読みます。モバイルなら実機でストアの掲載情報を確認します。スマートフォンの一覧行の幅は、ブラウザで見るどの表示よりはるかに狭いためです。
最後に、あとから変更できるものを把握しておきます。表示テキスト(名前と説明)は基本的にいつでも編集できるので、訳の修正は大事にはならず、実績名の出来だけでリリースを止める必要はありません。識別子と解除条件は話が別です。すでに解除したプレイヤーの実績はそのまま残るため、既存の実績の意味を定義し直すと、そのプレイヤーの履歴を黙って書き換えることになります。その場合は新しい実績を追加します。またコンソールでは、入稿済みメタデータの変更に審査を伴う提出手続きが必要になることがあります。展開するなら、実績の訳文は「発売後の掃除」ではなくビルドと同じスケジュールに載せてください。