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と連携することもできます。