Unity Localizationで多言語対応

Localization 0.8.1-previewを追加して利用してみます。
(左上のバージョン切り替えで最新のものを使うのが良いかと思われます。

https://docs.unity3d.com/Packages/com.unity.localization@0.8/manual/index.html

インストールは、Packages/manifest.jsonに

"dependencies": {
    "com.unity.localization": "0.8.1-preview"
    },
}

dependenciesの中に追加!
manifest.jsonを保存すると自動的にunityがパッケージを追加してくれます。

Project SettingsにLocalizationが追加されています。

createするとファイル名を指定して保存されたようです。

Locale GeneratorでJapanese, English を選択して Generate Locales

Assets/Localesというフォルダを指定して保存してみました。

画像や音声などのAssetsを振り分けられるようですね。とりあえずテキスト(String Localization : Create a String Table Collection. を指定。

Table Collection Name [NEW NAME] のところに 文字を。BaseStrings とか入力して、Create String Table Collectionをクリック!

するとEdit Table Collectionタブが開かれます。

Add New Entryで良いのでしょうか

Key , English , Japaneseと選択していきます!

Smart をチェックすると {var} のように変数を入れられるようです!

アプリから読み出してみましょう!

GameObjectのTextにLocalizeを追加するパターン
Textの上で右クリックするとLocalizeメニューが下にあります。

Lacalize String Eventが追加されて
String Referenceで MENU_LEVELを選択しました!
実行してみるとデフォルトenのTextに SELECT LEVELが表示されました!

Smartの指定は、Format ArgumentsのElement 0 に対象変数のあるスクリプト
ここでは、StageManagerがGameObject , Stage Manager がスクリプト名になっています。
Update Stringの方は、対象のTextオブジェクトでText.textを選択したら更新されました^^

スクリプトから設定したい気もするけど全部これで設定しておいても問題はなさそうですね。

smartを選択して変数を入れたTextを更新するには!?

{score}などとして設定した部分で score変数を更新後にrefreshStringを呼ぶことで更新されました。

// Localize String Eventを利用します。
public LocalizeStringEvent resultTitleStringEvent;

// 変数を更新後にrefreshstringを呼びます。
resultTitleStringEvent.StringReference.RefreshString();

スクリプト内で、設定された翻訳テキストを呼び出すには!?

notificationなどに利用するテキストも使えるのか!?

public LocalizedString notificationTitle = new LocalizedString();

public string notification_title = "";

private void OnEnable()
{
    Debug.Log("LocalizeManager onEnable");

    notificationTitle.SetReference("TABLE NAME", "NOTIFICATION_TITLE");
    notificationTitle.StringChanged += (string s) =>
    {
        notification_title = s;
    };
}

smartを使う場合は

int smartTest = 999; // を代入する、 title {smartTest} で登録
// 登録時に Argumentsを設定
notificationTitle.Arguments = new[] { new Dictionary<string, string> { { "smartTest", smartTest.ToString() } } };

無事 変数も更新されています^^、値が変わる場合はrefreshStringしてから取得します^^

Build Preview and configuration

Android実機で試したらローカライズされない!

Unity :No Locale could be selected:
 No Locales were available. Did you build the Addressables?

というエラーが出ていました-_-; ?

https://docs.unity3d.com/Packages/com.unity.localization@0.9/manual/QuickStartGuide.html

9をやる必要がありました。

Window > Asset Management > Addressable Assets > Groups 

Build > New Build > Default Build Script

でした。

Assets / AddressableAssetsDataが生成されました。

これで Android 実機で動きました 🙂

iOS 対応

iOSにスイッチした後に Build > New Build > Default Build Script を実行します。

Assets/AddressableAssetsData/iOS.meta

が作成されました。これをやらないとiOSもローカライズできません。

コメントを残す

メールアドレスが公開されることはありません。

お気軽にコメントいただけると嬉しいです!
質問や気になる商品・サービスなどについてなんでも!
名前はハンドルネーム、emailも仮で適当な文字を入力いただければ問題ありません。