在asp.net核心上本地化Enum条目

时间:2017-02-14 21:23:15

标签: localization asp.net-core .net-core

如何在asp.net核心上本地化以下枚举条目?我在asp.net-core github存储库(https://github.com/aspnet/Mvc/pull/5185)上发现了一些问题,但我找不到合适的方法。

目标枚举:

public enum TestEnum
{
    [Display(Name = "VALUE1_RESX_ENTRY_KEY")]
    Value1,
    [Display(Name = "VALUE3_RESX_ENTRY_KEY")]
    Value2
}

CSHTML代码块:

<select id="test" asp-items="Html.GetEnumSelectList<TestEnum>()">
</select>

资源文件:

enter image description here

3 个答案:

答案 0 :(得分:1)

似乎是一个错误,将在3.0.0中修复: https://github.com/aspnet/Mvc/issues/7748

服务器端的解决方法如下:

private List<SelectListItem> GetPhoneStateEnumList()
{
    var list = new List<SelectListItem>();
    foreach (PhoneState item in Enum.GetValues(typeof(PhoneState)))
    {
        list.Add(new SelectListItem
        {
            Text = Enum.GetName(typeof(PhoneState), item),
            Value = item.ToString()
        });
    }
    return list.OrderBy(x => x.Text).ToList();
}

答案 1 :(得分:0)

我有同样的问题。我的解决方法是明确指定枚举选项:

<select asp-for="Gender" class="form-control">
    <option disabled selected>@Localizer["ChooseGender"]</option>
    <option value="0">@Localizer["Male"]</option>
    <option value="1">@Localizer["Female"]</option>
</select>

答案 2 :(得分:0)

我创建了一个标签助手来本地化枚举,您只需要传递枚举类型和本地化方法的委托即可。

<select-enum 
    enum-type="typeof(TestEnum)" 
    selected-value="(int)TestEnum.Value1" 
    text-localizer-delegate="delegate(string s) { return Localizer[s].Value; }"
    name="testEnum">
</select-enum>

或者如果您使用共享资源进行本地化:

<select-enum 
    enum-type="typeof(TestEnum)" 
    selected-value="(int)TestEnum.Value1" 
    text-localizer-delegate="delegate(string s) { return MyLocalizer.Text(s); }"
    name="testEnum">
</select-enum>

从块安装:

Install-Package LazZiya.TagHelpers -Version 2.0.0

了解更多here