我正在研究.NET MVC5中的Web应用程序的全球化和本地化。这适用于我的静态字符串,但我也不想翻译从数据库调用的一些文本。我的设置是这样的:
我有一个包含2个资源文件的资源文件夹,一个英文版(Resource.resx)和一个荷兰文(Resource.nl-NL.resx)。在这些文件中是我的翻译。然后我有一个带有CultureHelper类的Helper文件夹,我有一个BaseController。我的HomeController由我的BaseController扩展。在我的ViewModels中,我引用了这样的翻译:
[Display(Name = "Email", ResourceType = typeof(Resource))]
这一切都很好,但我也有一些存储在数据库中的字符串/字段。我也想翻译这些字段。但我不知道如何。
这是我调用字段的部分(以及字段的值,我不想翻译该值,只需要字段名称)。
foreach (var fieldName in Model.LineViewAttributeNames)
{
<div class="editor-label">
@fieldName
</div>
<div class="editor-field">
@if (!string.IsNullOrEmpty(Model.SelectedLineView))
{
@Html.EditorFor(x => x.LineViewItems.First(lvi => lvi.Id == Model.SelectedLineView)
.LineFieldAttributes.Single(lfa => lfa.Name == fieldName).Value, null, fieldName, null)
}
else
{
<input type="text" name="@fieldName" />
}
</div>
}
有人可以帮我解释如何翻译fieldNames
吗?
编辑,我的问题的答案
在我的帮手中:
public static string GetLabel(string fieldName)
{
ResourceManager resMngr = new ResourceManager("Project.Resources.Resource", typeof(Resources.Resource).Assembly);
return resMngr.GetString(fieldName, System.Threading.Thread.CurrentThread.CurrentUICulture);
}
在我看来:
@Project.Helper.ResourceHelper.GetLabel(fieldName)
答案 0 :(得分:0)
如果您的resx文件中包含所有翻译,则可以执行以下操作。
/*
My resource files with the translations in them are named "Lang.ar-EG.resx, Lang.es-MX.resx, ..."
and reside in my resource folder in the application call "MyApp"
*/
public static class Translator{}
private static System.Resources.ResourceManager _langResource = new System.Resources.ResourceManager("MyApp.Resources.Lang", typeof(Language).Assembly);
public static string Translate(string key, string culture)
{
return _langResource.GetString(key, CultureInfo.CreateSpecificCulture(culture));
}
}
然后我可以在我的.cshtml中执行此操作
<th>@Translator.Translate("Date", "ar-EG")</th>