2008-12-29 10 views
1

Je veux globaliser mon application. J'ai créé un petit formulaire qui demande à l'utilisateur sa langue. J'ai un certain nombre de problèmes:problème: globalisation en C# utilisant VS2005

Problème 1:

Dans Program.cs

new SplashScreen(_tempAL); 
new LangForm(_lang); 
Application.Run(new Form1(_tempAL, _lang)); 

Je veux l'application de ne pas appeler Form1 jusqu'à ce que l'utilisateur clique sur OK dans LangForm. Pour plus d'explaintion à LangForm:

public LangForm(char _langChar) 
    { 
     InitializeComponent(); 
     _ch = _langChar; 
     this.TopMost = true; 

     this.Show(); 

    } 

    private void _btnOk_Click(object sender, EventArgs e) 
    { 
     string _langStr = _cbLang.SelectedText; 
     switch (_langStr) 
     { 
      case "English": 
       _ch = 'E'; 
       this.Hide(); 
       break; 
      case "Arabic": 
       _ch = 'A'; 
       this.Hide(); 
       break; 
      case "Frensh": 
       _ch ='F'; 
       this.Hide(); 
       break; 
     } 
     _pressedOk = true; 
    } 

    private void _btnCancel_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
     Application.Exit(); 
    } 

Maintenant, quand je debug, l'application appelle LangForm et Form1 afin que les deux formes sont présentées. Je veux que Form1 attende que l'utilisateur clique sur Ok dans LangForm.

Problème 2:

Quand dois-je vérifier la langue? Il n'est pas permis d'archiver "initializeComponent()" alors devrais-je vérifier après cette fonction, puis régler l'emplacement des contrôles en fonction de la langue.

Problème 3:

au sein du processus d'application I affiche un certain message si avant chaque "MessageBox.Show (" ");" Je devrais vérifier la langue ou il y a une autre façon de définir la langue une fois.

Problème 4:

J'ai cherché des interfaces pour MessageBox comme en fait je veux changer la mise en page. Comment puis-je trouver des modèles pour MessageBox?

Merci d'avance.

Répondre

1

Afficher le formulaire de sélection de la langue comme une boîte de dialogue. Faites votre look fichier Program.cs comme ceci:

[STAThread] 
static void Main() { 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    if (DialogResult.OK == new LangForm().ShowDialog()) { 
    Application.Run(new Form1()); 
    } 
} 

Ajouter cette ligne à votre gestionnaire cliquez _btnOK:

this.DialogResult = DialogResult.OK; 
1

Pour bloquer jusqu'à la fermeture d'un formulaire, utilisez .ShowDialog() sur le LangForm. Je voudrais ensuite définir la culture (Thread.CurrentThread.CurrentCulture et Thread.CurrentThread.CurrentUICulture) entre ce formulaire en fermant et en créant la nouvelle forme. Après avoir fait cela, tout ce qui provient de resx devrait se charger correctement.

Pour modifier la disposition de MsgBox (au-delà de la norme), vous devrez écrire le vôtre (il ne supporte pas cela).

Quelque chose comme:

[STAThread] 
static void Main() { 
    Application.EnableVisualStyles(); 

    // find the culture we want to use 
    bool cont; 
    string languageCode; 
    using (LangForm lang = new LangForm()) { 
     cont = lang.ShowDialog() == DialogResult.OK; 
     languageCode = lang.LanguageCode; // "en-US", etc 
    } 
    if (!cont) return; 

    // set the culture against the UI thread 
    Thread.CurrentThread.CurrentCulture = 
     Thread.CurrentThread.CurrentUICulture = 
      CultureInfo.GetCultureInfo(languageCode); 

    // show the main UI 
    using (MainForm main = new MainForm()) { 
     Application.Run(main); 
    } 
} 

Notez l'utilisation des codes de la culture officielle, il sera plus facile d'utiliser des choses comme CultureInfo; si vous voulez utiliser votre propre liste restreinte, puis utilisez un ENUM, et d'écrire une méthode quelque part:

public static string GetCultureCode(MyCulture culture) { 
    switch(culture) { 
     case MyCulture.French: return "fr-FR"; 
     case MyCulture.English: return "en-GB"; 
     //... 
     default: throw new NotSupportedException("Unexpected culture: " + culture); 
    } 
} 
Questions connexes