Tôi cố gắng để đạt được hai điều:Localization trong ASP.NET MVC 4 sử dụng App_GlobalResources
- Khoanh vùng các “xây dựng trong” thông báo lỗi cho “FieldMustBeDate” và "FieldMustBeNumeric".
- Bản địa hóa một số thông báo lỗi khác mà bạn gặp phải, ví dụ: "PropertyValueRequired".
Bằng cách sử dụng http://forums.asp.net/t/1862672.aspx/1 cho vấn đề 1 và MVC 4 ignores DefaultModelBinder.ResourceClassKey cho vấn đề 2 Tôi đã quản lý để làm việc tại địa phương.
Tuy nhiên ngay sau khi tôi xuất bản lên trang web, thông báo lỗi "được tích hợp sẵn" mặc định trở lại tiếng Anh trong khi các thông báo lỗi khác vẫn được bản địa hóa.
Tôi đã đọc một số địa điểm sử dụng App_GlobalResources nên tránh, tuy nhiên tôi không thể hoàn thành vấn đề 1 mà không sử dụng vấn đề này.
Tôi đã tạo tệp .resx với tên "WebResources.resx", đặt Hành động xây dựng thành "Nhúng", đặt Sao chép sang thư mục đầu ra thành "Không sao chép", đặt Công cụ tùy chỉnh thành "PublicResXFileCodeGenerator" và đặt Không gian tên công cụ tùy chỉnh thành "Tài nguyên". Bản thân Dự án được đặt thành chỉ Xuất bản các tệp cần thiết.
My Global.asax.cs chứa sau (có liên quan) Mã:
ClientDataTypeModelValidatorProvider.ResourceClassKey = "WebResources";
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(RequiredAttribute),
typeof(MyRequiredAttributeAdapter));
Và MyRequiredAttributeAdapter lớp chứa đoạn mã sau:
public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
public MyRequiredAttributeAdapter(
ModelMetadata metadata,
ControllerContext context,
RequiredAttribute attribute
)
: base(metadata, context, attribute)
{
if (attribute.ErrorMessageResourceType == null)
{
attribute.ErrorMessageResourceType = typeof(Resources.WebResources);
}
if (attribute.ErrorMessageResourceName == null)
{
attribute.ErrorMessageResourceName = "PropertyValueRequired";
}
}
}
này đang làm việc tại địa phương tuy nhiên không ai có bất kỳ ý tưởng về làm thế nào để có được "được xây dựng trong" tin nhắn để làm việc sau khi điều này được xuất bản?
Cảm ơn sự giúp đỡ của bạn!
Trân trọng, Andreas
Cảm ơn bạn! Vấn đề này đã khiến tôi phát điên! – KTW