[解決済み] ASP.Net MVCアプリでカルチャを設定する
質問
ASP.net MVCアプリでCulture/UI Cultureを設定するのに最適な場所はどこでしょうか?
現在、私は以下のようなCultureControllerクラスを持っています。
public class CultureController : Controller
{
public ActionResult SetSpanishCulture()
{
HttpContext.Session["culture"] = "es-ES";
return RedirectToAction("Index", "Home");
}
public ActionResult SetFrenchCulture()
{
HttpContext.Session["culture"] = "fr-FR";
return RedirectToAction("Index", "Home");
}
}
というようなリンクで、トップページに各言語のハイパーリンクを設置します。
<li><%= Html.ActionLink("French", "SetFrenchCulture", "Culture")%></li>
<li><%= Html.ActionLink("Spanish", "SetSpanishCulture", "Culture")%></li>
というのはうまくいくのですが、もっと適切な方法があるのではないかと思っています。
私は以下のActionFilterを使用してCultureを読み込んでいます。 http://www.iansuttle.com/blog/post/ASPNET-MVC-Action-Filter-for-Localized-Sites.aspx . 私はMVCの初心者なので、これを正しい場所に設定できているか自信がありません。 私はそれをweb.configレベルでやりたくない、それはユーザーの選択に基づいていなければならない。 また、ブラウザの設定からカルチャを得るためにhttp-headersをチェックしたくありません。
編集してください。
はっきりさせておきたいのですが、私はsessionを使うか使わないかを決めようとしているわけではありません。私はその部分に満足しています。 私が解決しようとしているのは、各文化を設定するためのアクションメソッドを持つ文化コントローラでこれを行うのが最善なのか、それともMVCパイプラインの中でこれを行うより良い場所があるのか、ということです。
どのように解決するのでしょうか?
私はこれを使用しています ローカライズ方法 を使い、ユーザーが example.com/xx-xx/ にアクセスするたびにカルチャと言語を設定するルートパラメーターを追加しています。
例を挙げます。
routes.MapRoute("DefaultLocalized",
"{language}-{culture}/{controller}/{action}/{id}",
new
{
controller = "Home",
action = "Index",
id = "",
language = "nl",
culture = "NL"
});
実際の文化/言語設定を行うフィルターがあります。
using System.Globalization;
using System.Threading;
using System.Web.Mvc;
public class InternationalizationAttribute : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext filterContext) {
string language = (string)filterContext.RouteData.Values["language"] ?? "nl";
string culture = (string)filterContext.RouteData.Values["culture"] ?? "NL";
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));
}
}
国際化属性を有効にするには、クラスに追加するだけです。
[Internationalization]
public class HomeController : Controller {
...
これで、訪問者が http://example.com/de-DE/Home/Index にアクセスすると、ドイツ語のサイトが表示されます。
この回答が正しい方向性を示してくれることを願っています。
また、小さな MVC 5 のサンプル プロジェクトを作成しましたので、以下を参照してください。 ここで
http://{yourhost}:{port}/en-us/home/index にアクセスするだけで、英語(US)の現在の日付を見ることができます。ドイツ語などは http://{yourhost}:{port}/de/home/index に変更します。
関連
-
[解決済み] Automapper のタイプマップ構成がない、またはサポートされていないマッピング - エラー
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] [Solved] Replace line break characters with <br /> in ASP.NET MVC Razor view
-
[解決済み】Html5 data-* with asp.net mvc TextboxFor html attributes
-
[解決済み】ASP.NET MVCのフォームでチェックボックスを処理するにはどうすればよいですか?
-
[解決済み] Asp.Net MVCで「ホームページ」を設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】同じキーのアイテムがすでに追加されています。
-
[解決済み】Automapperにタイプマップの設定がない、またはマッピングがサポートされていない - エラー
-
[解決済み] System.Web.HttpException (0x80004005)。リクエストの最大長を超えました
-
[解決済み] Automapper のタイプマップ構成がない、またはサポートされていないマッピング - エラー
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み】HTML.ActionLinkメソッド
-
[解決済み】MVC 4 Razor ファイルアップロード
-
[解決済み】AutoMapper.CreateMapsをどこに配置するか?
-
[解決済み] ASP.Net MVC デフォルトの HTTP ヘッダーを削除する方法は?
-
[解決済み] Razorを使ってエンコードされていないJsonをViewに書き込むにはどうしたらいいですか?