LoginSignup
5
2

More than 1 year has passed since last update.

UnityEngine.Localizationをスクリプトから呼ぶ

Last updated at Posted at 2021-11-06

プロ必見!最新ローカライズ機能徹底解説 - Unityステーション
という動画をみて、Unity謹製の便利なローカライズツールのことを知りました。
ツールでできることは大変多岐にわたっていて、言語ごとにSpriteやAudioClipの切り替え等もできるようです。
動画中の拡張例はこちらの記事で紹介されています。

現在、ちょうど十数カ国のローカライズに対応したタイトルに関わっているので、早速これを使ってみようということになったのですが、一点だけ、スクリプトから呼ぶことができるのかについて不明だったので調べてみました。

LocaleStringTest.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LocaleStringTest : MonoBehaviour
{
    [SerializeField] TMPro.TMP_Text m_text = null;
    [SerializeField] UnityEngine.Localization.Components.LocalizeStringEvent m_stringEvent = null;
#if UNITY_EDITOR
    [SerializeField] UnityEditor.Localization.StringTableCollection m_collection = null;
#endif
    private void Awake()
    {
        m_stringEvent.OnUpdateString.AddListener(onUpdate);
    }

    // Start is called before the first frame update
    void Start()
    {
#if UNITY_EDITOR
        for (int i=0;i< m_collection.StringTables.Count; ++i)
        {
            Debug.Log("Table=" + m_collection.Tables[i].asset.name);

            IEnumerator<UnityEngine.Localization.Tables.StringTableEntry> values = m_collection.StringTables[i].Values.GetEnumerator();
            while (values.MoveNext())
            {
                string str0 = values.Current.Key;
                Debug.Log("Key,Value=" + values.Current.Key + "," + values.Current.Value);
            }
        }
#endif
        string str = m_stringEvent.StringReference.GetLocalizedString();
        Debug.Log("LocalisedString=" + str);
    }

    // Update is called once per frame
    void Update()
    {

    }

    void onUpdate(string _str)
    {
        m_text.text = string.Format(_str, "World") +"!!";
    }
}

m_stringEvent はTextMeshProにアタッチしたローカライズ用スクリプト、
m_collection はローカライズ用に作成したテーブルとなります。
ローカライズ用スクリプトやテーブルの作成方法については上記動画を参考にしてください。

image.png

実行した結果がこちらです。
image.png
image.png

テーブルからKey,Valueが取得でき、ローカライズ文字列への変更(OnUpdate())も動的に追加できるのを確認しました。ひとまず最低限これができれば安心して開発に組み込めそうです。

[追記] テーブルからKey,Valueが取得できるのはUnityEditorのみでした。ソースプログラムも更新しています
アップデートによりテーブルからKey,Valueが取得できるようになっていました。こちらで記事にしています。

ちなみにビルマ語(ミャンマー語)が表示されていないのは、Unityエディターのフォントがこれらの言語に対応していないためです。
Preferencesなどからもフォント変更はできないようなので、対応していない言語の国のUnityユーザーはどうしているんでしょうね?
経験上、こういう国の人たちは母国語以外に英語等の第二言語がペラペラだったりするので問題ないのかもしれません。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2