我创建了一个多语言网站,我有一些文件:
- 登录页面。
- 母版页。
- 使用母版页的子页。
在login页面中,我使用链接控件来按用户选择语言:
<table class="borderlang" style="position: absolute; top: 5px; left: 5px; width: auto; height: auto;">
<tr>
<td style="vertical-align: middle;">
<asp:Label ID="Label1" runat="server" Text="Language :" meta:resourcekey="Label1Resource1"></asp:Label>
</td>
<td>
<a href="?lang=vi" runat="server" id="linkVietnameseLang">
<img src="Content/Images/VNlogo.jpg" style="height: 20px; width: auto; padding-left: 10px;" /></a>
</td>
<td>
<a href="?lang=en" runat="server" id="linkEnglishLang">
<img src="Content/Images/USALogo.png" style="height: 20px; width: auto; padding-left: 10px;" /></a>
</td>
</tr>
</table>
我使用BasePage.cs代码:
public class BasePage : System.Web.UI.Page
{
protected override void InitializeCulture()
{
if (!string.IsNullOrEmpty(Request["lang"]))
{
Session["lang"] = Request["lang"];
}
string lang = Convert.ToString(Session["lang"]);
string culture = string.Empty;
if (lang.ToLower().CompareTo("en") == 0)
{
culture = "en-US";
}
if (lang.ToLower().CompareTo("vi") == 0 || string.IsNullOrEmpty(culture))
{
culture = "vi-VN";
}
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
base.InitializeCulture();
}
}
所以在登录页面我使用:
public partial class Login : BasePage
使用 BasePage。
在这种形式中有一些我不能使用本地资源的项目,所以我使用了 2 个资源:global resource和local resource。但我不在乎,因为当我在链接中选择语言 - > 语言更改时,全局和本地资源也会更改。
现在,当我登录时,网站将重定向到使用母版页的页面。在母版页中,我为用户放置了一个下拉列表,以防他们再次更改语言:
<asp:DropDownList ID="ddlLanguage" runat="server"
OnSelectedIndexChanged="ddlLanguage_SelectedIndexChanged"
AutoPostBack="True" meta:resourcekey="ddlLanguageResource1">
<asp:ListItem Text="Tiếng ViệT" Value="vi-VN" meta:resourcekey="ListItemResource1" />
<asp:ListItem Text="EnglisH" Value="en-US" meta:resourcekey="ListItemResource2" />
</asp:DropDownList>
在母版页中我添加:
if (!Page.IsPostBack)
{
ddlLanguage.SelectedValue = Thread.CurrentThread.CurrentCulture.Name;
}
和 :
protected void ddlLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
//Sets the cookie that is to be used by Global.asax
HttpCookie cookie = new HttpCookie("CultureInfo");
cookie.Value = ddlLanguage.SelectedValue;
Response.Cookies.Add(cookie);
//Set the culture and reload the page for immediate effect.
//Future effects are handled by Global.asax
Thread.CurrentThread.CurrentCulture =
new CultureInfo(ddlLanguage.SelectedValue);
Thread.CurrentThread.CurrentUICulture =
new CultureInfo(ddlLanguage.SelectedValue);
Server.Transfer(Request.Path);
}
在 global.asax 中是:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpCookie cookie = Request.Cookies["CultureInfo"];
if (cookie != null && cookie.Value != null)
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(cookie.Value);
Thread.CurrentThread.CurrentCulture = new CultureInfo(cookie.Value);
}
else
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("vi-VN");
Thread.CurrentThread.CurrentCulture = new CultureInfo("vi-VN");
}
}
问题 1:如何使用会话或链接值的 cookie(在登录页面中)到母版页:ddlanguage 值 = session 或 lang 的 cookie?
现在,在子页面中使用母版页。我必须使用本地资源,因为如果使用全局资源,我必须使用<%$ Resources:nameresource, keysource%> ->太慢。而且我有一个问题:在具有本地资源的子页面中,文化和 uiculture 值不取决于母版页中的 ddlanguage 值。
问题 2:如何在子页面中设置文化和 uiculture 值 = 母版页中的 ddlanguage 值。
结果是:使用该母版页的lang value in login page = ddlanguage下拉值。但是可以更改母版页中的 ddlanguage 值,子页中的文化 uiculture 也会更改。master page = cultureuiculture in child pageand
.
我是编码方面的业余爱好者,所以我希望在我的情况下有解决方案。非常感谢(对不起我的英语)。