在asp.net中创建一个多语言网站

时间:2012-09-03 06:18:11

标签: asp.net multilingual

我正在创建一个多语言的网站。 我正在提供一种功能,用户可以通过从下拉列表中选择所需的语言来选择所需的语言。

现在我的问题从这里开始(当从下拉列表中选择一种语言时)。我目前正在实施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();
}

任何帮助都会很棒!!

由于

2 个答案:

答案 0 :(得分:2)

必须在每个请求上设置Culture设置。当选择发生变化时,仅设置Thread种培养物是不够的。

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

  1. 在(例如)主页的Page_Init事件中设置文化。
  2. 为内容页面创建自定义基页(可能是MyBasePage)并覆盖该类的InitializeCulture方法。然后使所有内容页面都来自类,而不是直接来自Page
  3. Global.asax
  4. 中添加用于在适当的事件中设置文化的代码
  5. 可能还有其他几种方法可以解决这个问题。
  6. 无论您将使用哪种方法,用户选择的文化必须可用于将在线程上设置文化的代码。因此,当用户更改他/她的选择时,您必须将该选择保存在您可以在即将到来的请求中访问它的位置。这也可以通过几种可能的方式解决。以下是一些选项:

    1. 如果您使用的是ProfileProvider,则可以将选择内容保存到用户的个人资料中。
    2. 您也可以将其存储在Cookie中。
    3. 您可以将其存储在Session中,但这意味着用户必须在Session重置后重新选择它。
    4. 您可以使用其他一些自定义方式来存储选择(数据库,磁盘上的某些文件等)。
    5. 有关如何使用Global.asaxcookie完成此操作的详细说明,请查看over here

答案 1 :(得分:0)

查看此文章 - How to create ASP.NET MVC multilingual web application ? 我们将主要看到两种方法 -

方法1 :使用静态页面

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