Skip to content

Latest commit

 

History

History
78 lines (56 loc) · 2.75 KB

README.md

File metadata and controls

78 lines (56 loc) · 2.75 KB

EasyLocalization

安装

可通过修改manifest.json,在其中加入如下条目安装:

{
  "com.github.fanhexin.easylocalization": "https://github.com/fanhexin/EasyLocalization.git#upm"
}

创建Localization子类

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"}}
        };
    }
}

UGUI界面中添加LocalizationText

在场景中通过UI > LocalizationText添加带有多语言功能的Text控件,其带有自定义的Inspector,可直接通过LocalizationKey选择所关联的字典Key。 如下图所示:

LocalizationTextInspector

代码中查询Key

创建Localization的子类后,运行时可通过Localization.instance访问实例。Localization实现了Indexer,可通过[]语法直接查询。

string value = Localization.instance["key值"];

切换语言时更新文本

在切换语言时,需要设置Localizationlanguage属性,对内部字典进行更新。更新结果会通过LocalizationText进行实时展示。

Localization.instance.language = "Chinese";

Localization编辑器下的Reload功能

如在编辑器启动的状态下,多语言配置文件发生了更新,这时需要进行重新加载,以便LocalizationText Inspector上能显示新的Key或Value值。 可通过点击Localization资源文件Inspector上的Reload按钮实现。如下图:

Reload