【问题标题】:ASP.NET dynamic localization for English and one more language英语和另一种语言的 ASP.NET 动态本地化
【发布时间】:2011-08-06 10:25:46
【问题描述】:

我正在创建一个网站模板,网站所有者可以在该模板中选择英语以外的母语并自行本地化一些内容。让我用现在的实际情况更好地解释一下:我的网站将有英语和土耳其语(我的母语是土耳其语,但这应该可以更改并适用于任何非英语语言)版本的主要内容标题,例如 BLOG , PROJECTS, ABOUT, CONTACT 等,但是这些的数量和名称完全取决于用户的选择,所以我可以打开一个名为 MySection 的新部分,它的标题和土耳其语的本地翻译将存储在我的数据库中(使用 EF)。同样在我的数据库设置中,存储了本地语言的代码(在本例中为“tr”)。根据浏览器发送网页内容的最模块化/有组织的方式是什么,就像这样:

在 DB 中,部分以这种方式组织(标题及其土耳其语翻译)(所有这些都是任意数量且完全由用户创建):

  Title     NativeTitle
  ---------------------
  BLOG      BLOG
  PROJECTS  PROJELER
  ABOUT     HAKKINDA

我的母语设置(我已经创建)设置为tr(这取决于网站所有者,也可以更改)。因此,根据用户浏览器的首选语言设置,我想显示土耳其语内容,而对于所有其他语言首选项,包括(显然)英语,我想显示默认的英语内容。使用 RESX 文件对特定语言的静态内容进行本地化非常简单,但在我的情况下,我既没有静态内容也没有特定的已知母语,所以我的所有数据都来自数据库。我想尽可能少地编写代码并尽可能声明。这样做的最佳做法是什么?是否检查页面中的母语和当前文化的设置,如果它们相等,则发送母语,否则发送默认标题是唯一的方法?它肯定会起作用,但是如果我想将它扩展到站点的其他部分怎么办?我不希望站点周围到处都是 if 和 else,我需要某种集中的字符串映射系统。最好的方法是什么?

【问题讨论】:

    标签: asp.net localization dynamic-data


    【解决方案1】:

    您可以通过检查 Thread.CurrentThread.CurrentUICulture 属性 (http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentuiculture.aspx) 覆盖基础 Page 中的 InitializeCulture (http://msdn.microsoft.com/en-us/library/system.web.ui.page.initializeculture.aspx) 方法来动态加载本地化内容

    【讨论】:

    • 显然您的所有页面都必须继承自 PageBase 类(继承自 System.Web.UI.Page)。您可以通过 web.config 确保这一点(参见 PageBaseType 属性 msdn.microsoft.com/en-us/library/950xf363.aspx
    • 是的,这与创建自定义 Page 类的方式完全相同(需要做一些额外的工作)。
    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 2016-03-01
    • 2015-09-06
    • 2020-01-03
    • 1970-01-01
    • 2014-11-04
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多