Как сделать локализацию для содержимого, поступающего из @ Html.LabelFor () в mvc3 - PullRequest
7 голосов
/ 15 марта 2012

Я просто расширяю свой этот вопрос немного.

У меня есть App_LocalResources в моем веб-приложении MVC (у меня его нет в отдельной dll).

У меня есть моя модель в другой сборке. В модели у меня есть 2 класса Country и City:

public class Country: MyContainer
{
    public City city {get;set;}
} 

public class City
{
    public CityName {get;set;}
}

public class MyContainer
{
    public Cid {get;set;}
}

Итак, в моем методе действия я создаю и передаю объект страны в качестве моей модели представления.

И в представлении я использую это:

@Html.LabelFor(mdl=>mdl.City.CityName)
@Html.LabelFor(mdl=>mdl.Cid)

Так что это хорошо работает, и метка с текстом отображается на английском языке.

Но как мне изменить это так, чтобы он считывал текст из моих файлов ресурсов в моем веб-приложении?

Ответы [ 3 ]

13 голосов
/ 15 марта 2012

Вы можете написать собственный атрибут отображения:

public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
    public LocalizedDisplayNameAttribute(string key): base(FormatMessage(key))
    {
    }

    private static string FormatMessage(string key)
    {
        // TODO: fetch the corresponding string from your resource file
        throw new NotImplementedException();
    }
}

, а затем:

public class City
{
    [LocalizedDisplayName("cityname")]
    public string CityName { get; set; }
}

Вы также можете оформить , следуя руководству по локализации .Он обеспечивает полную реализацию образца атрибута.

4 голосов
/ 06 мая 2014

Вы можете использовать [Display(ResourceType = typeof(App_LocalResources), Name = "AgreeTandCs")], где App_LocalResources - это имя класса ресурса (ваш .resx), а Name - это имя статической строки, на которую вы хотите сослаться. Используйте LabelFor, как обычно, на ваш взгляд, и он автоматически вытянет ваш ресурс.

В моем примере метка отображает строку, хранящуюся с именем переменной AgreementTandCs, и если вы просматриваете ее на английском языке, она будет отображаться на странице как «Я принимаю эти условия».

0 голосов
/ 20 декабря 2014

Вы также можете использовать перевод с параметрами {0}, {2} внутри строки перевода. Он мой пример атрибут Localize Compare

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