gpt4 book ai didi

c# - 更改 ResourceManager(使其可更新)

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:01 24 4
gpt4 key购买 nike

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

当然,我们可以编写自己的使用数据库的资源管理器,但那样我们就必须将所有翻译重写到数据库中,这将非常耗时。这也意味着我们必须更改所有代码以反射(reflect)这个"new"资源管理器。

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

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

以及在代码中:

 string translatedResource = _SomeResource.SomeResourceElement;

您能否向我提供一些如何在 mvc 3 中执行此操作的信息?

最佳答案

资源文件一般由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);
}


}

然后您将能够在 Razor View 中使用 GetTranslation(要运行此基本 View ,您需要修改 Views 文件夹中的 web.config)

然后你就可以在编辑xml之后访问资源数据了。

关于c# - 更改 ResourceManager(使其可更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7787244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com