2015-07-28 4 views
3

Мне нужно переключить язык в моем файле главной страницы. файл главной страницы содержит меню, и там мне также нужно переключить язык. Есть ли обходной путь, как я могу также использовать поддержку нескольких языков на главной странице?Язык перевода в MasterPage C#. NET

У меня есть языковой коммутатор с this учебник. Мой файл MLS.cs (В учебнике под названием BasePage.cs) MLS наследуется от System.Web.UI.Page, но моя главная страница наследуется от System.Web.UI.MasterPage.

Я надеюсь, что есть простое решение для переключения языка также на главной странице без написания меню на всех страницах контента.

Вот содержание моего Design.Master (MasterPge для пользователя):

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Design.Master.cs" Inherits="ProjectName.Site1" %> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>...</head> 
<body class="skin-blue"> 
    <form id="form1" runat="server"> 
    <div class="wrapper"> 
    <aside class="main-sidebar"> 
      <div class="slimScrollDiv" style="width: auto; height: 422px; overflow: hidden; position: relative;"> 
       <div class="sidebar" id="scrollspy" style="width: auto; height: 422px; overflow: hidden; -ms-touch-action: none;"> 
        <ul class="nav sidebar-menu"> 
         <li class="header">data lookup</li> 
         <li><a href="~/datalookup.aspx"><i class="fa fa-arrow-right"></i>to data file</a></li> 
        </ul> 
        <!-- sidebar menu: : style can be found in sidebar.less --> 
        <ul class="nav sidebar-menu"> 
         <li class="header">quick selection menue</li> 
         <li class="active"><a href="#table1"><i class="fa fa-circle-o"></i>to table 1</a></li> 
         <li ><a href="#table2"><i class="fa fa-circle-o"></i>to table 2</a></li> 
         <li ><a href="#table3"><i class="fa fa-circle-o"></i>to table 3</a></li> 
         <li ><a href="#table4"><i class="fa fa-circle-o"></i>to table 4</a></li> 
        </ul> 
       </div> 
      </div> 
      <!-- /.sidebar --> 
     </aside> 
    <!-- /.aside --> 

Надежда кто-то может помочь.

+0

прочитал о https://msdn.microsoft.com/en-us/library/ms228208.aspx –

+0

yeah @AmitKumarGhosh, у меня уже есть переключатель рабочего языка, но мне нужен способ реализовать его в моих главных страницах. – Hack4Life

ответ

0

Я достиг этого путем создания двух заголовков, один на английском языке и один на валлийском языке, то в MasterPage.master.cs я сделал:

protected void Page_Load(object sender, EventArgs e) 
{ 
    BreadCrumb(); 

    if (Thread.CurrentThread.CurrentCulture.ToString() == "cy-GB") 
    {     
     Footer1.Visible = false; 
     Footer2.Visible = true; 
     Header1.Visible = false; 
     Header2.Visible = true; 
    } 

    if (Thread.CurrentThread.CurrentCulture.ToString() == "en-GB") 
    {     
     Footer2.Visible = false; 
     Footer1.Visible = true; 
     Header1.Visible = true; 
     Header2.Visible = false; 
    } 

    Page.Header.DataBind(); 
    //clear cache each time page loads 
    Response.Expires = 0; 
    Response.Cache.SetNoStore(); 
    Response.AppendHeader("Pragma", "no-cache"); 


private void BreadCrumb() 
{ 
    string path = HttpContext.Current.Request.Url.AbsolutePath; 

    if (path == "/LogIn.aspx" || path == "/LogIn.aspx?lang=cy-GB") 
    {     
     breadcrumb.Visible = false;     
    } 
} 

Я также создал класс BasePage который каждый последующий код позади страницы, унаследованного от:

public partial class BasePage : System.Web.UI.Page 
    { 
     protected override void InitializeCulture() 
     { 
      if (Session["language"] == null) 
      { 
       Session["language"] = "en-GB"; 
      } 

      else 
      { 
       if (Request.QueryString["lang"] == null) 
       { 
        SetSessionCulture(); 
       } 

       if (Request.QueryString["lang"] != null) 
       { 
        string qs = Request.QueryString["lang"]; 
        Session["language"] = qs; 
       } 

       SetSessionCulture(); 
      } 

      SetSessionCulture();   
     } 

     private void SetSessionCulture() 
     { 
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Session["language"].ToString()); 
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(Session["language"].ToString()); 
      base.InitializeCulture(); 
     } 
    } 

редактировать

оказываем как валлийские/английские заголовки к моему Мастеру Ли ка это:

<%@ Register Src="Components/Header2.ascx" TagName="Header" TagPrefix="uc1" %> 
<%@ Register Src="Components/Header2.cy-GB.ascx" TagName="Header" TagPrefix="uc4" %> 

Затем отключить/включить их в зависимости от текущего языка, который в настоящее время хранится в сессии, то для каждой другой страницы, которая наследуется от моего BasePage он проверяет текущую культуру и улавливает переводы с моего Resx файлы.

редактировать 2

В терминах двух заголовков все, что я имею в них мои ссылки и переключатель языка, код позади выглядит следующим образом:

Английская версия

public partial class header : System.Web.UI.UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      string currentPage = Request.Url.AbsoluteUri.ToString(); 

      NameValueCollection qsexisting = HttpUtility.ParseQueryString(Request.QueryString.ToString()); 

      //find anyting called lang in the array and remove 
      qsexisting.Remove("lang"); 

      //The culture is English, set stuff to Welsh 
      if (Thread.CurrentThread.CurrentCulture.ToString() == "en-GB") 
      { 
       Uri uri = new Uri(currentPage); 
       languagelink.HRef = String.Format(uri.GetLeftPart(UriPartial.Path) + "?lang=cy-GB" + (qsexisting.ToString() == "" ? "" : "&" + qsexisting.ToString()));     
      } 
     } 

     protected void LoginStatus1_LoggedOut(object sender, EventArgs e) 
     { 
      Response.Redirect("~/LogIn.aspx"); 
     } 
    } 

Welsh версия

public partial class header_cy_GB : System.Web.UI.UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      string currentPage = Request.Url.AbsoluteUri.ToString(); 

      NameValueCollection qsexisting = HttpUtility.ParseQueryString(Request.QueryString.ToString()); 
      //find anyting called lang in the array and remove 
      qsexisting.Remove("lang"); 

      var qs = Request.QueryString; 

      //The culture is welsh, set stuff to English 
      if (Thread.CurrentThread.CurrentCulture.ToString() == "cy-GB") 
      { 
       Uri uri = new Uri(currentPage); 
       languagelink.HRef = String.Format(uri.GetLeftPart(UriPartial.Path) + "?lang=en-GB" + (qsexisting.ToString() == "" ? "" : "&" + qsexisting.ToString())); 
      } 
     } 

     protected void LoginStatus1_LoggedOut(object sender, EventArgs e) 
     { 
      Response.Redirect("~/LogIn.aspx"); 
     } 
    } 
+0

Что вы имеете в виду с двумя заголовками? Что внутри? – Hack4Life

+0

Просто ссылки на другие страницы и ссылку на язык, но в одном месте на валлийском языке, а в другом все на английском, – JsonStatham

+0

Я добавил код моего файла Design.Master. Мне нужно перевести весь текст внутри '# scrollspy'. Как я могу это сделать, изменив заголовок? Меня это смущает. – Hack4Life

Смежные вопросы