Localisation d’une application .NET avec locbaml – excel – csvtransformer

illustration traduction pays et texte traduire

Votre dernière création logicielle est prête et doit être diffusée au dela de vos frontières ? Alors il est temps d’effectuer la traduction (localisation) des ressources utilisées.

Nous allons voir dans ce ticket une façon simple de le faire en utilisant des outils appropriés :

• compilateur msbuild de Visual studio
• outil gratuit Visual Locbaml

1. Préparation de l’application pour la localisation

La localisation d’une application est la gestion des éléments de programme qui dépendent d’une culture, ce qui englobe la notion de langue, mais également de représentations, comme les dates et les nombres à virgule, et égalements les images (textes dans l’image ou images adaptées au goûts d’une culture).
Le framework .NET gère la culture pour nous, et la plateforme de compilation msbuild intègre une tâche pour préparer les fichiers XAML à la traduction.
Dès que l’application est prête pour la traduction, il faut la préparer pour faire fonctionner les outils. La première étape consiste à indiquer la langue de dévelopement de l’application pour que msbuild puisse:

  • générer un assembly principal
  • générer un assembly satellite (fichier avec l’extension .resources.dll) pour contenir les resources en langue neutre de l’application

ETAPE 1: Dans le fichier .csproj de l’application, ajoutez ou éditez la ligne suivante :

<UICulture>en-US</UICulture>

Dans le fichier Properties/AssemblyInfo.cs, assurez vous de la présence de la ligne suivante (ajoutez là si nécessaire) :

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

Remplacez en-US (la langue de développement de l’application) par celle que vous avez utilisée si il ne sagit pas de en-US.

ETAPE 2: Ajouter les Uids aux fichiers XAMLs: les Uids sont utilisés pour garder la trace des changements apportés aux fichiers et pour identifier les items qui doivent être traduits. Pour ajouter les UIds aux fichiers XAML, il faut lancer la tâche updateuid de msbiuld sur le fichier du projet (depuis la ligne de commande Visual Studio) :

msbuild /t:updateuid yourproject.csproj

Remplacez yourproject par le vrai nom de votre fichier projet. Astuce: les UIds sont générés à partir des identifiants (attribut id) existants si ils existent, sinon à partir de l’attribut name si défini, sinon ils sont formés du nom du tag postfixé par un numéro. Il est toujours préférable d’avoir un identifiant clair qui renseigne sur la nature du texte qui doit être traduit plutôt qu’un nom de tag.

Il est possible de vérifier qu’il n’y a pas d’Uids manquants ou dupliqués en utilisant la tâche :

msbuild /t:checkuid yourproject.csproj

ETAPE 3: Recompilez votre projet pour générer un assembly de resources de la langue neutre. Les assembly satellites sont placés dans le répertoire de sortie de compilation (par exempe bin/debug) dans un sous-répertoire portant le nom de la culture (par exemple en-US)

2. Traduction des resources avec Visual Locbaml

Commencez par télécharger l’outil Visual Locbaml epuis le site visuallocbaml.com : visual locbaml download

Etape 1: Lancez Visual Locbaml, choisissez l’option « Create a new project ». Dans la fenêtre suivante, indiquez le chemin de sortie de compilation du projet :

visual locbaml add binaries

Les assembly satellites sont alors identifiés par l’outil et il faut indiquer l’assembly qui doit être localisé (il correspond à l’assembly principal) :

visual locbaml select assembly

Puis sélectionnez Next. L’outil scane les resources et le projet visual Locbaml est prêt pour la sauvegarde des textes à traduire et l’intégration de traductions. Pensez à sauver le projet (fichier .tsf) :

visual locbaml projet

Etape 2: Ajoutez une translation. Cliquez sur le bouton Translations puis Add language, sélectionnez le langage dans la liste déroulante :

v

puis cliquez le bouton Add. L’outil permet alors d’éditer les traductions pour ce nouveau language dans un tableau intégré. Comme nous préférons travailler dans notre tableur favori, nous utilisons l’option Export for translation (en cochant aussi au passage export already translated strings, qui permet de fabriquer un fichier CSV :

visual locbaml export

Après mise en forme, on obtient un feuille qu’il convient de renseigner :

feuille de traduction des textes

Puis d’exporter au format CSV. Petit problème: Excel ne propose pas l’export avec la virgule comme séparateur (pré-requis de Visual Locbaml)… Choisissez d’exporter au format texte UNICODE, cela produit un fichier UTF16LE (vous conserverez tous les caractères étendus) avec TAB comme séparateur. On peut alors utiliser l’outil CSVTransformer proposé sur ce site qui permet de changer le séparateur utilisé.

Téléchargez le depuis la page: Transformer les séparateurs d’un fichier CSV

on utilise alors la commande csvtransformer.exe comme dans l’exemple suivant:

 > csvtransformer.exe
CSV Transformer 1.0.2.0
(c) 2018 Franck Gaspoz http://franckgaspoz.fr

command line syntax: inputFile inputFileFormat outputFile outputFileFormat [opts]
inputFileFormat,outputFileFormat: comma | semicolon | tab | space
opts:
-q : supress all outputs except errors
-f : force add of separators

wrong number of arguments

> csvtransformer translation_fr.txt tab import\translation_fr.csv comma -f
CSV Transformer 1.0.2.0
(c) 2018 Franck Gaspoz http://franckgaspoz.fr

transform: translation_fr.txt : tab -> import\translation_fr.csv : comma
done.

> more import\translation_fr.csv

"Id","Original string","Translation"
"1","Helvetica, Arial","Helvetica, Arial"
"2","M 0 4 L 8 4 L 4 0 Z","M 0 4 L 8 4 L 4 0 Z"
"3","M 0 0 L 4 4 L 8 0 Z","M 0 0 L 4 4 L 8 0 Z"
"4","M 4 0 L 4 8 L 0 4 Z","M 4 0 L 4 8 L 0 4 Z"
"5","M 0 0 L 4 4 L 0 8 Z","M 0 0 L 4 4 L 0 8 Z"
"6","Window border","Bordure de la fenêtre"
"7","Paint border","Paint border"
"8","Always","Always"
"9","When mouse is over border","When mouse is over border"
"10","Transparent border","Transparent border"
"11","No border (no move & no resize)","No border (no move & no resize)"
"12","Currently open","Currently open"
"13","Current language: ","Current language: "
...

remarque: il convient d’utiliser l’option -f pour conserver les espaces en début et en fin de textes dans le fichier d’origine.

Le fichier obtenu est importé dans le projet Visual Locbaml via le bouton Import translation.

Etape 2: Générez l’assembly satellite pour la nouvelle langue. Cliquez sur le bouton Assemblies puis Generate satellite assemblies. Visual Locbaml fabrique alors un nouveau répertoire nommé comme le code de la nouvelle langue qui contient l’assembly satellite des traductions :

visual locbaml generate assemblies

remarque: pour modifier l’association de langue avec l’assembly satellite, il suffit de modifier le nom du répertoire. Par exemple, ici on a un répertoire fr, on peut le renommer par fr-CA pour associer la translation avec la langue Français Canada.

Les codes de culture utilisés par Microsoft sont listés sur la page: Culture Names and Identifiers (RFC 1766)

A ce state l’ajout du support d’une nouvelle langue dans votre application est effectif et les textes traduits seront utilisés lorsque la langue de l’OS correspondra à la langue des traductions ajoutées (dans ce cas le français)

Laisser un commentaire