RPGツクールMV/MZの言語切り替え — 設定の保存先と、切り替えに反応すべきものの一覧
RPGツクールMV・MZのゲームで、プレイヤーに言語を切り替えさせたい。結論から言うと、言語切り替えは「別のテキストを読み込む」処理ではなく、動いているゲームの機能で、反応すべき場所の一覧を持っています。訳文の差し替えはプラグインの仕事です。完成品が動くかを決めるのは、選択をどこに保存するか、何も保存されていない初回起動で何をするか、切り替えても自動では描き直されない画面はどこか、の三点です。
壊れるのもこの三点です。セーブを開くと仲間の名前だけ古い言語のまま、オプションのコマンド名が古いまま、中国語で文字が四角い箱になる。翻訳者には直せない不具合です。
テキストの在り処と往復は「RPGツクールMV/MZのゲームを多言語対応する — テキストの在り処と進め方」に書いています。プレイヤーの方へ。切り替えは普通タイトル画面かオプションにあり、ストアに載っている言語がどちらにもなければ、報告する価値のある不具合です。
一本のビルドに言語設定を持つか、言語ごとにビルドを分けるか
形は二つです。言語ごとに別ビルドを作ってどれを入れるかで選ばせる形と、全言語を一本に同梱してゲーム内で切り替えさせる形。別ビルドは切り替えを間違えようがない代わりに、更新のたびに全複製へ同じ変更を入れることになり、必ずずれます。海外に出す作品の多くは一本に落ち着きます。差し替えの方式は「ツクールの翻訳プラグインをどう選ぶか — 方式の違いと判断軸」で扱っており、以降は一本を前提にします。
選択の保存先 — オプション設定と同じ場所に置き、セーブデータには入れない
MVとMZには、プレイ内容ではなくプレイヤーに属する設定の置き場所がすでにあります。音量などを持つコアスクリプトの ConfigManager で、起動時に読み込まれ、オプション画面を閉じたときに書き戻されます。保存場所はセーブと同じ(デスクトップ版ならセーブフォルダ、ブラウザ版ならブラウザのストレージ)ですが、別のデータです。ファイル名はバージョンと環境で異なるので、コアスクリプトの StorageManager か公式ドキュメントで確認してください。
言語はここに置きます。音量と同じく、プレイヤーと環境に属する値だからです。切り替え用プラグインの多くはここにキーを足します。自作するなら既存オプションの読み書きに倣ってください。
セーブに入れてはいけない理由は三つ。テキストは表示時に引かれるので、セーブに要るのは「どのアイテムか」であって名前ではないこと。セーブは「いま」選んでいる言語で開けなければならず、言語がセーブの中にあるとロードのたびに切り替わること。タイトル画面はセーブを読む前に動くので、参照するものがないことです。
エンジンの仕様が一つ絡みます。ニューゲームの瞬間、アクターの名前・二つ名・プロフィールがデータベースからアクターのオブジェクトへ複製され、保存されるのはそのオブジェクトです。日本語で始めたセーブは日本語の仲間の名前を抱えたままで、ロード時にプラグインが引き直さない限り変わりません。名前入力で打たれた名前は例外で、そのまま残します。
初回起動にはオプションファイルがなく、言語のキーもありません。この瞬間だけが自動判定の出番です。キーがないときだけ判定し、結果をその場で書き込み、以後は判定し直さないこと。起動のたびにOSの言語を読み直す実装は、プレイヤーの選択を毎回黙って上書きします。
初回起動の既定言語 — ゲームから見えるものと、見えないもの
MV・MZのデスクトップ版は Chromium ベースの NW.js の上で動くので、navigator.language が使えます。返るのは実行環境が認識しているOSの言語(ブラウザ版ならブラウザの優先言語)で、素のツクール製ゲームが自動で得られる手がかりはこれだけです。同梱言語と先頭部分で照合し、当たらなければ原語に倒します。中国語は簡体字と繁体字の区別を地域部分に頼るので、地域コードの割り当てを決めて実機で確かめてください。
見えないのは、プレイヤーがSteamクライアントで選んだ言語です。Steamにはゲームごとの言語設定がありますが、素のツクール製ビルドは Steamworks の API を呼ばないので知る機会がありません。読む方法はありますが別の作業で、Steamworksの組み込みが通常の手段です(起動オプションの引数やレジストリの値を使う方法もドキュメントにあります)。組み込むまでは、日本語のOSでSteamを英語にしているプレイヤーにも日本語が出ます。
判定はどちらにも外れうるので、ここからは推奨です。手動の切り替えを必ず用意し、オプションだけでなくタイトル画面からも届くようにしてください。読めない言語で起動したプレイヤーはメニューをたどれません。三言語以上なら、初回起動時にタイトルより前で言語を尋ねる画面を検討する価値があります。各言語をその言語自身の表記(日本語、English、中文)で並べ、答えはその場で保存すること。国旗は国を指すもので、言語のラベルには向きません。
切り替えに反応しなければならないものの一覧
まず、その場で切り替えると古いテキストが残る理由です。MV・MZのウィンドウはリフレッシュ時に内容をビットマップへ描き込み、コマンドウィンドウは生成時かリフレッシュ時に項目を組み立てます。裏の文字列を差し替えても次のリフレッシュまで描き直されないので、開いているメニューは古いまま、起動時に一度だけ文字列を読んだプラグインはそれを持ち続けます。切り替え後にタイトルへ戻せば全ウィンドウが作り直されるため、これを既定にするのが安全です。その場で切り替えるなら、他のプラグインが作ったものも含め全ウィンドウを自分でリフレッシュすることになります。
以下はどれも、手当てしなければ古い言語のまま残る場所です。
- システムの用語 — コマンド名、能力値の表記、定型のシステムメッセージ。全メニューと戦闘ログの材料なので組み立て直しが要る。翻訳は「ツクールの用語データベースと戦闘メッセージの英語化: 誰も計画しない層」を参照
- データベースの名前と説明 — アイテム・スキル・ステート・アクター・職業・敵キャラ。既存セーブに写されたアクターの項目も
- イベントのテキスト — メッセージ、選択肢、スクロール表示、名前ウィンドウ。選択肢は別ウィンドウが描くため最も取りこぼしやすい
- 戦闘メッセージと戦闘ログ — 表示時に用語と名前を組み合わせる
- プラグインパラメータの文字列 — 他のプラグインの設定欄に打った文言。起動時に一度読まれ、多くの切り替え方式から見えない。言語別パラメータを持つプラグインを使うか、パラメータに文言を置かない
- 文字入りの画像 — タイトルロゴ、看板、チュートリアル、クレジット。言語ごとのファイルと、選ぶ規則(ファイル名末尾に言語を付けるなど、自分で決める規約)が要る
- 言語ごとのフォント — 日本語・中国語・韓国語・欧文を一つで賄えることはまれで、同じサイズでも日本語と欧文では見かけの高さと行間が違う
- ウィンドウの幅と行数 — メッセージの行数とショップの列幅は固定、選択肢は最長のものに合わせて広がる。長い言語は静かにあふれる
- 名前入力画面の文字表 — エディタがSystemデータに記録するプロジェクトのロケールで決まる。編集時に固定される値で、プレイヤーの切り替えには追従しない
- タイトル画面 — タイトル文字、システム用語であるタイトルコマンド、文字入りのタイトル画像、起動時に決まるウィンドウのキャプション
切り替えのテスト — ビルドごとに同じ手順で回す
毎回同じ手順で、全言語について、デプロイ後のビルドで確かめます(エディタのテストプレイとは構成が違うことがあります)。読めない言語でも全手順を踏み、原語と違う文字か、切れていないか、四角い箱が出ていないかを見ます。
- オプションファイルを消して初回起動を再現し、判定か言語選択の結果が想定どおりか
- タイトル画面 — タイトル文字、コマンド名、画像
- オプションで言語を切り替えて閉じる。タイトルに戻るか、全ウィンドウが描き直されるか
- ニューゲームから、制御文字を含むメッセージ、選択肢、スクロール
- メインメニュー、アイテムとスキルの説明、ステータスの能力値表記
- ショップ — 購入・売却コマンド、価格、商品一覧
- 戦闘 — 攻撃コマンド、スキル、ステート、勝利メッセージ
- セーブし、言語を切り替えてロード。仲間の名前、マップ名、セーブ一覧
- 終了して再起動。選んだ言語が判定し直されずに残っているか
よく見つかる不具合です。
- 会話は訳されているのに選択肢が原語のまま — 別の描画経路に届いていない
- 中国語・韓国語で四角い箱が出る — 見分け方は「文字が四角い箱になる — それは文字コードではなくフォントの問題」
ストアの対応言語表記と、ゲーム内切り替えの関係
Steamのストアページに載る対応言語の表(インターフェース・音声・字幕)は、Steamworks で自分が申告した内容です。プレイヤーはこれを約束として読み、インターフェースに印があれば会話だけでなくメニューもその言語で出ると受け取ります。申告は切り替えが実際に届く範囲に合わせてください。英語のメニューに日本語だけの戦闘メッセージが混ざるなら、インターフェース対応と書くべきではありません。
関係がありそうで別物が二つあります。ストアページ自体の表示言語は閲覧者のSteamの設定とストア文章の翻訳有無で決まり、ゲーム内の切り替えとは無関係です。もう一つはSteamのプロパティの言語設定で、プレイヤーはこれでゲームの言語が変わると期待しますが、Steamworks を組み込んでいなければ何も起きません。混乱の大半は、ストアの説明文に全言語で「言語はタイトル画面とオプションで切り替えられます」と一行書けば防げます。