1 votes

Localisation avec SharpDevelop

Je travaille sur une application localisée que je développe en SharpDevelop. Basée sur un tutoriel J'ai rencontré une erreur :

Impossible de trouver des ressources appropriées pour la culture spécifiée (ou la culture neutre) sur le disque. baseName :

J'ai créé le fichier ressource en utilisant Projet | Ajouter | Nouvel élément respectif "Fichier ressource vide" (je n'ai pas pu trouver "Fichier ressource d'assemblage"). De plus, j'ai défini l'action de construction à "EmbeddedResource".

Dans le programme, j'ai une classe qui fait ce qui suit

// load the resource file once
resourceManager = ResourceManager.CreateFileBasedResourceManager(file, filePath, null);

// depending on user selection, I set the CultureInfo in the code behind the form, i.e.
Thread.CurrentThread.CurrentUICulture = locales[0];   // which contains "en"

// and that's the method of the same class used to lookup the values
public string getValue ( string key )
{
    return resourceManager.GetString(key);
}

SharpDevelop 3.0.0.3437 .NET Version 2.0.50727.3053

Même en lisant attentivement les commentaires et en cherchant longtemps sur Google, je n'ai pas trouvé d'exemple ou de solution. D'où les questions :

  • Comment puis-je ajouter la culture au fichier de ressources lui-même ?
  • Pouvez-vous fournir un exemple ou un lien ?

Merci beaucoup !

1voto

baretta Points 4391

CreateFileBasedResourceManager ne traite que les fichiers binaires .resources (pas les fichiers .resx).

Si vous insistez pour charger des ressources à partir d'un fichier externe plutôt que d'intégrer les ressources dans l'assemblage, vous devrez exécuter l'utilitaire de ligne de commande resgen pour générer un fichier .resources. Si vous ne l'avez pas encore fait, générez-en un pour chaque culture prise en charge.

Pour le reste, la situation est satisfaisante.

Mais si vous préférez incorporer des ressources dans l'assemblage, dans la fenêtre des propriétés, définissez l'action de construction sur Ressource incorporée.

Si vous voulez aussi une classe fortement typée générée qui s'occupe de tout le sale boulot, définissez l'outil de personnalisation sur la page fichier de base uniquement (l'invariant) à ResXFileCodeGenerator, ou PublicResXFileCodeGenerator si vous en avez besoin (utile lors de la création d'assemblages satellites).

Vous n'avez donc pas besoin de vous occuper vous-même du chargement des ressources localisées. La classe générée s'en charge pour vous.

Pour chaque clé de la ressource, une propriété statique est générée dans la classe générée, et il suffit d'invoquer cette propriété, c'est très propre et de loin la méthode la plus simple.

À moins qu'il n'y ait des raisons particulières de charger des ressources à partir de fichiers .resources, je recommanderais toujours de les intégrer dans l'assemblage.

0voto

Glenn Points 3787

Je ne sais pas quelle version de .NET vous utilisez, mais cet article de MSDN sur les la manière dont le runtime localise les assemblages peut vous être utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X