17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unityの多言語対応ツールLocalization Toolsをチョット触ってみた

Last updated at Posted at 2019-12-14

はじめに

京都某所のもくもく会に参加していたら、Unityの中の人からUnityの公式Localization Toolsのことを教えていただきました。未だプレビューなので、情報はこちらのフォーラムからです。

今回はver0.5.1を試しています。インストールするには、Packagesフォルダのmanifest.jsonに"com.unity.localization": "0.5.1-preview"を追加してください。

公式ドキュメント

ver0.5用の公式ドキュメントがこちらにあります。

ほぼここの通りにやれば良いのですが、一部動かなかったりするので、一応やり方を下に書いておきます。

セットアップ手順

まず、Project Settings のLocalizationへ。そこでLocalization SettingsをCreateして、Active Settingsとして設定する。

image.png

すると、Localeセットアップ用の画面になるので、Locale Generatorボタンを押して、言語を選ぶ。

image.png

image.png

選んだらGenerate Localesを押す。

すると、以下のような設定ファイルが作られる。

image.png

言語を切り替える

ドロップダウンメニューによって言語を切り替えます。以下のスクリプトを作ってください。

元情報はこちらですが、少し修整してます。 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Localization.Settings;
using UnityEngine.UI;

public class LocaleDropdown : MonoBehaviour
{
    Dropdown dropdown;

    IEnumerator Start()
    {
        dropdown = GetComponent<Dropdown>();
        // Wait for the localization system to initialize, loading Locales, preloading etc.
        yield return LocalizationSettings.InitializationOperation;

        // Generate list of available Locales
        var options = new List<Dropdown.OptionData>();
        int selected = 0;
        for (int i = 0; i < LocalizationSettings.AvailableLocales.Locales.Count; ++i)
        {
            var locale = LocalizationSettings.AvailableLocales.Locales[i];
            if (LocalizationSettings.SelectedLocale == locale)
                selected = i;
            options.Add(new Dropdown.OptionData(locale.name));
        }
        dropdown.options = options;

        dropdown.value = selected;
        dropdown.onValueChanged.AddListener(LocaleSelected);
    }

    static void LocaleSelected(int index)
    {
        LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[index];
    }
}

これを作ったら、シーン内にDropdownオブジェクトを作って、それにスクリプトをアタッチしてください。シーンを実行すると、Dropdownボタンで上で設定した言語を選べるようになります。
image.png

テクスチャを言語によって変える

ここで、公式ドキュメントにある言語によるテクスチャ(ここでは国旗)を変更するテストを行います。まず、各言語ごとにテクスチャを割り当てる必要があります。そのために、Windows->Asset Management->Localization Tablesを選んでLocalization Tableを作ります。

image.png

Asset Tablesというウィンドウが開くので、"New Table"を選び、Table Nameを付けてください。

image.png

名前(今回はTextureTable)を付けたら、Createボタンを押してテーブルを作ってください。すると、下のようなテーブルが出来るので、Add New Entryを押して、Key(例えばFlag)、各言語に対応するテクスチャを割り当てます。

image.png

例えばこういう感じです。
image.png

このテクスチャをRawImageに表示するので、シーンにRawImageを追加してください。それに、以下のスクリプトをアタッチします。

スクリプトは、こちらの公式チュートリアルのものを改変しました。

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using System;
using static UnityEngine.Localization.Components.LocalizedAssetBehaviour<UnityEngine.Texture2D>;

public class TextureLocalizationSample : MonoBehaviour
{
    [SerializeField] public Texture2DAssetReference assetRef;
    RawImage rawImage;

    void Start()
    {
        rawImage = GetComponent<RawImage>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.L))
        {
            StartCoroutine("Load");
        }
    }

    public IEnumerator Load()
    {
        var loadOperation = assetRef.LoadAssetAsync();

        yield return loadOperation;

        if (loadOperation.IsDone)
        {
            Debug.Log("Loaded Texture: " + loadOperation.Result.name);
            rawImage.texture = loadOperation.Result;
        }
    }
}

[Serializable]
public class Texture2DAssetReference : LocalizedAssetReference { };

スクリプトをアタッチしたら、AssetRefに割り当てるAssetTable内のKeyをドロップダウンから選べるようになります。
image.png

一旦選ぶと、こちらでも各言語向けのテクスチャを設定することができます。

image.png

準備ができたら、シーンを実行しましょう。ドロップダウンメニューで言語を選んでキーボードの"L"を押すと対応する旗が出るはずです。

Localization.gif

テキストをローカライズする

テキストのローカライズも考え方は同じです。テクスチャと同様にLocalization Tableを作ります。

image.png

テキストのローカライズにはLocalize Stringという付属のコンポーネントを使うのが便利です。

image.png

こちらのコンポーネントのString ReferenceでLocalization TableとKeyを選び、Format Argumentsでテキストを表示するゲームオブジェクトを指定します。Update Stringを上図のように設定しておけば、言語を変えたときに勝手にテキストが変わります。

17
17
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
17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?