Reputation: 491
I' creating a multilanguage website and I have some files :
In login
page, I used link control for choose language by user :
<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>
I use BasePage.cs
with code :
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();
}
}
So in login page I use :
public partial class Login : BasePage
To use BasePage.
In this form have some items that I can't use local resource, so I used 2 resources : global resource
and local resource
. But I don't care because when I choose language in link -> language change and global and local resource are changed, too.
Now, when I login, website will redirect to a page using master page. In master page I put a dropdown for user in case they wanna change language again :
<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>
And in master page I add :
if (!Page.IsPostBack)
{
ddlLanguage.SelectedValue = Thread.CurrentThread.CurrentCulture.Name;
}
and :
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);
}
In global.asax is :
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");
}
}
Question 1 : How can I use session or cookies of link value (in login page) to master page : ddlanguage value = session or cookies of lang ??
Now, in child page using master page. I must use local resource because if use global resource I must use <%$ Resources:nameresource, keysource%> ->
too slow.
And I have a problem : in child page with local resoure, culture and uiculture value is not depending on ddlanguage value in master page.
Question 2 : How can I set culture and uiculture value in child page = ddlanguage value in master page.
And result is : lang value in login page = ddlanguage
dropdown value in master page = culture
and uiculture in child page
using that masterpage. But can change ddlanguage value in masterpage and cultureand
uiculture in child page will change, too.
.
I'm an amateur in coding, so I hope have solution in my case. Thank very very much (and sorry for my English).
Upvotes: 0
Views: 334
Reputation: 143
In program.cs
user name can set Globals variable
namespace GlobalVariables
{
public static class Globals
{
static Globals()
{
userName="";
}
public static void setusername(int[] newInt)
{
setusername = newInt;
}
public static string userName { get; private set; }
}
you can set or get every child or parent form
inherit namespace like in another child or parent form
using GlobalVariables;
to set Globals session or cookiee
Globals.setusername(userName.ToString()));
you can check and restrict page
username=Globals.userName;
Response.Cookies("userInfo")("userName") = "rangarajakrishnan"
Response.Cookies("userInfo")("lastVisit") = DateTime.Now.ToString
Response.Cookies("userInfo").Expires = DateTime.Now.AddDays(1)
Dim aCookie As New HttpCookie("userInfo")
aCookie.Values("userName") = "mike"
aCookie.Values("lastVisit") = DateTime.Now.ToString
aCookie.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookie)
Upvotes: 0