[Unity]Localizationを使って悩んだこと

この記事は約3分で読めます。

やりたいこと

UnityでLocalizationパッケージを使って多国語を行おうとしました。

基本的に以下のページを参考にさせていただいてできたのですが、迷ったこと、うまくいかなかったことをまとめておきます。

【Unity】Unityで多言語化(Localization)に対応する
【Unity】Unityで多言語化(Localization)に対応するはじめにこの記事ではUnityでの多言語対応について説明します。今回使う公式のLocalization方法では以下のバリエーションをサポートしています。文字列のローカリ

迷ったこと

LegacyのTextでも使える?

参考にさせていただいた記事ではText – TextMeshProに対してLocalizationを適応していました。

LegacyのTextに対しても使えるか迷いました。

結果

問題なく使用できました。Text – TextMeshProと同様に右上の三点のアイコンをクリックすると”Localize”が表示されます。

”Localize”をクリックするとLocalize String Event コンポーネントが追加され設定が行えます。

困ったこと

Localize String Event のString Referenceが設定できない。

Localize String Event のString Referenceをクリックして対応するキーを設定しようとしたのですが一覧に出てきませんでした。(もちろんテーブルに追加した後です)

解決策

上の検索窓のst:の後に一文字でもキーに含まれる文字を入力すると一覧に表示されます。

LocalizationSettings.AvailableLocales.GetLocaleがnullを返してくる。

LocalizationSettings.AvailableLocales.GetLocaleの引数に追加済みのidを渡してもnullが返ってくる(ことがある)。

解決策

LocalizationSettings.AvailableLocales.GetLocaleを呼ぶ前に、await LocalizationSettings.InitializationOperation.Task;を呼ぶ。

どうもアプリの起動直後は準備ができていないようです。LocalizationSettings.InitializationOperation.Taskが完了するまで待ちます。

任意のキーの翻訳された文字列を取得

メッセージウインドウなど、動的に文字列を変更する必要があるときは取得する必要があります。

解決策

以下のコードで取得できます。table,keyともに文字列で大丈夫です。

        string s = LocalizationSettings.StringDatabase.GetLocalizedString(table, key);

任意の言語の任意のキーの翻訳された文字列を取得

さらに特殊な状況では特定の言語の文字列を取得する必要があります。

解決策

以下のコードで取得できます。table,keyともに文字列で大丈夫です。

lang_idは”en”や”ja”などの2文字の言語IDです。

        var locale = LocalizationSettings.AvailableLocales.GetLocale(lang_id);
        string s = LocalizationSettings.StringDatabase.GetLocalizedString(table, key, locale);

GetLocalizedStringの返り値に関して

GetLocalizedStringに不正(指定のテーブルに指定のキーがない)場合、以下のような返り値が返ってきてエラーなのかよくわかりません。(GUIがテーブル名、aaaがキー)

No translation found for 'aaa' in GUI

以下の設定を変更することで、返り値が空になりエラーチェックがしやすくなります。

”Edi”t → ”Project Settings…”

Localization(左側)→”String Database”内の”Missing Translation State”を”Nothing”か”Print Warning”にすると不正のキーをしていると空の文字列が返ってくるようになります。

(前回の設定値によって意図しない値になることがあるので設定後、設定された値を確認してください。)

コメント

タイトルとURLをコピーしました