web-dev-qa-db-ja.com

Winformsで多言語アプリを作成する方法は?

アプリケーションがあり、そのアプリケーションで2つの言語を使用する必要があります。例えば ​​:

  • 英語
  • アラビア語

しかし、どうすればよいのかわかりません。誰でもこれを手伝ってくれる?

C# Windows Formsに例が必要です。

12
mahmoud

フォームのLocalizableおよびLanguageプロパティを使用する

FormクラスにはLocalizableおよびLanguageプロパティがあります。 Localizableプロパティをtrueに設定すると、デフォルト言語のフォームにコントロールを追加し、デフォルト言語のプロパティを設定できます。次に、別の言語を選択して、それらの言語のプロパティを変更できます。このように、値またはローカライズ可能なプロパティは、異なるカルチャの個別のリソースファイルに格納されます。

注:プロパティが [Localizable(true)] 属性で装飾されている場合、ローカライズ可能と見なされます。たとえば、 BackColor プロパティはローカライズ可能ではありませんが、 Text プロパティはローカライズ可能です。

Resxリソースファイルを使用してメッセージと画像をローカライズする

プロジェクトのPropertiesフォルダーの下にRseources.Resxファイルがあり、画像とメッセージのローカライズに使用できます。また、プロジェクトに.resxリソースファイルを追加することもできます。たとえば、Strings.resxファイルを作成し、それに文字列キーと値を追加してから、strings.en.resxおよびstrings.fa.resxとしてコピーし、それらの言語の値を編集できます。次に、これらのリソース値を使用できます。次に例を示します。

MessageBox.Show(Properties.Resources.AreYouSure);

現在のUIカルチャ言語でResources.ResxファイルからのAreYouSureの値を表示します。

カルチャのリソースキーが見つからない場合、またはリソースファイルの指定されたカルチャが見つからない場合は、Resxファイルのニュートラルカルチャのキーの値が使用されます。

実行時に言語を変更します

次のコマンドを使用して、アプリケーションのカルチャをPersianに設定できます。

System.Threading.Thread.CurrentThread.CurrentCulture =
    System.Globalization.CultureInfo.GetCultureInfo("fa");

System.Threading.Thread.CurrentThread.CurrentUICulture =
    System.Globalization.CultureInfo.GetCultureInfo("fa");

上記のコードは、アプリケーションの開始時またはフォームを表示する前に配置する必要があります。

詳細

詳細と例:

20
Reza Aghaei

リソースファイルを使用する方が簡単な場合があります。

  1. Visual Studioでプロジェクトに新しいリソースファイルを追加します。例えば。 _en.resx_英語用_fr.resx_フランス語用。

  2. 文字列でリソースファイルを開き、文字列に名前を付けて、値のセルに別の翻訳を入力します。例:_next station_の値in _en.resx_は_next station_ですが、_fr.resx_では_Prochaine station_にすることができます。以下の例: en_local.resxfr_local.resx

  3. コードでは、public static ResourceManager rm = new ResourceManager("WindowsFormsApp1.en_local", Assembly.GetExecutingAssembly());を使用して言語リソースを選択します。

  4. アプリケーションに文字列を出力する必要がある場合は、関数GetString()を使用します(例:label1.Text = rm.GetString("welcome");

9
wwjih123

Wwjih123の回答に欠けている部分があります。

VS2017で

1-まず、プロジェクトのルートフォルダー(リソースフォルダーではない)にリソースを作成します。 lang_en、lang_tr、lang_frなどのように名前を付けます...

2-thenオブジェクトプロパティウィンドウは、ビルドアクションを埋め込みリソースのままにします

3-lang_tr.resxファイル内にトルコ語の新しい文字列lbl_errorと値 "Hata"を追加します(好きなように)

4-クラス内で変数を次のように定義します。

    ResourceManager res_man;    // declare Resource manager to access to specific cultureinfo

InitializeComponent();の後の5クラスの初期化

Console.WriteLine("You are speaking {0}", 
System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName);
res_man = new ResourceManager("MyApp.lang_"+ System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName, Assembly.GetExecutingAssembly());

lblError.Text = res_man.GetString("lbl_error");

あなたのUI言語がトルコ語の場合、自動的にlang_tr.resxをロードし、英語の場合、lang_en.resxファイルがロードされます...

幸運を

5
Alp Altunel