406 lines
21 KiB
Plaintext
406 lines
21 KiB
Plaintext
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<!-- Updated by Blorec Hervé le 2016-07-25-->
|
|
<head>
|
|
<title>JMRI: Internationalisation</title>
|
|
<meta name="author" content="Bob Jacobsen">
|
|
<meta name="keywords" content="JMRI technical code I8N internationalization">
|
|
<!--#include virtual="/help/fr/parts/Style.shtml" -->
|
|
</head>
|
|
|
|
<body>
|
|
<!--#include virtual="/help/fr/parts/Header_fr.shtml" -->
|
|
<div id="mBody">
|
|
<!--#include virtual="Sidebar.shtml" -->
|
|
<div id="mainContent">
|
|
<!-- Page Body -->
|
|
|
|
<h1>JMRI: Internationalisation</h1>
|
|
|
|
<p>
|
|
Les bibliothèques JMRI sont destinées à être utilisables dans le monde entier.
|
|
Pour ce faire, ils font usage des fonctionnalités "internationalisation"
|
|
intégrées dans le langage Java et les bibliothèques.
|
|
|
|
<h2>Utilisation des Locales</h2>
|
|
<p>
|
|
JMRI utilise les paramètres locaux par défaut pour localiser l'information d'internationalisation.
|
|
Cela signifie que JMRI présentera son interface utilisateur
|
|
dans le langage Java défini comme la valeur par défaut pour cet ordinateur.
|
|
|
|
<p>
|
|
Les locales sont spécifiées par une Langue, et éventuellement un Pays.
|
|
La langue est un code à deux lettres minuscules; le pays est une code de deux
|
|
lettre majuscules. "en" est l'anglais, "fr" est le français , "de" est l'allemand,
|
|
et "de_CH" est l'allemand parlé en Suisse.
|
|
<p>
|
|
Lorsque Java cherche des ressources ( voir <a href="#resourcebundles"></a> ), il recherche d'abord
|
|
un fichier avec la Locale complète en cours à la fin de son nom
|
|
(foo_de_CH.properties, par exemple). Si cela échoue, il tente un fichier
|
|
se terminant seulement par la localisation de la langue en cours : foo_de.properties.
|
|
Et si cela échoue, il va à la valeur par défaut sans suffixe: foo.properties.
|
|
Un mécanisme similaire est utilisé au sein des fichiers XML.<p>
|
|
En installant les fichiers appropriés et en permettant à l'utilisateur de sélectionner
|
|
la locale par défaut (dans le cadre des
|
|
<a href="../../../package/apps/TabbedPreferences.shtml#locale"> préférences avancées</a>),
|
|
nous pouvons adapter le programme aux différents pays et langues.
|
|
|
|
<a name="resourcebundles"></a><h2> Utilisation des Groupement de Ressources </h2>
|
|
Le texte pour les menus, boutons et les commandes similaires est contenu dans les
|
|
<strong>fichiers propriétés</strong>, qui sont accessibles via le mécanisme de groupement* de ressources
|
|
de java.util.
|
|
<p>
|
|
Par exemple, le fichier de propriétés qui est utilisé pour configurer le fichier
|
|
panneau contient des lignes telles que:
|
|
<code>
|
|
FieldRoadName = Nom de Route:
|
|
</code>
|
|
A la gauche du signe égal est le nom de la ressource que le programme utilise
|
|
pour se référer à la chaîne, à droite du signe égal est la
|
|
chaîne qui sera affichée.
|
|
<p>
|
|
Par convention, les noms des éléments de ressource de l'interface graphique commence par l'un des termes
|
|
<ol>
|
|
<li>Field - pour un champ visible, par exemple, libellé, sur l'interface
|
|
<li>Button - pour un bouton de l'interface
|
|
<li>Menu - le nom en haut du menu
|
|
<li>MenuItem - un élément du menu(peut être un élément imbriqué)
|
|
<li>ToolTip - contenu d'une info-bulle
|
|
<li>Error - pour un message d'erreur affiché dans le cadre de l'interface graphique
|
|
</ol>
|
|
D'autres ressources sont nommées afin de ne pas entrer en conflit avec celles-ci.
|
|
|
|
<h2>S'adapter à un nouvelle langue</h2>
|
|
Les principales étapes pour adapter JMRI à une nouvelle langue sont les suivantes:
|
|
<ol>
|
|
<li> Créer de nouvelles versions des fichier .properties pour changer la langue
|
|
des contrôles d'interface graphique.
|
|
<li>Traduire les fichiers XML pour les décodeurs, programmateurs et configuration.
|
|
<li>Traduire les fichiers d'aide et autres pages web.
|
|
</ol>
|
|
<p>
|
|
Obtenir une copie propre du code source depuis le référentiel source JMRI.
|
|
(Pour plus d'informations pour le faire , Svp voir la
|
|
<a href="getgitcode.shtml">page sur l'obtention d'une copie du code</a>.)
|
|
|
|
<h3> Traduction des Fichiers properties </h3>
|
|
Si elles n'existent pas déjà,
|
|
commencer par faire des copies des fichiers properties avec un suffixe pour votre
|
|
nouvelle langue. Sur un Mac OS X ou une machine Unix, ce sera:
|
|
<PRE>
|
|
cd java/src/apps
|
|
cp AppsBundle.properties AppsBundle_xy.properties
|
|
</PRE>
|
|
et ainsi de suite.
|
|
La meilleure façon de trouver les suffixes appropriés consiste à définir le
|
|
programme de votre Langue particulière via les
|
|
<a href="../../../package/apps/AppConfigPanel.shtml"> préférences avancées </a>,
|
|
-->Affichage --> et onglet Langue, quitter et redémarrer le programme,
|
|
et puis regarder le suffixe que le module JMRI affiche adans l'écran de démarrage/fenêtre principale ( ligne du
|
|
bas, entre les crochets après la version Java )..
|
|
Vous pouvez également consulter la
|
|
<a href="http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt">liste officielle des langues </a>
|
|
(première partie du suffixe) et
|
|
<a href="http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm">liste
|
|
des pays/régions</a>
|
|
(deuxième partie optionnelle du suffixe).
|
|
<p>
|
|
Vous pouvez ensuite modifier les fichiers dans une langue spécifique pour saisir du texte dans dans votre propre langue.
|
|
<p>
|
|
Les lignes dans le fichier qui contiennent quelque chose comme <code>$Release: $;</code>
|
|
sont des vestiges des vieux systèmes de contrôle de version; elles peuvent être ignorées ou effacées.
|
|
<p>
|
|
Ils y a plusieurs fichiers .properties* qui sont utilisés qui sont utilisés pour des contrôles internes,
|
|
et ne doivent pas être traduit. Ils sont marqués par un commentaire en haut
|
|
du fichier. Les exemples sont les fichiers <code>apps/AppsStructureBundle.properties</code>
|
|
<code>jmri/web/server/Services.properties</code> et <code>jmri/web/server/FilePaths.properties</code>.
|
|
|
|
<h3>Traduction des Fichiers XML</h3>
|
|
<p>Le dossier <code>xml/config/parts/jmri/</code> contient des chaines de texte supplémentaires pour
|
|
traduire pour les programmeurs etc. Juste comme dans <a href="#xml">fichier décodeur XML</a>,
|
|
les chaines traduites sont insérées comme des éléments
|
|
<code><name xml:lang="da">Votre Traduction</name></code> dans chaque nœud.
|
|
Nous fournissons une <a href="XmlEditors.shtml">liste d'éditeurs</a> pour travailler efficacement
|
|
sur ces fichiers</p>
|
|
|
|
<h3> vérifier votre travail</h3>
|
|
<ol>
|
|
<li> Reconstruire votre copie du programme.
|
|
<li> Lancez le programme et sélectionnez "Préférences" dans le menu Edition
|
|
<li> Cliquez sur la case "Montrer Préférences Avancées"
|
|
<li> Choisissez votre langue dans la zone "Locale" de la liste déroulante,
|
|
<li> Cliquez sur "Enregistrer", quitter et redémarrer
|
|
<li> Vous devez immédiatement voir les articles que vous avez traduit.
|
|
</ol>
|
|
<p>
|
|
S'il ya un problème à ce stade, vérifier pour voir quel est le langage
|
|
figurant sur l'écran de démarrage de l'application.
|
|
Montre-t-il le même suffixe (par exemple _fr ou _cs_CZ) que celui donné
|
|
donné à vos fichiers? Le suffixe que le programme utilise est déterminé
|
|
par la locale sélectionné dans les préférences ci-dessus.
|
|
<p>
|
|
Pour rendre votre travail disponible aux autres utilisateurs JMRI, s'il vous plaît
|
|
partager avec nous. Pour ce faire:
|
|
<ul>
|
|
<li> faire un fichier patch contenant vos modifications.
|
|
Sur MacOS X ou Linux, cela se fait avec la commande
|
|
<code>
|
|
svn diff java/src> patch.txt
|
|
</code>
|
|
et les utilisateurs de Windows peuvent faire la même chose avec leur application SVN.
|
|
<li> Téléchargez ce fichier sur le tracker "Patches" sur sourceforge: <br>
|
|
<a href="http://sourceforge.net/tracker/?group_id=26788&atid=388315">http://sourceforge.net/tracker/?group_id=26788&atid=388315</a>.<br>
|
|
Sur cette page:
|
|
<ul>
|
|
<!-- needs retranslation -->
|
|
<li>Cliquez sur "New issue" sur le côté gauche
|
|
<li>Remplissez le "Title" et le "Comment" sur la
|
|
nouvelle page qui apparaît (vous pouvez Lead Etat, propriétaire, le type et la priorité qu'ils ont),
|
|
<li>Cliquez sur le boite "I would like to add an attachment" (je voudrais ajouter une pièce jointe)
|
|
proximité du bas,
|
|
<li>Puis sélectionnez votre fichier patch en utilisant le bouton "Choisir le fichier".
|
|
<li>Cliquez sur "Enregistrer" pour télécharger le fichier et informer les gens que vous avez fait cela.
|
|
</ul></li>
|
|
</ul>
|
|
|
|
En utilisant cet outil de suivi et en fournissant le fichier patch, il est facile pour nous de fusionner vos nouveaux fichiers et/ou fichiers modifiés dans le reférentiel du code. Si quelque chose va mal, s'il vous plaît n'hésitez pas à
|
|
demander de l'aide à cet égard.
|
|
|
|
<a id="xml"></a>><h3>Traduction Fichiers XML</h3>
|
|
Les fichiers XML peuvent également être internationalisés. Il y a des exemples dans le répertoire des définitions de décodeurs
|
|
. Regardez les éléments avec un attribut xml: lang = "fr"
|
|
attribut. Fondamentalement, vous créez des éléments supplémentaires à cet attribut pour
|
|
spécifier la langue utilisée:
|
|
<div class="wide">
|
|
<pre>
|
|
<variable label="Vmid" CV="6" default="22" item="Vmid">
|
|
<decVal max="64"/>
|
|
<label> Vmid </label>
|
|
<label xml:lang="fr"> Vmoy </label>
|
|
</variables>
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Dans les fichiers XML, les attributs de "l'élément" doivent rester non traduit, comme le
|
|
fait la totalité du fichier xml/names.xml.
|
|
|
|
<a id="help"></a><h3> Traduire les fichiers d'aide </h3>
|
|
(Cela n'a été fait qu'une fois, aussi ces instructions peuvent ne pas être complètes)
|
|
<p>
|
|
Les fichiers d'aide en anglais se trouvent dans le répertoire help/en.
|
|
Si vous voulez créer un ensemble complet de fichiers:
|
|
<ul>
|
|
<li> Créez une copie des fichiers existants depuis le répertoire help/en
|
|
dans une nouveau répertoire d'help/LL, où LL est la langue
|
|
code de votre langue, par exemple help/fr. (S'il vous plaît soyez prudent pour faire
|
|
ceci dans SVN, et demandez à un développeur de l'aide si nécessaire)</li>
|
|
<li> Renommer le fichier help/fr/JmriHelp_en.hs que vous venez de créer pour help/fr/JmriHelp_fr.hs</li>
|
|
<li> Modifier l'help/fr/format.xsl pour créer un<code> <html lang="fr"> </code>.</li>
|
|
<li> Traduire les fichiers .shtml ci-dessous dans le répertoire help/fr. Ne traduire aucun
|
|
fichiers .xml, .JHM ou le web*.shtml dans le répertoire racine, car ils
|
|
sont produit automatiquement.</li>
|
|
</ul>
|
|
|
|
<a name="dev"></a><h2>Internationalisation pour les Développeurs</h2>
|
|
|
|
Pour que l'internationalisation fonctionne, vous devez faire quelques choses dans le code que
|
|
vous écrivez. Quelques références Web sur la façon de le faire:
|
|
<ul>
|
|
<li> <a href="http://java.sun.com/docs/books/tutorial/i18n/index.html">tutoriel Sun internationalisation
|
|
</a>(fortement recommandé)</li>
|
|
<li> <a href="http://java.sun.com/j2se/1.3/docs/guide/intl/faq.html">page principale Java Internationalisation</a></li>
|
|
</ul>
|
|
<strong>Note: Ce sont 6 liens Java. Il y a des fonctionnalités avancées utiles dans
|
|
<a href="http://docs.oracle.com/javase/7/docs/technotes/guides/intl/enhancements.7.html">Java 7</a> et
|
|
<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/enhancements.8.html">Java 8</a>.</strong>
|
|
<p>
|
|
JMRI se dirige vers un ensemble de conventions sur la façon de structurer et
|
|
utiliser la grande quantité d'informations I18N nécessaire.
|
|
Vous pourrez toujours trouver le code avec des approches plus anciennes, mais vous
|
|
devrez écrire un nouveau code à l'aide des nouvelles conventions décrites ci-dessous
|
|
|
|
<p>
|
|
Les groupements des ressources JMRI sont organisées dans un arbre hiérarchisé.
|
|
Par exemple, le code dans le paquet <code>jmri.jmrit.display</code>
|
|
peut trouver une ressource dans un groupement dans le paquet <code>jmri.jmrit.display</code>, le paquet
|
|
<code>jmri.jmrit</code>
|
|
ou enfin le paquet <code>jmri</code>. Comme un cas particulier dans ce domaine, le paquet <code>apps*</code> est
|
|
considéré comme étant en dessous du paquet <code>jmri</code> lui-même, de sorte que le code dans
|
|
l'arborescence des <code>apps*</code>
|
|
peut aussi référencer le paquet <code>jmri</code>.
|
|
<p>
|
|
Les références croisées-paquet, par exemple entre <code>jmri.jmrit</code> et <code>jmri.jmrix</code>, sont découragées
|
|
et celles qui existent sont supprimées.
|
|
<p>
|
|
L'accès se fait via une classe groupement locale pour chaque paquet. Une caractéristique est une
|
|
<code><a href="https://jmri.org/JavaDoc/doc/jmri/jmrit/Bundle.html">jmri.jmrit.Bundle</a></code>.
|
|
Il propose deux méthodes clés á utiliser pour accéder (traduit) à la chaine ressource:<br>
|
|
<div class="wide">
|
|
<pre>
|
|
static String <b>getMessage</b>(String key)
|
|
static String <b>getMessage</b>(String key, Object ... subs)
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
La première offre un accès direct à une chaîne via<br>
|
|
<code>String msg = Bundle.getMessage("Titre")</code>
|
|
<p>
|
|
La seconde permet d'insérer des informations spécifiques dans un message du genre
|
|
<br> <code>Nom Système LT1 est déjà utilisé</code>
|
|
<p>
|
|
Ici "LT1" ne peut pas être dans le fichier .properties, car il n'est connu seulement que
|
|
lorsque le programme est exécuté. Différentes langues
|
|
peuvent mettre cette partie du message dans différents endroits, et accepter que
|
|
se soit important.
|
|
Cela a abouti à mettre un espace réservé dans la définition du message:
|
|
<div class="wide">
|
|
<pre>
|
|
Error123 = Nom système {0} est déjà en cours d'utilisation
|
|
</pre>
|
|
</div>
|
|
(Vous pouvez avoir plus d'une insertion, appelée <code>{1}</code>, <code>{2}</code>, etc)
|
|
<p>
|
|
Ensuite, formater le message final en insérant le contenu en elle:<br>
|
|
<code>String msg = Bundle.getMessage("Erreur123", badname);</code>
|
|
|
|
<p>
|
|
Le premier argument est la clé du message
|
|
suivie par une ou plusieurs chaînes de caractères à insérer dans le message.
|
|
(C'est mieux que de
|
|
créer votre propre chaîne de sortie en utilisant par exemple String.format () car elle permet
|
|
aux termes insérés d'apparaître dans des ordres différents dans différentes langues.)
|
|
<p>
|
|
Différentes langues peuvent avoir besoin d'un nombre différent de lignes pour exprimer
|
|
un message, ou peut-être besoin de le casser avant ou après qu'une valeur particulière
|
|
ait été insérée. Il est donc préférable d'utiliser "\n" dans un
|
|
un message unique pour créer des sauts de ligne, plutôt
|
|
que de fournir plusieurs lignes dans le code lui-même.
|
|
<p>
|
|
Certaines parties de JMRI restent en Anglais en raison de notre population de développeurs.
|
|
En particulier, des commentaires et des noms de variables dans le code doivent rester en
|
|
Anglais, comme les messages envoyés sur le système de rapport.
|
|
Dans le code Java, ces chaînes peuvent être marqués avec un commentaire "<code>// NOI18N</code>"
|
|
ajouté à la fin de la ligne. Si nécessaire, mettre ceci après un autre commentaire:
|
|
<div class="wide">
|
|
<code>firePropertyChange("size", oldSize, newSize); // promptly! // NOI18N</code>
|
|
</div>
|
|
|
|
<h4> Ajout d'un nouveau Bundle*</h4>
|
|
|
|
<p>Si votre paquet ne possède pas déjà une classe Bundle*, vous pouvez l'ajouter par:</p>
|
|
<ul>
|
|
<li>Copiez la classe Bundle <code>java/src/jmri/jmrit/Bundle.java</code> dans votre paquet comme:
|
|
<code>java/src/jmri/mypackage/Bundle.java</code></li>
|
|
<li>Modifier ce nouveau fichier dans trois endroits:
|
|
<ol>
|
|
<li>La déclaration "package" en haut devrait inscrire votre paquet
|
|
<li>La "class ... extends "devrait se référer à la classe Bundle directement au-dessus de votre paquet
|
|
<li>L'affectation de la variable "name" doit être le nom de votre bundle locale, par convention "jmri/mypackage.Bundle".
|
|
</ol></li>
|
|
<li>Créer un nouveau fichier <code>Bundle.properties</code> dans votre répertoire package
|
|
pour contenir vos propriétés de chaînes de caractères.</li>
|
|
<li>Idéalement, vous allez ajouter une copie de <code>java/test/jmri/jmrit/BundleTest.java</code> à votre
|
|
Répertoire de test JUnit pour vérifier que vos chaînes fonctionnent:
|
|
<br> Copiez <code>java/test/jmri/jmrit/BundleTest.java</code> dans <code>java/test/jmri/mypackage/BundleTest.java</code>
|
|
suivie de la modification de la déclaration de votre paquet dans ce fichier pour pointer vers votre
|
|
paquet, en ajoutant un peu de vos chaînes pour les tests (y compris ceux que vous
|
|
référencez à partir des bundles parents, le cas échéant), et incluant une référence
|
|
dans votre classe PackageTest.</li>
|
|
</ul>
|
|
|
|
<h4>Ancien code</h4>
|
|
|
|
L'ancien code référence directement les Bundles:
|
|
<div class="wide">
|
|
<pre><code>
|
|
java.util.ResourceBundle.getBundle ("jmri.jmrit.beantable.LogixTableBundle");
|
|
</code></pre>
|
|
</div>
|
|
|
|
<p>
|
|
L'argument getBundle est le nom du paquet complet (non pas le fichier)
|
|
pour le fichier propriété de cette classe qui sera utilisé. Vous pouvez avoir à
|
|
référencer plus d'un de ces objets si vous voulez regarder les
|
|
chaînes dans plus d'un fichier properties.
|
|
|
|
<p>
|
|
Vous pouvez ensuite récupérer des chaînes particulières comme ceci:
|
|
<pre> <code>
|
|
java.util.ResourceBundle.getBundle ("jmri.jmrit.beantable.LogixTableBundle") getString ("ButtonNew").;
|
|
</code> </pre>
|
|
<p>
|
|
Nous vous recommandons de ne définir qu'une variable de classe statique pour maintenir la
|
|
référence à l'objet Bundle, cela finit par consommer beaucoup
|
|
de mémoire permanente dans un programme de la taille de JMRI. Allez-y et
|
|
appeler le <code>getBundle ()</code> à chaque fois, c'est rapide, car il fonctionne à travers
|
|
un cache faiblement référencé et nettoyeur de la mémoire.
|
|
|
|
<a name="xml-dev" id="xml-dev"></a>
|
|
<h3>Accès XML</h3>
|
|
Deuxièmement, vous devez récupérer correctement des éléments et attributs XML .
|
|
Le jmri.util.jdom.LocaleSelector fournit une méthode getAttribute (...)
|
|
qui remplace l'élément de getAttribute JDOM lorsque le contenu de l'
|
|
attribut aurait pu être internationalisé. Vous pouvez l'utiliser comme ceci:
|
|
|
|
<code>String choice = LocaleSelector.getAttribute (choiceElement, "choice")</code>
|
|
où "choiceElement" est un objet Element JDOM contenant un (Traduction possible)
|
|
attribut "choix". "Null" sera retourné si rien n'est trouvé.
|
|
|
|
<a name="numbers" id="numbers"></a>
|
|
<h3>Nombres</h3>
|
|
<p>Les nombres "10*10*10+2+3/10" est écrit dedifférentes manières en des emplacements
|
|
différents:
|
|
"1002,3",
|
|
"1,002.3",
|
|
"1.002,3" et peut-être d'autres choses.
|
|
<p>
|
|
JMRI fournit un utilitaire utile pour manipuler ceux-ci sur l'entrée:</p>
|
|
<div class="wide"><pre>
|
|
double d = jmri.util.IntlUtilities.doubleValue("1,002.3");
|
|
float f = jmri.util.IntlUtilities.floatValue("1,002.3");
|
|
</pre>
|
|
</div>
|
|
<p>Notez que cela peut lancer une <code>java.text.ParseException</code>, si l'entrée est non
|
|
analysable.</p>
|
|
|
|
<a name="testing" id="testing"></a>
|
|
<h3>Test</h3>
|
|
|
|
Vous devez vérifier que vous avez correctement internationalisé
|
|
votre code. Nous fournissons un outil pour le faire ce qui crée
|
|
et traduit automatiquement la version de vos fichiers properties,
|
|
suivant les idées de Harry Robinson et Arne Thormodsen.
|
|
(Leur
|
|
<a href="https://www.mistakeproofing.com/software.html">papier sur ceci</a> est une lecture recommandée!)
|
|
Pour l'utiliser:
|
|
<ul>
|
|
<li> Assurez-vous que votre code se compile et se construit bien dans votre <a href="index.shtml#buildyourcopy">IDE</a>. Nous modifierons
|
|
la version compilée.
|
|
<li> Exécuter le script "translate.sh" dans votre répertoire de construction java/. Cela crée de nouveaux fichiers
|
|
properties, temporaires dans l'arbre répertoire classes/. Vous devrez refaire ceci
|
|
chaque fois que l'arbre classes/ est enlevé par exemple par "ant clean" ou une construction <a
|
|
href="index.shtml#buildyourcopy">IDE</a>.
|
|
<li>Effacez le fichier Preferences, ou modifiez le pour enlever la ligne de définition GUI.
|
|
<li> Exécutez DecoderPro via "Ant locale", qui démarre le programme DecoderPro
|
|
en utilisant les nouveaux fichiers de propriétés.
|
|
</ul>
|
|
|
|
<p>Si tout va bien, tout le texte du message aura été traduit en MAJUSCULES.
|
|
Tout ce que vous avez écrit et qui reste en minuscules n'a pas été complètement internationalisé.
|
|
</p>
|
|
<p>
|
|
*Apps = Application<br>
|
|
*Bundle = Groupement<br>
|
|
*Properties = Propriétés<br>
|
|
*GUI = Interface Graphique Utilisateur
|
|
</p>
|
|
|
|
<!--#include virtual="/help/fr/parts/Footer_fr.shtml" -->
|
|
</div><!-- closes #mainContent-->
|
|
</div> <!-- closes #mBody-->
|
|
<script src="/js/help.js"></script>
|
|
</body>
|
|
</html>
|