Existe-t-il un moyen d'obtenir les traductions de ressources disponibles d'une DLL .net? Notre logiciel est en cours de traduction dans différentes langues, et je voudrais donner à l'utilisateur le choix de la langue dans laquelle le logiciel est, bien que je voudrais seulement les laisser choisir seulement entre les langues dans lesquelles il a été traduit.Comment obtenir les traductions disponibles depuis un DLL
Répondre
Je viens de recevoir un problème similaire donc juste pour référence future.
Pour mes traductions de logiciels sont dans le dossier du programme, chacun sous leur propre sous-dossier nommé après le nom de la culture. Code explique tout:
private void SettingsForm_Load(object sender, EventArgs e)
{
// load default language to the list
languageList.Add(new Language("English", "en"));
string fileName = "myProgram.resources.dll";
// load other languages available in the folder
DirectoryInfo di = new DirectoryInfo(Application.StartupPath);
foreach (DirectoryInfo dir in di.GetDirectories())
{
if (File.Exists(dir.FullName + "\\" + fileName))
{
try
{
CultureInfo ci = new CultureInfo(dir.Name);
languageList.Add(new Language(ci.NativeName, ci.Name));
}
catch
{
// whatever happens just don't load the language and proceed ;)
continue;
}
}
}
}
Il annonce une exception manutention aérienne, mais combien d'utilisateurs vont créer des dossiers personnalisés dans le répertoire d'installation avec la ressource faux nom exactement comme fichier de localisation ?? : P
Vous devez donc être en mesure d'obtenir la culture de la DLL de base, puis d'énumérer toutes les DLL satellites?
La première partie est assez facile (il suffit d'obtenir l'attribut de niveau d'assemblage). Pour ce dernier, il ne semble pas y avoir d'assistant sur la classe ResourceManager, ce qui signifie que vous devrez émuler son machanisme de sondage (y compris, potentiellement, tous les remplacements disponibles avec les attributs et le fichier .config). Une alternative est de construire la liste à la construction ou à l'installation (ce qui fonctionnerait mieux si d'autres langages peuvent être ajoutés plus tard), crée une liste pour le fichier .config.
Déjà élaboré une solution similaire, mais j'ai oublié de le poster ici, alors félicitations, je vous donne la réponse: D – Stormenet