2010-05-31 118 views
6

Tôi đã phát triển một phần mềm mẫu trong C# windows Appliation. Làm thế nào để làm cho nó trở thành một phần mềm hỗ trợ đa ngôn ngữ.Hỗ trợ đa ngôn ngữ Trong C#

Ví dụ: Một trong những hộp thư hiển thị "Chào mừng bạn đến lấy mẫu ứng dụng"

tôi cài đặt phần mềm trong một os chinees, nhưng nó sẽ hiển thị thông điệp chỉ trong tiếng anh.

Tôi đang sử dụng "bảng chuỗi" (Tệp tài nguyên) cho sự cố này.

Trong bảng chuỗi, tôi cần tạo mục nhập cho mỗi thư bằng tiếng Anh và Chine.

quy trình kịp thời của nó. Có cách nào khác để làm điều này?

+2

Chủ đề tốt tại đây: http://stackoverflow.com/questions/119568/best-practice-to-make-a-multi-language-application-in-c-winforms – Inisheer

+0

Cũng ở đây: http: // msdn.microsoft.com/en-us/library/1021kkz0%28v=VS.100% 29.aspx – Inisheer

+0

WinForms hoặc WPF? –

Trả lời

4

Creare Reources tệp cho từng ngôn ngữ bạn muốn hỗ trợ được đề cập bên dưới.

alt text http://geekswithblogs.net/images/geekswithblogs_net/dotNETPlayground/resx.gif

Dựa trên ngôn ngữ/CurrentCulture của người sử dụng, đọc các giá trị từ tập tin Resource Language tương ứng và hiển thị trong nhãn hoặc MessageBog. Đây là một số mã mẫu.

public static class Translate 

{ 

    public static string GetLanguage() 

    { 

     return HttpContext.Current.Request.UserLanguages[0]; 

    } 



    public static string Message(string key) 

    { 

     ResourceManager resMan = null; 

     if (HttpContext.Current.Cache["resMan" + Global.GetLanguage()] == null) 

     { 

      resMan = Language.GetResourceManager(Global.GetLanguage()); 

      if (resMan != null) HttpContext.Current.Cache["resMan" + Global.GetLanguage()] = resMan; 

     } 

     else 

      resMan = (ResourceManager)HttpContext.Current.Cache["resMan" + Global.GetLanguage()]; 



     if (resMan == null) return key; 



     string originalKey = key; 

     key = Regex.Replace(key, "[ ./]", "_"); 



     try 

     { 

      string value = resMan.GetString(key); 

      if (value != null) return value; 

      return originalKey; 

     } 

     catch (MissingManifestResourceException) 

     { 

      try 

      { 

       return HttpContext.GetGlobalResourceObject("en_au", key).ToString(); 

      } 

      catch (MissingManifestResourceException mmre) 

      { 

       throw new System.IO.FileNotFoundException("Could not locate the en_au.resx resource file. This is the default language pack, and needs to exist within the Resources project.", mmre); 

      } 

      catch (NullReferenceException) 

      { 

       return originalKey; 

      } 

     } 

     catch (NullReferenceException) 

     { 

      return originalKey; 

     } 

    } 

} 

Trong ứng dụng asn asp.net, bạn nên sử dụng như sau.

<span class="label">User:</span> 

Bây giờ bạn sẽ đặt:

<span class="label"><%=Translate.Message("User") %>:</span> 
+1

Cảm ơn bạn: bây giờ tôi đang sử dụng như thế này .... không có cách nào khác? –

0

Bạn có thể làm điều đó bằng cách sử dụng tệp tài nguyên. Bạn cần tạo tệp tài nguyên cho từng ngôn ngữ và bạn có thể sử dụng tệp thích hợp khi chạy ứng dụng.

+0

Cảm ơn bạn Ram, Bây giờ tôi đang sử dụng phương pháp này chỉ .... bất kỳ phương pháp đơn giản khác? –

2

Nếu bạn được sẽ sử dụng tập tin tài nguyên như Ram gợi ý, có một bài viết trên blog tốt về nội địa hóa here: ASP.NET MVC 2 Localization complete guide. (Tôi nên đã đề cập rằng đây là cho Asp.net mvc 2, nó có thể hoặc có thể không hữu ích) Bạn vẫn phải dành thời gian làm cho bảng cho mỗi ngôn ngữ. Tôi đã không sử dụng bất kỳ cách tiếp cận nào khác cho điều này trước đây, hy vọng bạn tìm thấy một cái gì đó hữu ích

+0

Cảm ơn bạn, tất cả đều được giải thích dễ dàng và hoạt động. –

0

Resharper 5.0 có thể cải thiện đáng kể thời gian bạn dành cho bản địa hóa. Nó có các tính năng cho phép dễ dàng di chuyển đến tài nguyên và nó nhấn mạnh (nếu được chọn như vậy) tất cả các chuỗi có thể được bản địa hóa nên khó mà bỏ sót chúng.

Vì nó có 30 ngày dùng thử (phiên bản đầy đủ), bạn có thể cài đặt nó, thực hiện công việc và gỡ cài đặt nếu bạn không đủ khả năng, nhưng tôi khuyên bạn nên giữ nó :-) Nó thực sự đáng giá.

Nội địa hóa phần mềm và toàn cầu hoá luôn là những công việc không mong muốn và đôi khi không mong muốn đối với nhà phát triển. ReSharper 5 rất đơn giản hóa việc làm việc với các tài nguyên bằng cách cung cấp đầy đủ các tính năng cho các tệp resx và sử dụng tài nguyên trong mã C# và VB.NET, cũng như trong đánh dấu ASP.NET và XAML.
Các tính năng chuyên dụng bao gồm Di chuyển chuỗi thành tài nguyên, Tìm tập quán tài nguyên và các tác vụ điều hướng khác. Kết hợp với hỗ trợ tái cấu trúc, kiểm tra và sửa lỗi, bạn sẽ có được một môi trường địa phương hóa thuận tiện.

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