強火で進め

このブログではプログラム関連の記事を中心に書いてます。

uGUI の画像部分のローカライズ処理の一案


昨日開催された、「【年末だよ】Unity お・と・な のLT大会2【ポロりもあるよ】」の会場での会話で、 uGUI の画像部分のローカライズ処理をどうするかという話が出て、自分は「国コード(正しくは言語コードですね(^_^;))を使ってフォルダ分けして読み込めばできません?」と回答しました。

まぁ、その方法で大丈夫だとは思いますが念の為に検証してみました。結果を先に言うと上手く行きました。

サンプル

サンプルをこちらにアップして有ります。

サンプルの内容としてはシーンの読み込み時に Button の画像を現在のシステムに設定してある言語に合わせた画像に差し替えるというものです。

システムの言語の設定が日本語の場合には「開始」という画像、英語の場合には「START」という画像が使われます。

実装方法

実装方法としては Resources フォルダに以下の様な構成でファイルを準備。

デフォルトで設定してある画像は英語の画像を設定しています。画像ファイルを準備して無い言語では英語の画像を表示するように実装。

Button に以下の様な C#スクリプトを追加しています。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Globalization;
using System;

public class ImageLocalize : MonoBehaviour {
	void Awake () {
		Image img = gameObject.GetComponent<Image>();
		if (img) {
			string language = Application.systemLanguage.ToString();
			string texturePath = "images/" + language + "/" + img.sprite.name;
			UnityEngine.Object obj = Resources.Load(texturePath);
			if (obj) {
				Texture2D tex = (Texture2D)Instantiate(obj);
				img.sprite.texture.LoadImage(tex.EncodeToPNG());
			}
		}
	}
}

以下の部分で Resources フォルダ内のファイルパスを作成しています。日本語でも英語でも同じファイル名で画像ファイルを作成して有るので現在使用しているテクスチャと同じファイル名という事を利用してパスを作成しています。

			string language = Application.systemLanguage.ToString();
			string texturePath = "images/" + language + "/" + img.sprite.name;

Unity の場合は Application.systemLanguage を使ってシステムの現在の設定言語を取得します( C# の CultureInfo クラスは使えません)。 Unity で対応済みの言語は enum UnityEngine.SystemLanguage を確認して下さい。因みに現時点では以下のものが列挙されています。

		Afrikaans,
		Arabic,
		Basque,
		Belarusian,
		Bulgarian,
		Catalan,
		Chinese,
		Czech,
		Danish,
		Dutch,
		English,
		Estonian,
		Faroese,
		Finnish,
		French,
		German,
		Greek,
		Hebrew,
		Hugarian,
		Icelandic,
		Indonesian,
		Italian,
		Japanese,
		Korean,
		Latvian,
		Lithuanian,
		Norwegian,
		Polish,
		Portuguese,
		Romanian,
		Russian,
		SerboCroatian,
		Slovak,
		Slovenian,
		Spanish,
		Swedish,
		Thai,
		Turkish,
		Ukrainian,
		Vietnamese,
		Unknown,
		Hungarian = 18

※ Application.systemLanguage は中国語が Chinese しか無く、 繁体/簡体の区別が出来ない事に気を付けて下さい。

なお使用するテクスチャ画像については Texture Type を Advanced に変更して、 Read/Write Enabled にチェックを付けておいて下さい(この作業ちょっと面倒くさいですね。インポートの時にここを変更する Editor 拡張書くべきかな?)。