Programmatique façon d'obtenir toutes les langues disponibles (dans les assemblys satellites)
Je suis de la conception d'une application multilingue à l'aide .fichiers resx.
J'ai quelques fichiers comme GlobalStrings.resx, GlobalStrings.es.resx, GlobalStrings.fr.resx, etc.
Lorsque je veux l'utiliser, j'ai juste besoin de mettre le Thread.CurrentThread.CurrentCulture.
Le problème:
J'ai une liste déroulante avec toutes les langues disponibles, mais je suis de chargement manuellement:
comboLanguage.Items.Add(CultureInfo.GetCultureInfo("en"));
comboLanguage.Items.Add(CultureInfo.GetCultureInfo("es"));
J'ai essayé avec
cmbLanguage.Items.AddRange(CultureInfo.GetCultures(CultureTypes.UserCustomCulture));
sans succès. Aussi essayé avec tous les éléments en CultureTypes, mais je suis le seul à en obtenir une grande liste avec beaucoup plus de langues que je ne suis pas à l'aide, ou d'une liste vide.
Est-il possible d'obtenir uniquement les langues prises en charge?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez en programmant liste les cultures disponibles dans votre application
GlobalStrings.resx
sera détectée sousInvariantCulture
.basé sur la réponse de @hans-holzbart mais corrigé pour ne pas retourner le InvariantCulture trop et enveloppée dans une réutilisables méthode:
en utilisant cette méthode, vous pouvez obtenir une liste de chaînes de caractères à ajouter à certains ComboBox avec les éléments suivants:
Ce serait une solution sur la base de la déclaration suivante:
Chaque satellite assemblée pour une langue spécifique est le même nom mais se trouve dans un sous-dossier nommé d'après la culture spécifique par ex. fr ou fr-CA.
Je ne suis pas sûr au sujet d'obtenir les langues, peut-être que vous pouvez analyser votre dossier d'installation de dll-files, mais le réglage de votre langue à une langue non prise en charge ne devrait pas être un problème.
.NET repli de la culture neutre ressources si aucune culture spécifique, vous pouvez trouver les fichiers de sorte que vous pouvez en toute sécurité sélectionnez non prise en charge des langues.
Aussi longtemps que vous le contrôle de l'application vous-même, vous pourriez juste stocker les langues disponibles dans une application paramètre quelque part. Juste une chaîne séparée par des virgules avec les noms de culture devrait suffire: "en, es"
À l'aide de ce que la Rune Grimstad dit, je me retrouve avec ceci:
manière ou d'une autre
Je ne pense pas que ce soit une bonne idée ...
@"Ankush Madankar" présente un point de départ intéressant, mais il a deux problèmes:
1) Trouve également des dossiers de ressources pour les ressources de refrenced assemblées
2) N'trouver de la ressource pour le socle de la langue
Je ne vais pas essayer de résoudre le problème 2), mais pour le problème 1) le code doit être
Une réponse générique où le type de ressource à la recherche est défini. Utilise la réflexion, mais est mis en cache.
Utilisation:
De Mise En Œuvre (Classe Utilitaire):
Il risque de subir le même problème avec la accepté de répondre à toutes les ressources de la langue sera probablement chargé.