Unity 多言語対応

Unity での多言語対応 は大きく分けて以下のように対応しました。

  • アプリ名
  • アプリ内での文言

アプリ内で使用する画像については、自分のアプリでは特に用途が思いつかなかったので、考えないことにしました。(もしあるとすれば、ヘルプ画像ぐらい…かなと思います。)

 

[アプリ名]

まず、アプリ名についてググりました。

Android は Assets/Plugins/Android フォルダ以下に res を用意する、ということでした。

iOS については、どうしようかと試行錯誤しましたが、Unity から XCodeエクスポートする時に InfoPlist.strings ファイルを毎回作成する方法をとりました。

Unity - XCodeビルド後の設定と、アプリ名ローカライズ自動化 - Qiita
# 環境* Unity 5.3.2f1 * Unity 5.3.2p1 * Unity 5.3.2p2* XCode 7.3.1* Mac El Capitan 10.11.5 * Unity初心者# 前置き既出の...

 

[アプリ内の文言]

次に、アプリ内での文言について検討しました。

Excel表でテーブル管理の方式は管理しやすそうだが、今のところ、文言は主にツイート文ぐらいなので、そこまでの規模は考えなくていいかな。 ^^;

 

…ということで、Android の string.xml の要領で xmlファイルで管理することにしました。
以下のサイトを参考にしました。

UnityのTextAssetを使った多言語対応(ローカライズ)の方法 | Taiyo Project
UnityのTextAssetを使って多言語対応(ローカライズ)してみた Unity開発における多言語対応についてあんまり良い感じの記事が見当たらなかったので、とりあえずUnity始めて1週間(本記事執筆時点)の自分が自・・・

 

実際は以下のように実装しました。

  • message.xml … (日本語と英語をxml形式で登録)
  • XMLMessage.cs … (xmlファイルの読み込み)
  • XMLMessageName.cs … (key名を定義)

 

XMLMessage.cs は適当なGameObject にアタッチします。

 

あとは、GameObjectにアタッチするスクリプトを用意し、インスペクタでXMLMessageをアタッチしたGameObjectをLanguageに設定します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/**
 * XMLMessage 使用例
 */
public class Hoge : MonoBehaviour {

	[SerializeField, Tooltip("多言語対応")]
	private XMLMessage language = null;

	void Start() {
		if (this.language != null) {
			var test = this.language.getString(XMLMessageName.app_name);
			Debug.Log(string.Format("test ... {0}", test));
		}
	}
}

 

アセットのものに比べ、使い勝手は悪いとは思いますが…まぁ自分にはこれでいいかなと。 ^^;


Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です