2011-07-12 8 views
0

私のアプリは完全に国際化されているといい、ユーザーはフォームの国のリスト(ドロップダウン)から選択することになっています...どのようにasp.net mvcで静的リスト国際化を扱うのですか?

国は(現在)データベースのテーブルではありませんしかし私はこれを変えても構わないと思っています。

たとえばスペイン語ではドイツはアレマシアです。

多くの国が異なる名前を持っているため、異なる言語である必要があります。

どうすればいいですか?助けてください。明確化のため

編集:

ので....私たちのアプリがユーザーの出生地アドレスを追跡することになっている...この国のドロップダウンが言語切替機構とは何の関係もありませんことを覚えておいてください私が欲しいのはドイツで生まれ、英語の意志でアプリを使用しているユーザーの私の例を改めて表明する

  • ....現在選択されている文化に依存possilbe国の別のリストが表示されるということです ドイツをドロップダウンから選択

  • ドイツで生まれ、スペイン語でアプリを使用しているユーザーは、 ドロップダウンリストからAlemaniaを選択します。

言語切り替えが正常に機能しています。どのユーザーも、アプリケーションを表示する言語を選択できます。これは、URLに格納されます。

+0

なぜあなたはこれをやりたいのですか?なぜこの情報が最初に必要なのですか?もう1つの質問は、(通常)ウェブブラウザから検出できる場合、ユーザーに国を選択させる必要がある理由です。 –

+0

解説のために編集します – ignaciofuentes

答えて

1

List<RegionInfo> allRegions = new List<RegionInfo>(); 
var specificCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures); 
foreach (CultureInfo culture in specificCultures) 
{ 
    var info = new RegionInfo(culture.LCID); 
    allRegions.Add(info); 
} 

これはあなたにそれらのいくつかの複数回のすべての国を、提供します(異なる言語なぜなら使用中)。

RegionInfoは、いくつかの興味深い性質がありますため、「ドイツ」を

  • NativeNameあなたの国の名の翻訳を与えるが、残念ながら与えられたロケール識別子(LCID)に対応するものだろう、それはポーランドのための「ポルスカ」でありますドイツなど。いくつかはいくつかの言語に翻訳されます(興味深いのは、アメリカ合衆国は米国と米国の両方で表示されているためです)
  • DisplayNameあなたが探しているはずのものは何ですか?残念ながらそうではありません - マイクロソフトでは翻訳を忘れています.Net framework(おそらくそれはプロパティであってはならないため、OKです)
  • 名前とは違う名前が示す2文字の国コードです。

この情報でできることは何ですか?理論的には、翻訳された国名を使用することができます。この場合、辞書(Dictionary<int, string>)を作成し、LCIDに対応するNativeName文字列を追加し、ドロップダウンメニューのソースとして使用します。
国で生まれた人のうち少なくとも1人はその言語の少なくとも1つを理解できなければなりません。

しかし現実には、あなたのアプリケーションが現時点で表示している言語に翻訳された国のユニークなリストを持つことをお勧めします。上記の方法を使用して国のリストを取得し、たとえばDisplayName(またはEnglishName)のように使用することができます。実行時に他の文字列と同じように翻訳された名前に解決されます。それはバックエンドで発生する必要があるので、別のリソースファイル(App_GlobalResourcesに置くことができ、重要ではない)を追加し、コードビハインドで読み込みます。これ以上の理論は、いくつかのサンプルコードは必要ありません:

const string RESOURCE_FILE = "Countries"; 
Dictionary<string, string> countryNames = new Dictionary<string, string>(); 

var specificCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures); 
foreach (CultureInfo culture in specificCultures) 
{ 
    var info = new RegionInfo(culture.LCID); 
    var name = info.EnglishName; 
    var translated = GetGlobalResourceObject(RESOURCE_FILE, name).ToString(); 
    countryNames[name] = translated; 
} 

あなたは(CurrentUICulture以外の)特定の言語での名前を読みたい場合は

GetGlobalResourceObject()の三番目の引数として CultureInfoオブジェクトを渡します。

+0

言語を選択するのを忘れてしまったので、C#はOKです。あなたは確かに質問に正確にタグを付けるだけで、確かにより多くの答えを得ることができます... –

+0

私はそれがAsp.Net-MVCの質問であることを見ました...まあ、私はあなたがまだこのソリューションを(若干の変更を加えて)使用できると信じています。 –

0

ユーザーは自分の地域を選択します。地域コードを格納するルートを使用してセッションまたはURLに保存します。あなたは、ルート方法を選択した場合

ASP.NET (MVC) routes internationalization

ASP.Net MVC switching Cultures after compile for initial load

をそれはあなたのシナリオのための少しより多くの仕事のようです、:あなたは、ここで行わなどアクションフィルタでそれを読むことができます最初のリンクがあなたの最高の賭けになるでしょう。多かれ少なかれ、あなたはこのようのCultureInfoとRegionInfoを使用することができます。ネットでサポートされている国のリストを取得するには

関連する問題