2

私はアプリを開発しています。(正常に動作します。問題はありません)。しかし今、上司は英語、スペイン語、その他の言語で作業する必要があります。

アプリの言語をさまざまな Web ページで変更する方法に関するチュートリアルをいくつか見ました ( thisthis など) 。

私の問題は次のとおりです。 アイテムを定義していません。つまり、テキスト ボックス、ラベル、またはボタンがありません。ファイルを読み取ります: に「ボタン」行がある場合、アプリはフォームにボタンを追加します。「ラベル」行がある場合、それは新しいラベルを追加します。

したがって、チュートリアルにあるようにファイルを使用することはできません。うまくいきません。

やり方が悪いのか、単にうまくいかないのかわかりません

何か案が?どうすればいいのかわからない

を読みました。txt ファイル (1 行ずつ) を作成し、次のようにプロパティを割り当てます。

public static Label[] LAB = new Label[2560];
public static int indice_LABEL = 0;


    if (TipoElemento == "LABEL")
    {
     LAB[indice_LABEL] = new Label();
     LAB[indice_LABEL].Name = asigna.nombreElemento;
     LAB[indice_LABEL].Left = Convert.ToInt32(asigna.left);//LEFT
     LAB[indice_LABEL].Top = Convert.ToInt32(asigna.top);//TOP
     LAB[indice_LABEL].Width = Convert.ToInt32(asigna.width);
     LAB[indice_LABEL].Height = Convert.ToInt32(asigna.height);
     //and all I need
     ...
     ...
     Formulario.PanelGE.Controls.Add(Herramientas.LAB[Herramientas.indice_LABEL]);
     Herramientas.indice_LABEL++;
    }
4

1 に答える 1

1

この形式に固執する必要がある場合、最善の解決策は、すべてのコントロール定義 (名前、寸法、位置など) を含む 1 つのファイルと、ユーザーに表示するテキストを含む別のファイルを用意することです。

次に、各コントロールを作成するときに、キャプションを割り当てる代わりにResourceManager、「キャプション」ファイル (言語ごとに 1 つ) にリンクされた を使用して、表示する正しい文字列を取得します。

例えば:

言語テキスト ファイル

これは単純なテキスト ファイル、resource.en-US.txtになります。

内部では、単純なキー>値のペアを追加する必要があります:

label1=Hello world!

別の言語を作成するには、別のファイルresource.fr-FR.txtを作成し、以下を追加します。

label1=Bonjour le monde!

アプリケーションコード

// Resource path
private string strResourcesPath= Application.StartupPath + "/Resources";

// String to store current culture which is common in all the forms
// This is the default startup value
private string strCulture= "en-US";

// ResourceManager which retrieves the strings
// from the resource files
private static ResourceManager rm;

// This allows you to access the ResourceManager from any form
public static ResourceManager RM
{ 
  get 
  { 
   return rm ; 
   } 
}


private void GlobalizeApp()
{
    SetCulture();
    SetResource();
    SetUIChanges();
}
private void SetCulture()
{
    // This will change the current culture
    // This way you can update it without restarting your app (eg via combobox)
    CultureInfo objCI = new CultureInfo(strCulture);
    Thread.CurrentThread.CurrentCulture = objCI;
    Thread.CurrentThread.CurrentUICulture = objCI;

}
private void SetResource()
{
    // This sets the correct language file to use
    rm = ResourceManager.CreateFileBasedResourceManager
        ("resource", strResourcesPath, null);

}
private void SetUIChanges()
{
    // This is where you update all of the captions
    // eg:
    label1.Text=rm.GetString("label1");
}

次に、プライベート文字列strCulture= "en-US"を "fr-FR" に変更し (コンボ ボックスなど)、GlobalizeApp()メソッドを呼び出すだけで、テキストがHello worldからBonjour le monde!label1に変わります。

シンプル(私は願っています:))

優れたウォークスルーについては、このリンクをチェックしてください

于 2013-09-23T17:18:41.467 に答える