2009-07-23 16 views
0

ASP.NET MVCアプリケーションが完了すると、言語切り替え機能が必要と判断されました。それは単に英語と日本語の2つの言語になります。それらは2つの間で切り替えることができるはずですが、選択されていない場合は、ブラウザのデフォルト言語のいずれかを選択する必要があります。言語切り替えツールの構築 - 2言語のみ - ASP.NET MVC

この場合、最良の解決策が何であるか不思議です。

最初の考え、ルート!だから私はすべてのルートの最後に/{l}を持つようにルートを変更し、デフォルトはl = ""です。次に、私のBaseController(すべてのコントローラはそれに基づいている)で、私はルートのl変数をチェックします。各アクションは、言語に基づくビューを返します。

URLの最後に単純にhack/ja-jpできたら、日本語で表示されます。それは正しく経路を決めるようには思われませんでした。それから、私は私の見解で本当に悪く、手でリンクをコード化しました...私はヘルパーに最初に正しいリンクを出力することができませんでした...そして、それらを手書きする悪い習慣に陥りました。だから、私は最後に言語変数をハックするために、すべてのリンクをもう一度再コーディングする必要があります。

2番目の考え ... ok、jQueryを使用して、すべてのアンカーのhrefに言語変数を追加してください。それはあまりにも不器用で難しいと思われ、必要になるまで隠れている特定の状況などです。

だから、私は何とかこれを行うことに決めました。リソースファイルを使用せずに2つの言語を切り替える最もエレガントな方法は何ですか?私は、アクションを言語に基づいて2つのビューの中から選択するだけです。

私はHtmlヘルパーを使用する必要があるすべてのリンクを書き直して、ルートを稼働させますか? BaseControllerで、値がない場合は、言語を英語に設定します。

アドバイスをいただきありがとうございます。

+0

で英語のコンテンツを見ることができました?:http://oddiandeveloper.blogspot.com/2008/11/localization-with-aspnet- mvc.html – grenade

答えて

2

最も簡単で使いやすい方法の1つは、ドメイン(実際にサブドメイン)を使用して、どの言語を話すのかを特定することです。 Htmlヘルパー(HTML.ActionLink)は、ドメインに対してのみ動作するため、ほとんど何も変更する必要はありません。また、そのドメインを見るときに、どの言語が正しいかを知っていて、URLを長くしすぎることなく、ユーザーにきれいに見えるかもしれません。あなたがする必要があるのは、言語スイッチャで何かをして作業することだけです。

日本のウェブサイトにアクセスするためにJavaScriptを使用していないユーザー(0.1%も)を拒否することはできないので、第2の考え方を使用することを強くお勧めします。

+0

正解...真実の考えでもなく、単なるアイデアでもありません。私はサブドメインも好きです...うーん。私がサブドメインをすると、en.domain.comのようなものが欲しいと思う|| jp.domain.com。言語変数をドメイン名からどのように取得するのですか? – Chaddeus

+1

MVCでのサブドメインルーティングに関する記事は次のとおりです。http://blogs.securancy.com/post/ASPNET-MVC-Subdomain-Routing.aspx 基本的にサブドメインをカルチャに変換するだけで、これらのルールをweb.configファイル。したがって、たとえば、en.domain.comをen-usなどにマップすることができます。 – xandy

+0

ああ、もう1つ追加してください。私はちょうどウィキペディアが言語のサブドメインを使用していることを思い出してください...それは単に言語間の翻訳ではありません。 – xandy

1

私たちのサイトを変更する必要がある言語だけではなく、国際的な顧客の見解自体が異なっている必要があることが判明しました。 I.私たちの香港事務所では、ビューデータのためのスペースとデータの量が異なることが必要でした。ちょっと見た目のレイアウトについて何か言い回しを変えて、ちょっとしたトラブルを引き起こした。あなたはあなたの意見にルーティングを無効にして、あなたが好きな状況下で別のビューのセットと日本人に英語を送ることができますコーディングの非常に少量の

What we ended up doing was this

。 URLを変更する必要はなく、クライアント側で行うことも、あなたの行動を変更することもできます。

EDIT:再読した後は、言語ごとに2つのビューセットを使用するため、これはサイトに非常に適していると思います。

+0

うーん...私のアクションはすでにスイッチを実行します。私のベースコントローラでは、私はブール値IsEnglishを設定しました。それは基本的に:リターン(IsEnglish)ですか?ビュー( "EnglishView"):ビュー( "JapaneseView");私の主な問題は、コントローラーに実際にどの言語を伝えているのか、どの言語を変更してから(訪問ごとに)変えるまで言語を維持するのかということです。 – Chaddeus

2

あなたのルートの終わりに言語を入れないでください。それを最初に入れてください。 これにより、オプションのパラメータを持つ可能性のあるさまざまなルートでの作業が容易になります。

言語設定は、実際にトランジションのみを変更する必要があります。

日本のユーザーに特定のルール(価格、配送オプションなど)がある場合は、言語と国の詳細を実装する必要があります。国は "マルチテナントアプリケーション"の下にあるもので、ブラウザ言語では検出されません。

日本のユーザーは、英語サイトを閲覧してjapanes翻訳これを見

routes.MapRoute(
     // Route name 
     "LocalizedRoute", 
     // URL with parameters        
     ("{language}/{controller}/{action}"), 
     // Parameter defaults 
    new 
    { 

      action = "Index", 
      language = "de" 

     }, 
        //Parameter constraints 
     new { language = @"en-us|ja-jp" } 
+0

hmm ...私の問題は、私のルートが既にこのようになっていることです:routes.MapRoute( "BaseRoute"、( "{b}/{コントローラ}/{アクション}")...これは、 :routes.MapRoute( "BaseRoute"、( "{lan}/{b}/{controller}/{action}")... langが見つからなかった場合はどうすればいいですか?典型的なURLは次のようになります:www.domain.com/Controller/Action/Id、ルートはControllerをlangトークンに適用します;/ – Chaddeus

+1

一般的なURLを定義する方法はMapRouteでのみ定義する必要があります。あなたがMapRouteを変更すると、あなたのすべてのリンクが適切な形になっていることを確かめることができます)言語が選択されていない場合は、デフォルトが取られます –

+0

ああ、問題は私が怠け者でした... URL現在、サブドメインベースの言語スイッチャーで作業していますが、それは今も私のためには行かないかもしれないようです...ちょうどそれを吸って、それらを正しく設定してください。ありがとうございました! – Chaddeus

関連する問題