したがって、私はasp.net mvcを初めて使用し、多言語のサイトを構築していますが、言語固有のすべてのオブジェクトのすべてのコンストラクターにLanguageIdを渡し続けたくありません。システム全体でこのIDをasp.netmvcに保存するための最良の方法は何ですか?ユーザーにとってはCookieに保存されると思いますが、それは正しい方法ですか?
また、languageIdはデータベースから取得され、すべての言語固有のラベルもリソースファイルではなくデータベースに保存されます。
したがって、私はasp.net mvcを初めて使用し、多言語のサイトを構築していますが、言語固有のすべてのオブジェクトのすべてのコンストラクターにLanguageIdを渡し続けたくありません。システム全体でこのIDをasp.netmvcに保存するための最良の方法は何ですか?ユーザーにとってはCookieに保存されると思いますが、それは正しい方法ですか?
また、languageIdはデータベースから取得され、すべての言語固有のラベルもリソースファイルではなくデータベースに保存されます。
正直なところ、私はDarinに同意しない必要があります(マルチスレッドマルチサーバー環境の場合のように、これは問題を引き起こす可能性があります)。
これにはCookieをお勧めします。これは、ユーザーが前回のアクセス後にサイトに再度アクセスしたときに簡単に取得できます。
ログインがセッション駆動型の場合はlanguage-id
、セッションオブジェクトに保存できます。このオブジェクトは、ユーザーがログインするたびに入力される可能性があります。セッションが失われると、ログインも失われます。
Cookieログインを使用している場合は、をCookieに保存しlanguage-id
ます。
または、LanguageIDをルートの一部にすることを検討してください。
routes.MapRoute(
"New",
"{lang}/{controller}/{action}/{id}",
new { lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional },
new { lang = "en|de|it|es|fr" }
);
ユーザーがログインしたらすぐに、ルートの一部として言語を含むルートにリダイレクトします。@Url.actionlink
リンクをレンダリングするために使用します。それらには常に言語IDが含まれます。
特定の問題に対して少し異なるアプローチを取り、 HttpRequest.UserLanguagesから利用できるブラウザー言語を使用するのはどうですか?
Request
そうすれば、何かを渡す必要はありません。たとえば、コントローラーでオブジェクトを取得できる場所であればどこでもこれを取得できるため、次のようになります。Request.UserLanguages