0

我有一个使用 App_LocalResources 文件的网页,其中有 2 种语言的翻译。

这真的很好用。然而,当我打开我的两个页面时,我遇到了一个非常奇怪的问题。如果我打开英文版,我的丹麦语 URL 也是英文的。如果我先打开 med 丹麦语 URL,则英语是丹麦语。如果我 CTRL+F5 它,它会改变语言。

你可以在这里看到结果:

这真的很烦人,因为它应该立即加载适当的语言。

我在 butbtc.aspx 页面上的代码是(我也尝试过 Page_Load):

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    SetupLanguage();

}

我的 SetupLanguage 方法是:

private void SetupLanguage()
    {
        if (!string.IsNullOrEmpty(CurrentLanguage))
        {
            if (CurrentLanguage == "da")
            {
                CultureInfo dkinfo = CultureInfo.CreateSpecificCulture("da-dk");
                CultureInfo.DefaultThreadCurrentCulture = dkinfo;
                CultureInfo.DefaultThreadCurrentUICulture = dkinfo;
                Thread.CurrentThread.CurrentCulture = dkinfo;
                Thread.CurrentThread.CurrentUICulture = dkinfo;

                Page.Title = GetLocalResourceObject("PageTitleString").ToString();
                return;
            }
        }
        CultureInfo info = CultureInfo.CreateSpecificCulture("en-us");
        CultureInfo.DefaultThreadCurrentCulture = info;
        CultureInfo.DefaultThreadCurrentUICulture = info;
        Thread.CurrentThread.CurrentCulture = info;
        Thread.CurrentThread.CurrentUICulture = info;

    }

我的 CurrentLanguage 属性定义如下:

 public string CurrentLanguage
    {
        get
        {
            var toolValue = Page.RouteData.Values["language"];
            if (toolValue != null && !string.IsNullOrEmpty(toolValue.ToString()))
            {
                return toolValue.ToString();
            }
            return string.Empty;
        }
    }

如果我的路线有任何意义,那就是:

  routes.MapPageRoute("Buy Bitcoins",
                        "buybtc/{language}",
                        "~/buybtc.aspx");
4

1 回答 1

2

您需要覆盖 InitializeCulture,例如:

protected override void InitializeCulture()
{
    SetupLanguage();
    base.InitializeCulture();
}

这在页面生命周期的早期被调用。另请参阅:http: //msdn.microsoft.com/en-us/library/bz9tc508.aspx

于 2013-05-20T01:23:41.240 回答