我有一个阿拉伯语网站,但我正在努力使其成为双语。我正在尝试全球化和本地化方法,因此我添加了 dropdwon 英语和阿拉伯语,然后添加了 basepage.vb 代码,最后添加了包含每种语言资源的全局资源文件夹,并将 evrythign 静态阿拉伯语更改为英语。问题是它在本地工作正常,但在网上,无论我在下拉列表中选择什么,它都保持阿拉伯语
我的主页中有此代码:
<asp:DropDownList ID="ddlLanguages" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlLanguages_SelectedIndexChanged">
<asp:ListItem Text="arabic" Value="ar" />
<asp:ListItem Text="english" Value="en-us" />
</asp:DropDownList>
这在我的母版页面加载中:
Dim language As String = If(Session("Language"), "ar")
ddlLanguages.SelectedValue = language
Protected Sub ddlLanguages_SelectedIndexChanged(sender As Object, e As EventArgs)
' Update the session with the selected language
Session("Language") = ddlLanguages.SelectedValue
' Optionally, you can also refresh the page to apply the language change immediately
Response.Redirect(Request.RawUrl)
End Sub
最后我在应用程序代码文件夹中有一个basepage.vb代码:
Imports Microsoft.VisualBasic
Imports System.Threading
Imports System.Globalization
Public Class basepage
Inherits System.Web.UI.Page
Protected Overrides Sub InitializeCulture()
Dim language As String = "ar" ' Default to Arabic
If Session("Language") IsNot Nothing Then
language = Session("Language").ToString()
End If
' Set the Culture
Thread.CurrentThread.CurrentCulture = New CultureInfo(language)
Thread.CurrentThread.CurrentUICulture = New CultureInfo(language)
End Sub
End Class
我添加了应用程序全局资源文件夹,并将所有静态阿拉伯语更改为资源。它在本地运行完美,但在实际网站上在线它始终是阿拉伯语。当我切换到英语时,dropdwon 切换到英语,但网站仍然是阿拉伯语,这可能是什么问题?我错过了什么吗?我应该向我的全局 asax 添加任何内容吗?
是的,这是 ASP.NET 本地化中常见的令人头痛的问题,尤其是当它在本地运行但不能在生产环境中运行时。我以前遇到过几次这样的情况。 从我在代码中看到的情况来看,我认为主要问题是我们需要更强大的语言持久性。现在,您仅依赖 Session,这在生产环境中可能很挑剔 - 特别是如果您有负载平衡器或应用程序池回收的话。 让我向您展示我在类似情况下成功使用的 BasePage 的改进版本。它尝试多种方法来检测语言首选项,并且对会话问题更具弹性。 [粘贴上面增强的BasePage代码] 其不同之处的关键在于:
检查多个位置的语言设置(会话、查询字符串、cookie、浏览器首选项) 有适当的错误处理 确保会话保持同步 内置一些调试日志记录
另外,请确保您的 web.config 具有全球化设置:
<configuration> <system.web> <globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true" /> </system.web> </configuration>
另一件事 - 仔细检查您的 App_GlobalResources 文件夹是否确实已包含所有资源文件到生产服务器。我见过部署工具丢失这些文件的情况。 需要我帮助您实现这些吗?或者我们可以先添加一些调试代码来准确查看生产中的区域性设置发生了什么?