Life, SAP, Consulting, Programming, Coding, ASP.NET, Sharepoint, MVC, Javascript, PHP, WebDesign, CSS, HTML

Posts tagged ‘site đa ngôn ngữ’

Tạo website đa ngôn ngữ trong ASP.NET

Một site đa ngôn ngữ sẽ là không thể thiếu trong tương lai cho mọi tổ chức có quy mô hoạt động toàn cầu, hoặc đơn giản chỉ là một site tin tức.
Sau một thời gian ngâm cứu về Multiple-language ASP.net Website, Mình đã rút ra được một số kết luận như sau:
– Với một site đa ngôn ngữ, cần phải có một cấu trúc rõ ràng. Nếu bạn dùng Masterpage thì không thể quy định CultureInfo trong MasterPage được. Cơ bản vẫn phải là quy định từng file aspx. Đó là cái củ chuối. Vậy thì làm thế nào? Cách tốt nhất là create một basePage extends từ System.Web.UI.Page. Trong lớp này, bạn tạo một hàm override như sau:

protected override void InitializeCulture()
{
if (!string.IsNullOrEmpty(Request[“lang”]))
{
Session[“lang”] = Request[“lang”];
}
string lang = Convert.ToString(Session[“lang”]);
string culture = string.Empty ;
if (lang.ToLower().CompareTo(“vi”) == 0 || string.IsNullOrEmpty(culture))
{
culture = “vi-VN”;
}
if (lang.ToLower().CompareTo(“en”) == 0)
{
culture = “en-US”;

}
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

base.InitializeCulture();

Chú ý có 2 dòng khỏi tạo Culture khác nhau: CultureInfo.CreateSpecificCulture(culture); / new CultureInfo(culture); Tuy nhiên, mục đích của chúng là giống nhau và chỉ cần dùng 1 trong 2 hàm đó là được.

Các Page sau này bạn tạo ra, thay vì extend System.WEb.UI.Page thì bạn chỉ cần xtends cái BasePage của mình mà thôi. Làm như vậy không chỉ giúp tiết kiệm vì chỉ cần Set Culture một lần mà còn có thể tạo nhiều tùy chọn chung từ lớp cha đó nữa.

Sau khi tạo xong các file *.resx hý hửng test thì nhận được bug sau:


Could not find any resources appropriate for the specified culture or the neutral culture. Make sure “xxxxxxxxxxxxxx” was correctly embedded or linked into assembly “xxxxxxxxxx” at compile time, or that all the satellite assemblies required are loadable and fully signed.

Để giải quyết vấn đề này, vào properties của file .resx, chọn Build Action là Embedded Resource. Compile lại là OK.

Tiếp tục nha.