2014-05-22 61 views
0

我正在构建一个多语言支持的网站。 为此,我在母版页上有一个链接按钮。母版页中的ASP.NET语言设置

我已经创建了一个新的基类继承自。 我已经在Global.asax文件中设置了CurrentUICulture和CurrentCulture。 我已经创建了母版的资源文件。 我已在webconfig文件中设置全球化行。 如同时设置的区域性和uiculture为“自动”

我的母版页被称为“masterpage.master” 我有两个资源文件:masterpage.master.en-gb.resxmasterpage.master.nl-nl.resx。 (我也尝试使用en-GB和nl-NL)

我以英文创建了母版页。 我使用cookie来存储所选语言。默认情况下,cookie将被设置为“en-GB”,但是为了测试,我将它设置为“nl-NL”。

Cookie已创建,并且通过测试,我看到文化已设置为nl-NL

然而....链接按钮文本没有改变。它显示了en-GB文本,而不是nl-NL文本。

我错过了什么? 网站如何选择正确的resx文件?是根据文件名中的语言和国家/地区设置自动完成的,还是我必须指出?

链接按钮的标记:

<asp:LinkButton ID="lbCHangeLanguage" runat="server" CssClass="lbCHangeLanguage" OnClientClick="javascript:return confirm('If you continue any unsaved changes will disappear!\n\nPress OK to continue.')" meta:resourcekey="lbCHangeLanguageResource1" Text="CHANGE LANGUAGE"></asp:LinkButton> 

在global.asax中:

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) 
' Fires at the beginning of each request 

Dim myLangCookie As HttpCookie 
myLangCookie = Request.Cookies.Get("FASTLANG") 

If myLangCookie Is Nothing Then 
    myLangCookie = New HttpCookie("FASTLANG") 
    myLangCookie.Values.Add("language", Languages.Dutch) 
    myLangCookie.Secure = False 
    If Request.Url.OriginalString.Contains("localhost") = False Then myLangCookie.Secure = True 
    If Request.Url.OriginalString.ToLower.Contains("fasttest") = True Then myLangCookie.Secure = False 
    myLangCookie.Expires = Now.AddYears(50) 
    Response.Cookies.Add(myLangCookie) 
End If 

Dim myLang As String = myLangCookie.Values("language") 
Thread.CurrentThread.CurrentUICulture = New Globalization.CultureInfo(myLang) 
Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo(myLang) 

结束子

在web.config中:

<globalization enableClientBasedCulture="true" culture="auto" uiCulture="auto" requestEncoding="utf-8" responseEncoding="utf-8" /> 
+0

我已将标记添加到原始帖子。 – Eric

回答

1

它确实为我工作。让我们来看看这里的基础知识:

  • 你的文件夹名为App_LocalResources在你的web项目中吗?
  • 这个文件夹,你应该有默认的资源文件中
  • (假设你的母版页名为MasterPage.Paster)应该有MasterPage.Master.resx(英语 - 默认)和MasterPage.Master.nl-Nl.resx
  • 这两个文件都应该在属性中标记为“嵌入式资源”
+0

*是 *我将其重命名为文化名称。可能不应该那样做,所以我产生了一个新的。 *他们是。 – Eric

+0

是的,就是这样。我不应该重命名masterpage默认资源文件。生成一个新的,解决了这个问题。非常感谢,Ondrej! – Eric