まあ、これは部分的に可能です(言語部分のみ)。別の言語でのコントローラー名は確かに興味深い点ですが、それを実現するのは難しいと思います。アラビア語やヘブライ語などのBidi言語でどのように見えるかを考えてください。異なる言語でコントローラーを使用することはおそらく良い考えですが、あなたは自分自身のために大混乱を引き起こし、これを可能にするために基礎となるMVC構造を変更する必要があると私は信じています。
言語変更の部分は簡単で、以下のように行うことができます。
あなたが見たいと思うかもしれないのはグローバリゼーションです。基本的に、言語部分は現在のスレッドUIカルチャに対応しています。必要なものは次のとおりです。
次のようなルートを定義します。
var lang = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
routes.MapRoute(
name: "Default",
url: "{language}/{controller}/{action}/{id}",
defaults: new { language = lang, controller = "Home",
action = "Index", id = UrlParameter.Optional }
);
登録Application_AcquireRequestState
して、次のように定義します。
protected void Application_AcquireRequestState()
{
var routes = RouteTable.Routes;
var httpContext = Request.RequestContext.HttpContext;
if (httpContext == null) return;
var routeData = routes.GetRouteData(httpContext);
var language = routeData.Values["language"] as string;
var cultureInfo = new CultureInfo(language);
System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo;
System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo;
}
CurrentUICulture
言語を切り替えるために必要なのはリソースファイルから情報をロードすることですが、同じに変更する必要もありCurrentCulture
ますCultureInfo
。
最後に、対応するリソースファイルとフォールバックリソースファイルがあることを確認してください。
私はName
のプロパティを使用しCultureInfo
たので、ドイツ語はde-DE、英語はen-USなどになります。これでうまくいくはずです。
さらに情報が必要な場合は、サンプルMVCプロジェクトをアップロードして調べることができます。
更新:必要なことを行うための大まかな方法の1つは、ルートセグメントの順序を次のように反転することです。
routes.MapRoute(
name: "NewDefault",
url: "{language}/{id}/{action}/{controller}",
defaults: new { language = lang, controller = "Home", action = "Index", id = "Category"}
);
このようにして、次のリクエストを行うことができますhttp://www.your_url.com/de/Kategorien。この場合、Kategorienid
はコントローラーではなくマップします。コントローラーは英語またはドイツ語(名前の付け方によって異なります)のままですが、ユーザーには別の言語が表示されます。背景では、ビューは次のようになります。
public ActionResult Index(string id, string categoryName)
{
// Fetch data based on category name (categoryName)
return View();
}
追加情報をパラメーターとして渡すこともできますが、ルートを次のように調整する必要があります:{language} / {category} / {subcategory} / {action} / {controller}
これは長期的には首の痛みになる可能性があることを知っておいてください。これを試す場合は、十分に文書化してください。