2017-01-25 10 views
13

Trong số các ứng dụng web Azure màu xanh của chúng tôi đang phát sinh lỗi liên quan đến Văn hóa không được hỗ trợ. Chúng tôi tải lên danh sách các quốc gia để hiển thị trên trang nhất nhưng điều này đột nhiên gây ra lỗi. Cùng một mã được sử dụng trên các ứng dụng web khác nhau là tốt và họ không có vấn đề.Văn hóa đột nhiên không được hỗ trợ nữa trên ứng dụng web Azure

Mã sau đây gây ra sự cố.

private List<SelectListItem> Countries() 
     { 
      RegionInfo country = new RegionInfo(new CultureInfo("nl-BE", false).LCID); 
      List<SelectListItem> countryNames = new List<SelectListItem>(); 
     foreach (CultureInfo cul in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) 
     { 
      country = new RegionInfo(new CultureInfo(cul.Name, false).LCID); 
      countryNames.Add(new SelectListItem() { Text = country.DisplayName, Value = country.DisplayName }); 
     } 

     return countryNames.GroupBy(x => x.Text).Select(x => x.FirstOrDefault()).ToList<SelectListItem>().OrderBy(x => x.Text).ToList(); 
    } 

Tôi đã đặt thử tại mỗi phần để tôi có thể xác định các nền văn hóa đang đưa ra lỗi. Các nền văn hóa sau đây đột nhiên trả lại lỗi:

<errors> 
<LCID>4096</LCID> 
<Name>ar-001</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>el-CY</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>en-BB</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>en-BS</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>en-HK</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>en-NL</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>en-SE</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>es-419</Name> 
</errors> 

Ai đó có thể giúp tôi giải quyết vấn đề này? Tôi dường như không hiểu tại sao ứng dụng web này đột nhiên đưa ra những lỗi này.

+1

Tôi gặp vấn đề chính xác giống như của một vài giờ trước! Tôi mạnh mẽ nghi ngờ nó là một Microsoft Azure cập nhật/thay đổi gây ra điều này như chúng tôi đã không triển khai vào trang web của chúng tôi trong nhiều tuần. Tôi nhận được lỗi sau gần như tất cả các thời gian (đôi khi tôi thực sự có thể truy cập vào trang web nói 1% thời gian): Văn hóa không được hỗ trợ. Tên thông số: văn hóa 4096 (0x1000) là mã định danh văn hóa không hợp lệ. – hamish

+0

Hãy cố gắng tận dụng lệnh powershell này '[system.Globalization.CultureInfo] :: GetCultures ('AllCultures')' để truy xuất các nền văn hóa được hỗ trợ bằng cách truy cập "Debug console> PowerShell" trong [KUDU] (https: //blogs.msdn .microsoft.com/benjaminperkins/2014/03/24/sử dụng-kudu-với-windows-azure-web-sites /). Sau đó cố gắng tìm xem liệu bạn có thể tìm thấy các nền văn hóa ở trên không. –

+0

Lệnh đó không làm việc cho tôi (đã ném lỗi) nhưng lệnh này đã làm: [system.Globalization.CultureInfo] :: GetCultures ('FrameworkCultures') và nó dường như trả về tất cả các nền văn hóa mà tôi mong đợi sẽ được cài đặt trong một Máy chủ/máy chủ MS Windows. – hamish

Trả lời

2

Tôi xác nhận rằng đây là những nền văn hóa mới vừa được thêm vào Dịch vụ ứng dụng Azure và rõ ràng nó được thực hiện theo cách tạo RegionInfo không thành công. Các repro đơn giản nhất là:

var culture = new CultureInfo("en-HK", false).LCID; 
var region = new RegionInfo(culture); 

Và đó không thành công với:

Unhandled Exception: System.Globalization.CultureNotFoundException: Culture is not supported. Parameter name: culture 4096 (0x1000) is an invalid culture identifier. at System.Globalization.CultureData.GetCultureData(Int32 culture, Boolean bUseUserOverride) at System.Globalization.RegionInfo..ctor(Int32 culture)

Chúng tôi đang điều tra thêm. Trong khi đó, bắt ngoại lệ và bỏ qua các nền văn hóa mà thất bại đó là giải pháp được đề nghị.

+0

Vui lòng xem câu trả lời của Shawn Steele, giải thích rõ hơn tại sao điều này không thành công. –

12

Hầu hết tất cả các ngôn ngữ mới trong Windows đều không được gán LCID rõ ràng - bởi vì không có đủ "phòng" cho hàng nghìn ngôn ngữ ở hàng trăm quốc gia. Tất cả đều được gán 0x1000.

Trong trường hợp này, tôi nghĩ rằng một thay đổi LCID tên có thể làm việc cho bạn:

country = new RegionInfo(new CultureInfo(cul.Name, false).LCID); 

để chỉ sử dụng tên văn hóa:

country = new RegionInfo(cul.Name); 

Tất nhiên, bất kỳ sử dụng khác của LCID sẽ cũng cần phải nhận ra tên văn hóa thay thế.

Chúng tôi thực sự khuyên rằng RegionInfo được xây dựng với tên văn hóa đầy đủ vì đó là rõ ràng hơn chỉ là tên khu vực. RegionInfo có một số thuộc tính "phụ thuộc" vào các ngôn ngữ, chẳng hạn như DisplayName. Ví dụ: es-US và en-US cung cấp các chuỗi tiếng Tây Ban Nha hoặc tiếng Anh cho "Hoa Kỳ".

Hy vọng rằng sẽ giúp,

-Shawn

+0

https://social.msdn.microsoft.com/Forums/en-US/963f02d1-bf04-430a-ab51-9c3fc0462e63/cultures-not-supported-on-azure-webapps?forum=windowsazurewebsitespreview diễn đàn tham khảo danh sách không được hỗ trợ văn hóa bằng LCID. Cái tên 'cần' đó. – OzBob

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