3

我正在创建一个本质上是多语言的网站。我提供了一种功能,用户可以通过从下拉菜单中选择所需的语言来选择它。

现在我的问题从这里开始(当从下拉列表中选择一种语言时)。我目前正在实施 2 种语言英语和阿拉伯语。

问题是当用户从登录页面的下拉菜单中选择阿拉伯语时,页面会刷新,并且浏览器会加载阿拉伯语的所有内容。

但...

当我再次选择英语时,页面刷新但语言内容没有改变!

我检查了代码和值(文化名称值)是否正确应用!!

关于什么是错的和在哪里的任何线索......

这是我的代码...

protected override void InitializeCulture()
{
    String selectedLanguage = string.Empty;

    if (Request.Form["ddlLanguage"] != null)
    {
        selectedLanguage = Request.Form["ddlLanguage"];

        CultureInfo ci = new CultureInfo(selectedLanguage);

        Thread.CurrentThread.CurrentCulture = ci;
        Thread.CurrentThread.CurrentUICulture = ci;
    }

    base.InitializeCulture();
}

任何帮助都会很棒!

谢谢

4

2 回答 2

2

Culture必须针对每个请求进行设置。It's not enough to set the Threadcultures once when the selection changes.

为了根据用户对每个请求的选择来设置文化,有几种可能的方法。

  1. 在(例如)Page_Init母版页的事件中设置文化。
  2. 为内容页面创建自定义基本页面(可能MyBasePage)并覆盖InitializeCulture该类的方法。然后让所有内容页面都从类派生,而不是直接从Page.
  3. 添加代码以在Global.asax.
  4. 可能还有其他几种可能的方法来处理这个问题。

无论您将使用哪种方法,用户选择的文化必须可用于将在线程上设置文化的代码。因此,当用户更改他/她的选择时,您必须将该选择保存在您可以在接下来的请求中访问它的地方。这也可以通过几种可能的方式来解决。以下是一些选项:

  1. 如果您使用的是ProfileProvider,则可以将选择保存到用户的个人资料中。
  2. 或者,您可以将其存储在 cookie 中。
  3. 您可以将其存储在 中,Session但这意味着用户必须Session在重置时重新选择它。
  4. 您可以使用其他一些自定义方式来存储选择(数据库、磁盘上的某些文件等)。

有关如何使用Global.asax和 a完成此操作的更详细示例,cookie请查看此处

于 2012-09-03T09:15:45.600 回答
0

查看这篇文章 -如何创建 ASP.NET MVC 多语言 Web 应用程序? 我们将主要看到两种方法-

方法 1:使用静态页面

方法 2:在运行时使用带有本地化数据的动态页面

于 2014-01-27T23:36:54.190 回答