Можно ли при доступе к ресурсам по имени свойства изменить, какой ResourceManager используется? - PullRequest
4 голосов
/ 29 апреля 2011

Я хочу использовать пользовательский ResourceProvider, но все еще пользуюсь строго типизированными именами ресурсов. Кажется, однако, что, на мой взгляд, если я обращаюсь к свойству ресурса напрямую, вот так:

@Html.Raw(UIText.Header)

Затем текст читается непосредственно из файла resx и не проходит через мою фабрику пользовательских провайдеров, которая определена в web.config.

@Html.Raw(HttpContext.GetLocalResourceObject("UIText.resx", "Header").ToString())

Работает нормально, но имеет обратную сторону для строгой типизации. Я создал метод расширения, который оборачивает это, но все еще довольно уродливо:

@Html.ResourceText(() => UIText.Header)

Итак, есть ли способ использовать свойства ресурса напрямую, но сделать так, чтобы они направлялись через нестандартного провайдера без необходимости создания собственного ResXFileCodeGenerator?

1 Ответ

0 голосов
/ 19 августа 2011

Будет ли работать статический класс, содержащий строки? Я создал файл шаблона T4, который просматривает мой .resx и генерирует этот статический класс автоматически .

Это результат компиляции шаблона T4:

public static class ResourceStrings {
    public const string AddAttachments = @"AddAttachments";
    public const string button_create = @"button_create";
    public const string button_delete = @"button_delete";
    public const string button_details = @"button_details";
    public const string button_display = @"button_display";
    ...
}

Я использую свои атрибуты ASP.NET MVC для таких классов:

    [StringLength(8, ErrorMessageResourceType = typeof(i18n),
    ErrorMessageResourceName = ResourceStrings.Client_VatNo_length_validation_msg)]
    public string VatNo;

    [StringLength(10, ErrorMessageResourceType = typeof (i18n),
    ErrorMessageResourceName = ResourceStrings.Client_BaseIdentNr_length_validation_msg)]
    public string BaseIdentNr;

Надеюсь, я не пропустил это полностью;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...