在asp.net中动态定义语言

在asp.net中动态定义语言,asp.net,dynamic,Asp.net,Dynamic,我有一个案例,我必须得到管理员定义的语言。我知道如何做语言支持的网站,如 但是消费者希望定义语言,这样他就不需要每次添加新语言时都修改源代码。我一直在寻找,但一无所获。有人能告诉我怎么做吗?您可以构建自己的ResourceExpressionBuilder,将键/值/语言信息存储在数据库表中。然后,您可以在管理中提供接口,以添加语言并基于此数据库表更新值。表达式生成器将允许您使用与内置资源文件相同的语法进行本地化。但这并不是一个快速而简单的解决方案。实现这一点需要时间 或者,您可以教客户创建资源

我有一个案例,我必须得到管理员定义的语言。我知道如何做语言支持的网站,如


但是消费者希望定义语言,这样他就不需要每次添加新语言时都修改源代码。我一直在寻找,但一无所获。有人能告诉我怎么做吗?

您可以构建自己的ResourceExpressionBuilder,将键/值/语言信息存储在数据库表中。然后,您可以在管理中提供接口,以添加语言并基于此数据库表更新值。表达式生成器将允许您使用与内置资源文件相同的语法进行本地化。但这并不是一个快速而简单的解决方案。实现这一点需要时间

或者,您可以教客户创建资源文件并将其部署到服务器上。这不需要汇编

下面是一个关于如何覆盖资源管理器的示例。您还可以创建自己的表达式
http://msdn.microsoft.com/en-us/library/system.web.compilation.resourceexpressionbuilder.aspx

您可以将该语言存储在数据库表中,并从那里调用它,然后将该值应用于您的
language
变量

cmd SqlCommand = new SqlCommand("SELECT TOP 1 Language FROM [WebsiteLanguage]",conn);
objLanguage Object = cmd.ExecuteScalar();
if (!(objLanguage==null)){
   language = objLanguage;
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
   Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
}

然后管理员可以通过管理员区域中的表单更新该语言。

听起来不错,但是我如何才能将页面组件应用到app\u LocalResources文件?例如:“meta.resourcekey”,因为不会添加应用程序\本地资源文件“resx”。这肯定需要时间。我在考虑实现一个数据库支持的解决方案。但问题是app_LocalResources文件。我需要让它们充满活力。我当然提到了resx文件。它们是基于xml的。也许我可以创建一个新的xml文件并将其存储到app_LocalResources文件中。你认为这样行吗?如果使用数据库,你将不会使用资源文件。理论上你可以,但是如果你有一个数据库,你为什么要这么做呢?我不确定如果动态创建资源文件会发生什么,但我不建议这样做。也许有可能。那么,我怎样才能将这些语言应用到标签、按钮等上呢?我不应该喜欢if(lang=“en US”)label1.text=“English”等。你能提供一些线索吗?当然不能。你现在是这样做的吗?您应该这样做:label1.text=this.GetGlobalResourceObject(“Resources”,“Hello”)作为字符串;因此,我必须根据语言更改标签文本。我不想这样做,因为它不是很好的编程。如果我这样做了,我必须写一个函数或者什么东西来改变元素的文本。问题是,我将有超过1页的系统。每页都有标签、按钮等。。等等当客户希望添加新的lang时,我是否必须将标签的所有文本存储到数据库中?然后根据页面Id获取它们并更改文本?这似乎不是正确的方法。我也会有用户控件。
cmd SqlCommand = new SqlCommand("SELECT TOP 1 Language FROM [WebsiteLanguage]",conn);
objLanguage Object = cmd.ExecuteScalar();
if (!(objLanguage==null)){
   language = objLanguage;
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
   Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
}