3

asp.net で多言語 Web サイトを構築しようとしていますが、html タグの dir 属性を rtl から ltr に、またはその逆に c シャープでプログラムで設定する必要があります。今のところ、英語、ヘブライ語、ロシア語の 3 つの言語があり、それらを切り替える必要があります。Ltr 言語から rtl 言語に、rtl 言語から Ltr 言語に変更するたびに、サイトの方向を変更する必要があります。私のマスターページの例を教えてください。

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs"     Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="CSS/Site-RTL.css" rel="stylesheet" type="text/css" />
</head>
<body id="html" runat="server">
<form id="theForm" runat="server">
<div>
    <asp:ContentPlaceHolder ID="ContentPlaceHolder" runat="server">
    </asp:ContentPlaceHolder>
</div>
<div style="margin-top: 20px;">
    <asp:LinkButton ID="btnSetEnglish" runat="server" Text="English" CommandArgument="en-GB"
        OnClick="RequestLanguageChange_Click"></asp:LinkButton>&nbsp;&nbsp;
    <asp:LinkButton ID="btnSetHebrew" runat="server" Text="Hebrew" CommandArgument="he-IL"
        OnClick="RequestLanguageChange_Click"></asp:LinkButton>&nbsp;&nbsp;
    <asp:LinkButton ID="btnSetRussian" runat="server" Text="Russian" CommandArgument="ru-RU"
        OnClick="RequestLanguageChange_Click"></asp:LinkButton>&nbsp;&nbsp;
</div>
<div>
    <asp:SiteMapDataSource ID="smdsMaster" runat="server" OnDataBinding="Page_Load" />
    <asp:Menu ID="MenuMaster" runat="server" CssClass="menu" DataSourceID="smdsMaster"
        Orientation="Horizontal" StaticDisplayLevels="2" StaticSubMenuIndent="16px" MaximumDynamicDisplayLevels="1">
        <DataBindings>
            <asp:MenuItemBinding DataMember="SiteMapNode" NavigateUrlField="Url" />
        </DataBindings>
    </asp:Menu>
    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
    </asp:ContentPlaceHolder>
</div>
</form>

マスターページの背後にあるコード

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Localization.Classes;

public partial class MasterPage : System.Web.UI.MasterPage
{

protected void Page_Load(object sender, EventArgs e)
{


}

protected void RequestLanguageChange_Click(object sender, EventArgs e)
{
    LinkButton senderLink = sender as LinkButton;

    //store requested language as new culture in the session
    if (senderLink.CommandArgument == "he-IL")
    {
        // some code
    }
    else
    {
        // some code
    }
    Session[Global.SESSION_KEY_CULTURE] = senderLink.CommandArgument;

    //reload last requested page with new culture
    Server.Transfer(Request.Path);

}
}
4

1 に答える 1

4

あなたのコードビハインドで:

this.html.Attributes.Add("dir", "ltr");

これが機能しない場合の別の方法は、属性をタグに直接配置し、プロパティを使用して入力することです。

<body dir="<%:Dir%>">

public string Dir { get; set; }

// Set Dir in the on click event

protected void RequestLanguageChange_Click(object sender, EventArgs e)
{
    LinkButton senderLink = sender as LinkButton;

    //store requested language as new culture in the session
    if (senderLink.CommandArgument == "he-IL")
    {
        Dir = "rtl";
    }
    else
    {
        Dir = "ltr";
    }

    Session[Global.SESSION_KEY_CULTURE] = senderLink.CommandArgument;

    //reload last requested page with new culture
    Server.Transfer(Request.Path);

}
于 2012-05-11T10:06:48.603 に答える