Я создать мультиязычный сайт и у меня есть некоторые файлы:Session или Cookies в странице входа = главной странице = ребенок страница
- страницу входа.
- основная страница.
- страница с детьми используя master страница.
В 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);
}
В глобальной. асакс:
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 = сеанс или файлы cookie lang ??
Теперь, на странице ребенка, используя главную страницу. Я должен использовать локальный ресурс, потому что если использовать глобальный ресурс, я должен использовать <%$ Resources:nameresource, keysource%> ->
слишком медленно. И у меня есть проблема: на дочерней странице с местным resoure, культурой и урожаем значение не зависит от значения ddlanguage на главной странице.
Вопрос 2: Как я могу установить культуру и значение UICulture в детской страницы = значение ddlanguage в главной странице.
И результат: lang value in login page = ddlanguage
выпадающее значение в master page = culture
и uiculture in child page
используя это masterpage. Но может измениться значение ddlanguage на главной странице и культуре and
.
.
Я любитель в кодировании, поэтому, надеюсь, у меня есть решение в моем случае. Большое спасибо (и извините за мой английский).