LanguageModule(语言模块)

附上IFramework 下载地址:IFramewrokIFramework QQ交流群:782290296

该模块主要封装的是各国语言之间的切换,最核心的类是:
1.LanguageModule 语言模块类
2.DelegateLanguageObserver 语言观察者类
3.LanPair 语言字段类

首先看到LanPair类

winfrom devexpress框架 formwork框架_字段


我已经写上注释了,其实每一个LuaPair对象,就是封装了一段文字,并记录这段文字所属的语言和唯一标识,之后切换语言也是以该唯一标识进行切换的。在看到DelegateLanguageObserver (语言观察者类)

winfrom devexpress框架 formwork框架_唯一标识_02

其实很好理解,刚才说的LanPair类就是以文字字段为单位的,而这个DelegateLanguageObserver类是管理LanPair的唯一标识在每种语言之间的切换。

winfrom devexpress框架 formwork框架_唯一标识_03


切换语言类型,主要逻辑为当该观察者未被释放或暂停时,执行该观察者切换逻辑,也就是对应的委托函数,并记录当前切换的语言类型

winfrom devexpress框架 formwork框架_唯一标识_04


创建观察者对象时从模块中调用该方法进行初始化。并调用语言模块的绑定方法。该绑定方法下面会讲。

winfrom devexpress框架 formwork框架_字段_05


为观察者对象增加切换逻辑

最后看到LanguageModule(语言模块)
该类主要封装了对每个LanPair对象和观察者对象的管理。

winfrom devexpress框架 formwork框架_初始化_06


这个类我们结合实际例子来看

winfrom devexpress框架 formwork框架_字段_07


首先这里实例化了两个LanPair,也就是语言字段。

winfrom devexpress框架 formwork框架_初始化_08


在Awake函数中创建了语言模块,并加载了上面的两个LanPair对象。我们看模块的Load方法是怎么实现的。

winfrom devexpress框架 formwork框架_唯一标识_09


就是将加载进来的LanPair相应的保存到上面提到的观察者列表,字段字典等等里面,应该不难理解。

再回到Awake中的下一句,调用了CreateDelegateObserver函数,顾名思义,就是创建观察者,我们进到里面去看

winfrom devexpress框架 formwork框架_字段_10


从对象池中取出一个观察者对象,并对该观察者进行初始化,这个初始化我们上面有提到,最后一步是调用语言模块的绑定方法Subscribe。

winfrom devexpress框架 formwork框架_唯一标识_11


主要逻辑是将观察者对象存进字典,并去调用一次他的切换语言方法。这个方法上面有提到。

忘记的可以往上翻。然后返回观察者。

创建完了之后还去调用了Listen方法。继续进到listen方法

winfrom devexpress框架 formwork框架_字段_12


增加观察者逻辑,上面也说了。

winfrom devexpress框架 formwork框架_唯一标识_13


在Update函数中,他去更改了语言模块中的languge属性。

winfrom devexpress框架 formwork框架_字段_14


当用户修改了该属性,也就是切换语言的时候,他会去执行Publish方法。

winfrom devexpress框架 formwork框架_唯一标识_15


winfrom devexpress框架 formwork框架_初始化_16


该方法的主要逻辑是,

遍历所有的观察者,并在LuaPair字典中找到该观察者对应的唯一标识对应的语言字段存不存在。存在即调用他的切换语言方法(该方法上面有提到,自己翻),若没有找到,即判断该观察者的默认语言是否存在,存在即使用默认语言对应的字段。

主要逻辑就是这些。不喜勿喷