2

これを達成するための最良の方法は何かを知りたいです。

コントローラーにがありActionResult、実際にはnews名前があります。Web サイトを国際化する必要があり、同じnews名前を使用することはできません。訪問した国に応じて変更する必要があります。

たとえば、今は次のようなものが必要です。

www.something.com/en/us/news英語版の場合

www.something.com/co/es/noticiasスペイン語版の場合

あなたは次の国のためのポイントを持っています.

まったく同じにするx URLに依存するxメソッドを作成する必要はないと思いますが、本当に効率的な方法でそれを達成する方法がわかりません...ありがとう

4

2 に答える 2

0

現在、ルーティングはどのように機能していますか? まだ使用していない場合は、この回答のようなものが機能するかもしれません。ニーズに合わせて、URL の一部の順序を変えた、これのバリエーションかもしれません。たとえば、コントローラーは必ずしもルートの最初に来る必要はありません (この場合、常に同じコントローラー名を使用するだけです)。言語コードをキーとして、それぞれの言語で「ニュース」という単語を取得するある種のマップを作成します。

// populate this map somewhere - language code to word for "news" (and any other name of the controllers that you have)
var newsControllerMap = new Dictionary<string, string>();
newsControllerMap["en"] = "news"; // etc.

// ...

// inside of the RouteConfig class (MVC 4) or RegisterRoutes() method in Global.asax.cs (MVC 3)
// just making an assumption that whatever class/entity you use ("LanguageAndCountry" in this case) also has a country code to make this easier. Obviously this would be refactored to have better naming/functionality to make sense and meet your needs.
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    LanguageAndCountryRepository langRepo = new LanguageAndCountryRepository();
    var languagesandCountries = langRepo.GetAllLanguagesWithCountries();

    foreach (LanguageAndCountry langAndCountry in languagesandCountries)
    {
        routes.MapRoute(
        "LocalizationNews_" + langAndCountry.LanguageAbbreviation,
        langAndCountry.LanguageAbbreviation + "/" + langAndCountry.CountryCode + "/" + newsControllerMap[langAndCountry.LanguageAbbreviation],
        new { lang = language.LanguageAbbreviation, country = langAndCountry.CountryCode, controller = "News", action = "Index"});

        // map more routes to each controller you have, each controller having a corresponding map to the name of the controller in any given language
    }
于 2013-05-15T21:15:37.960 に答える
0

新しいクラス TranslatedRoute と TranslationProvider を作成して、異なる翻訳を同じアクションにマップできます。次に、これらをルーティング システムにプラグインして、デフォルトのマッピングをオーバーライドできます。

アイデアを説明する良いブログ投稿は次のとおりです

于 2013-05-15T21:16:11.137 に答える