2009-12-12 5 views
6

Je travaille sur la localisation d'une application que j'ai écrite en C#..NET Globalization & DLL Satellite

Tout semble fonctionner bien, en utilisant des ensembles de ressources par satellite pour traduire les chaînes de chaque formulaire (selon ce tutoriel: http://msdn.microsoft.com/en-us/library/y99d1cd3%28VS.71%29.aspx)

Cependant, l'application sera finalement besoin d'un certain nombre de langues, ce qui signifie des charges de répertoires dans mon répertoire de travail (ie/zh-tw,/zh-cn,/fr-FR,/ja-JP, etc.). Je voudrais le nettoyer un peu en les localisant tous dans un sous-répertoire/languages ​​ou/resources (en d'autres termes, définir le "chemin de base pour les assemblages satellites"). Mais j'ai cherché haut et bas, et été incapable de trouver un moyen de personnaliser l'emplacement de ces assemblées satellites.

Des astuces seraient grandement appréciées!

Répondre

11

a trouvé une solution encore plus facile - en app.config:

<configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <probing privatePath=".;Lang" /> 
    </assemblyBinding> 
</runtime> 
</configuration> 

Ensuite, vous pouvez simplement lancer tous ces dirs dans le subdir « Lang » et ça va marcher dès la sortie de la boîte! Un événement post-construction est également très pratique pour les auto-copie là-bas après la compilation :)

1

à mon humble avis, je ne changerais rien ici. Il existe un mécanisme standard de localisation dans .NET, basé sur les DLL satellites et ces sous-répertoires. Si vous utilisez un outil pour la localisation, par exemple. Passolo, il va également soutenir exactement cette structure et rien d'autre.

Il y aura beaucoup de sous-répertoires ... et alors? Tout le reste sera assez compliqué.

0

Ajouter tous vos fichiers de ressources (* .resx) vers/dossier ressources et créer l'objet de ResourceManager comme ci-dessous

System.Resources.ResourceManager rm = new System.Resources.ResourceManager ("ApplicationName.Resources.MyResource", Assembly.GetExecutingAssembly());

Ici dire pour lang de-DE votre fichier resx sera nommé comme MyResource.de-DE.resx