2013-04-26 32 views
5

Tôi đã một trang web mà viết một ngày như thế này:Instances của CultureInfo (từ cùng một nền văn hóa) thay đổi dựa trên hệ điều hành

CultureInfo cultureInfo = CultureInfo.GetCultures(CultureTypes.AllCultures).FirstOrDefault(c => string.Equals(c.TwoLetterISOLanguageName, MvcApplication.Language)); 
return string.Concat(date.Day, ".", cultureInfo.DateTimeFormat.GetAbbreviatedMonthName(date.Month)); 

Trong cả hai máy tính của tôi (Windows 7, Service Pack 1, văn hóa Tây Ban Nha) và máy chủ (Windows Server 2012, Văn hóa tiếng Anh) MvcApplication.Languagees vì vậy văn hóa tôi nhận được từ danh sách là: es-ES.

Tôi hy vọng cả hai đều viết cùng một chuỗi (chúng có nền văn hóa khác nhau, nhưng tôi không sử dụng CurrentCulture). Tuy nhiên, kết quả là abr trong máy tính của tôi và Abr. trong máy chủ.

Tôi đã thử điều này được phân lập từ MvcApplication.Language bằng cách sử dụng LinqPAD nhưng nó vẫn khác nhau. Tôi đã in các mảng AbbreviatedDayNamesAbbreviatedMonthNames và chúng khác nhau trong mỗi máy tính.

Tôi có làm gì sai hoặc đây là hành vi mong đợi không? Làm thế nào tôi có thể làm để làm cho nó hoàn toàn độc lập với Windows/User Culture?

Trả lời

1

Bạn có thể thấy trong this link từ MSDN, thông tin văn hóa có thể khác trên một số phiên bản cửa sổ.

Hãy nhớ rằng tên và số nhận dạng văn hóa chỉ thể hiện một tập con của các nền văn hóa có thể tìm thấy trên một máy tính cụ thể. Các phiên bản Windows hoặc các gói dịch vụ có thể thay đổi các nền văn hóa có sẵn. Các ứng dụng thêm các nền văn hóa tùy chỉnh bằng cách sử dụng lớp CultureAndRegionInfoBuilder. Người dùng thêm các nền văn hóa tùy chỉnh của riêng họ bằng cách sử dụng công cụ Microsoft Locale Builder. Microsoft Locale Builder được viết bằng mã được quản lý bằng cách sử dụng lớp CultureAndRegionInfoBuilder.

Nếu bạn muốn có một số định dạng được tĩnh, bạn có thể xây dựng đối tượng CultureInfo của riêng bạn và tùy chỉnh các hành vi của nó, thiết lập your own Date Time format, như một ví dụ