可通过修改manifest.json
,在其中加入如下条目安装:
{
"com.github.fanhexin.easylocalization": "https://github.com/fanhexin/EasyLocalization.git#upm"
}
EasyLocalization
不对具体的多语言数据文件格式和加载方式做限制,使用者只需创建继承自抽象类DataProvider
的实体子类,实现抽象方法。DataProvider
本身继承自ScriptableObject
,实现DataProvider
的子类需要在工程内创建一份ScriptableObject
资源文件,并拖入Localization
资源文件的引用中。具体示例如下:
[CreateAssetMenu(fileName = nameof(TestDataProvider), menuName = nameof(TestDataProvider))]
public class TestDataProvider : DataProvider
{
public override IEnumerable<string> Keys => _dic[SystemLanguage.English.ToString()].Keys;
public override IEnumerable<string> Languages
{
get
{
yield return SystemLanguage.English.ToString();
yield return SystemLanguage.Chinese.ToString();
}
}
public override string GetValue(string language, string key)
{
return _dic[language][key];
}
[NonSerialized]
private Dictionary<string, Dictionary<string, string>> _dic;
private void OnEnable()
{
_dic = new Dictionary<string, Dictionary<string, string>>
{
["English"] = new Dictionary<string, string> {{"TITLE_1", "title_1"}, {"TITLE_2", "title_2"}},
["Chinese"] = new Dictionary<string, string> {{"TITLE_1", "标题1"}, {"TITLE_2", "标题2"}}
};
}
}
在场景中通过UI > LocalizationText
添加带有多语言功能的Text
控件,其带有自定义的Inspector
,可直接通过LocalizationKey
选择所关联的字典Key
。 如下图所示:
创建Localization
的子类后,运行时可通过Localization.instance
访问实例。Localization
实现了Indexer
,可通过[]语法直接查询。
string value = Localization.instance["key值"];
在切换语言时,需要设置Localization
的language
属性,对内部字典进行更新。更新结果会通过LocalizationText
进行实时展示。
Localization.instance.language = "Chinese";
如在编辑器启动的状态下,多语言配置文件发生了更新,这时需要进行重新加载,以便LocalizationText Inspector
上能显示新的Key或Value值。
可通过点击Localization
资源文件Inspector
上的Reload
按钮实现。如下图: