対応エンジン · Gettext (.po / .mo)
gettext は、日本以外のインディーゲームの多くがローカライズに使う仕組みです。Python や pygame のゲーム、Solarus、SDL や GTK のゲーム、そして Poedit・Weblate・Crowdin を通したものすべてが該当します。テキストは locale フォルダーに .po ソースとコンパイル済み .mo カタログとして置かれています。RuneTranslate はプロジェクト作成時にそれらを検出し、すべての文字列を翻訳し、動作する .mo を書き戻します。実行中のゲームが読むのは、まさにそのファイルです。
gettext カタログの大半は UI です。メニュー項目、ボタンのラベル、ツールチップ、複数の画面で繰り返される状態表示など。名詞・アイテム名・主要な動詞を一度用語集に入れておけば、どこに出ても同じ訳語になります。会話文以上に重要です。ある画面で「保存」、別の画面で「セーブ」となっているメニューは、不具合のように見えてしまうからです。 用語集の基本 →
locale/ や lang/、i18n/ フォルダーを含むゲームのディレクトリを RuneTranslate に指定します。検出は拡張子ではなく実際のバイト列で判断するため、中身が 3D シーンの .mo は無視されます。単独の .po ファイルが並んだフォルダーでも構いません。
新規プロジェクトのダイアログが、読み取れたカタログ数、コンパイル済み .mo とソース .po の内訳、ゲームが既に同梱している言語、そして文字列の総数を、プロジェクト作成前に表示します。
目標言語と翻訳サービスを選びます。無料の Google または DeepL、あるいは自分の DeepL・OpenAI・Claude・DeepSeek のキーを使えます。書式プレースホルダー(%s、%d、%(player)s、{count})は翻訳前にマスクし、翻訳後に復元するため、サービス側が削除したり書き換えたりすることはありません。
文字列はカタログファイルごとにまとめられます。各エントリーは gettext のコンテキスト(msgctxt)を保持します。これは開発者がその文字列のためだけに書いた区別情報なので、同じ語が二度現れる理由が分かり、それぞれを正しく訳せます。
書き出しでは、正しい locale/<選んだ言語>/LC_MESSAGES/ カタログと、ゲームが元々読み込んでいたカタログの更新版の両方を含む、ゲームの完全なコピーを作成します。ゲームがどのように言語を選んでいても翻訳が表示されます。.po とコンパイル済み .mo の両方が書き出されます。