UnityのLocalizationパッケージを使ってアセットをローカライズする方法を簡単にまとめました。
- Localizationパッケージとは?
- インストール方法
- セットアップ
- テクスチャをローカライズする
- 文字列の静的なローカライズ
- 文字列の動的なローカライズ
- RectTransformをローカライズすることもできる
- LocalizationとAddressables
- これ以降の学習ロードマップ
- 関連
- 参考
Unity2020.3.15f2
Localization 1.0.5
Localizationパッケージとは?
Localizationパッケージとは、Unityが公式で提供しているローカリゼーションのためのパッケージです。
文字やアセットを多言語に対応し、管理したりアクティブな言語を切り替えたりできます。
本記事ではこのLocalizationパッケージを使う上で最初に覚えておくべき基礎知識についてまとめます。
要件として、まずLocalizationパッケージはUnity2019.4以上での使用が推奨されています。
さらに仕様の関係上、本記事で取り扱うワークフローはUnity2020.3以降でのみ有効となりますのでご注意ください。
インストール方法
インストールは、Unity2021.2以上であればPackage ManagerでLocalizationと検索すれば表示されます。
Unity2021.2よりも前のバージョンの場合、Package Managerで+ボタン > Add package from git URLを選択し、
com.unity.localizationと入力することでインストールすることができます。
Package Managerについては必要に応じて以下の記事を参照してください。
セットアップ
パッケージをインストールしたらまず初期設定を行なっていきます。
まず初めにEdit > Project Settings... > Localizationを選択して、Createボタンを押してLocalization Settingsファイルを作ります。
Localizationパッケージは他にも複数のファイルを作るため、専用のフォルダ内に配置することをお勧めします。

すると以下のような表示に変わるので、Locale Generatorを起動します。

Locale Generatorが起動したら使用する言語にチェックをつけてGenerate Localesを選択することでLocaleファイルを作成します。

最後にデフォルトの言語を設定します。
このためには以下のようにSpecific Locate SelectorとProject Local Identifierを任意の言語に設定します。

Locale Selectorは本当はもう少し適切に設定する必要があります。
これについては以下の記事にまとめていますので、必要になったら参照してください。
テクスチャをローカライズする
それではまずテクスチャをローカライズ設定していきます。
Window > Asset Management > Localization Tables から Localization Tablesウィンドウを開きます。
次に、TypeをAsset Table Collectionに設定してCreateボタンをクリックします。
各Localeに応じたAsset Tableアセットと、それらの参照をもつAsset Table Collectionアセットが作られます。

次にWindow > Asset Management > Localization Scene Controlsを選択し以下のウィンドウを開きます。
Asset Tableには先ほど作ったAsset Table Collectionを設定します。

次に実際にその言語用のアセットを設定していきます。
Asset Localeに対象の言語を選択し、Track Changesにチェックを入れておきます。

この状態でシーンのアセットを編集します。
言語を切り替えながらアセットを設定していくと、その言語とアセットの対応情報が記録されます。

ここまで設定し、再生するとGameViewにLocale切り替えドロップダウンが表示されるので、これを設定するとローカライズ設定を確認できます。

ローカライズ設定したGameObjectにはGame Object Localizerというコンポーネントが自動的にアタッチされます。
各言語に対する設定はここから追加、削除、編集することができます。

またLocalization Tablesウィンドウから確認することもできます。

文字列の静的なローカライズ
文字列をローカライズするには、まず上述のテクスチャのローカライズ手順と同様にLocalization Tablesウィンドウを開きます。
次に、TypeをString Table Collectionに設定してCreateボタンをクリックします。
各Localeに応じたString Tableアセットと、それらの参照をもつString Table Collectionアセットが作られます。

次にLocalization Scene ControlsウィンドウのString Tableに上記のString Table Collectionを設定します。

あとはテクスチャの時と同様にTextコンポーネントに各言語の設定を行うだけです。
再生して言語を切り替えると以下のように見た目が切り替わることが確認できます。

文字列の動的なローカライズ
いまたとえば「動的に変化する数値によって出す文字列を変える、しかもその文字列をローカライズ対応する」という要件を考えます。
このようなケースではSmart Stringsが使えます。
Smart Stringsは要は「ある値をある規則に基づいて変換する」機能です。
たとえば以下は「example-countが1,2,3だったらそれぞれ一、二、三という文字列に変換する」Smart Stringsの例です。
{example-count:choose(1|2|3):一|二|三}
これをローカライズに使う場合、まずLocalization TablesウィンドウでSmart Stringsを使ったエントリを作成します。
この時、Smartチェックボックスにチェックを入れる点に注意してください。

これを使用するにはTextコンポーネントにLocalize String Eventコンポーネントをアタッチします。
さらにこのコンポーネントのString Referenceに先ほどのエントリを指定し、
Local VariablesにSmart Stringsで使ったexample-countという名前のint型の値を指定します(値は2にしておきます)。

これを再生すると以下のような結果が得られます。

さて上述の通り、Smart Stringsは「ある値」を「ある規則」に基づいて変換する機能です。
この「ある値」はSourceと呼ばれ、今回のようなコンポーネントに直接入力する以外にもいろいろな設定方法があります。
たとえばScriptable Objectを使って設定したり、スクリプトに書いた値を取得することもできます。
本記事では細かくは説明しませんが、マニュアルに全て書いてあるのでこの辺りはマニュアルを参照してください。
また、「ある規則」についてはFormaterと呼ばれ、これもまた多くの種類があります。
たとえば「値がマイナスだったら」のような条件により結果を変えたり、英語の場合、複数形だったらsをつける、などといった処理もできます。
こちらも本記事では細かくは説明しませんので詳細はマニュアルを参照してください。
RectTransformをローカライズすることもできる
さて文字列をローカライズする際によくあるのが、違う言語に翻訳した際に文字列の幅が大きくなって入りきらなくなり、
結果として文字列がUIからはみ出て途切れたり、意図しない改行が行われたりしてしまう事象です。
以下のサイトによれば、日本語から英語に翻訳する場合にはあらかじめ日本語テキストの20%〜60%の余白を持たせておかないとうまく表示できないようです。
本来は想定しているすべての言語に対応できるデザイン、レイアウトが理想的だとは思いますが、
LocalizationパッケージではRectTransformをローカライズして言語ごとにUIのサイズを変更することもできます。
ローカライズの手順は画像の場合とほぼ同様で、Localization Scene Controlsを開いてActive Localeを変えながらRect Transformの値を編集します。
プロパティフィールドが緑色になればローカライズができている証拠です。

LocalizationとAddressables
さて先ほどローカライズに使ったテクスチャのInspectorを見てみると、Addressableアセットシステムのアドレスが割り振られていることが確認できます。

つまりLocalizationパッケージはAddressableの使用を前提としています。
したがってアプリをビルドする前にAddressableビルドが必要なので、この点認識しておきましょう。
Addressablesのビルドの仕方は以下の記事に記載していますので必要に応じて参照してください。
これ以降の学習ロードマップ
さてここまででLocalizationパッケージの基本的な使い方をまとめました。
しかしながら使いこなすにはさらなる理解が必要なので、その手始めとなる記事とその概要を以下にまとめておきます。
二つのローカライズワークフロー
ここまではLocalization Scene Controlsを使ってローカライズを行ってきました。
実はLocalizationパッケージにはこれの他にもう一つのワークフローが用意されています。
これについては以下の記事にまとめています。
ロード・ダウンロードの仕組みを理解する
前述の通り、LocalizationパッケージはAddressablesと組み合わせて動作する前提で作られています。
小さいアプリで簡単に使う分にはAddressablesのことをあまり意識せずに使えるように設計されていますが、
きちんと使うためにはAddressablesとの連携部分、つまりロードやダウンロード部分の理解は必須です。
これについては以下の記事にまとめています。
文字列をCSVで入出力・SpreadSheetと連携する
文字列データはCSVで入出力することができます。
またSpreadSheetと連携することもできます。