はじめに
I2 Localization とっても便利なローカライズのアセット。
スプライト、音声、フォントなど色々ローカライズ設定できる記事は見つかったが、実際にそれを言語切り替えする記事が見当たらなかったので書きました。
タームの設定などは公式ドキュメント(英語)を参照してください。
Type: Text を選択すると他の型でもローカライズ対応できます。
目次
やり方
ImageLocalizeExt.cs
using UnityEngine;
using UnityEngine.UI;
using I2.Loc;
public static class ImageLocalizeExt
{
public static void LocalizeSprite(this Image self, string term)
{
var localize = GetLocalizeComponet(self.gameObject);
localize.Term = term;
}
private static Localize GetLocalizeComponet(GameObject targetGameObject)
{
if (targetGameObject.TryGetComponent<Localize>(out var localize))
{
return localize;
}
return targetGameObject.AddComponent<Localize>();
}
}
SpriteText.cs
using UnityEngine;
using UnityEngine.UI;
using I2.Loc;
public class SampleLocalize: MonoBehaviour
{
[SerializeField, TermsPopup] private string _term; //I2 Localizeで設定したタームを設定する
[SerializeField] private Image _targetImage; //ローカライズしたい画像
void Start()
{
_targetImage.LocalizeSprite(_term);
}
}
SampleLocalizeはサンプルなので各自ローカライズしたいタイミングで _targetImage.LocalizeSprite(_term); を呼び出せば動的に変えられます。
解説
I2.Localizeのアセットに付属してるcomponent Localize をローカライズしたい画像のゲームオブジェクトにアタッチした後にスクリプトからタームを書き換えている。
最後に
ローカライズしてるスクリプトを見てみる感じ、Object型で管理してるのでもっと拡張性の高いものは作れそう。
本当はLocalizeコンポーネントを経由ではなく、直接画像のスプライト差し替えしたいができなかったので誰か知っている方がいれば教えていただけると幸いです。