Question

Récemment, j'ai décidé d'ajouter 4 langues à mon application. J'ai lu comment le faire et je réussis.

Mais il y a deux problèmes / questions que je voudrais poser.

Première question: existe-t-il une meilleure façon de modifier le texte de chaque contrôle à la place

private System.Resources.ResourceManager rm;

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr");
rm = new System.Resources.ResourceManager(typeof(MainForm));

Et puis pour chaque contrôle d'écrire cette ligne:

aboutToolStripMenuItem.Text = rm.GetString("aboutToolStripMenuItem.Text");
addTaskToolStripMenuItem.Text = rm.GetString("addTaskToolStripMenuItem.Text");
addTaskToolStripMenuItem1.Text = rm.GetString("addTaskToolStripMenuItem1.Text");
...

Deuxième question: disons que le texte de Label1 est "test" et dans une autre langue, son "testeur", alors la taille de l'étiquette changera, ce qui est OK. Mais si j'ai obtenu le label2 que son emplacement est près de Label1, Label1 pourrait être en haut de Label2. Comment puis-je déplacer le label1 comparer avec Label2, donc peu importe la durée du texte de Label1, l'emplacement de Label2 sera relatif à Label1. Je ne veux pas utiliser de calculs dans le programme, je veux savoir s'il existe une autre manière comme une propriété dans l'un des contrôles.

EDIT: Après une longue réflexion, j'ai décidé d'utiliser XML pour mon multitolime. De cette façon, je peux laisser les gens le traduire et le télécharger pour moi et je peux l'utiliser sur l'exécution à la place ou recharger les programmes.

Sur le point de vente relatif des contrôles que j'utiliserai FlowLayoutPanel ou TableLayoutPanel Je vérifierai plus loin ce qui est mieux.

Était-ce utile?

La solution

En réponse à votre première question:

Si vous voulez vraiment suivre ce schéma, peut-être que l'utilisation de la réflexion ou de la génération de code automatique est une alternative pour une gestion plus facile. J'écris habituellement le mien GetString Méthode qui prend une chaîne anglaise par défaut comme argument (utilisé si aucune ressource ne peut être chargée dynamiquement pour la langue actuelle). Mais je ne sais pas non plus si c'est la meilleure solution ...


En réponse à votre deuxième question:

Dans winforms, utilisez un TableLayoutPanel ou FlowLayoutPanel ou un autre composant de disposition pour positionner relativement les commandes. Il est possible de spécifier si l'étiquette s'adapte à son contenu (automatique) par exemple ou si elle doit accoster et si oui avec quel alignement. Il n'y a presque aucun cas d'utilisation qui nécessiterait une gestion de soi ou un calcul fastidieux.

Lien: http://msdn.microsoft.com/en-us/library/z9w7ek2f(v=vs.100).aspx

Autres conseils

Assemblages satellites est ce que vous recherchez.

Q1: Dans VS, définissez la propriété localisable de votre formulaire sur true. Sélectionnez ensuite la propriété linguistique en conséquence et tapez vos traductions dans le concepteur. De cette façon, il vous suffit de définir la culture du thread au démarrage et .NET chargera la langue correcte pour vous. Pas besoin d'ajouter du code supplémentaire.

Q2: Encore une fois, après avoir sélectionné la langue dans le concepteur, déplacez simplement les commandes: leur nouvelle emplacement / taille fait partie de la traduction et sera gérée automatiquement par .NET.

Ce n'est pas une très bonne idée de changer l'interface graphique en une culture différente pendant qu'il fonctionne, il est préférable de dire quelque chose comme vous devez redémarrer l'application pour voir les changements.

Bien que si vous avez besoin de le faire, vous devez recharger toutes les ressources de la nouvelle culture (plus ou moins la même que le fait InitializeComponen), pas seulement le texte, car l'emplacement, la taille, etc., peuvent également être modifiés. Vous devez également modifier la culture du fil pour les erreurs, le message et les nouveaux contrôles ont également la bonne culture (pour les montrer dans la bonne langue).

Vous pouvez définir votre culture d'application avec:

CultureInfo appCulture = CultureInfo.CreateSpecificCulture("fr");
Thread.CurrentThread.CurrentCulture = appCulture; 
Thread.CurrentThread.CurrentUICulture = appCulture;

Vous avez besoin d'une culture spécifique pour l'utiliser sur la formation et l'analyse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top