2008-11-01 36 views
21

Tôi đang xây dựng một ứng dụng web ASP.NET và tất cả các chuỗi của tôi được lưu trữ trong một tệp tài nguyên. Tôi muốn thêm ngôn ngữ thứ hai vào ứng dụng của mình và lý tưởng là tôi muốn tự động phát hiện ngôn ngữ trình duyệt của người dùng (hoặc ngôn ngữ cửa sổ) và mặc định là ngôn ngữ đó, thay vì làm cho họ chọn thứ gì đó ngoài tiếng Anh. Hiện tại, tôi đang xử lý tất cả tài nguyên theo cách thủ công, vì vậy việc thêm một tệp tài nguyên và ngôn ngữ thứ hai là tầm thường từ quan điểm của tôi, nếu tôi có cách dễ dàng để tự động tìm ra ngôn ngữ để hiển thị.Ứng dụng web đa ngôn ngữ - làm cách nào để phát hiện ngôn ngữ của người dùng trong ASP.NET?

Có ai đã làm điều này hay bạn có bất kỳ suy nghĩ nào về cách tôi có thể lấy lại giá trị đó không? Kể từ ASP.NET là dựa trên máy chủ, tôi dường như không có bất kỳ quyền truy cập vào các thiết lập trình duyệt cụ thể.

GIẢI PHÁP: Đây là những gì tôi đã kết thúc. Tôi đã sử dụng một "Cho mỗi" để đi qua "HttpContext.Current.Request.UserLanguages" và tìm kiếm một cái tôi hỗ trợ. Tôi thực sự chỉ kiểm tra hai ký tự bên trái, vì chúng tôi chưa hỗ trợ bất kỳ phương ngữ nào - chỉ là tiếng Anh và tiếng Tây Ban Nha. Cảm ơn vì sự giúp đỡ!

Trả lời

6

Điều này article (linked to archive.org as original link is now dead) có thể hữu ích khi tự động phát hiện cài đặt ngôn ngữ của trình duyệt.

[EDIT] Có. Bài báo được trích dẫn không sử dụng ASP.NET. Đây là article.

+0

đây là một giải pháp ASP, ASP.NET không phải là một ai, phải không? –

+0

Mặc dù nó không phải là .NET, tôi đã tìm ra cách bài viết đầu tiên nhiều thông tin hơn thứ hai, và nó đã giúp tôi đi đúng hướng. – SqlRyan

2

Đây là một câu hỏi hay, vì việc bản địa hóa trong số ASP.NET bị nhiều nhà phát triển bỏ qua.

ASP.NET nên tự động nhặt về cài đặt trình duyệt của người dùng và buộc các CultureInfo.CurrentCulture để ngôn ngữ trình duyệt của người dùng. Bạn có thể ép buộc vấn đề bằng một dòng trong Page_OnInit() như:

Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]); 

Làm cách nào bạn có thể kiểm tra điều này? Nhập bảng ngôn ngữ trên trình duyệt của chúng tôi và thay đổi cài đặt.

21

Hãy thử điều này trong web.config:

<globalization culture="auto" uiCulture="auto" /> 

Điều này sẽ gây ASP.NET tự động dò tìm văn hóa của khách hàng từ tiêu đề yêu cầu. Bạn cũng có thể thiết lập điều này trên cơ sở mỗi trang thông qua thuộc tính Trang.

+0

maxam: Tôi đã bao bọc mã của bạn trong một khối mã được định dạng để hiển thị <> s. "chỉnh sửa" phản hồi để xem giao diện này trông như thế nào, nếu bạn quan tâm. –

+0

Cảm ơn, được đánh giá cao! – Maxam

+1

Điều này làm việc cho tôi (ps: Tôi không cần phải sử dụng cài đặt 'enableClientBasedCulture') – wdanda

2

Khách hàng thường đặt Accept-Language trong tiêu đề yêu cầu HTTP với danh sách được đánh giá bằng số lượng ngôn ngữ ưa thích, thông thường (nhưng không nhất thiết) theo thứ tự ưu tiên nhất ít được ưu tiên nhất. Bạn có thể phân tích cú pháp đó, nhưng như Maxam đã lưu ý, ASP.NET không có cơ chế thực hiện điều đó nhân danh bạn.

1
/// <summary> 
    /// Sets a user's Locale based on the browser's Locale setting. If no setting 
    /// is provided the default Locale is used. 
    /// </summary> 

public static void SetUserLocale(string CurrencySymbol, bool SetUiCulture) 
{ 
    HttpRequest Request = HttpContext.Current.Request; 
    if (Request.UserLanguages == null) 
     return; 

    string Lang = Request.UserLanguages[0]; 
    if (Lang != null) 
    { 
     // *** Problems with Turkish Locale and upper/lower case 
     // *** DataRow/DataTable indexes 
     if (Lang.StartsWith("tr")) 
      return; 

     if (Lang.Length < 3) 
      Lang = Lang + "-" + Lang.ToUpper(); 
     try 
     { 
      System.Globalization.CultureInfo Culture = new System.Globalization.CultureInfo(Lang); 
      if (CurrencySymbol != null && CurrencySymbol != "") 
       Culture.NumberFormat.CurrencySymbol = CurrencySymbol; 

      System.Threading.Thread.CurrentThread.CurrentCulture = Culture; 

      if (SetUiCulture) 
       System.Threading.Thread.CurrentThread.CurrentUICulture = Culture; 
     } 
     catch 
     { ;} 
    } 
} 

Nguồn của bài viết này là ở đây: How to detect browser language

Các vấn đề liên quan