# テキスト管理

テキスト管理機能により、ゲーム内UIやキャラクターの表示名など、Naninovel全体で使用されるさまざまなテキスト要素を管理(置換)できます。このドキュメントはローカライズが可能です。

テキスト管理ドキュメントを生成するには、Naninovel -> Tools -> Managed Text エディターのコンテキストメニューから、テキスト管理ツールを使用します。

Managed Text Tool

"Select" ボタンで、テキスト管理ドキュメント(デフォルトでは Resources/Naninovel/Text です)を保存するパスを選択し、 "Generate" ボタンを押してドキュメントを作成します。

アセットのコンテキストメニュー Create -> Naninovel -> Managed Text からも、テキスト管理ドキュメントを作成できます。

テキスト管理ドキュメントの各行は、次の形式になっています: Path: Value, ここで Path はテキスト変数へのパスで、Value はその変数の値です。たとえば、組み込みのUIのレコードを含む "DefaultUI" ドキュメントのデフォルトの内容は次のとおりです。

Managed Text Document

値を編集すると、次の実行時に変更が適用されます。

Delete Unused プロパティを有効にすると、ManagedTextProvider コンポーネントからもソースコードの ManagedText 属性からも直接参照されていないテキスト管理ドキュメントのレコードは、削除されます(詳細は以下を参照)。

# テキスト管理プロバイダー

ManagedTextProvider コンポーネントからスクリプトを作成することなく、任意のUnityゲームオブジェクトをテキスト管理レコードにバインドすることが可能です。コンポーネントをゲームオブジェクトに追加し、カテゴリ(レコードを含むドキュメントの名前)とキー(ドキュメント内のレコードの名前)を指定し、 OnValueChanged イベントを使用して値をゲームオブジェクトのプロパティにバインドします。

以下は、 "MyCustomText" キーを使用して "MyCustomDocument" ドキュメントに格納されている管理されたテキストレコードをUntiyの "Text" コンポーネントにバインドする例です。

ManagedTextProvider コンポーネントがカスタムUI、テキストプリンター、または選択肢ハンドラーで使用される場合、テキスト管理ツールを使用すると、対応するレコードが自動的に生成されます(構成メニューでリソースが割り当てられている場合)。その他の場合は、レコードを手動で追加する必要があります。

# テキスト管理変数

テキスト管理レコードをソースコードの変数にバインドすることもできます。 そのためには、C#スクリプトの静的文字列フィールドに ManagedText 属性を追加します。値は、エンジンの初期化時に、テキスト管理ドキュメントで指定された値で上書きされます。

以下は、テキスト管理変数を使用して C# スクリプトでラベルをローカライズする例です。

using Naninovel;
using UnityEngine.UI;

// Unityのテキストコンポーネントからクラスを継承し、それを1つのコンポーネントとして使用できるようにします。
public class CustomLabel : Text
{
    // 管理テキストレコード "CustomLabel.LabelText" の値が
    // エンジンの初期化時に以下の変数に割り当てられ、ロケールの変更時に更新します。
    [ManagedText("MyCustomUI")] // "MyCustomUI" は、レコードを保持する管理テキストドキュメントの名前です。
    public static string LabelText = "Default Value"; // "Default Value" はレコードのデフォルト値です。

    protected override void Awake ()
    {
        base.Awake();

        text = LabelText; // 管理テキストレコードの現在の値をラベルに割り当てます。

        // ユーザーが実行時にロケールを変更したときにラベルを更新します。
        Engine.GetService<ILocalizationManager>().OnLocaleChanged += _ => text = LabelText;
    }
}

# スクリプトテキスト

naninovelスクリプトから直接、テキスト管理の値を取得することが可能です。これは、スクリプト式でテキストを使用する必要があり、テキストをローカライズできるようにする必要がある場合に便利です。

"Script" という名前のテキスト管理ドキュメントを作成し、T_またはt_プレフィックスが付いたキーを使用してレコードを追加します。これでスクリプト式の値を参照できるようになりました。たとえば、 "Script" というテキスト管理ドキュメントに次のレコードがあるとします:

T_Greeting1: Hey!
T_Greeting2: Hello!
T_Greeting3: Hi!

— 次のようにして値を参照できます:

@print {Random(T_Greeting1,T_Greeting2,T_Greeting3)}

もちろんテキスト管理ドキュメント "Script" は、他のドキュメントと同じようにローカライズできます。したがって、ユーザーが別のロケールを選択すると、対応するローカライズ化ドキュメントからテキストが自動的に参照されます。

# ローカリゼーション

テキスト管理のローカリゼーション手順は、naninovel スクリプトのローカリゼーション手順と似ています:

  1. Resources/Naninovel/Text フォルダーに必要なテキスト管理ドキュメントを生成(作成、編集)します。
  2. ロケールフォルダーでローカリゼーションユーティリティを実行します(Resources/Naninovel/Localization/{Locale}, ここで {Locale} はターゲットロケールのタグです)。
  3. 元のテキスト管理ドキュメントのローカリゼーションドキュメントが、対応するロケールフォルダーに表示されます。それに翻訳を追加または編集します。

テキスト管理ドキュメントと、それに対応するローカリゼーションファイルなどを更新するには、最初に Resources/Naninovel/Text フォルダーで、生成された管理されたテキストユーティリティを実行します。次に Resources/Naninovel/Localization/{Locale} フォルダーでローカリゼーションユーティリティを実行します。どちらのユーティリティも既存の変更(管理されたテキストレコードとその翻訳)をデフォルトで保持しようとするため、更新する度に最初から書き直す必要はありません。

ローカリゼーションユーティリティの使い方の詳細は、ローカライズ をご覧ください。

テキスト管理を含むローカリゼーション設定の例は、デモプロジェクト にあります。ご自身のプロジェクトでローカリゼーションの設定に問題が発生した場合の参考としてご利用ください。

最終更新 日: August 5, 2020