XLIFF
XML Localisation Interchange File Format (XLIFF) は、ローカライゼーションデータを格納するための、標準化された方法のひとつです。XLIFF は多くの種類の CAT (Computer Aided Translation/コンピュータ支援翻訳) ツールにサポートされているため、翻訳者との作業にあたってスムーズな翻訳パイプラインが実現されます。
Unity から String Table Collection を 1 つまたは複数の XLIFF ファイルにエクスポートし、外部の CAT ツールで編集し、最後にそれらを翻訳が更新された状態で Unity に再インポートすることができます。
XLIFF 規格のサポート
Localization パッケージは XLIFF のバージョン 1.2 と 2.0 の両方をサポートしています。この API は、両方のバージョンで機能する簡略化されたバージョンの XLIFF 規格を提供します。また、バージョン固有の機能にスクリプトでアクセスすることもできます。
簡略化された XLIFF 規格は、以下の構造を持っています。各ノードに関する詳細は、図の下の表を参照してください。
XLIFF ドキュメント には、1 つまたは複数の XLIFF ファイルが含まれています。各ファイルには、少なくとも 1 つの Translation Unit または Group が含まれており、Note が含まれることもあります。
Translation Unit には、Source Language Table エントリーが 1 つと、任意で Target Language Table エントリーが 1 つ含まれます。Note が含まれる場合もあります。
Group には、少なくとも 1 つの Translation Unit あるいは Group が含まれます。Note が含まれる場合もあります。
| 用語 | 説明 |
|---|---|
| File | File とは、String Table 全体から抽出されたローカライゼーション素材です。File には元々のアセットパスとその GUID への参照が含まれるため、Unity は File に加えられた全ての変更を同じ String Table 内にインポートして戻すことができます。 |
| Translation Unit | Translation Unit は、String Table から取得されたエントリーを表します。ソーステキストと翻訳テキスト (存在する場合) が含まれています。Translation Unit には、Key (キー) 名と Id にマップされる名前と ID も含まれるので、Localization システムが更新された翻訳を再インポートする時に、その翻訳をテーブルエントリーに正しくマップすることができます。 |
| Group | XLIFF 規格は、構造化された階層内にユニットを編成する方法として Group を使用します。Localization システムは各 String Table Collection を Group として扱います。Collection Name を Group 名として使用し、Shared Table Data アセット GUID を Group Id として扱います。つまり、Localisation システムが XLIFF ファイルをインポートする時に、追加的なユーザー入力なしで元々の XLIFF Group を見付けて更新できます。 |
| Notes | Note は、詳細な文脈を提供するテキストです。Localisation システムは XLIFF ファイルをインポートする際に、Localization Metadata コメントから Note を生成し、それらを XLIFF 内にインポートします。 Note には以下の 3 つの異なるカテゴリがあり、これらは Note のソースを示します。
|
XLIFF の例
以下の画像は、XLIFF ファイルから生成された String Table Collection 内のデータを示しています。ソース言語は English (英語) 、ターゲット言語は Spanish (スペイン語) を使用しています。

以下はサポートされた 2 つのバージョンの XLIFF の出力を示したものです。
バージョン 1.2
<?xml version="1.0"?>
<xliff xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file original="Assets/Tables/Example Table_es.asset" source-language="en" target-language="es">
<header>
<skl>
<external-file href="Assets/Tables/Example Table_es.asset" uid="8e0d86343d612504c9dda03e44e5026d" />
</skl>
</header>
<body>
<group id="c56c9f2391765d143baefc05182d5138" resname="Example Table">
<trans-unit id="6633451520" resname="MSG_1">
<source>Hello</source>
<target>Hola</target>
</trans-unit>
<trans-unit id="9531715584" resname="START_GAME">
<source>Start</source>
<target>Comenzar</target>
</trans-unit>
<trans-unit id="15160471552" resname="EXIT_GAME">
<source>Exit</source>
<target>Salir</target>
</trans-unit>
</group>
</body>
</file>
</xliff>
バージョン 2.0
<?xml version="1.0"?>
<xliff xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" srcLang="en" trgLang="es" xmlns="urn:oasis:names:tc:xliff:document:2.0">
<file id="8e0d86343d612504c9dda03e44e5026d" original="Assets/Tables/Example Table_es.asset">
<group id="c56c9f2391765d143baefc05182d5138" name="Example Table">
<unit id="6633451520" name="MSG_1">
<segment>
<source>Hello</source>
<target>Hola</target>
</segment>
</unit>
<unit id="9531715584" name="START_GAME">
<segment>
<source>Start</source>
<target>Comenzar</target>
</segment>
</unit>
<unit id="15160471552" name="EXIT_GAME">
<segment>
<source>Exit</source>
<target>Salir</target>
</segment>
</unit>
</group>
</file>
</xliff>
XLIFF へのデータのエクスポート
Localization システムから XLIFF ドキュメントにデータをエクスポートするには、Export XLIFF ウィンドウか Xliff スクリプティング API を使用する必要があります。
Export XLIFF ウィンドウ
Export XLIFF ウィンドウを開くには、エクスポートしたいデータ (Localization Table、String Table、または String Table Collection) のウィンドウを開き、More メニュー (⋮) を選択し、Export > XLIFF と選択してください。

デフォルトでは、ウィンドウ内の全てのテーブルがエクスポート対象として選択されます。

| プロパティ | 説明 |
|---|---|
| Selected Tables | Selected Tables リストを使用して、Localization システムが XLIFF にエクスポートすべき String Table を設定してください。 |
| Source Language | Source Language には、XLIFF Translation Unit Source フィールドに設定したい言語を設定します。 これはプロジェクトの元々の言語である必要はありません。例えば、ゲームが日本語で開発されていてもロシア版のローカライゼーションを行う翻訳者はソース言語として英語を必要とする場合もあります。英語の翻訳が使用可能であれば、ロシア語翻訳の XLIFF ファイルの Source Language を英語に設定します。 |
| 名前 | Name には、生成された全ての XLIFF ファイルに使用したいベースファイル名前を設定します。Localization システムは、この名前とターゲット言語コード (例えば、XliffImportTests という名前は、ロシア語版をエクスポートした場合は XliffImportTests-ru になります) |
| XLIFF Version | XLIFF Version には、XLIFF ファイルの生成に使用したい XLIFF バージョンを設定します。これは通常は、生成された XLIFF ファイルのインポート先のソフトウェアに応じて決定する必要があります。最も一般的にサポートされている XLIFF バージョンは 1.2 です。 |
| Export Selected | 選択された全てのテーブルをエクスポートする準備が整ったら Export Selected ボタンを選択します。生成された XLIFF ファイルを保存するディレクトリを選択するよう促すプロンプトが Unity によって表示されます。 |
XLIFF ドキュメントのインポート
XLIFF ドキュメントはいくつかの方法でインポートできます。Localization Table ウィンドウから自動で行う方法と、String Table あるいは String Table Collection ウィンドウから行う方法があります。
自動インポート
自動 XLIFF インポートの場合、XLIFF ドキュメントと既存の String Table Collection の照合 (マッチング) が自動的に試行されます。この方法を用いると、簡単に "データをエクスポートし、それを翻訳を含めて更新し、更新されたデータを再インポートする" ことができます。
自動インポートを行うには、Localization Tables ウィンドウを開き、More メニュー (⋮) を選択し、Import を選択します。

特定のディレクトリおよびサブディレクトリ内の .xlf または .xliff 拡張子を持つ全てのファイルを読み込むには、XLIFF Directory を選択します。単一のファイルを読み込むには XLIFF File を選択します。
Unity は、XLIFF ドキュメントをインポートする時に、データを入力するための既存の String Table の検索も行います。元々の XLIFF ドキュメントが Unity によって作成された場合、アセットはその名前と GUID による参照を既に持っています (詳細は [XLIFF 規格のサポート](#XLIFF Standard Support) を参照してください)。XLIFF ドキュメントが外部のツールによって作成された場合、Unity は以下のチェックを実行してそれを既存のテーブルと照合します。
Unity は、XLIFF ファイル ID が String Table ID と一致するかどうかを確認します。一致した場合は、その String Table が String Table Collection の一部であるかどうかを確認し、そうであった場合は、その String Table Collection に XLIFF ファイルをインポートします。
String Table が String Table Collection の一部でない場合や、ファイル ID が String Table GUID と一致しない場合は、Unity は、そのファイルがグループを含んでいるかどうかを確認します。含んでいない場合は新しい String Table Collection が作成されます。グループを含んでいる場合は、Group ID が Shared Table Data GUID と一致するかどうかの確認と、String Table Collection が Group ID あるいは Group 名と同じ名前で存在するかどうかの確認が行われます。存在している場合はその String Table Collection に XLIFF ファイルがインポートされ、存在していない場合は新しい String Table Collection が作成されます。
String Table Collection 内へのインポート
選択された String Table Collection に XLIFF ドキュメントをインポートするには、String Table Collection ウィンドウを開き、More メニュー (⋮) を選択し、Import > XLIFF と選択してください。Unity は、この String Table Collection を XLIFF ドキュメント内の全てのデータに使用し、XLIFF ファイルの Source Language および Target Language フィールドを、更新する String Tables を特定するために使用します。

String Table 内へのインポート
XLIFF データを String Table 内に直接インポートし、XLIFF ファイルのターゲット言語を無視するには、String Table ウィンドウを開き、More メニュー (⋮) を選択し、Import > XLIFF と選択してください。

XLIFF API
Unity は、インターフェースベースのレイヤーを使用して、XLIFF バージョン 1.2 および 2.0 用の簡略化された API を提供します。このレイヤーは全ての XLIFF 機能をサポートするものではありませんが、完全版だけに含まれる機能を使用したい場合は、関連の具象クラスにキャストすることができます。
以下の例は XLIFF ドキュメントを読み取ります。
public static void LoadXliffFile(string file)
{
var document = XliffDocument.Parse(new FileStream(file, FileMode.Open, FileAccess.Read));
if (document.Version == "1.2")
{
var v12 = document as UnityEditor.Localization.Plugins.XLIFF.V12.xliff;
// Unity now has access to a 1.2 XLIFF document and can use 1.2 features.
// The V12 namespace contains all the 1.2-specific nodes.
}
else
{
var v20 = document as UnityEditor.Localization.Plugins.XLIFF.V20.xliff;
// Unity now has access to a 2.0 XLIFF document and can use 2.0 features.
// The V20 namespace contains all the 2.0-specific nodes.
}
}
以下の例は XLIFF ファイルのエクスポートとインポートを行います。
public static void ExportTable(StringTable source, StringTable target, string dir)
{
Xliff.Export(source, dir, XliffVersion.V20, new[] { target });
}
public static void ExportCollection(StringTableCollection collection, LocaleIdentifier sourceLanguage, string dir)
{
Xliff.Export(sourceLanguage, dir, "My XLIFF Export", XliffVersion.V12, new[] { collection });
}
public static void ImportIntoStringTable(StringTable table, string file)
{
Xliff.ImportFileIntoTable(file, table);
}
public static void ImportIntoCollection(StringTableCollection collection, string file)
{
Xliff.ImportFileIntoCollection(collection, file);
}