【问题标题】:Localizing Enum entry on asp.net core在 asp.net 核心上本地化枚举条目
【发布时间】:2019-04-17 20:47:42
【问题描述】:
如何在 asp.net core 上本地化以下枚举条目?我在 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>
资源文件:
【问题讨论】:
标签:
localization
asp.net-core
.net-core
【解决方案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();
}
【解决方案2】:
我创建了一个本地化枚举的标签助手,您只需要传递枚举类型和本地化方法的委托。
<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
【解决方案3】:
我也有同样的问题。我的解决方法是明确指定枚举选项:
<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>