0

Я создать мультиязычный сайт и у меня есть некоторые файлы:Session или Cookies в странице входа = главной странице = ребенок страница

  1. страницу входа.
  2. основная страница.
  3. страница с детьми используя 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.

. 

Я любитель в кодировании, поэтому, надеюсь, у меня есть решение в моем случае. Большое спасибо (и извините за мой английский).

ответ

0
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) 
Смежные вопросы