从数据库翻译字符串(本地化)

时间:2015-04-09 16:41:31

标签: c# asp.net .net asp.net-mvc

我正在研究.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)

1 个答案:

答案 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>