Unity Localization 2023

Unity

多言語化必要なわけではないですがなんとなく入れておこうかと

以前のメモを参考に新しいバージョンで使ってみます。

Unity Localizationで多言語対応
Localization 0.8.1-previewを追加して利用してみます。(左上のバージョン切り替えで最新のものを使うのが良いかと思われます。インストールは、Packages/manifest.jsonに"de...

インストール Unity Localization 1.3.2

これをインストール

[Create] からLocalization設定、en / jaを選択しました。

テーブル作成

Unity > Window > Asset Management > Localization Tables

New Tableのところにテーブル名を HappyBaseTableとしてCreateしました

Add New Entry から Key と en jaを登録します

UI Textに変数を追加する!

TextのGameObjectの上で右クリックして「Localize」を押すと

Localize String Event / String Reference が追加されました。

String Referenceを開いて [ Add Table Entry ]からテーブルにキーを追加すると、String Referenceに追加されました。(script側で文字を入れていましたが、この場合は直接en / jaが入ってくれます。

スクリプトから変数を利用する!

gameobjectに設定しても良いのですが、複数同じものを利用する場合などは、スクリプトから変更するほうが楽なので

using Unity.Localization;
        LocalizedString title = new LocalizedString();
        title.SetReference("HappyBaseTable", "APP_DISP_TITLE");
        GameObject.Find("TextTitle").GetComponent<TMP_Text>().text = title.GetLocalizedString();

TextTitleにtitleを入れてみました。
問題なさそうです◎

スペイン語、ポルトガル語、フランス語、ドイツ語、韓国語を入れてみる

入れるのは簡単なのですが、フォントも切り替えないといけないようで

シーンが呼ばれたときにフォントを変えようかと思います。

ローカル通知も多言語でOKでした^^

フォントの切り替え

対象のgameobject( text ( tmpro_text ) ) のフォント設定を変更するだけです。

途中で切り替えは想定していないので、startでチェックして切り替えています。

言語を取得。 English (en) みたいな感じだったので enを取得

string localeString = LocalizationSettings.SelectedLocale.Identifier.Code.ToLower().Replace("*(", "").Replace(")", "");

対応するフォントリスト

    Dictionary<string, string> fonts = new Dictionary<string, string>()
    {
        { "en", "NotoSansJP-Regular SDF" },
        { "ja", "NotoSansJP-Regular SDF" },
        { "fr", "NotoSans_Condensed-Regular SDF" },
        { "de", "NotoSans_Condensed-Regular SDF" },
        { "pt", "NotoSans_Condensed-Regular SDF" },
        { "es", "NotoSans_Condensed-Regular SDF" },
        { "ko", "NotoSansKR-Regular SDF" }
    };

こんな感じにしてみました。

ちなみに日本語は、ひらがな、カタカナのみ、韓国語は、使用している文字だけをfont creator で変換しました。元は、Google フォントを利用しています。あと中国語、タイ語、アラビア語、も入れたいところですがまた次回。

TMP_FontAsset xFontSDF = Resources.Load<TMP_FontAsset>("Fonts/" + fontR);

Resourcesの下に置いたフォントを呼び出し.

GameObject.Find(goTxts[i]).GetComponent<TMP_Text>().font = xFontSDF;

TMP_Textのfontに設定。

これだけでOKです!

文字自体は、直接textに挿入するか
Localize string eventをtextオブジェクトにつけて辞書のキーを登録するだけです。

お気軽にコメントください!

スパム対応のためコメント認証に数日かかることがありますが、お気軽にコメントいただけると嬉しいです^^

コメント

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