msgcat Commandes Internes Tcl
NOM
msgcat - catalogue de messages Tcl
SYNTAXE
::msgcat::mc src-string
::msgcat::mclocale ?newLocale?
::msgcat::mcpreferences
::msgcat::mcload dirname
::msgcat::mcset locale src-string ?translate-string?
::msgcat::mcunknown locale src-string
DESCRIPTION
Le package msgcat fournit un ensemble de fonctions qui peuvent être utilisées pour gérer des interfaces utilisateur multi-linguales. Les chaînes de texte sont définies dans un "catalogue de messages" qui est indépendant de l'application, et qui peut être edité ou localisé sans modifier le code source de l'application. Les nouvelles langues ou locales sont fournies en ajoutant un nouveau fichier au catalogue de messages.
L'usage du catalogue de messages est optionnel pour quelconque application ou package, mais est encouragé si l'application ou package souhaite être prêt pour les applications multi-langues.
COMMANDES
- ::msgcat::mc src-string ?arg arg ...?
- Renvoie une traduction de src-string en accord avec la locale de l'utilisateur courant. Si des arguments supplémentaire après src-string sont donnés, la commande format est utilisée pour substituer les arguments supplémentaires dans la traduction de src-string ::msgcat::mc recherchera les messages définis dans le namespace courant pour une traduction de src-string; si aucun n'est trouvé, il recherchera dans le parent du namespace courant, et ainsi de suite jusqu'a ce qu'il atteigne le namespace global. Si aucune chaîne de traduction n'existe, ::msgcat::mcunknown est appelé et la chaîne renvoyée par ::msgcat::mcunknown est renvoyée.
::msgcat::mc est la fonction principale utilisée pour localiser une application. Au lieu d'utiliser une chaîne Anglaise directement, une application peut passer la chaîne Anglaise au travers de ::msgcat::mc et utiliser le résultat. Si une application est écrite pour une seule langue de cette façon, il est facile d'ajouter un support pour des langues supplémentaires plus tard simplement en définissant une nouvelle entrée de catalogue de messages.
::msgcat::mclocale ?newLocale?
- Cette fonction fixe locale à newLocale Si newLocale est omise, la locale courante est renvoyée, autrement la locale courante est fixée à newLocale. La locale initiale est par défaut la locale spécifiée dans l'environnement utilisateur. Voir SPECIFICATIONS LOCALE ET SUBLOCALE ci-dessous pour une description du format chaîne locale.
::msgcat::mcpreferences
- Renvoie une liste ordonnée des locales preférées des utilisateurs, basée sur la spécification de langue de l'utilisateur. La liste est ordonnée de la preference la plus spécifique à la moins spécifique. Si l'utilisateur a spécifié LANG=en_US_funky, cette fonction retournera {en_US_funky en_US en}.
::msgcat::mcload dirname
- Recherche dans le répertoire spécifié les fichiers qui correspondent au spécifications de langue renvoyées par ::msgcat::mcpreferences. Chaque fichier trouvé est "sourcé". L'extension de fichier est ".msg". Le nombre de fichiers message qui satisfont la spécification et ont été chargés est renvoyé.
::msgcat::mcset locale src-string ?translate-string?
- Fixe la traduction de src-string en translate-string dans la locale spécifiée Si translate-string n'est pas spécifiée, src-string est utilisé pour les deux La fonction retourne translate-string.
::msgcat::mcunknown locale src-string
- Cette routine est appelée par ::msgcat::mc dans le cas où une traduction de src-string n'est pas définie dans la locale courante L'action par défaut est de renvoyer src-string Cette fonction peut être redéfinie par les applications, par exemple pour mettre dans un journal de message d'erreurs chaque chaîne inconnue. La fonction::msgcat::mcunknown est appelée dans le même contexte de pile que l'appel de ::msgcat::mc La valeur de retour de ::msgcat::mcunknown est utilisée comme la valeur de retour de l'appel de ::msgcat::mc.
SPECIFICATIONS LOCALE ET SUBLOCALE
La locale est spécifiée par une chaîne locale. La chaîne locale consiste en un code de langue, un code optionnel de pays, et un code optionnel spécifique au système, chacun séparés par "_". Les codes de pays et de langue sont spécifié dans les standards ISO-639 et ISO-3166. Par exemple, la locale "en" spécifie Anglais et "en_US" spécifie Anglais U.S..
La locale prend la valeur par défaut de env(LANG) à l'instant où le package msgcat est chargé. Si env(LANG) n'est pas défini, alors la locale prend la valeur par défaut de "C".
Quand une locale est spécifiée par les utilisateurs, une recherche "meilleure correspondance" est effectuée pendant la traduction de la chaîne Par exemple, si un utilisateur spécifie en_UK_Funky, les locales "en_UK_Funky", "en_UK", et "en" sont recherchées dans l'ordre jusqu'a ce qu'une chaîne de traduction correspondante soit trouvée Si aucune chaîne traduction n'est disponible, alors ::msgcat::unknown est appelé
NAMESPACES ET CATALOGUES DE MESSAGES
Les chaînes stockées dans le catalogue de messages sont stockées relativement au namespace auquel elles ont été ajoutées. Ceci permet à de multiple packages d'utiliser les même chaînes sans craindre de collisions avec d'autre packages. Cela permet aussi à la chaîne source d'être plus courte et moins sujette aux fautes de frappes.
Par exemple, l'exécution du code
mcset en hello "hello from ::"
namespace eval foo {mcset en hello "hello from ::foo"}
puts [mc hello]
namespace eval foo {puts [mc hello]}
affichera
hello from ::
hello from ::foo
Quand il cherche la traduction d'un message, le catalogue de messages recherchera en premier dans le namespace courant, ensuite le parent du namespace courant, et ainsi de suite jusqu'a ce que le namespace global soit atteint Ceci permet aux namespaces enfants d'hériter les messages de leurs namespace parents.
Par exemple, l'exécution du code
mcset en m1 ":: message1"
mcset en m2 ":: message2"
mcset en m3 ":: message3"
namespace eval ::foo {
mcset en m2 "::foo message2"
mcset en m3 "::foo message3"
}
namespace eval ::foo::bar {
mcset en m3 "::foo::bar message3"
}
puts "[mc m1]; [mc m2]; [mc m3]"
namespace eval ::foo {puts "[mc m1]; [mc m2]; [mc m3]"}
namespace eval ::foo::bar {puts "[mc m1]; [mc m2]; [mc m3]"}
affichera
:: message1; :: message2; :: message3
:: message1; ::foo message2; ::foo message3
:: message1; ::foo message2; ::foo::bar message3
EMPLACEMENT ET FORMAT DES FICHIERS DE MESSAGE
Les fichiers message peuvent être situés dans n'importe quel répertoire, soumis aux conditions suivantes:
[1] Tous les fichiers message d'un package sont dans le même répertoire.
[2] Le nom de chemin du message est un spécificateur de locale suivi par ".msg" Par exemple:
es.msg -- spanish
en_UK.msg -- UK English
[3] Le fichier contient une series d'appels à mcset, qui fixent les chaînes de traduction nécessaires pour la langue. Par exemple:
::msgcat::mcset es "Free Beer!" "Cerveza Gracias!"
PARAMETRAGE DES MESSAGES DANS LES PACKAGES
Si un package est installé dans un sous répertoire de tcl_pkgPath et chargé via package require, les procédures suivantes sont recommandées.
[1] Durant l'installation du package, créer un sous répertoire msgs sous votre répertoire de package.
[2] Copiez vos fichiers *.msg dans ce répertoire.
[3] Ajoutez les commandes suivantes à votre script d'initialisation de package:
# charge les fichiers de langue, stockés dans le sous répertoire msgs
::msgcat::mcload [file join [file dirname [info script]] msgs]
CODES DE POSITION POUR LES COMMANDES FORMAT ET SCAN
Il est possible qu'un message chaîne utilisé comme argument à
format ait des paramètres dépendants de la position qui auraient besoin d'être repositionnés. Par exemple, il pourra être syntaxiquement désirable de réarranger la structure de cette phrase à la traduction.
format "Nous produisons %d unités sur le site %s" $num $city
format "Sur le site %s nous produisons %d unités" $city $num
Ceci peut être géré en utilisant les paramètres positionels:
format " Nous produisons %1\$d unités sur le site %2\$s" $num $city
format " Sur le site %2\$s nous produisons %1\$d unités" $num $city
De même, les paramètres positionels peuvent être utilisés avec
scan pour extraire des valeurs à partir de chaînes internationalisées
CREDITS
Le code du catalogue de messages a été developpé par Mark Harrison
VOIR EGALEMENT
Dernière révision: 8.1