2012-03-09 67 views
0

我有一个情况,我必须获取由admin定义的语言。我知道怎么做的语言支持的网站,如http://www.codeproject.com/Articles/163215/Dynamic-definition-of-the-list-of-available-langua动态定义语言asp.net

Thread.CurrentThread.CurrentCulture = 
        CultureInfo.CreateSpecificCulture(language); 
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(language); 
     } 

,但消费者想要定义语言,所以他不需要我去更改源代码每次他想添加一个新的语言。我一直在寻找,但一无所获。任何人都可以给我任何想法如何做到这一点?

回答

1

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

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

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

+0

它肯定需要时间。我正在考虑实施支持的解决方案数据库。但接下来的问题是app_LocalResources文件。我需要让他们动态。当然我会提到resx文件。他们是基于xml的。也许我可以创建一个新的xml文件并将其存储到app_LocalResources文件中。您认为这样可行吗? – Ktt 2012-03-09 09:36:24

+0

如果您使用数据库,则不会使用资源文件。理论上你可以,但为什么你会有,如果你有一个数据库?我不确定如果您动态创建资源文件会发生什么,但我不会推荐它。尽管这可能是可能的。 – Stilgar 2012-03-09 09:55:38

+0

如何才能将语言应用于标签,按钮等?我不应该这样做,如果(lang =“en-US”)label1.text =“English”else等。你能否提供任何线索? – Ktt 2012-03-09 10:00:32

1

你可以存储在数据库表中的语言和呼叫它从那里,并将这个值应用到你的变量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); 
} 

然后管理员可以UPDATE语言通过您的管理区域中的窗体。

+0

听起来不错,但我将如何能够应用到页面组件的app_LocalResources文件?例如:“meta.resourcekey”,因为不会添加app_LocalResources文件“resx”。 – Ktt 2012-03-09 09:32:46