9

Tôi đã tạo trang web MVC được bản địa hóa bằng mã được tìm thấy trên this blog by Alex Adamyan.ResourceManager không chọn đúng bộ tài nguyên khi sử dụng văn bản tùy chỉnh

Điều này rất hữu ích nếu tôi sử dụng văn hóa hiện có. Tuy nhiên, tôi đang cố gắng bản địa hóa cho Tagalog (tl hoặc tl-PH). Windows không có văn hóa này được xây dựng trong vì vậy tôi đã tạo ra một (Tôi đã thử cả hai tl và tl-PH) theo mã bên dưới:

public static void CreateCustomCultures() 

{ 

    var cultureBuilder = new CultureAndRegionInfoBuilder(
          "tl", CultureAndRegionModifiers.Neutral); 

    cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
    cultureBuilder.LoadDataFromRegionInfo(new RegionInfo("US")); 
    cultureBuilder.IsMetric = true; 
    cultureBuilder.CultureEnglishName = "Tagalog"; 
    cultureBuilder.CultureNativeName = "Tagalog"; 
    cultureBuilder.RegionEnglishName = "Tagalog"; 
    cultureBuilder.RegionNativeName = "Tagalog"; 
    cultureBuilder.TwoLetterISOLanguageName = "tl"; 
    cultureBuilder.ThreeLetterISORegionName = "PH"; 
    cultureBuilder.Register(); 

    var cultureBuilder2 = new CultureAndRegionInfoBuilder(
          "tl-PH", CultureAndRegionModifiers.None); 

    cultureBuilder2.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
    cultureBuilder2.LoadDataFromRegionInfo(new RegionInfo("US")); 
    cultureBuilder2.IsMetric = true; 
    cultureBuilder2.CultureEnglishName = "Tagalog"; 
    cultureBuilder2.CultureNativeName = "Tagalog"; 
    cultureBuilder2.RegionEnglishName = "Tagalog"; 
    cultureBuilder2.RegionNativeName = "Tagalog"; 
    cultureBuilder2.TwoLetterISOLanguageName = "tl"; 
    cultureBuilder2.ThreeLetterISORegionName = "PH"; 
    cultureBuilder2.Register(); 

} 

Tôi cũng có bốn tập tin tài nguyên trên trang web thử nghiệm của tôi nằm trong ~/Lượt xem/Trang chủ/Tài nguyên:

  • Home.aspx.resx;
  • Home.aspx.tl.resx
  • Home.aspx.tl-PH.resx
  • Home.aspx.de.resx

Khi tôi xây dựng, tôi nhận được ba tên thích hợp thư mục dưới của tôi thư mục bin, mỗi thư mục có một dll được đặt tên thích hợp.

Vì vậy, khi tôi truy cập trang chủ trang web của mình http://localhost:1907 Tôi nhận được các chuỗi ngôn ngữ mặc định (tiếng Anh).

Khi tôi vào trang chủ tiếng Đức (de) http://localhost:1907/de Tôi nhận được phiên bản tiếng Đức của trang web.

Khi tôi chuyển sang các phiên bản tiếng Tagalog http://localhost:1907/tl hoặc http://localhost:1907/tl-PH, tôi nhận phiên bản tiếng Anh thay vì phiên bản Tagalog.

Tôi đã đặt điểm ngắt trong mã tìm nạp tài nguyên và đã xác nhận rằng văn hóa và văn bản giao diện người dùng hiện tại được đặt chính xác cho văn hóa Tagalog và Tagalog là văn hóa được chuyển đến resourceManager.GetString (khóa, văn hóa).

Mọi suy nghĩ? Tôi không tạo ra nền văn hóa của mình một cách chính xác?

+0

cultureBuilder2.LoadDataFromCultureInfo (new CultureInfo ("en-US")); cultureBuilder2.LoadDataFromRegionInfo (RegionInfo mới ("US")); en-US? –

+0

@Avatar: Nó chỉ tải các cài đặt (như phân tách và phân tách thập phân và nhóm) từ văn hóa tiếng Anh Mỹ. Nó không nên có bất kỳ ảnh hưởng nào khi tải các tài nguyên phù hợp ... –

+0

Tôi khá chắc chắn rằng bạn đã tạo ra văn hóa tùy chỉnh của mình một cách chính xác. Mối quan tâm duy nhất tôi có là mã quốc gia ISO 3166 gồm ba chữ cái của bạn, mà rõ ràng chỉ là hai chữ cái. Tuy nhiên nó không quan trọng. –

Trả lời

1

Tôi nghĩ rằng nền văn hóa của bạn chưa bao giờ được đăng ký, ít nhất một trong số đó không phải là.

Mã bên dưới sẽ ném một ngoại lệ vì bạn không thể chỉ định giá trị khu vực cho văn hóa trung tính. Cũng giống như bạn không thể tạo ra một đối tượng DateTimeFormatInfo cho một nền văn hóa trung tính.

var cultureBuilder = new CultureAndRegionInfoBuilder(
         "tl", CultureAndRegionModifiers.Neutral); 

cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
cultureBuilder.LoadDataFromRegionInfo(new RegionInfo("US")); 
cultureBuilder.IsMetric = true; 
cultureBuilder.CultureEnglishName = "Tagalog"; 
cultureBuilder.CultureNativeName = "Tagalog"; 
cultureBuilder.RegionEnglishName = "Tagalog"; 
cultureBuilder.RegionNativeName = "Tagalog"; 
cultureBuilder.TwoLetterISOLanguageName = "tl"; 
cultureBuilder.ThreeLetterISORegionName = "PH"; 
cultureBuilder.Register(); 

Nó phải là một cái gì đó như thế này

var cultureBuilder = new CultureAndRegionInfoBuilder(
         "tl", CultureAndRegionModifiers.Neutral); 

cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
cultureBuilder.CultureEnglishName = "Tagalog"; 
cultureBuilder.CultureNativeName = "Tagalog"; 
cultureBuilder.TwoLetterISOLanguageName = "tl"; 
cultureBuilder.Register(); 

Văn hóa cụ thể thứ hai có vẻ ổn.