2010-08-16 50 views
2

我在基本页面上覆盖了InitializeCulture。改变文化的问题

Protected Overrides Sub InitializeCulture() 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("Fa-IR") 
    Thread.CurrentThread.CurrentUICulture = New CultureInfo("Fa-IR") 
    MyBase.InitializeCulture() 
End Sub 

但仍然我的文化是英语联邦。 和文本是英语,但不是波斯语。


我想以编程方式更改它。我拥有当地和全球的英语和波斯语资源。我想在它们之间切换。 我该如何解决它?

当我把受保护的覆盖Sub初始化文化() 在主页上它很好!但是,当我把它放在basepage中的时候。 有什么问题?

回答

2

我发现用最后一行初始化基类方法的情况并不常见。我的第一个赌注是,这覆盖了你的文化初始化。但我测试了它 - 这不是问题。无论如何,你的代码应该工作。

你确定在你的代码中没有其他地方有文化初始化吗? CurrentThread是一个全局变量,如果你改变它在其他地方(在数据层的Web控制?),这会影响你的页面。

这是我的示例代码,为德语/英语工作。它也应该为波斯/英语工作。

Partial Public Class _Default 
    Inherits BasePage 
End Class 

Public Class BasePage 
    Inherits System.Web.UI.Page 

    Protected Overrides Sub InitializeCulture() 
     MyBase.InitializeCulture() 
     Dim cultureInfo = New CultureInfo("de-DE") 
     Thread.CurrentThread.CurrentCulture = cultureInfo 
     Thread.CurrentThread.CurrentUICulture = cultureInfo 
    End Sub 
End Class 
+0

谢谢。 当我把保护覆盖Sub InitializeCulture() 在主页面它很好!但是,当我把它放在basepage中的时候。 有什么问题? – Shahin 2010-08-16 16:01:30

+1

如果它在一种情况下工作,它应该在两种情况下工作。愚蠢的问题:如果你测试基类,没有在主类中没有基类初始化的空InitializeCulture? – 2010-08-17 04:13:17

+0

亲爱的德克。 否:(。 – Shahin 2010-08-17 04:16:33

2

如果你想设置的培养你的整个 ASP.NET网站,那么你可以做的是,在web.config文件:

<globalization uiCulture="Fa-IR" culture="Fa-IR" /> 

Localization Made Easy文章。

+0

谢谢。 但我想以编程方式更改它。 我拥有当地和全球的英语和波斯语资源。 我想在它们之间切换。 – Shahin 2010-08-16 08:40:38