我在MVC 3(Razor)中有一个项目对于本地化,我们使用强类型资源。 我们希望有可能更新已经“在线”存在的翻译。这意味着,应该可以在网站上编辑翻译。 (例如,如果在url中有像“translateLanguage = on”这样的参数)基本上,使用当前解决方案无法做到这一点,因为如果资源已经更改,那么必须重新编译它。
当然,我们可以编写自己的资源管理器来使用数据库,但是我们必须将所有翻译重写到数据库中,这将非常耗时。这也意味着我们必须更改所有代码以反映这个“新”资源管理器。
在所有事情上都很难实现它。现在,我们可以在属性中使用它 e.g。
[Required(ErrorMessageResourceType = typeof(_SomeResource), ErrorMessageResourceName = "SomeResouceElement")
SomeProperty
以及代码:
string translatedResource = _SomeResource.SomeResourceElement;
你能否告诉我如何在mvc 3中做到这一点?
答案 0 :(得分:2)
通常资源文件由xml + autogenerated cs代码两部分组成。如果您打开资源设计器文件,您将看到
/// <summary>
/// Looks up a localized string similar to About project.
/// </summary>
public static string about_project {
get {
return ResourceManager.GetString("about_project", resourceCulture);
}
}
所以你可以做的就是使用ResourceManager.GetString(“Key”)
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName);
var t = Resources.ResourceManager.GetResourceSet(new CultureInfo(cultureName), true, true);
为了使其更加智能,您可以重写BaseView
public abstract class ViewBase<TModel> : System.Web.Mvc.WebViewPage<TModel>
{
public string GetTranslation(string key)
{
return _rManager.GetString(key);
}
private ResourceManager _rManager;
protected ViewBase()
{
_rManager = Resources.ResourceManager.GetResourceSet(new CultureInfo(cultureName), true, true);
}
}
然后您就可以在剃须刀视图中使用GetTranslation(要运行此基本视图,您需要从Views文件夹修改web.config)
然后,您可以在编辑xml访问资源数据之后。