3

masterpage ファイルで言語を切り替える必要があります。masterpage ファイルにはメニューが含まれており、言語を切り替える必要もあります。マスター ページで多言語サポートを使用する方法はありますか?

このチュートリアルで言語スイッチャーを作成しました。私の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 -->

誰かが助けてくれることを願っています。

4

1 に答える 1

0

これを実現するには、英語とウェールズ語の 2 つのヘッダーを作成し、次のよう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" %>

次に、セッションに保存されている現在の言語に基づいてそれらを無効/有効にし、ベースページから継承する他の各ページに対して、現在のカルチャをチェックし、resx ファイルから翻訳を取得します。

編集 2

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");
        }
    }

ウェールズ語版

 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");
        }
    }
于 2015-07-28T08:36:47.777 に答える