0

私の問題:2ページあること

1-英語モードの場合はpage.aspx

アラビア語モードの場合は2-page-ar.aspx

そしてLinkeButton、クリックするとセッションに合格します。

Session["lang"] = "ar";

また

Session["lang"] = "en";

page.aspx名を取得し、この文字列「-ar」を追加してアラビア語モードに移行するか、page-ar.aspxから「-ar」を削除して英語モードに移行するために必要なもの

また、pageurlにクエリ文字列がある可能性があることを考慮してください。

4

4 に答える 4

2

コードビハインドページ(Page_Loadなど)で次のコードを使用できます。

protected string LinkUrl;

protected void Page_Load(object sender, EventArgs e)
{
    var language = (string) Session["lang"] ?? "en";

    LinkUrl = (language == "ar")
                ? Page.ResolveUrl("~/page-ar.aspx")
                : Page.ResolveUrl("~/page.aspx");
}

次に、ページのマークアップに次のようなリンクを配置できます。

 <a href="<%= LinkUrl %>">Language Demo</a>
于 2013-01-06T10:38:23.023 に答える
2

これはMr/sheKharの助けと私自身の検索の後の答えです

ボタンが2つあります

1つはアラビア語用、もう1つは英語モード用です

ユーザーが英語ボタンをクリックしたとき

    protected void english_Click(object sender, EventArgs e)
{
    string Path = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
    System.IO.FileInfo Info = new System.IO.FileInfo(Path);
    string pageName = Info.Name;

    if (Session["lang"].ToString() == "ar")
    {
        string enlink = pageName.Substring(0, pageName.Length - 8) + ".aspx";
        Session["lang"] = "en";

        var page = (Page)HttpContext.Current.CurrentHandler;
        string QueryString = page.ClientQueryString;
        if (!(string.IsNullOrEmpty(QueryString)))
        {
            Response.Redirect(enlink + "?" + QueryString);
        }
        else
        {
            Response.Redirect(enlink);
        }
    }

}

ユーザーがアラビア語のボタンをクリックすると

 protected void arabic_Click(object sender, EventArgs e)
{

    string Path = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
    System.IO.FileInfo Info = new System.IO.FileInfo(Path);
    string pageName = Info.Name;

    if (Session["lang"].ToString() == "en")
    {
        string arlink= pageName.Substring(0, pageName.Length - 5) + "-ar.aspx";
        Session["lang"] = "ar";
        //
        var page = (Page)HttpContext.Current.CurrentHandler;
        string QueryString = page.ClientQueryString; // this code get The Query String 

        if (!(string.IsNullOrEmpty(QueryString)))
        {
            Response.Redirect(arlink +"?"+ QueryString);
        }
        else
        {
            Response.Redirect(arlink);
        }
    }

}

このコードが誰かを助けてくれることを願っています:)

于 2013-01-06T11:20:43.017 に答える
1
string url = HttpContext.Current.Request.Url.AbsoluteUri;
// http://localhost:1302/TESTERS/Default6.aspx

string path = HttpContext.Current.Request.Url.AbsolutePath;
// /TESTERS/Default6.aspx

string host = HttpContext.Current.Request.Url.Host;
// localhost

次のように、現在のページ名を返すことができる関数を作成できます。

public string GetCurrentPageName()
{
    string Path = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
    System.IO.FileInfo Info = new System.IO.FileInfo(Path);
    string pageName = Info.Name;
    return pageName;
} 

最後に、関数を作成して、次のようにセッション値を渡すことができます

 public string GetCurrentPageName(string fileName)
{
     string Path = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
    System.IO.FileInfo Info = new System.IO.FileInfo(Path);
    string pageName = Info.Name;
    if (fileName == "ar")
        return pageName.Substring(0, pageName.Length - 7) + ".aspx";
    else
        return pageName.Substring(0, pageName.Length - 5) + "_ar.aspx";    
 } 

上記の関数でセッション値を渡すと、機能します。

注:-私はそれをテストしていません。

于 2013-01-06T10:03:00.403 に答える
1

システムの設計を始めたばかりの場合は、リソース.resxファイルを使用することをお勧めします。

リソースを使用してUIを多言語にするには、次の記事を確認してください:http ://support.microsoft.com/kb/917414

データベースから取得するデータには、多くのifステートメントを使用する必要があります。

If (arabic) {
     Select arabic data
}
else
{
     Select english data
}

resxファイルの使用を検討している場合は、より多くの情報を提供できます。

このソリューションでは、文字列の操作はなく、クエリ文字列は問題なくすべてが機能します。

于 2013-01-06T10:45:39.900 に答える