ASP.NET MVC 3: - Использование базы данных вместо файлов ресурсов в качестве хранилища локализации - PullRequest
8 голосов
/ 19 декабря 2011

Мы локализовали строки в базе данных и хотели бы знать, будет ли расширение модели провайдера ресурсов ASP.NET работать с механизмом представления ASP.NET MVC 3. Razor.

Пожалуйста, дайте мне знать, если механизм представления ASP.NET MVC 3 Razor поддерживает извлечение локализованных строк из базы данных после того, как мы расширили модель поставщика ресурсов ASP.NET. Или он работает только с классическим ASP.NET, а не с ASP.NET MVC.

Спасибо

Satyaprakash J

Ответы [ 2 ]

9 голосов
/ 20 марта 2013

Самое чистое решение, которое я нашел до сих пор: http://www.codeproject.com/Tips/514321/A-Simple-and-Effective-Way-to-Localize-ASP-Net-MVC.

Комментарии / Обратная связь приветствуются.

Редактировать 1: На основе комментариев я добавил примеры кода и использовал ссылку в качестве ссылки.

Я создал класс customDataAnnotationsProvider:

public class CustomDataAnnotationsProvider: DataAnnotationsModelMetadataProvider
{
    private ResourceManager resourceManager = new ResourceManager();
    protected override ModelMetadata CreateMetadata(
                         IEnumerable<Attribute> attributes,
                         Type containerType,
                         Func<object> modelAccessor,
                         Type modelType,
                         string propertyName)
    {
        string key = string.Empty;
        string localizedValue = string.Empty;


        foreach (var attr in attributes)
        {
            if (attr != null)
            {
                if (attr is DisplayAttribute)
                {
                    key = ((DisplayAttribute)attr).Name;
                    if (!string.IsNullOrEmpty(key))
                    {
                        localizedValue = resourceManager.GetLocalizedText(key);
                        ((DisplayAttribute)attr).Name = localizedValue;
                    }
                }
                else if (attr is ValidationAttribute)
                {
                    key = ((ValidationAttribute)attr).ErrorMessage;
                    if (!string.IsNullOrEmpty(key))
                    {
                        localizedValue = resourceManager.GetLocalizedText(key);
                        ((ValidationAttribute)attr).ErrorMessage = localizedValue;
                    }
                }
            }
        }
        return base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
    }
}

Затем я ссылался на собственного провайдера на ApplicationStart в Global.asax

ModelMetadataProviders.Current = new Project.Web.Helpers.CustomDataAnnotationsProvider();

Вы не должны менять свою модель и можете использовать аннотацию дисплея:

[Display(Name = "CustomerAccountNumber")]
public string CustomerAccountNumber { get; set; }
1 голос
/ 22 декабря 2011

Вам повезло, потому что Рик уже сделал это для вас!

Поставщик управляемых данными ресурсов Westwind.Globalization для ASP.NET

...