WienerWiener
  • はじめに
  • 競合比較
  • 価格・入手
  • FAQ
  • 向いているケース
  • ライセンス
  • Unity Asset版とStandalone版の違い
  • 簡易難読化・改ざん検知
  • 整合性検知・デバッグ
  • ローカライズ
  • バージョン管理
  • Google Sheets入力
  • Excel
  • YAML
  • 設定ファイル
  • データフォーマット
  • マスターデータコンバート
  • ValueOnlyフォーマット
  • スタートアップ
  • サンプル
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • はじめに
  • 競合比較
  • 価格・入手
  • FAQ
  • 向いているケース
  • ライセンス
  • Unity Asset版とStandalone版の違い
  • 簡易難読化・改ざん検知
  • 整合性検知・デバッグ
  • ローカライズ
  • バージョン管理
  • Google Sheets入力
  • Excel
  • YAML
  • 設定ファイル
  • データフォーマット
  • マスターデータコンバート
  • ValueOnlyフォーマット
  • スタートアップ
  • サンプル
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • 機能

    • 簡易難読化・改ざん検知
    • 整合性検知・デバッグ
    • ローカライズ
    • バージョン管理
    • Google Sheets入力

ローカライズ

Wienerはマスターデータのローカライズを、アプリケーションコードを変更せずに透過的に扱えます。

全体フロー

Excel / YAML(localizeフラグ付きフィールドを収集)
    ↓
翻訳用CSV生成(自動更新)
  A列(Key): {ClassName}.{FieldKey}.{UniqueID}
  B列(Source): 原文文字列
  C列以降: 言語別翻訳(翻訳者が入力)
    ↓
コンバート(整合性チェック → バイナリ生成)
    ↓
ランタイムAPI(透過アクセス)
  wm.Item[0].Name  // 現在の言語を自動返却

設定手順

1. settingsファイルにlocalizationを追加

CSVファイルを使う場合:

localization:
  enable: true
  input:
    path: "localize/translations.csv"  # カレントディレクトリからの相対パス

入力と出力を分ける場合(例:スプレッドシートから読み込んでCSVに書き出す):

localization:
  enable: true
  input:
    path: "https://docs.google.com/spreadsheets/d/xxxxxxxx/edit#gid=0"
    sheet: "translations"
  output:
    path: "localize/translations.csv"

2. YAMLフィールドに一意のキーを作成する

ローカライズCSVのキー生成に使用するため、各行を一意に識別できるフィールドを用意します。

fields:
- key: Id
  name: id
  type: Int

3. YAMLヘッダーにlocalizationを追加

ローカライズ対象のYAMLに localization.id_key を設定します。
id_key には各行を一意に識別するフィールドのkeyを指定してください。

header:
  name: Item
  localization:
    id_key: Id

4. YAMLフィールドにlocalize: Trueを追加

ローカライズしたい String 型フィールドに localize: True を付けます。

fields:
- key: Id
  name: id
  type: Int

- key: Name
  name: name
  type: String
  localize: True

翻訳用CSVフォーマット

翻訳用CSVはコンバート時に自動生成・自動更新されます。
翻訳者はC列以降に翻訳を入力するだけです。

KeySourcejaenzh
Item.Name.1001Sword剣Sword剑
Item.Name.1002Shield盾Shield盾
Quest.Title.1001The Lost Sword失われた剣The Lost Sword失落之剑
  • Key: {クラス名}.{フィールドkey}.{UniqueID} 形式(UniqueIDは id_key で指定したフィールドの値)
  • Source: Excelから読み取った原文(変更された場合は自動更新)
  • 言語列: ヘッダー行の列名が言語コードになります。未翻訳のセルは ---- で管理されます

CSVの自動管理

状況動作
CSVが存在しない新規作成。言語列はなし(翻訳者が列を追加)
新しいキーが追加されたCSVに行を追加。翻訳列は ----
原文が変更された翻訳列を ---- にリセット
キーが削除されたCSVから行を削除
原文・キーに変化なしCSVを変更しない

原文変更・削除が発生した場合は差分データが出力されます。

出力先差分の書き込み先
CSV ファイル{csv名}_diff_{timestamp}.csv(同ディレクトリ)
スプレッドシート同一スプレッドシートの diff_{timestamp} シート(新規作成)

言語切り替えAPI

// 利用可能な言語コードを取得(CSV列ヘッダー名)
string[] codes = wm.GetLanguageCodes();

// 言語の切り替え
wm.SetLanguage("ja");  // 以降のアクセスで日本語を返す
wm.SetLanguage("en");

// デフォルト(原文)に戻す
wm.ResetLanguage();

// 言語切り替えイベント(UIの更新などに使用)
// langCode は null の場合 ResetLanguage が呼ばれた
wm.OnChangeLanguage += (langCode) => RefreshUI();

言語コードはCSVヘッダー行のC列以降の文字列です(BCP 47推奨:"ja", "en", "zh-Hans" など)。

設計上の特徴

  • ランタイムのコスト: 文字列キーのDictionary探索なし。行番号→配列参照のみで取得
  • 整合性チェック: 原文が変更されるとB列が更新され、翻訳列は自動クリア(再翻訳が必要とわかる)
  • 未翻訳セルの扱い: ---- セルは開発モードでは原文にフォールバック、本番モード(設定ファイルの development: false)ではtarget_languagesに含まれる言語についてエラー(未定義時は全言語対象)
  • 差分追跡: 更新・削除されたキーは差分CSVに記録される

開発中の運用

enable: true の状態でコンバートを実行するたびに翻訳CSVが更新されるため、マスターデータ変更のたびにCSVのコミットが発生してしまいます。

開発中は enable: false(または設定を省略)にしておくことを推奨します。

タイミング推奨設定
通常の開発・データ更新enable: false
翻訳作業の開始前(CSVを最新化して翻訳者に渡す)enable: true
ローカライズ対応バイナリの確認・検証enable: true
本番コンバートenable: true

注意事項

  • fields.localize: True を指定できる型は String のみ
  • header.localization.id_key で指定したフィールドは自動的に重複チェック(unique)が有効になる
  • id_key のフィールドは manual_only: True でないことが必要

関連

  • バージョン管理 — 言語別バイナリのバージョン管理
  • 設定ファイル — localization 設定の詳細
  • YAML Header定義 — localization.id_key の設定
  • Fields定義 — localize フラグ
最終更新:: 2026/06/12 2:44
Contributors: artisan-sawasaka
Prev
整合性検知・デバッグ
Next
バージョン管理