2

Visual Studio 2013(C#)で開発しています。ローカライゼーションのためにWindowsフォームの言語を簡単に選択できる方法を探しています。あなたは「デザイン 『の下に使用する言語を選択する可能性を持っているデザイナーで Visual Studio Designer - 言語プロパティの特定の言語を表示するためにプロパティグリッドを制限します。

→』 言語」とVisual Studioは、新しいローカライズされたフォームが必要な場合は、必要なローカライズファイルを作成することによって、残りの部分はありません。

現在のところ、私は2つの異なる言語でしか動作しません。ローカライズされたフォーム間を切り替えるたびに、すべての可能な言語の一覧が表示されます。間違ったクリックでVisual Studioがローカライズ版私は欲しくない言語です。これはちょっと迷惑で、プロジェクトをより多くのファイルでクラッタしています。

デザイナーのオプションに表示される言語を希望する量と選択肢に制限する方法を知っている人はいますか?

答えて

1

言語プロパティは、Formクラスに属していないデザイン時のみのプロパティです。エクステンダープロバイダを使用してフォームの設計時に追加された拡張プロパティです。それはCultureInfoのタイプであり、利用可能なすべての培養物を示すTypeConverterを使用します。回避策として

、あなたはBaseFormFormLanguageのようなプロパティを含むとLanguage財産のget、戻り値に持つことができるとsetで、Languageプロパティの値を設定します。次に、すべてのフォームをBaseFormから継承します。このようにして、FormLanguageのプロパティを変更するだけで十分です。

CultureInfoのカスタムタイプコンバータを作成して、言語を変更するだけの文化を表示すると、FormLanguageプロパティを変更するだけで十分です。ここで

Localization Language

私は回避策として使用されるコードです。このBaseClassからフォームを継承することを忘れないでください。

using System; 
using System.ComponentModel; 
using System.ComponentModel.Design; 
using System.Globalization; 
using System.Linq; 
using System.Windows.Forms; 
public partial class BaseForm : Form 
{ 
    [TypeConverter(typeof(MyCultureInfoConverter))] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public CultureInfo FormLanguage 
    { 
     get 
     { 
      return TypeDescriptor.GetProperties(this)["Language"] 
       .GetValue(this) as CultureInfo; 
     } 
     set 
     { 
      TypeDescriptor.GetProperties(this)["Language"].SetValue(this, value); 
     } 
    } 
} 
public class MyCultureInfoConverter : CultureInfoConverter 
{ 
    public override StandardValuesCollection 
     GetStandardValues(ITypeDescriptorContext context) 
    { 
     var values = CultureInfo.GetCultures(CultureTypes.SpecificCultures | 
      CultureTypes.NeutralCultures) 
      .Where(x => x.Name == "fa-IR" || x.Name == "en-US").ToList(); 
     values.Insert(0, CultureInfo.InvariantCulture); 
     return new StandardValuesCollection(values); 
    } 
} 

あなたはFormLanguageからfa-IRを選択すると、その後Languageがあるため、我々はFormLanguageのセッターで書いたコードを自動的にPersianになります。あなたはMyCultureInfoConverterに必要な他の言語を追加することができます。

+0

'FormLanguage'から' fa-IR'を選択すると、 'FormLanguage'のsetterで書いたコードのため、' Language'は自動的に 'Persian'になります。 'MyCultureInfoConverter'に必要な言語を追加することができます。あなたが答えについて何か質問があれば教えてください。 –

+0

ありがとうございました。これは、選択を制限するための素晴らしい回避策です。そしてそれはかなりうまくいくようです。ある言語から別の言語に切り替えると、適切なresxファイルが作成されます。私は今問題がありますが(これは別の問題かもしれません)、私がデザイナービューで変更を保存すると、Visual Studioはもう反応しなくなり、私はそれを終了しなければならないということです。しかし、これは設定の問題かもしれません。私は次の日にそれを観察します。 –

+0

あなたは歓迎です、私はそのような問題に直面しませんでした。私はもう一度それをチェックします。しかし、あなたはまた、新しいクリーンなプロジェクトの動作をチェックし、結果を教えてください。 –

関連する問題