← Fyrox Plugin Suite

Fyrox I18n
ローカライズ・多言語対応

Fyroxゲームをあらゆる言語で出荷。t!("key")で翻訳、tp!("key", n)で複数形処理、JSON/CSVファイルで翻訳者と連携、フォールバックチェーンで空文字列をゼロに。

Fyrox 1.0+ Rust 1.87+ Free(MIT) Pro対応 200以上の複数形ルール

使い方

3ステップで単一言語から完全なローカライズへ。ボイラープレート不要、フレームワークへのロックインもありません。

1

翻訳ファイルを作成

ロケールごとにJSONまたはCSVファイルを作成。フラットなキーバリュー形式なので、翻訳者はCSVを任意のスプレッドシートアプリで編集できます。

2

読み込み・設定

I18nManagerを作成し、翻訳ファイルを読み込み、アクティブなロケールとフォールバックチェーン(例:ja → en)を設定します。

3

ゲーム内で翻訳

シンプルな文字列にはt!("key")、複数形にはtp!("key", count)を呼び出します。テンプレート変数は自動的に展開されます。

4

実行時にロケール切替

1回の呼び出しでアクティブなロケールを変更。以降のすべてのt!()呼び出しが即座に新しい言語を返します。

機能一覧

シンプルな文字列検索からCLDR準拠の複数形ルールまで、本番レベルのゲームローカライズに必要なすべてを搭載。

🗣️

t!()・tp!()マクロ

翻訳検索のための使いやすいマクロ。t!("greeting")でシンプルな文字列、tp!("item_count", n)でCLDRルールによる複数形対応の翻訳を取得。

📂

JSON・CSVファイル

JSON(ネスト型またはフラット型)またはCSVファイルから翻訳を読み込み。CSV形式はスプレッドシート対応で、特別なツール不要で翻訳者に直接ファイルを渡せます。

🔗

フォールバックチェーン

ja → enのようなチェーンを設定し、欠落したキーを適切にフォールバック。部分的に翻訳されたロケールでも空文字列やクラッシュなしで出荷できます。

🔢

200以上のCLDR複数形ルール

Unicode CLDRの複数形ルールを完全カバー。アラビア語、ポーランド語、ロシア語、日本語など、あらゆる言語のzero/one/two/few/many/otherカテゴリを正しく処理します。

📝

テンプレート変数展開

翻訳に動的な値を埋め込み:"こんにちは、{name}!"。変数は検索時に型安全な置換で展開されます。

🔒

スレッドセーフ

parking_lotによるロックフリー読み取りで構築。レンダリング、アセット読み込み、バックグラウンドタスクなど、どのスレッドからでもI18nManagerにアクセス可能。

📦

TranslationResource + ResourceLoader

Fyroxのリソースシステムと統合。翻訳ファイルは標準のResourceLoaderパイプラインを通じて、完全なアセット管理で読み込まれます。

最小限の依存関係

fyrox-coreserde_jsoncsvfxhashparking_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"  (複数形)

Free版 vs Pro版

Free MIT

  • ロケール切替付きI18nManager
  • t!()・tp!()マクロ
  • JSON・CSV翻訳ファイル
  • フォールバックチェーン(ja → en)
  • 200以上のCLDR複数形ルール
  • テンプレート変数展開
  • スレッドセーフ(parking_lot)
  • TranslationResource + ResourceLoader
  • 公開GitHubリポジトリ
  • コミュニティサポート

Pro 有料

  • Free版のすべてを含む
  • エディタパネル(ロケール選択)
  • 翻訳カバレッジ進捗バー
  • 色分け付きキーブラウザ
  • キー・値による検索・フィルター
  • エディタ内でのインライン編集
  • 翻訳者向けCSVエクスポート
  • OS標準ファイルウォッチャーによるホットリロード
  • inotify / ReadDirectoryChanges / kqueue
  • 優先サポート

よくある質問

対応する翻訳ファイル形式は?

JSONとCSVの両方に対応しています。JSONファイルはキーバリューペア形式(フラットまたはネスト型)を使用します。CSVファイルはシンプルな2列形式(キー、翻訳)で、翻訳者はExcel、Googleスプレッドシートなど、特別なツール不要でスプレッドシートアプリで編集できます。

フォールバックチェーンはどのように動作しますか?

ja → enのようなチェーンを設定します。日本語でキーが見つからない場合、システムは空文字列の代わりに自動的に英語の翻訳を返します。チェーンは任意の長さで、複数のフォールバックレベルをサポートします。

t!()とtp!()の違いは何ですか?

t!("key")はオプションのテンプレート変数展開付きでシンプルな翻訳文字列を返します。tp!("key", count)は現在のロケールのCLDR複数形ルールを使用して、カウント値に基づいた正しい複数形を選択します。例えば、英語には「one」と「other」の形式があり、アラビア語には6つの複数形カテゴリがあります。

Fyrox I18nはスレッドセーフですか?

はい。I18nManagerはparking_lotを使用して同期処理を行い、高速なロックフリー読み取りを提供します。レンダリングスレッド、アセット読み込みスレッド、バックグラウンドタスクからt!()を競合なく安全に呼び出せます。

Proのホットリロードはどのように動作しますか?

Pro版はOS標準のファイル監視を使用します:Linuxではinotify、WindowsではReadDirectoryChanges、macOSではkqueue。翻訳ファイルを保存すると、変更はエディタとゲーム内に即座に反映されます。再起動も手動リロードボタンも不要です。

Free版を商用ゲームに使用できますか?

はい。Free版はMITライセンスで、ロイヤリティなし、ゲーム内での帰属表示義務なし、商用利用の制限もありません。どんなプロジェクトでも自由にご使用ください。

同時にいくつの言語をサポートできますか?

制限はありません。必要な数だけロケールファイルを読み込めます。fxhashベースの検索により、読み込まれたロケールやキーの数に関係なくO(1)の翻訳速度が保証されます。

Proカバレッジバーには何が表示されますか?

カバレッジバーは各ロケールの翻訳済みキーの割合を表示します。キーは色分けされます:翻訳済みは緑、欠落(フォールバックあり)は黄色、完全に欠落は赤。これにより、どのロケールにさらなる作業が必要か一目でわかります。

今すぐFyroxゲームをローカライズしよう

Free版(MIT)から始めて、エディタパネルとホットリロードが必要になったらPro版にアップグレード。