可通过修改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按钮实现。如下图:

