1

タイトルについて申し訳ありませんが、簡単に説明する良い方法が思いつきませんでした。質問に...

Web フォームを使用して ASP.NET でサイトを作成し、リソース ファイルを使用して複数言語の静的テキストを処理しました。データベースは複数言語用にセットアップされているため、すべてがローカライズされています。フランス語と英語の間でサイトを切り替えるには、web.config でカルチャと uiCulture を切り替えるのと同じくらい簡単です。

ただし、フランス語のサイトは、フランス語に翻訳されたフォルダーとページ名を使用してデプロイする必要があります。例: http://www.product.com/accessories/category.aspx?id=111は http://www.produit.com/accesoires/categories.aspx?id=111にする必要があります

すべての ASPX ページ (コード ビハインドではない) のコピーを作成し、それらの名前をフランス語に相当するものに変更し、元の aspx.cs を指すようにコード ビハインドを残すことは別として、優先/適切/適切な方法は何ですか?これを行う?

注意: ページ/コード自体で参照される URL は動的に構築されるため、ローカライズされます。

ありがとうございました!

4

2 に答える 2

0

サーバーが .NET 2.0 を実行しており、3.5 SP1 までルーティングがフレームワークに導入されなかったため、ルーティングを使用できません。そのため、URL の書き換えに頼らなければなりませんでした。

web.config に次を追加しました。

<system.web>
    <httpModules>
      <add name="UrlRewriter" type="Utilities.UrlRewriter, MyProject"/>
      ...

<system.webServer>
    <modules>
      <add name="UrlRewriter" type="Utilities.UrlRewriter, MyProject"/>

次に、IHttpModule を継承する UrlRewriter を作成し、Init メソッドに HttpApplication.BeginRequest のハンドラーを追加しました。

BeginRequest では、URL を調べて、ローカライズされたフォルダー名とページ名を対応する英語に置き換えます。たとえば、/mysite.com/a-propos-de-nous/ は/mysite.com/about-us/に変換されますが、ユーザーのブラウザーには依然としてフランス語の URL が表示されます。

URL を変換するためのチェックが少し必要ですが、十分に機能し、チェック/置換は恐ろしいものではありません。

URL が/mysite.com/a-propos-de-nous (最後に「/」がないことに注意してください) として入ってくる場合、書き換えは機能しますが、ブラウザーのアドレスバーに URL が表示されます。望ましくない/mysite.com/about-usに変更されます。

URL のローカライズに関する追加の考え、コメント、または経験がある場合は、スレッドに追加してください。


[編集 - 2013 年 2 月 28 日] - RE: ブラウザに入力された URL の末尾にスラッシュがない

これを追加して、誰かがつまずいた場合に備えてこれをより完全にします。

ここでの問題は、IIS が礼儀正しい末尾のスラッシュを追加し、これがリダイレクトを作成することです。このケースを処理するために、ここで行ったことは、URL を調べて、URL の末尾にページ/ファイルが含まれているかどうかを判断することです。URL 書き換えコードで次を使用します。

        void UrlRewriter_BeginRequest(object sender, EventArgs e)
        {
           HttpApplication app = (HttpApplication)sender;

           ... // other rewrite code here

           string lastSegment = app.Request.Url.Segments[app.Request.Url.Segments.Length - 1];
           string extension = System.IO.Path.GetExtension(lastSegment);

           // no extension, must be a directory/folder
           if (string.IsNullOrEmpty(extension))
           {
               if (!sendTo.EndsWith("/"))
                   sendTo = sendTo + "/";
           }

           app.Context.RewritePath(sendTo);
        }
于 2013-02-27T17:44:48.207 に答える
0

asp.net でルーティングを試してみましたか? http://www.hanselman.com/blog/OneASPNETSneakPeekElegantWebFormsAndSnowballsInHell.aspx

于 2013-02-09T00:14:01.630 に答える