2

我在 MVC 3 (Razor) 中有一个项目,我们使用强类型资源进行本地化。我们希望有可能更新已经“在线”存在的翻译。这意味着,应该可以在网站上编辑翻译。(例如,如果在 url 中有类似“translateLanguage=on”的参数) 基本上,用当前的解决方案是不可能的,因为如果资源已经改变,那么它必须重新编译。

当然,我们可以编写自己的资源管理器来使用数据库,但是我们必须将所有的翻译都重写到数据库中,这会很耗时。这也意味着我们必须更改所有代码以反映这个“新”资源管理器。

很难在所有事情中实施它。现在,我们可以在属性中使用它,例如

[Required(ErrorMessageResourceType = typeof(_SomeResource), ErrorMessageResourceName = "SomeResouceElement") 
  SomeProperty

以及在代码中:

 string translatedResource = _SomeResource.SomeResourceElement;

你能给我提供一些如何在 mvc 3 中做到这一点的信息吗?

4

1 回答 1

2

通常资源文件由两部分组成 xml + 自动生成的 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之后访问资源数据了。

于 2014-01-08T19:59:58.573 回答