2013-07-22 7 views
0

Je voudrais que ma boîte de message affiche des informations selon la langue sélectionnée par l'utilisateur. Je change tout le bouton et étiquette le texte selon le clic de bouton de lanugage. Mais comment puis-je faire mon messagebox pour afficher des informations différentes en fonction de ce bouton de langue cliquez sur? Par exemple, si j'ai un autre bouton et que je clique dessus, la boîte à message appropriée est affichée, je voudrais que cette boîte à message soit affichée dans différentes langues pour différents choix de l'utilisateur. J'ai tout mon texte dans la ressource. Bellow est mon code.C# Boîte aux lettres multilingue

private void btnLngEnglish_Click(object sender, EventArgs e) 
    { 
     CultureInfo ci = new CultureInfo("en-US"); 
     Assembly a = Assembly.Load("read_display"); 
     ResourceManager rm = new ResourceManager("read_display.language.languageRes", a); 
     button7.Text = rm.GetString("file", ci); 
     button4.Text = rm.GetString("timecount", ci); 
     button6.Text = rm.GetString("daterange", ci); 
     button3.Text = rm.GetString("specdate", ci); 
     button1.Text = rm.GetString("phrasesearch", ci); 
     button5.Text = rm.GetString("higherval", ci); 
     label3.Text = rm.GetString("langsel", ci); 
     label5.Text = rm.GetString("rowcount", ci); 
     label4.Text = rm.GetString("timeElapsed", ci); 
     label1.Text = rm.GetString("filterdate", ci); 
     label2.Text = rm.GetString("hide", ci); 
    } 

    private void btnLangPolish_Click(object sender, EventArgs e) 
    { 
     CultureInfo ci = new CultureInfo("pl-PL"); 
     Assembly a = Assembly.Load("read_display"); 
     ResourceManager rm = new ResourceManager("read_display.language.languageResPL", a); 
     button7.Text = rm.GetString("file", ci); 
     button4.Text = rm.GetString("timecount", ci); 
     button6.Text = rm.GetString("daterange", ci); 
     button3.Text = rm.GetString("specdate", ci); 
     button1.Text = rm.GetString("phrasesearch", ci); 
     button5.Text = rm.GetString("higherval", ci); 
     label3.Text = rm.GetString("langsel", ci); 
     label5.Text = rm.GetString("rowcount", ci); 
     label4.Text = rm.GetString("timeElapsed", ci); 
     label1.Text = rm.GetString("filterdate", ci); 
     label2.Text = rm.GetString("hide", ci); 
    } 

EDIT:

private void button1_Click(object sender, EventArgs e) 
    { 
     string searchString = textBox8.Text; 
     if (String.IsNullOrEmpty(textBox8.Text)) 
     { 
      //Here I would like to diplay messages in two different language, based on previous language button click. Can I do it?? 
      MessageBox.Show("Enter value to filter"); 
     } 
     else 
     { 
      bool found = false; 
      foreach (DataGridViewRow row in dataGridView1.Rows) 
      { 
       if (row.Cells[1].Value.ToString().Contains(searchString)) 
       { 
        row.DefaultCellStyle.BackColor = System.Drawing.Color.MediumPurple; 
        row.Selected = true; 
        found = true; 
       } 
       if (row.Cells[2].Value.ToString().Contains(searchString)) 
       { 
        row.DefaultCellStyle.BackColor = System.Drawing.Color.MediumPurple; 
        found = true; 
       } 
      } 
      if (!found) 
      { 
       //Here I would like to do same thing 
       MessageBox.Show("Value was not found"); 
      } 
     } 
    } 
+0

Essayez de déplacer le message dans des ressources – Sandy

Répondre

1

Tout d'abord, je voudrais changer les noms de tous ces boutons pour refléter ce qu'ils sont en réalité. C'est plus un conseil.

De toute façon, ne pouvez-vous pas simplement appeler MessageBox.Show(rm.GetString("messageboxData", ci))?

EDIT1 (voir les commentaires): Ce que je veux quelque chose sur les lignes de:

class MyClass 
{ 
    CultureInfo currentCultureInfo; 
    public MyClass() 
    { 
     //defaulting to en-US 
     currentCultureInfo = new CultureInfo("en-US"); 
    } 

    public void SetLanguageToEnglish() 
    { 
     currentCultureInfo = new CultureInfo("en-US"); 
    } 

    public void SetLanguageToItalian() 
    { 
     currentCultureInfo = new CultureInfo("it-IT"); 
    } 

    public string GetTranslation(string s) 
    { 
     //By the way, you should to the same to 'a' and 'rm', since they don't need to be instantiated each time. But I'll use your code to avoid confusion. 
     Assembly a = Assembly.Load("read_display"); 
     ResourceManager rm = new ResourceManager("read_display.language.languageRes", a); 
     return rm.GetString(s, currentCultureInfo); 
    } 
} 
+0

Je pense que je ne peux pas le faire comme ça. Ces deux boutons sont faits pour changer la langue globale dans mon application. Quand je les clique tous les boutons et étiquettes affichés sur la page principale changent d'une langue à l'autre. Je vais modifier le code pour montrer exactement où je voudrais changer cette boîte de message. – user2592968

+0

Attendez, je pense que je comprends. Vous pouvez stocker une référence globale à un CultureInfo, par exemple "currentCultureInfo", qui est défini dans les événements de clic sur le bouton. Vous pouvez ensuite accéder aux données depuis l'extérieur en appelant rm.GetString ("messageboxData", currentCultureInfo). – KappaG3

+0

J'ai modifié mon message pour montrer un exemple. – KappaG3

Questions connexes