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

format(n), scan(n), namespace(n), package(n)

Dernière révision: 8.1


Index  Précédent  Suivant