前言
這段時(shí)間在研究多語言的實(shí)現(xiàn),就找了NopCommerce這個(gè)開源項(xiàng)目來研究了一下,并把自己對這個(gè)項(xiàng)目的粗淺認(rèn)識(shí)與大家分享一下。
挺碰巧的是昨天收到了NopCommerce 3.90 發(fā)布測試版的郵件:
不啰嗦了,開始正題了!
其實(shí)對于Nop的多語言,最主要的元素有下面兩個(gè):
WebWorkContext(IWorkContext的實(shí)現(xiàn)類)
LocalizationService(ILocalizationService的實(shí)現(xiàn)類)
其他相關(guān)的元素可以說都是在這兩個(gè)的基礎(chǔ)上體現(xiàn)價(jià)值的。
下面先來介紹一下WebWorkContext的WorkingLanguage屬性,這個(gè)是貫穿整個(gè)應(yīng)用的,所以必須要先從這個(gè)講起。
WorkingLanguage
WebWorkContext中對多語言來說最為重要的一個(gè)屬性就是WorkingLanguage,它決定了我們當(dāng)前瀏覽頁面所采用的是那種語言。
每次打開一個(gè)頁面,包括切換語言時(shí),都是讀取這個(gè)WorkingLanguage的值。當(dāng)然在讀的時(shí)候,也做了不少操作:
從當(dāng)前上下文中的_cachedLanguage變量是否有值,有就直接讀取了這個(gè)值。
從GenericAttribute表中查詢當(dāng)前用戶的語言ID,這張表中的字段Key對應(yīng)的值是LanguageId時(shí),就表明是某個(gè)用戶當(dāng)前正在使用的語言ID。
從Language表中查詢出語言信息(當(dāng)前店鋪->當(dāng)前店鋪默認(rèn)->當(dāng)前店鋪的第一個(gè)->所有語言的第一個(gè))
查詢語言表時(shí),首先查出店鋪支持的所有語言,然后找到當(dāng)前用戶正在使用的語言ID,根據(jù)這兩個(gè)條件組合得到的Language實(shí)體就是當(dāng)前的WorkingLanguage。
如果說這兩個(gè)條件的組合拿不到相應(yīng)的語言實(shí)體,就會(huì)根據(jù)當(dāng)前Store的默認(rèn)語言ID(如下圖所示)去找。