私はASP.NET Core(.NETCoreApp 1.1)Webアプリケーションをいくつかのビュー(部分的に共有されているものを含む)とローカライズが必要なコントローラで作成しています。ユニークなJSONリソースからのASP.NETコアのローカライゼーション
制約がローカライズ文字列は次の構造(限り、それは1つのファイルに残っているように変更することができます)は、単一のJSONファイル内にあるということです。だから私は、私は必要なものを推測
{
"HELLO": {
"en": "Hello!",
"fr": "Bonjour !"
}
}
をこのユニークなファイルにアクセスするためのローカリゼーションは、_localizer["HELLO"]
のような私のコントローラとビューで使用できるIStringLocalizer
とIViewLocalizer
のオブジェクトを提供していますが、それは明らかにデフォルトのパターンではありません。
これに問題を追加するには、デフォルトでブラウザから優先言語を自動的に検出するか、/ en/Home/Indexや/ fr/Homeなどのルート値として明示的に言語を指定する必要もあります/ Indexだけでなく、/ Home/Indexも参照してください。
私はASP.NETコアにとって非常に新しく、ドキュメンテーションやさまざまなサンプルを実現していても、私が必要としているものを使っても、実稼働環境で使用できる信頼できるものを実装することはできませんでした。私が見つけたものには何かがないか、何とか時代遅れになっています。
これらのことを理解している誰かが私にこれを行う方法を示すことができたら、感謝しています!
編集:私はルートから何かを得る方法を見つけたと思います。ここに私がやったことです:
マイルートテンプレートがtemplate: "{lang?}/{controller=Home}/{action=Index}/{id?}")
であり、ここで私は、コントローラからLANGを取得するために使用するコードは次のとおりです。
string lang = this.RouteData.Values["lang"] as string;
if (lang == null)
{
string userLangs = HttpContext.Request.Headers["Accept-Language"].ToString();
lang = userLangs.Split(',').FirstOrDefault();
}
ありがとうございました。それは私が恐れていた答えです...私は私が必要とするものを達成することができなくても、最後の2日間それと闘ってきました。私は明日、もう一度やってみよう、多分私はある種の出生時を持つだろう。 – albator1932
@ albator1932 https://stackoverflow.com/a/44782669/909809フラットファイルを使用すると便利です。フラットファイルのルートに行くつもりだったので、すべての単語が互いに隣り合っているので、すべてが同期しているように見えますが、サンプルが不足していますので、今は複数のファイルを整理しました。 –
ああ、私はこれを逃したとは思わない、私はすぐにそれを試してみましょう。私が何かを働かせたら、私は完全な実例を分かち合い、これを作ることがどれほど難しいのか信じられません。 – albator1932