1

したがって、基本的には、次のシナリオで多言語のWebサイトを実現したいと考えています。

  • ASP.NETMVC3の使用
  • ほとんどの言語はリソースファイルを使用しているため、同じビューを使用していますが、国固有(つまり、言語文化固有)であり、すべての言語で使用できるわけではないビューも多数あります。
  • URLの例:http:// localhost / en-us / {area} / {controller} / {action} / {id}

MVCフォルダー構造は次のとおりです。

- Areas
    - Channel1
        - Controllers
        - Content
        - Views
            - en-us
                - View1.cshtml
                - View2.cshtml
            - zh-cn
                - View1.cshtml
                - View2.cshtml
                <b>- Special.cshtml</b>

    - Channel2
       ....(similar folder structure)
- ....

「en-us」を{lang}のようなパラメーターに定義し、エリア外のデフォルトのコントローラーで決定する方法が必要だと思いますが、私はasp.net MVC初心者ですが、どうすればよいですか?

4

3 に答える 3

0

これを行うための優れた方法はありませんが、それは可能です。まず、ビューを少し再配置する必要があります。それでも、コントローラーが必要です。View1.cshtmlあなたが持っている(そして)ファイルがView2.cshtmlあなたのホームコントローラーにあるとしましょう。ここに置いてください:

- Views
  - Home
    - en-us
      - View1.cshtml
      - View2.cshtml
    - zh-cn
      - View1.cshtml
      - View2.cshtml

次に、次のビューのカスタムルートを作成しますGlobal.asax.cs

routes.MapRoute(
    "MultiLingual",
    "{lang}/{controller}/{action}/{id}",
    new {  controller = "Home", action = "Index", lang="en-us", id = UrlParameter.Optional }
);

最後に、ホームコントローラー(またはビューを配置するコントローラー)で、langパラメーターを使用して、使用するビューを決定します。

public ActionResult View1( string lang, int? id ) {
    return View( lang + "/View1" );
}

public ActionResult View2( string lang, int? id ) {
    return View( lang + "/View2" );
}

私はこれを試しましたが、動作しますが、非常に不格好で、(少なくともアクションでは)あまり乾燥していません。誰かがより良いアプローチを持っていますか?

于 2012-05-02T16:24:08.480 に答える
0

入ってくるものに基づいてフォルダを調べるために、いつでも独自のビューエンジンを作成できます。それを実行するThemedViewengineのコードがあります。

于 2012-05-02T16:38:32.573 に答える
0

これは、ASP.NET MVC 3 でグローバリゼーションを実装する方法に関する実用的な提案を含む素晴らしい記事です。

http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx

于 2012-05-02T16:21:45.847 に答える