リリース前に毎回走らせるローカライズのスモークテスト
全言語ですべての画面を読み込む本格的なローカライズチェックは、たいていのリリース前には収まりません。スモークテストなら収まります。各言語につき一度だけ走らせる、短く固定された手順で、頻度が高くかつ深刻な不具合を洗い出すことに絞ったものです。これは深いレビューの代わりではなく、深いレビューでも結局見つかっていたはずの不具合を、より速く、リリース直前に近いタイミングで拾うための網です。
スモークテストの価値は深さではなく再現性から来ます。同じ手順を、同じやり方で、毎回走らせることで、リグレッションはプレイヤーに発見される前に、最初に発生した時点で捕まえられます。以下は、テスターが実際に一つずつ言語ごとに追える手順として書いたスクリプトです。
各言語で起動する
対象言語を選んだ状態(システム言語設定経由、またはゲーム内切り替え経由)でクリーンな状態から開始し、実際にその言語で起動しているか、デフォルト言語にフォールバックしていないかを確認します。ビルド設定のどこかでロケールコードが欠けていたりスペルミスがあったりして静かにフォールバックしてしまう言語は、テスターがフォールバックの発生に気づかない限り、本格的なプレイテストでも完全に見逃されうる不具合です。
初回起動と最初の1時間の画面
ここはゲーム全体で最もアクセス数の多い画面群であり、新規プレイヤーの第一印象を決める部分です。タイトル画面、同意画面やアカウント作成フロー、チュートリアル、実際のゲームプレイの最初の数分を確認します。特に見るべきは、ボタンの文字切れ、テキストの重なり、長くなった翻訳がUI要素を本来の位置からずらしてしまっている箇所です。多くの言語はラテン文字の原文に比べて文字数が膨らむ傾向があり、初回起動フローはゲームプレイ画面ほど頻繁に更新されないぶん、実は最もテストされていないUI部分であることが多いです。
動的な値が入る画面
実行時の値を文字列に埋め込む画面(ダメージ数値、プレイヤー名、通貨額、アイテム個数など)を見つけ、その値が実際に表示されているか、位置は正しいか、その値の種類に合った書式になっているかを確認します。
// ファイルではなく画面上で見るべきもの
"You dealt {damage} damage!" → "You dealt 240 damage!"
// NG例1: "You dealt {damage} damage!"(プレースホルダーが置換されていない)
// NG例2: "You dealt undefined damage!"(変数の紐付けが誤っている)長い文字列が出る画面
最も長い文字列が入りそうな画面(アイテム説明、クエストログ、設定項目の説明文など)を選び、文字切れが起きていないか、テキストがコンテナからはみ出していないか、隣接する要素と重なっていないかを確認します。これは意図的な負荷テストで、ほとんどの画面はどの言語でも問題なく見えます。確認する価値があるのは、その中で問題を起こす一つを見つけることにあります。
言語切り替え
再起動せずセッション中にゲーム内の言語設定を切り替え、すでに開いていたメニューやキャッシュされたUI要素、セッション中に以前設定された値から描画されているものも含め、すべての可視画面が新しい言語に更新されるかを確認します。完全に反映するのに再起動が必要な言語切り替えはよくある見落としやすい不具合で、起動時に一度だけ言語を設定するテスターは、切り替えという経路自体をまったく通らないからです。
- 言語Aで起動し、セッション中に言語Bへ切り替える — すべての画面が更新される
- 言語Aへ切り替え直す — 言語Bのテキストがどこにも残っていない
- 切り替えた瞬間に開いていた画面も更新される(新しく開いた画面だけでなく)
セーブとロード
デフォルト以外の言語で進行状況をセーブし、ゲームを終了して再起動し、そのセーブをロードします。言語設定が正しく維持されているか、セーブに関連するテキスト(セーブスロット名、タイムスタンプ、セーブの説明文)が文字化けしたり違う言語で表示されたりしていないかを確認します。セーブデータは、特にセーブフォーマットを変更するアップデートをまたぐ際に、ロケール設定が静かに失われたり上書きされたりしやすい箇所です。
ストア掲載テキストとゲーム内用語の一致
最後に、ストアページの説明文やマーケティング用のスクリーンショットを、同じ言語の実際のゲーム内テキストと突き合わせます。ここでのズレ(ストアページの機能名がゲーム内の用語と一致していない、古いビルドのテキストが写ったスクリーンショット)はゲームプレイ自体を壊しませんが、その言語のプレイヤーが最初に目にするものであり、ゲームを起動する前から信頼を損ないます。