ローカライズ
すべてのゲームリソース(スクリプト、オーディオ、ボイス、背景など)は、複数の言語/文化にローカライズできます。
プロジェクトの作成に最初に使用されたリソースは、デフォルトで ソースロケール に関連付けられます。たとえば、ゲームが最初に英語で作成された場合、元の(ソース)シナリオスクリプト、UI、背景の標識などはすべて英語です。つまり、ソースロケール は en(または、特定の地域に個別のロケールを使用する場合は en-GB / en-US / など)です。
ソースロケール は、Source Locale プロパティを使用して Naninovel -> Configuration -> Localization メニューから変更できます。Source Locale 設定は、ソースプロジェクトアセットに関連付けられたロケールの名前(ID)のみを決定し、設定の「言語」ドロップダウンおよび関連するエンジンAPIでロケールを区別するために使用されます。
TIP
ソースのローカライズ可能なテキストをサードパーティ(校正用など)と共有したいが、ソースシナリオスクリプトは共有したくない場合は、Source Locale を実際には使用しない無関係な言語に変更し、Expose Source Locale を無効にして、ソースマテリアル専用のロケールを追加します。その後、そのロケールをローカライズ ドキュメント または スプレッドシート にエクスポートできます。
ロケールを追加するには、Resources/Naninovel/Localization(ローカライズリソースルート)内に、サポートしたい RFC5646 言語タグの1つと同じ名前のサブフォルダを作成します。たとえば、ドイツ語を追加するには、Resources/Naninovel/Localization/de を作成します。組み込みゲーム設定UIの「言語」ドロップダウンには、追加されたすべてのロケールが自動的に含まれます。
ソースロケール 用に ローカライズリソースルート にサブフォルダを作成する必要はないことに注意してください。ローカライズリソースルート の外に保存されているすべてのプロジェクトリソースは、デフォルトで ソースロケール に属します。
ローカライズリソースルート パスは、ローカライズ構成メニューの Loader > Path Prefix プロパティで変更できます。構成されたパスは「Resources」フォルダ(「Assets」ではない)に対する相対パスであることに注意してください。UnityはResourcesフォルダを特別な方法で処理します。ロケール固有のアセットを整理するために、プロジェクト内の任意の場所にこのようなフォルダを複数持つことができます。
TIP
Resources フォルダを使用する代わりに、別のリソースプロバイダーを選択できます。たとえば、Addressable を使用すると、ロケール固有のリソースをメインゲームパッケージとは独立してバンドルし、オンデマンドでダウンロードできます。
デフォルトロケール
プレイヤーが初めてゲームを実行したときにデフォルトで選択されるロケールを指定するには、ローカライズ構成メニューの Default Locale プロパティを使用します。このプロパティが指定されていない場合、ゲームは Source Locale で開始されます。
Auto Detect Locale オプションが有効になっており、ゲームが初めて実行される場合、Naninovelはシステム言語に基づいてロケールを自動的に検出しようとします。検出が成功し、ロケールがゲームでサポートされている場合は、それが選択されます。それ以外の場合、ゲームは Default Locale にフォールバックします。
WARNING
自動的に検出されたロケールには指定子が含まれません。つまり、システム言語が英語の場合、検出されるロケールは en であり、en-US や en-GB になることはありません。これは、Unityの システム言語検出 の制限です。自動検出に依存する場合は、追加されたロケールで指定子を使用しないでください。
リソースのローカライズ
ローカライズリソースルート 内に、ゲーム設定で対応するローカライズが選択されたときにソースリソースの代わりに使用されるリソースを保存します。
たとえば、ja-JP ロケールが選択されたときにメイン背景(アクターID MainBackground)の "City" 外観スプライトを置き換えたい場合は、ローカライズされたバージョンを次の場所に配置します。
Resources/Naninovel/Localization/ja-JP/Backgrounds/MainBackground/Cityスクリプトのローカライズ
リソースのローカライズスキームは、シナリオスクリプトと管理テキストドキュメントを除く、ほとんどのリソースタイプで機能します。これらのタイプについては、Naninovel -> Tools -> Localization からアクセスできるローカライズツールを使用してください。
まず、Scripts Folder (input) — Naninovelシナリオスクリプト(.nani)が保存されているプロジェクトディレクトリ(例:Assets/Scenario)を選択します。オプションで、管理テキスト 用のローカライズドキュメントも生成するには、Text Folder (input) — 管理テキストドキュメントが保存されているディレクトリ(デフォルトでは Assets/Resources/Naninovel/Text)を選択します。
あるいは、ソーススクリプトからではなく、別のロケール用に以前に生成されたドキュメントからローカライズドキュメントを生成したい場合は、そのロケールの既存のローカライズドキュメントを含むテキストフォルダ(例:Assets/Resources/Naninovel/Localization/ja-JP/Text)を選択します。
次に、生成されたローカライズリソースを保存するロケールフォルダへのパスを選択します。実際のロケールフォルダ(例:Resources/Naninovel/Localization/ja-JP)を選択していることを確認してください。有効な出力ロケールフォルダが選択されると、フィールドの下にラベルが表示され、ターゲットロケール名が表示されます。
TIP
特定のロケールフォルダではなく ローカライズリソースルート ディレクトリを選択することで、プロジェクト内のすべてのロケールのリソースを一度に生成できます。ツールはサブフォルダを反復処理し、それぞれのリソースを生成します。
「Generate」を押して、ローカライズリソースを作成または更新します。その後の実行では、ツールは以前に生成されたローカライズドキュメントを尊重し、ソースマテリアルが変更されていない場合はローカライズされたエントリを保持します。
スクリプトローカライズドキュメントは Scripts フォルダの下にグループ化され、次の形式のステートメントで構成されます。
# ID
; Source text
Translation text# ID 行は、ローカライズされたコンテンツの一意の識別子であり、変更しないでください。
; Source text 行には、翻訳する元のコンテンツが含まれています。コメントなので、変更してもゲームには影響しません。翻訳者の便宜のために提供されています。
実際の翻訳は、コメント行の直後に配置します。読みやすくするために複数行を使用できます(結合されます)が、次の # ID 行の前に表示されるようにしてください。例:
# aj0e5dea
; Aliquam ut <b>ultricies</b> enim, id venenatis.<br>Nullam rhoncus eros tempus.
Оценивая блеск <b>металлического</b> шарика, пространство равноденственно.<br>
Противостояние есть метеорный дождь.結合された行
翻訳された汎用行にインラインコマンドまたは式が含まれている場合、複数のテキストフラグメントに分割され、それぞれが一意のテキストIDにマップされる場合があります。Join Lines が有効になっている場合、このようなフラグメントはパイプ記号 | を使用して1行に結合されます。
たとえば、次のソーススクリプトテキストがあるとします。
Looks like rain is starting[rain]. Hey, {MC}, hurry up!— ローカライズドキュメントには以下が含まれます。
# id1|id2|id3
; Looks like rain is starting|. Hey, |, hurry up!インラインコマンドと式が | に置き換えられていることに注目してください。翻訳されたテキストではそれらを保持してください。例:
# id1|id2|id3
; Looks like rain is starting|. Hey, |, hurry up!
Похоже, дождь начинается|. Эй, |, поспеши!ターゲット言語で必要な場合は、ローカライズされたフラグメントを並べ替えることもできます。例:
# id1|id2
; Hey, |, hurry up!
|, эй, поспеши!— これにより、文の残りの部分の前に {MC}(主人公の名前)が表示されます。
注釈
Include Annotations が有効になっている場合、生成されたローカライズドキュメントには、ローカライズされているソーススクリプトコンテンツ(コマンドまたは汎用行)と、その前に配置されたコメントが含まれます。たとえば、次のソーススクリプトがあるとします。
; Player has to pick route.
@choice "Go left" set:route="left"
@choice "Go right" set:route="right"
Narrator: You've decided to go {route}. Wise choice!—生成されたローカライズドキュメントには以下が含まれます。
# id1
; > Player has to pick route.
; > @choice "|#id1|" set:route="left"
; Go left
# id2
; > @choice "|#id2|" set:route="right"
; Go right
# id3|id4
; > Narrator: |#id3|{route}|#id4|
; You've decided to go |. Wise choice!注釈は、翻訳者にローカライズされたテキストのコンテキストを提供します。翻訳には注釈行(; > で始まる行)を含めないでください。単一の ; 行のみを翻訳することが期待されています。
EXAMPLE
ローカライズサンプル でローカライズ設定の例を見つけてください。プロジェクトでのローカライズの設定に問題がある場合は、参考にしてください。
スプレッドシート
すべてのプロジェクトシナリオスクリプトと管理テキストのローカライズをスプレッドシートにコンパイルできます。たとえば、翻訳者や編集者とテキストを共有するためです。
スプレッドシートツールは、ローカライズ可能なテキストを .csv シートに抽出し、編集されたシートをプロジェクトにインポートして戻すことができます。
エクスポートする前に、必ずローカライズツール(Naninovel -> Tools -> Localization)でローカライズデータを生成してください。Locale Folder プロパティにローカライズルートディレクトリ(Resources/Naninovel/Localization)を選択することで、すべてのロケールのリソースを一度に生成できます。
ローカライズデータが最新になったら、Naninovel -> Tools -> Spreadsheet からスプレッドシートツールを開きます。
必要なフォルダを指定します。
- Input Script Folder — ソース
.naniスクリプトが保存されているフォルダ(例:Assets/Scenario)。 - Input Text Folder — 管理テキストドキュメント が生成されるフォルダ(例:
Assets/Resources/Naninovel/Text)。フォルダがない場合は、ツールを使用して管理テキストドキュメントを生成してください。 - Input Localization Folder — ロケールリソースが保存されているローカライズルート(例:
Assets/Resources/Naninovel/Localization)。 - Output Folder — 生成または編集されたシートの宛先。
「Export」をクリックして、選択した宛先にシートをエクスポートします。
各スクリプトと管理テキストドキュメントは個別のシートにエクスポートされます。各シートには、ローカライズ可能なテキストIDを保存する「ID」列と、各ロケールの追加列があります。「ID」以外の任意の列を変更できます。ただし、ソースロケール列を変更してもインポートには影響しません。
Include Annotations が有効になっている場合、生成されたシートには、ソーススクリプトコンテンツ(著者名、インラインコマンド、コメント)を含む列も含まれます。その列はインポート中は無視されます。
シートを編集した後、「Import」をクリックしてデータをプロジェクトに戻します。
WARNING
スプレッドシートからインポートすると、プロジェクトのローカライズドキュメントが上書きされるため、競合を防ぐために、スプレッドシートの編集中は変更しないでください。
カスタムプロセッサ
カスタムスプレッドシートプロセッサを挿入して、シート生成とインポート/エクスポートプロセスをカスタマイズできます。
組み込みの Naninovel.Spreadsheet.Processor を継承して、カスタムプロセッサクラスを作成します。ユーティリティはカスタムハンドラーを自動的に取得し、組み込みのハンドラーの代わりに使用します。
以下は、主要なオーバーライドポイントを持つサンプルプロセッサです。
using Naninovel.Spreadsheet;
public class CustomProcessor : Processor
{
public CustomProcessor (ProcessorOptions options) : base(options)
{
// エクスポート/インポートオプションにアクセスします。例:
// options.ScriptFolder
// options.SourceLocale
// ...
}
// スクリプトをプロジェクトからシートにエクスポートする方法をオーバーライドします。
protected override void ExportScripts () { }
// 管理テキストをプロジェクトからシートにエクスポートする方法をオーバーライドします。
protected override void ExportText () { }
// スクリプトをシートからプロジェクトにインポートする方法をオーバーライドします。
protected override void ImportScripts () { }
// 管理テキストをシートからプロジェクトにインポートする方法をオーバーライドします。
protected override void ImportText () { }
}EXAMPLE
ローカライズサンプル でツールの設定と使用方法の例を見つけてください。
UIのローカライズ
カスタムおよび組み込みUIの両方をローカライズするには、管理テキストプロバイダー コンポーネントを使用します。これは、他のカスタムゲームオブジェクト(プレハブ)をローカライズするためにも使用できます。管理テキストレコードの使用とローカライズの詳細については、管理テキストガイドを参照してください。
フォント
一部の言語でテキストを表示するには、互換性のあるフォントが必要です。Inter がデフォルトで使用され、Unicode 7.0のラテン文字、キリル文字、ギリシャ文字をサポートしています。
TIP
単一のフォントで多くの言語をサポートする予定の場合は、Notoフォント を検討してください。
右から左(RTL)言語(アラビア語、ヘブライ語、ペルシア語など)はTMProプリンターでサポートされていますが、追加の設定が必要です。詳細については、ガイド を参照してください。
CJK言語(中国語、日本語、韓国語)向けに公開する場合は、Character Extractorユーティリティを使用してTMProフォントアトラスサイズを最適化することを検討してください。ガイド を参照してください。
フォントを特定のロケールに関連付けるには、UI構成にあるフォントオプションの Apply On Locale プロパティを使用します。割り当てられると、ゲーム設定でそのロケールが選択されるたびにフォントが自動的に適用されます。
Font Change Configuration がテキストプリンターで適切に設定されていることを確認してください。フォントの構成手順については、UIガイド を参照してください。
EXAMPLE
ローカライズサンプル でローカライズ固有のフォントを設定する例を見つけてください。
コミュニティローカライズ
リリースされたタイトルが十分な人気を得ると、コミュニティが追加のローカライズを貢献したいと思うかもしれません。これは多くの場合、ユーザーが表示されるテキストを置き換えるためにビルドアセットをハッキングすることにつながります。Naninovelは、ビルドファイルを改ざんすることなくコミュニティローカライズを追加できるランタイムローカライズオプションを提供します。
ローカライズリソースの取り出し
ローカライズリソース(スクリプトおよび管理テキストドキュメント)を生成するには、-nani-eject 引数を指定してゲーム実行可能ファイルを実行します。例:
./game.exe -nani-ejectこれにより、通常どおりゲームが起動しますが、Naninovelが初期化された後、ローカライズリソースがUnityの 永続データフォルダ の Localization 下に取り出されます。たとえば、会社名が Foo でゲームタイトルが Bar の場合、Windowsでの取り出しパスは次のようになります。
C:/Users/User/AppData/LocalLow/Foo/Bar/Localization組み込みのローカライズに基づいてローカライズリソースを生成したい場合は、eject引数にロケールタグを追加します。たとえば、ゲームに ja-JP ローカライズがある場合は、次を使用します。
-nani-eject-ja-JPロケールタグが指定されていない場合、ソースロケールのドキュメントが取り出されます。
次に、ローカライズで使用するフォントを提供します。フォントファイルをLocalizationディレクトリの下にドロップします。例:Localization/Noto.ttf。
Localization/Info.txt ファイルに注意してください。デフォルトのコンテンツを置き換えて、ローカライズの作成者(1行目)と提供されたフォント名(2行目)を指定します。例えば:
Awesome Author
Noto.ttf— "Awesome Author" は、デフォルトで言語ドロップダウンに表示されます(開発者はこれをカスタマイズできます)。フォントは、ゲームの開始時にデフォルトで適用されます。
コミュニティローカライズの存在を検出するために必要であるため、Info.txt ファイルを削除または移動しないでください。
翻訳
ドキュメントが取り出されたら、翻訳を開始できます。プロセスは、上記の「スクリプトのローカライズ」および「UIのローカライズ」に似ています。スクリプトローカライズドキュメントは Localization/Text/Scripts に保存され、管理テキストドキュメントは Localization/Text にあります。
通常どおり(eject引数なしで)ゲームを再起動すると、永続データフォルダ内のローカライズリソースが自動的に使用されます。スクリプトローカライズの変更を有効にするには、関連するスクリプトを再ロードする必要があります(通常はセーブロードで十分です)が、場合によっては再起動が必要になることがあります。
開発者がゲームを更新した場合、再度取り出して既存のローカライズを更新できます。変更されていないソースマテリアルの既存の翻訳は保持され、新しい行とレコードが挿入されます。
翻訳が完了したら、Localization フォルダを共有し、エンドユーザーに前述の永続データディレクトリの下に配置してローカライズを有効にするように指示します。ローカライズを無効にするには、フォルダを削除します。
コンパイラのローカライズ
NaniScriptは、ドメイン固有言語の中でも、自然言語と密接に絡み合っているという点で特別です。つまり、著者は常に、プレイヤーに表示される散文(印刷されたテキスト行)とエンジン構造(コマンドとラベル)の入力を切り替えます。
英語でシナリオを作成している限り問題ありませんが、他の言語で作業している著者は、自然なテキストと英語ベースのコマンドを入力するためにキーボードレイアウトを切り替える必要があります。さらに悪いことに、一部のレイアウトには必要な文字(@ など)がない場合があり、作成者はキーコードを介してそれらを入力する必要があります。
英語以外の言語でのシナリオ作成を支援するために、Naninovelにはコンパイラのローカライズ機能があります。これにより、制御文字、コマンドとパラメータの名前、定数、そして基本的にシナリオ作成時に入力する必要があるすべてのものを再マッピングできます。
まず、Create -> Naninovel -> Compiler Localization からコンパイラローカライズアセットを作成します。アセットを選択し、コンパイラアーティファクトに必要なローカライズを指定します。
コマンド、パラメータ、関数、定数をオーバーライドするには、専用のリストを使用します。コマンドとパラメータに関連するドキュメントと使用例をローカライズすることもできます。これらはIDE拡張機能に表示されます。
リストは最初は空です。プロジェクトで使用可能なコマンドと関数をリストに入力するには、インスペクターコンテキストメニューを使用します。
必要な変更を行った後、Unityエディタを再起動し、シナリオスクリプトアセットを再インポートして変更を有効にします。
ローカライズされたアーティファクトはビジュアルエディタと IDE拡張機能 に伝播し、メタデータ同期後にオートコンプリートとホバー時のドキュメントを提供します。
EXAMPLE
コンパイラがロシア語とキーボードレイアウトにローカライズされている コンパイラローカライズサンプル を確認してください。