可重用類設計 多語言功能開發

2021-05-24 09:53:09 字數 3809 閱讀 4818

背景:公司的電子商務網提供多語言的支援。開發語言為c#.net ,最初每個**有一組本地化檔案。分別用resx檔案儲存,各式例如:text.en-us.resx.

然後第乙個類,實現讀取.resx檔案到快取中。再次使用時直接從快取中查詢資料。

然後每到乙個新的專案,直接複製此類檔案,然後稍作修改,就又能在新專案中使用。然而這樣不斷的複製,提高了維護代價,每個不同的平台都有乙個類似的類。

同時,為了提高對資源檔案的管理,公司要求將本地化的檔案儲存到資料庫中,實現統一的本地化資料管理。另外有可能需要通過建立api提供資源。而非直接資料庫讀取。

設計,首先定義並實現介面:

public inte***ce iresxmanager

///

/// 語言區.例如:en-us

///

string culturezone

///

/// 獲取對應key的value

///

///

///

string getvalue(string szkey);

///

/// 設定對應key的值

///

///

///

void setvalue(string key, string value);

///

/// 獲取key的值

///

///

///

string this[string szkey]

///

/// 全部資源

///

namevaluecollection keyandvalue

///

/// cache管理器

///

icache resourcecache

iresouceaccess resourceaccess

}除了基本的獲取內容和設定內容外,重要的是:1.提供資料介面,2.快取介面(考慮到未來可能分布式快取)

本地化資料讀取介面定義

public inte***ce iresouceaccess

快取介面定義

public inte***ce icache

介面定義完成,開始進行配置類的開發。

public class resourceclientconfig : iconfigurationsectionhandler

namevaluecollection _nvc;

public string getsetting(string key)

public bool logmissword

public bool displaymissworderror

public string defaultgroupname

public string cacheprovider

public string defaultculterzone

internal resourceclientconfig()

public static resourceclientconfig getconfig()

public object create(object parent, object configcontext, system.xml.xmlnode section)}}

return this;}}

本地化資源管理器實現:

///

/// provide localization text

///

public class resxmanager:iresxmanager

}private string _culturezone;

public virtual string culturezone

set

}public resxmanager()

public resxmanager(icache cachesupplyer, iresouceaccess resourceaccess)

///

/// return value given key

///

///

///

public virtual string getvalue(string szkey)

else

}else

}///

/// set key and value pair

///

///

///

public virtual void setvalue(string szkey, string szvalue)

else}}

///

/// this

///

///

///

public virtual string this[string szkey]

set}

///

/// init

///

public virtual void init()

.", resourcegroupname, culturezone);

if (resourcecache != null)

else

}else

else}}

///

/// can be used as cache while not supply cache manager.

///

private static hashtable _nvc;

public virtual icache resourcecache

public virtual string resourcegroupname

public iresouceaccess resourceaccess

}為了方便呼叫,建立乙個工廠類,讀取配置資訊,並返回初始化好的資源管理器,這裡通過反射得到資源提供器和快取管理器的物件。

public class resourcefactory

}乙個資源管理器就開發完成,這個類可以方便的被任意專案引用,並通過在config檔案中配置,實現讀取本地化資源。

然後分別編寫3個專案,來提供:1.resx檔案讀取提供器,2.資料庫讀取提供器,3.api讀取提供器, 3個提供器都將繼承自介面 iresouceaccess

1.resx檔案讀取提供器

2.資料庫讀取提供器

WEB頁面多語言功能

之前做的多語言功能是在資料庫中,目前想做個json檔案格式的多語言功能 1.編輯en us.json檔案 頁面中呼叫的方法 esd com.aaa.translation.language.gettext page.label.username 下面是c 讀取json檔案的方法,但是jobject是...

多語言開發方案設計

遊戲專案後期需要繁體和其他語言版本,之前所有文字都編輯在編輯器裡的問題就暴露了出來,多語言的整理和自動化顯得比較重要。方案如下 1.excel儲存多語言文字內容 excel的格式如下 2.python指令碼處理excel python自動生成多語言標頭檔案 python解析excel使用了xlrd ...

Mocoolka 多語言 自動幫助設計

多語言在原有xml中增加語言節點 操作步驟是在設計中選語言,增加一種新語言,系統自動同步模型中窗體名的名稱 幫助,欄位名 幫助 分組名,動作名 幫助。用4層或5層id來表示乙個節點,形成 供使用者填寫。儲存時直接儲存到模型中。xml如下 使用者中增加語言選項,在開戶和登陸時選擇語言,系統根據使用者選...