1

ASP.NET MVC アプリ ( /lang/{culture}/{controller}/{action}/{id}) でカスタム ルートを使用しています。ベース コントローラーで、cultureパラメーターの値の存在を検出し、現在のスレッド カルチャを設定しています。ただし、誰かがデフォルトのカルチャに黙ってフォールバックするのではなく、リソースのない言語に移動できた場合は、言語サポートがないことを示すメッセージを表示したいと考えています。

黙ってデフォルトに戻すのではなく、現在のカルチャにリソースが指定されていないかどうかを検出するにはどうすればよいですか?

4

2 に答える 2

1

問題は、実際には、特定のカルチャのローカライズがあるかどうかをプログラムで判断するのが複雑であることです。あるアセンブリでは特定のカルチャのサテライト アセンブリを使用できますが、別のアセンブリでは使用できません。さらに悪いことに、1 つのサテライト アセンブリには、すべてではなく一部のリソースの翻訳が含まれている場合があります。これは意図的なものかもしれません: en-GB の場合、「重複するのではなく上書きする」アプローチのみを採用し、ベースとなる英語と異なる箇所のみ、あちこちにいくつかのリソースのみを定義することを好む場合があります。

したがって、最も単純で明確なアプローチは、アプリケーション コードでサポートされているカルチャのハードコーディングされたマスター リストを維持し、言語サポートのアラート ロジックをこのリストに基づいて作成することです。新しいローカリゼーションを追加するときは、コードでそのリストを更新する必要があります。しかし、私たちのほとんどは、新しいリソース ファイルをソリューションにチェックインすることでローカライズを行っています。コードとローカライズされたリソースが完全に分離されているわけではありません。

于 2012-12-20T11:49:24.710 に答える
0

リソース ファイルから利用可能なカルチャのリストを提供する直接的な API はないようです。

考えられる解決策の 1 つは、リソース ファイルを列挙し、言語コードを解析することです。

この SO の質問を見てください: Get available languages from resource

于 2012-12-19T19:19:19.760 に答える