【Unity】Localizationパッケージ入門 - 基本的な使い方〜学習ロードマップまで

UnityのLocalizationパッケージを使ってアセットをローカライズする方法を簡単にまとめました。

Unity2020.3.15f2
Localization 1.0.5

Localizationパッケージとは?

Localizationパッケージとは、Unityが公式で提供しているローカリゼーションのためのパッケージです。
文字やアセットを多言語に対応し、管理したりアクティブな言語を切り替えたりできます。

docs.unity3d.com

本記事ではこの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については必要に応じて以下の記事を参照してください。

light11.hatenadiary.com

セットアップ

パッケージをインストールしたらまず初期設定を行なっていきます。
まず初めにEdit > Project Settings... > Localizationを選択して、Createボタンを押してLocalization Settingsファイルを作ります。
Localizationパッケージは他にも複数のファイルを作るため、専用のフォルダ内に配置することをお勧めします。

f:id:halya_11:20211101162141p:plain:w600
Localization Settingsを作成

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

f:id:halya_11:20220403175513p:plain:w600
Locale Generatorを起動

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

f:id:halya_11:20220403175532p:plain:w400
Localeを作成

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

f:id:halya_11:20211101165812p:plain:w600
デフォルトのLocaleを設定

Locale Selectorは本当はもう少し適切に設定する必要があります。
これについては以下の記事にまとめていますので、必要になったら参照してください。

light11.hatenadiary.com

テクスチャをローカライズする

それではまずテクスチャをローカライズ設定していきます。

Window > Asset Management > Localization Tables から Localization Tablesウィンドウを開きます。
次に、TypeをAsset Table Collectionに設定してCreateボタンをクリックします。
各Localeに応じたAsset Tableアセットと、それらの参照をもつAsset Table Collectionアセットが作られます。

f:id:halya_11:20211101173652p:plain:w600
New Table Collection

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

f:id:halya_11:20211101175619p:plain:w600
Localization Scene Controls

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

f:id:halya_11:20211101175755p:plain:w600
設定

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

f:id:halya_11:20211101181043g:plain:w600
アセットを設定

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

f:id:halya_11:20211101181623g:plain:w400
Game View

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

f:id:halya_11:20211101181750p:plain:w600
Game Object Localizer

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

f:id:halya_11:20211101181944p:plain:w600
Localization Tablesウィンドウ

文字列の静的なローカライズ

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

f:id:halya_11:20211101182323p:plain:w600
String Table Collectionを作成

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

f:id:halya_11:20211101182645p:plain:w600
String Table Collectionを設定

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

f:id:halya_11:20211101182904g:plain:w400
切り替え

文字列の動的なローカライズ

いまたとえば「動的に変化する数値によって出す文字列を変える、しかもその文字列をローカライズ対応する」という要件を考えます。
このようなケースではSmart Stringsが使えます。
Smart Stringsは要は「ある値をある規則に基づいて変換する」機能です。

たとえば以下は「example-countが1,2,3だったらそれぞれ一、二、三という文字列に変換する」Smart Stringsの例です。

{example-count:choose(1|2|3):一|二|三}

これをローカライズに使う場合、まずLocalization TablesウィンドウでSmart Stringsを使ったエントリを作成します。
この時、Smartチェックボックスにチェックを入れる点に注意してください。

f:id:halya_11:20211101192055p:plain:w600
Smart Stringsを使ったローカライズ文字列を作成

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

f:id:halya_11:20211101192427p:plain:w600
Localize String Event

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

f:id:halya_11:20211101192830g:plain:w400
結果

さて上述の通り、Smart Stringsは「ある値」を「ある規則」に基づいて変換する機能です。

この「ある値」はSourceと呼ばれ、今回のようなコンポーネントに直接入力する以外にもいろいろな設定方法があります。
たとえばScriptable Objectを使って設定したり、スクリプトに書いた値を取得することもできます。
本記事では細かくは説明しませんが、マニュアルに全て書いてあるのでこの辺りはマニュアルを参照してください。

docs.unity3d.com

また、「ある規則」についてはFormaterと呼ばれ、これもまた多くの種類があります。
たとえば「値がマイナスだったら」のような条件により結果を変えたり、英語の場合、複数形だったらsをつける、などといった処理もできます。
こちらも本記事では細かくは説明しませんので詳細はマニュアルを参照してください。

docs.unity3d.com

RectTransformをローカライズすることもできる

さて文字列をローカライズする際によくあるのが、違う言語に翻訳した際に文字列の幅が大きくなって入りきらなくなり、
結果として文字列がUIからはみ出て途切れたり、意図しない改行が行われたりしてしまう事象です。

以下のサイトによれば、日本語から英語に翻訳する場合にはあらかじめ日本語テキストの20%〜60%の余白を持たせておかないとうまく表示できないようです。

www.andiamo.co.uk

本来は想定しているすべての言語に対応できるデザイン、レイアウトが理想的だとは思いますが、
LocalizationパッケージではRectTransformをローカライズして言語ごとにUIのサイズを変更することもできます。

ローカライズの手順は画像の場合とほぼ同様で、Localization Scene Controlsを開いてActive Localeを変えながらRect Transformの値を編集します。
プロパティフィールドが緑色になればローカライズができている証拠です。

f:id:halya_11:20220403181431p:plain
RectTransformのローカライズ

LocalizationとAddressables

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

f:id:halya_11:20211101194612p:plain:w600
アドレスが付与されている

つまりLocalizationパッケージはAddressableの使用を前提としています。
したがってアプリをビルドする前にAddressableビルドが必要なので、この点認識しておきましょう。

Addressablesのビルドの仕方は以下の記事に記載していますので必要に応じて参照してください。

light11.hatenadiary.com

これ以降の学習ロードマップ

さてここまででLocalizationパッケージの基本的な使い方をまとめました。
しかしながら使いこなすにはさらなる理解が必要なので、その手始めとなる記事とその概要を以下にまとめておきます。

二つのローカライズワークフロー

ここまではLocalization Scene Controlsを使ってローカライズを行ってきました。

実はLocalizationパッケージにはこれの他にもう一つのワークフローが用意されています。
これについては以下の記事にまとめています。

light11.hatenadiary.com

ロード・ダウンロードの仕組みを理解する

前述の通り、LocalizationパッケージはAddressablesと組み合わせて動作する前提で作られています。

小さいアプリで簡単に使う分にはAddressablesのことをあまり意識せずに使えるように設計されていますが、
きちんと使うためにはAddressablesとの連携部分、つまりロードやダウンロード部分の理解は必須です。

これについては以下の記事にまとめています。

light11.hatenadiary.com

文字列をCSVで入出力・SpreadSheetと連携する

文字列データはCSVで入出力することができます。

light11.hatenadiary.com

またSpreadSheetと連携することもできます。

light11.hatenadiary.com

関連

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

参考

docs.unity3d.com

docs.unity3d.com

docs.unity3d.com

www.andiamo.co.uk