Journal Internationaliser un site web XML+XSLT utilisant un peu de PHP

Posté par  (site web personnel) .
Étiquettes : aucune
0
20
juil.
2004
Salut,

Je voulais savoir s'il existe une solution simple existe pour internationaliser un site web basé sur XML passant par une moulinette XSLT (le Sablotron de PHP en l'occurance). Mon problème n'est pas trop au niveau du contenu XML (j'utilse un fichier différent pour chaque langue, un peu redondant, mais très souple). Le problème est pour internationaliser un "script" XSLT (qui quelques phrases/mots). En attendant mieux, j'ai trouvé :


<?xml version="1.0" encoding="iso-8859-1" ?>



Fichiers
...


...




Par contre, c'est *super* lourd à utiliser dans le moteur XSLT :

<xsl:call-template name="localise">
<xsl:with-param name="english">Files</xsl:with-param>
</xsl:call-template>


Exemple pratique de texte utilisé dans un "script" XSLT. J'ai un fichier XML contenant une liste de fichiers (avec lien, titre, taille, descriptif, etc.). La feuille XSLT va générer un tableau contenant en entête "Nom | Lien | Description" : le problème est de traduire ces trois mots ...

Autre idée que j'ai eu : écrire l'entête dans le fichier "download.xml".

Documents :
- Dictionnaire : http://www.wormux.org/xml/dictionary.xml(...)
- Script XSLT : http://www.wormux.org/xsl/l10n.xsl(...)

@+ Haypo
  • # Linux Mag ?

    Posté par  (site web personnel) . Évalué à 3.

    Si tu as la possibilité de récupérer autour de toi le Linux Magazine n°51, il y a des infos sur l'internationalisation d'un site en XML/XSLT... Je ne connais pas trop le domaine alors je laisse d'autres âmes charitables te guider... en tout cas, bonne progression à wormux !
  • # une DTD entité par langue

    Posté par  . Évalué à 2.

    p.e. qu'en faisant comme pour XUL avec une DTD par langue ou tu définit des entité

    dans le EN-en.dtd :
    <!ENTITY gui.file "File">


    dans le Fr-fr.dtd
    <!ENTITY gui.file "Fichier">

    et dans ton fichier XSLT tu importa DTD que tu veux bien (<!DOCTYPE ...> et tu utilise l'entité : &gui.file; pour le texte ...


    Dam
    • [^] # Re: une DTD entité par langue

      Posté par  (site web personnel) . Évalué à 1.

      Ouais, pas mal comme idée. Il faut alors que je fasse un XSLT par langue (avec tous les includes qui vont bien dedans), car :


      <xsl:choose>
      <xsl:when test="$lang='fr'">
      <xsl:include ... />
      </xsl:when>
      </xsl:choose>


      est interdit en XSLT 1.0 (pas de xsl:include dans un test). Ceci est bien dommage. J'espère que ce sera ajouté dans XSLT 2.0. Et les expressions régulières ? Voir EXSLT en attendant, je crois bien que EXSLT va être intégré à XSLT 2.0 (super !) ... A vérifier.

      Haypo
  • # xml:lang

    Posté par  (site web personnel) . Évalué à 1.

    Tes mots Nom | Lien | Description, tu les mets dans un fichier externe.


    <name xml:lang="en">Name
    <name xml:lang="fr">Nom
    ...

    et avec la variable $lang du affiche ce que tu veux.

    <xsl:value-of select="document('words.xml')/words/name[lang($lang)]" />

    En pensant bien ton fichier de mots, c'est aussi gérable que tes plusieurs fichiers texte bien que tu puisses aussi faire plusieurs fichiers words type : words_en.xml, words_fr.xml et mettre là la variable plutôt que dans le xml:lang, à toi de voir.
    • [^] # Re: xml:lang

      Posté par  (site web personnel) . Évalué à 2.

      c'est pas encore ça le xml ici avec moi :D
      <words>
       <name xml:lang="en">Name</name>
       <name xml:lang="fr">Nom</name>
       ...
      • [^] # Re: xml:lang

        Posté par  (site web personnel) . Évalué à 1.

        C'est la solution que j'utilise actuellement. J'utilise une fonction pour utiliser un test "si le mot n'existe pas dans la langue demandée, prend la version anglaise".

        Le site est traduit en français, anglais, espagnol et allemand ... or je ne connais que très mal ces deux dernières. Je ne vais pas attendre nos deux traducteurs pour ajouter un pauvre mot au dictionnaire ...

        Et puis à terme, j'aimerai bien rendre cette fonction encore plus souple : casse de la première lettre (files -> fichiers, Files -> Fichiers ;-)), gestion des pluriels (pas du tout trivial, je ne pense pas le faire finalement), etc.

        @+ Haypo
  • # Pistes

    Posté par  (site web personnel) . Évalué à 1.

    Je pense qu'il faut déporter le choix de la langue utilisateur au niveau de l'application.

    Soit l'application possède une table de correspondance langue-feuille de style XSLT, soit la feuille de style maître inclues une feuille XSLT générée à la volée par l'application.

    La première solution impose d'écrire autant de feuilles de style XSLT maître que de langues supportée, la deuxième suppose que tu es dans une application web.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.