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

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.

Advertisements

Comments on: "Tạo website đa ngôn ngữ trong ASP.NET" (13)

  1. Đức Định said:

    nhờ bạn hướng dẫn cụ thể được không? Mình đang cần nó nè. Nếu có demo cho mình xin một bản nha. Email của mình là ducdinh06@gmail.com

  2. Bài viết của bạn là vấn đề mình bắt đầu tìm hiểu. bạn có thể cho mình xin 1 cái demo được ko? Thanks bạn nhiều. gmail của mình: nhungkhmt2k1@gmail.com

  3. bạn có thể mô tả chi tiết về cách của bạn được không? mình đang tìm hiểu về nó,như cách trình bày bên trên thì mình chưa hiểu rõ lắm.
    cám ơn.

  4. Các bạn có thể tải tại đây. Mình làm lại cái này trên VS10. http://www.mediafire.com/?tdmb3sf6x71b5. Nếu chưa cài thì các bạn có thể xem BasePage và file ASPX là hiểu ngay.

  5. Trần Thành Tin said:

    Bài viết rất hay.
    Cảm ơn bạn.

  6. mình xem vẫn chưa hiểu lắm bạn cho mình xem demo với nha thanks bạn NguyenXuanPhu.TTYN@gmail.com

  7. NguyenXuanPhu said:

    Em xem vẫn chưa hiểu lắm , a vui lòng gửi e file Demo ,e thanks nhiu 😀 NguyenXuanPhu.TTYN@gmail.com.vn

  8. cái code trên chỉ là để hiện thị trên giao diện cho nhưng lable or button mà mình quy định còn muốn hiển thị nội dung từ db ra thì mọi người phải làm theo kiểu khác….

  9. Hoàng Thẩm said:

    Mình đang cần bạn có thể chỉ rõ hơn cho mình được ko vậy?

    • chao ban,
      Minh hien tai ko nghien cuu cai nay nua. Co download demo do, ban thu xem co chay dc nua ko^^…

      Chuc thanh cong.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: