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

Posts tagged ‘multiple language’

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.

Cập nhật trường thời gian trong MSSQL trong Website đa ngôn ngữ

Khi làm việc với site đa ngôn ngữ trong ASP.NET, thường chúng ta phải đặt CultureInfo ứng với các ngôn ngữ. Site đa ngôn ngữ là yêu cầu thường hay gặp, tuy nhiên, khi làm việc với nó sẽ gặp rất nhiều vấn đề phiền toái đi kèm. Đặc biệt là các định dạng ngày tháng, thời gian. Một cậu lệnh update cơ sở dữ liệu đang chạy ngon lành với ngôn ngữ là en-US, bạn chuyển qua vi-VN, Exception bắn ra ùn ùn. Đó là do các định dạng trường thời gian của MSSQL khác với lại format thời gian trong tiếng việt, Làm cách nào đây?

Giải pháp đây:

Bạn phải đặt cho trường thời gian một format cố định. Thay vì viết câu lệnh

“UPDATE xbml_table set time=”+DateTime.Now..toString(“d”)…

Bây giờ DateTime.Now của chúng ta sẽ cần một bước xử lý đơn giản:

DateTime dt = DateTime.Now;

CultureInfo ci = New CultureInfo(“en-US”);

“UPDATE abx_xzy_tbl SET ” + dt.toString(“d”,ci);

Ok, Giải quyết xong rồi. Làm việc tiếp thôi.

Tham khảo:

http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm

http://msdn.microsoft.com/en-us/library/5hh873ya.aspx

Culture