3ステップで単一言語から完全なローカライズへ。ボイラープレート不要、フレームワークへのロックインもありません。
ロケールごとにJSONまたはCSVファイルを作成。フラットなキーバリュー形式なので、翻訳者はCSVを任意のスプレッドシートアプリで編集できます。
I18nManagerを作成し、翻訳ファイルを読み込み、アクティブなロケールとフォールバックチェーン(例:ja → en)を設定します。
シンプルな文字列にはt!("key")、複数形にはtp!("key", count)を呼び出します。テンプレート変数は自動的に展開されます。
1回の呼び出しでアクティブなロケールを変更。以降のすべてのt!()呼び出しが即座に新しい言語を返します。
シンプルな文字列検索からCLDR準拠の複数形ルールまで、本番レベルのゲームローカライズに必要なすべてを搭載。
翻訳検索のための使いやすいマクロ。t!("greeting")でシンプルな文字列、tp!("item_count", n)でCLDRルールによる複数形対応の翻訳を取得。
JSON(ネスト型またはフラット型)またはCSVファイルから翻訳を読み込み。CSV形式はスプレッドシート対応で、特別なツール不要で翻訳者に直接ファイルを渡せます。
ja → enのようなチェーンを設定し、欠落したキーを適切にフォールバック。部分的に翻訳されたロケールでも空文字列やクラッシュなしで出荷できます。
Unicode CLDRの複数形ルールを完全カバー。アラビア語、ポーランド語、ロシア語、日本語など、あらゆる言語のzero/one/two/few/many/otherカテゴリを正しく処理します。
翻訳に動的な値を埋め込み:"こんにちは、{name}!"。変数は検索時に型安全な置換で展開されます。
parking_lotによるロックフリー読み取りで構築。レンダリング、アセット読み込み、バックグラウンドタスクなど、どのスレッドからでもI18nManagerにアクセス可能。
Fyroxのリソースシステムと統合。翻訳ファイルは標準のResourceLoaderパイプラインを通じて、完全なアセット管理で読み込まれます。
fyrox-core、serde_json、csv、fxhash、parking_lotのみ。肥大化したICUライブラリもC依存関係もなし、純粋なRustです。
シンプルで慣用的なRust。2つのマクロでローカライズの99%をカバーします。
// 翻訳を読み込んでフォールバックを設定 let manager = I18nManager::new(); manager.load_json("locales/en.json"); manager.load_json("locales/ja.json"); manager.set_locale("ja"); manager.set_fallback_chain(vec!["ja", "en"]); // シンプルな翻訳 let title = t!("menu.title"); // => "ゲームメニュー" // テンプレート変数付き let greeting = t!("greeting", name = "Player"); // => "こんにちは、Player!" // 複数形対応の翻訳(CLDRルール) let msg = tp!("items_collected", 3); // => "3個のアイテムを集めました" // 実行時にロケールを切替 manager.set_locale("en"); let msg = tp!("items_collected", 1); // => "1 item collected" (単数形) let msg = tp!("items_collected", 5); // => "5 items collected" (複数形)
JSONとCSVの両方に対応しています。JSONファイルはキーバリューペア形式(フラットまたはネスト型)を使用します。CSVファイルはシンプルな2列形式(キー、翻訳)で、翻訳者はExcel、Googleスプレッドシートなど、特別なツール不要でスプレッドシートアプリで編集できます。
ja → enのようなチェーンを設定します。日本語でキーが見つからない場合、システムは空文字列の代わりに自動的に英語の翻訳を返します。チェーンは任意の長さで、複数のフォールバックレベルをサポートします。
t!("key")はオプションのテンプレート変数展開付きでシンプルな翻訳文字列を返します。tp!("key", count)は現在のロケールのCLDR複数形ルールを使用して、カウント値に基づいた正しい複数形を選択します。例えば、英語には「one」と「other」の形式があり、アラビア語には6つの複数形カテゴリがあります。
はい。I18nManagerはparking_lotを使用して同期処理を行い、高速なロックフリー読み取りを提供します。レンダリングスレッド、アセット読み込みスレッド、バックグラウンドタスクからt!()を競合なく安全に呼び出せます。
Pro版はOS標準のファイル監視を使用します:Linuxではinotify、WindowsではReadDirectoryChanges、macOSではkqueue。翻訳ファイルを保存すると、変更はエディタとゲーム内に即座に反映されます。再起動も手動リロードボタンも不要です。
はい。Free版はMITライセンスで、ロイヤリティなし、ゲーム内での帰属表示義務なし、商用利用の制限もありません。どんなプロジェクトでも自由にご使用ください。
制限はありません。必要な数だけロケールファイルを読み込めます。fxhashベースの検索により、読み込まれたロケールやキーの数に関係なくO(1)の翻訳速度が保証されます。
カバレッジバーは各ロケールの翻訳済みキーの割合を表示します。キーは色分けされます:翻訳済みは緑、欠落(フォールバックあり)は黄色、完全に欠落は赤。これにより、どのロケールにさらなる作業が必要か一目でわかります。
Free版(MIT)から始めて、エディタパネルとホットリロードが必要になったらPro版にアップグレード。