2008-11-20 9 views
1

Je travaille sur une application localisée que je développe dans SharpDevelop. Sur la base d'un tutorial je suis tombé sur une erreur:Localisation avec SharpDevelop

Could not find any resources appropriate for the specified culture (or the neutral culture) on disk. baseName:

J'ai créé le fichier à l'aide du projet ressource | Ajouter | Nouvel élément respectif "Fichier de ressources vide" (je n'ai pas pu trouver "Fichier de ressources d'assemblage"). En outre, j'ai défini "Action de construction" sur "EmbeddedResource".

Dans le programme que j'ai une classe qui effectue les opérations suivantes

// 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 version .NET 2.0.50727.3053

Même après avoir attentivement les commentaires et googler pendant un long moment , Je ne pouvais pas trouver un exemple ou une 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!

Répondre

1

CreateFileBasedResourceManager traitera uniquement les fichiers .resources binaires (pas les fichiers .resx).

Si vous insistez pour charger des ressources depuis un fichier externe plutôt que d'incorporer les ressources dans l'assembly, vous devrez exécuter l'utilitaire de ligne de commande resgen pour générer un fichier .resources. Donc, si vous ne l'avez pas fait, créez-en un pour chaque culture prise en charge.

Sinon, cela semble OK.

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

Si vous voulez aussi veulent une classe fortement typé généré en prenant soin de tout le travail sale, mis l'outil personnalisé sur le fichier de base uniquement (celui invariant) à ResXFileCodeGenerator, ou PublicResXFileCodeGenerator si vous avez besoin que (bon lors de la création d'assemblages satellites).

Ensuite, vous n'avez pas besoin de charger vous-même les ressources localisées. La classe générée fait tout cela 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 vous appelez simplement cette propriété, elle est très propre et de loin la plus simple.

À moins qu'il n'y ait des raisons spéciales pour charger des ressources à partir de fichiers .resources, je recommanderais toujours de les intégrer dans l'assemblage (an).