ローカライズ
すべてのゲームリソース(スクリプト、オーディオ、ボイス、背景など)は、複数の言語/文化にローカライズできます。
プロジェクトの作成に最初に使用されたリソースは、デフォルトでソースロケールに関連付けられます。たとえば、ゲームが最初に英語で作成された場合、元の(ソース)シナリオスクリプト、UI、背景の看板などはすべて英語です。つまり、ソースロケールは en(または、特定の地域に個別のロケールを使用する場合は en-GB / en-US など)です。
ソースロケールは、Naninovel -> Configuration -> Localization メニューの Source Locale プロパティで変更できます。Source Locale 設定は、プロジェクトのソースアセットに関連付けられたロケールの名前(ID)のみを決定し、設定の「Language」ドロップダウンおよび関連するエンジンAPIでロケールを区別するために使用されます。
ヒント
ソースのローカライズ可能なテキストをサードパーティ(校正用など)と共有したいが、ソースシナリオスクリプトは共有したくない場合は、Source Locale を実際には使用しない無関係な言語に変更し、Expose Source Locale を無効にして、ソースマテリアル専用のロケールを追加します。その後、そのロケールをローカライズ ドキュメント または スプレッドシート にエクスポートできます。
ロケールを追加するには、Resources/Naninovel/Localization(ローカライズリソースルート)内に、サポートしたい RFC5646 言語タグの1つと同じ名前のサブフォルダーを作成します。たとえば、ドイツ語を追加するには、Resources/Naninovel/Localization/de を作成します。組み込みのゲーム設定UIの「Language」ドロップダウンには、追加されたすべてのロケールが自動的に含まれます。
ソースロケール用にローカライズリソースルートにサブフォルダーを作成する必要はないことに注意してください。ローカライズリソースルートの外に保存されているすべてのプロジェクトリソースは、デフォルトでソースロケールに属します。
ローカライズリソースルートパスは、ローカライズ構成メニューの Loader > Path Prefix プロパティで変更できます。構成されたパスは「Resources」フォルダー(「Assets」ではない)に対する相対パスであることに注意してください。Unityは「Resources」フォルダーを特別な方法で処理します。ロケール固有のアセットを整理するために、プロジェクト内の任意の場所にこのようなフォルダーを複数持つことができます。
ヒント
「Resources」フォルダーを使用する代わりに、別のリソースプロバイダーを選択できます。たとえば、Addressables を使用すると、ロケール固有のリソースをメインゲームパッケージとは独立してバンドルし、オンデマンドでダウンロードできます。パッケージがインストールされている場合、Naninovelは生成されたローカライズドキュメントをAddressablesに自動的に登録します。
デフォルトロケール
プレイヤーが初めてゲームを実行したときにデフォルトで選択されるロケールを指定するには、ローカライズ構成メニューの Default Locale プロパティを使用します。このプロパティが指定されていない場合、ゲームは Source Locale で開始されます。
Auto Detect Locale オプションが有効になっており、ゲームが初めて実行される場合、Naninovelはシステム言語に基づいてロケールの検出を試みます。検出が成功し、ロケールがゲームでサポートされている場合は、それが選択されます。それ以外の場合、ゲームは Default Locale にフォールバックします。
警告
自動的に検出されたロケールには指定子が含まれません。つまり、システム言語が英語の場合、検出されるロケールは en であり、en-US や en-GB になることはありません。これは、Unityの システム言語検出 の制限です。自動検出に依存する場合は、追加するロケールに指定子を使用しないでください。
リソースのローカライズ
ローカライズリソースルート内に、ゲーム設定で対応するローカライズが選択されたときにソースリソースの代わりに使用されるリソースを保存します。
たとえば、ja-JP ロケールが選択されたときにメイン背景(アクターID MainBackground)の「City」外観スプライトを置き換えたい場合は、ローカライズされたバージョンを次の場所に配置します。
Resources/Naninovel/Localization/ja-JP/Backgrounds/MainBackground/Cityスクリプトのローカライズ
リソースのローカライズスキームは、シナリオスクリプトと管理テキストドキュメントを除く、ほとんどのリソースタイプで機能します。これらのタイプについては、Naninovel -> Tools -> Localization からアクセスできるローカライズツールを使用してください。
まず、Script 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)を選択していることを確認してください。有効な出力ロケールフォルダーが選択されると、フィールドの下のラベルにその旨とターゲットロケール名が表示されます。
ヒント
特定のロケールフォルダーではなくローカライズリソースルートディレクトリを選択することで、プロジェクト内のすべてのロケールのリソースを一度に生成できます。ツールはサブフォルダーを反復処理し、それぞれのリソースを生成します。
「Generate Localization Documents」を押して、ローカライズリソースを作成または更新します。2回目以降の実行では、ツールは以前に生成されたローカライズドキュメントを考慮し、ソースマテリアルが変更されていない場合はローカライズ済みのエントリを保持します。
スクリプトローカライズドキュメントは「Scripts」フォルダーの下にグループ化され、次の形式のステートメントで構成されます。
# ID
; Source text
Translation text# ID 行は、ローカライズされたコンテンツの一意の識別子であり、変更しないでください。
; Source text 行には、翻訳する元のコンテンツが含まれています。コメントなので、変更してもゲームには影響しません。翻訳者の便宜のために提供されています。
実際の翻訳は、コメント行の直後に配置します。読みやすくするために複数行を使用できます(結合されます)が、次の # ID 行より前に記述してください。例:
# aj0e5dea
; 吾輩は<b>猫</b>である。名前はまだ無い。<br>どこで生れたかとんと見当がつかぬ。
Оценивая блеск <b>металлического</b> шарика, пространство равноденственно.<br>
Противостояние есть метеорный дождь.結合された行
翻訳対象の汎用テキスト行にインラインコマンドまたは式が含まれている場合、その行は複数のテキストフラグメントに分割され、それぞれが一意のテキストIDにマップされることがあります。生成されたローカライズドキュメントでは、このようなフラグメントはパイプ記号 | を使用して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!注釈は、翻訳者にローカライズされたテキストのコンテキストを提供します。翻訳には注釈行(; > で始まる行)を含めないでください。翻訳の対象となるのは、; だけで始まる(> が付かない)行のみです。
例
ローカライズサンプル にローカライズ設定の例があります。プロジェクトでのローカライズの設定に問題がある場合は、参考にしてください。
スプレッドシート
プロジェクトのすべてのシナリオスクリプトと管理テキストのローカライズをスプレッドシートにまとめることができます。たとえば、翻訳者や編集者とテキストを共有する場合に使用します。
スプレッドシートツールでは、ローカライズ可能なテキストを .csv シートに抽出し、編集後のシートをプロジェクトに再インポートできます。
エクスポートする前に、必ずローカライズツール(Naninovel -> Tools -> Localization)でローカライズデータを生成してください。Locale Folder (output) プロパティにローカライズルートディレクトリ(Resources/Naninovel/Localization)を選択することで、すべてのロケールのリソースを一度に生成できます。
ローカライズデータが最新になったら、Naninovel -> Tools -> Spreadsheet からスプレッドシートツールを開きます。
必要なフォルダーを指定します。
- Input Scripts Folder — ソース
.naniスクリプトが保存されているフォルダー(例:Assets/Scenario)。 - Input Text Folder — 管理テキストドキュメント が生成されるフォルダー(例:
Assets/Resources/Naninovel/Text)。フォルダーがない場合は、ツールを使用して管理テキストドキュメントを生成してください。 - Input Localization Folder — ロケールリソースが保存されているローカライズルート(例:
Assets/Resources/Naninovel/Localization)。 - Output Folder — 生成または編集されたシートの出力先。
「Export」をクリックして、選択した出力先にシートをエクスポートします。
各スクリプトと管理テキストドキュメントは個別のシートにエクスポートされます。各シートには、ローカライズ可能なテキストIDを保存する「key」列と、ロケールごとの追加列があります。「key」以外の任意の列を変更できます。ただし、ソースロケール列を変更してもインポートには影響しません。
Include Annotations が有効になっている場合、生成されたシートには、ソーススクリプトコンテンツ(話者名、インラインコマンド、コメント)を含む列も含まれます。その列はインポート時には無視されます。
Import Source が有効になっている場合、スプレッドシートのソースロケール列がシナリオスクリプトに直接書き込まれます。これは、翻訳と併せてソースシナリオの内容を校正する場合に便利です。既存の翻訳との関連付けを維持するため、テキストIDが割り当てられたテキストのみが書き換えられることに注意してください。
シートを編集した後、「Import」をクリックしてデータをプロジェクトに戻します。
警告
スプレッドシートからインポートすると、プロジェクトのローカライズドキュメントが上書きされます。競合を防ぐため、スプレッドシートの編集中はこれらのドキュメントを変更しないでください。
カスタムプロセッサー
カスタムスプレッドシートプロセッサーを注入して、シート生成とインポート/エクスポートの処理をカスタマイズできます。
組み込みの 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 () { }
}例
ローカライズサンプル にツールの設定と使用方法の例があります。
UIのローカライズ
カスタムおよび組み込みUIの両方をローカライズするには、管理テキストプロバイダー コンポーネントを使用します。これは、他のカスタムゲームオブジェクト(プレハブ)をローカライズするためにも使用できます。管理テキストレコードの使用とローカライズの詳細については、管理テキストガイドを参照してください。
フォント
一部の言語でテキストを表示するには、互換性のあるフォントが必要です。Inter がデフォルトで使用され、Unicode 7.0のラテン文字、キリル文字、ギリシャ文字をサポートしています。
ヒント
単一のフォントで多くの言語をサポートする予定の場合は、Notoフォント を検討してください。
右から左に記述する(RTL)言語(アラビア語、ヘブライ語、ペルシア語など)はTMProプリンターでサポートされていますが、追加の設定が必要です。詳細については、ガイド を参照してください。
CJK言語(中国語、日本語、韓国語)向けに公開する場合は、Character Extractorユーティリティを使用してTMProフォントアトラスサイズを最適化することを検討してください。ガイド を参照してください。
フォントを特定のロケールに関連付けるには、UI構成にあるフォントオプションの Apply On Locale プロパティを使用します。割り当てられると、ゲーム設定でそのロケールが選択されるたびにフォントが自動的に適用されます。
Font Change Configuration がテキストプリンターで適切に設定されていることを確認してください。フォントの構成手順については、UIガイド を参照してください。
例
ローカライズサンプル にローカライズ固有のフォントを設定する例があります。
コミュニティローカライズ
リリースされたタイトルが十分な人気を得ると、コミュニティが追加のローカライズを提供したいと考えることがあります。これは多くの場合、プレイヤーが表示テキストを置き換えるためにビルドアセットをハッキングすることにつながります。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」は、デフォルトで「Language」ドロップダウンに表示されます(開発者はこれをカスタマイズできます)。フォントは、ゲームの開始時にデフォルトで適用されます。
コミュニティローカライズの存在を検出するために必要であるため、Info.txt ファイルを削除または移動しないでください。
翻訳
ドキュメントが取り出されたら、翻訳を開始できます。プロセスは、上記の「スクリプトのローカライズ」および「UIのローカライズ」に似ています。スクリプトローカライズドキュメントは Localization/Text/Scripts に保存され、管理テキストドキュメントは Localization/Text にあります。
通常どおり(eject引数なしで)ゲームを再起動すると、永続データディレクトリ内のローカライズリソースが自動的に使用されます。スクリプトローカライズの変更を有効にするには、関連するスクリプトを再ロードする必要があります(通常はセーブ・ロードで十分です)が、場合によっては再起動が必要になることがあります。
開発者がゲームを更新した場合、再度取り出して既存のローカライズを更新できます。変更されていないソースマテリアルの既存の翻訳は保持され、新しい行とレコードが挿入されます。
翻訳が完了したら、「Localization」フォルダーを共有し、プレイヤーに前述の永続データディレクトリの下に配置してローカライズを有効にするように指示します。ローカライズを無効にするには、フォルダーを削除します。
コンパイラーローカライズ
NaniScriptは、ドメイン固有言語の中でも、自然言語と密接に絡み合っているという点で特別です。つまり、シナリオライターは、プレイヤーに向けた文章(表示されるテキスト行)とエンジンの構文要素(コマンドやラベル)の入力を絶えず切り替えることになります。
英語でシナリオを作成している限り問題ありませんが、他の言語で作業するシナリオライターは、自然言語のテキストと英語ベースのコマンドを入力するためにキーボードレイアウトを切り替える必要があります。さらに悪いことに、一部のレイアウトには必要な文字(@ など)がない場合があり、ライターはキーコードを使ってそれらを入力しなければなりません。
英語以外の言語でのシナリオ作成を支援するために、Naninovelにはコンパイラーローカライズ機能があります。これにより、制御文字、コマンドとパラメーターの名前、定数、そして基本的にシナリオ作成時に入力する必要があるすべてのものを再マッピングできます。
まず、Create -> Naninovel -> Compiler Localization からコンパイラーローカライズアセットを作成します。アセットを選択し、コンパイラーの各要素をどのようにローカライズするか指定します。
コマンド、パラメーター、クエリ、定数をオーバーライドするには、専用のリストを使用します。コマンドとパラメーターに関連するドキュメントと使用例をローカライズすることもできます。これらはIDE拡張機能に表示されます。
リストは最初は空です。プロジェクトで使用可能なコマンドとクエリをリストに取り込むには、インスペクターのコンテキストメニューを使用します。
必要な変更を行った後、Unityエディターを再起動し、シナリオスクリプトアセットを再インポートして変更を有効にします。
ローカライズした内容はストーリーエディターと IDE拡張機能 に反映され、メタデータ同期後に自動補完とホバー時のドキュメントで利用できます。
例
コンパイラーがロシア語とそのキーボードレイアウト向けにローカライズされている コンパイラーローカライズサンプル を確認してください。