27 octobre 2004

Comment traduire des phrases contenant des parties variables ?

Voici une méthode toute simple pour gérer intelligemment les traductions de phrases composées d'une ou plusieurs parties variables (ou dynamiques).

Exemple

Vous devez afficher le texte suivant :

«Bonjour, NOM DE L'UTILISATEUR, vous avez reçu NOMBRE DE MAILS courriels aujourd'hui.»

Méthode courante

Cette méthode consiste à diviser cette phrase en 3 parties, parties que l'on traduira séparément.

<?php

echo gettext("Bonjour, ") . $nom . gettext(", vous avez reçu ") . $nbmail . gettext("courriels aujourd'hui.");

?>

Autre Méthode

Cette méthode consiste juste à utiliser les propriétés de la fonction printf.

<?php

printf(_("Bonjour, %s, vous avez reçu %d courriels aujourd'hui."), $nom, $nbmail);

?>

Ici j'ai remplacé l'appel à la fonction gettext par son raccourci : _()

Conclusion

Pour le développeur, il me semble que le code source est plus lisible. Pour le traducteur, ça permet de traduire une phrase et non pas des mots. A mon avis, la traduction ne peut être que meilleur.

Références

Pour savoir comme utiliser gettext voici quelques liens :

Connaitre les librairies utilisées par un exécutable

Sous Linux

La commande ldd permet de donner la liste des librairies utilisées par un exécutable :

% ldd  /usr/bin/xsltproc
        linux-gate.so.1 =>  (0xffffe000)
        libxslt.so.1 => /usr/lib/libxslt.so.1 (0x4002a000)
        libexslt.so.0 => /usr/lib/libexslt.so.0 (0x4005b000)
        libgcrypt.so.11 => /usr/lib/libgcrypt.so.11 (0x4006c000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x400ba000)
        libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0x400cd000)
        libxml2.so.2 => /usr/lib/libxml2.so.2 (0x400d1000)
        libz.so.1 => /lib/libz.so.1 (0x401bc000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x401cd000)
        libm.so.6 => /lib/tls/libm.so.6 (0x401de000)
        libc.so.6 => /lib/tls/libc.so.6 (0x40202000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
% 

Pour avoir encore plus d'informations, on peut utiliser l'option -v ( ldd -v /usr/bin/xsltproc )

la commande file donne les caractéristiques de l'exécutable ( 32bit, 64 bit, Intel, Sparc, ...)

% file  /usr/bin/xsltproc
/usr/bin/xsltproc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped
%

Sous HP-UX

La commande chatr permet de connaitre la liste des librairies utilisées par un exécutable :

% chatr xsltproc
xsltproc:
         64-bit ELF executable
         shared library dynamic path search:
             LD_LIBRARY_PATH    enabled  first 
             SHLIB_PATH         enabled  second
             embedded path      enabled  third  /usr/local/stow/libxml2-2.6.9-64/lib
         shared library list:
             libxml2.sl.8
             libz.sl
             libpthread.1
             libm.2
             libc.2
         shared library binding:
             deferred
         global hash table disabled
         global hash table size 1103
         shared library mapped private disabled
         shared library segment merging disabled
         shared vtable support disabled
         explicit unloading disabled
         segments:
             index type     address      flags size
                 6 text 4000000000000000 z---c-    D (default)
                 7 data 8000000100000000 ---m--    D (default)
         executable from stack: D (default)
         static branch prediction disabled
         kernel assisted branch prediction enabled 
         lazy swap allocation for dynamic segments disabled
         nulptr references disabled
%

Comme sous Linux la commande file donne les caractéristiques d'un exécutable :

% file xsltproc
xsltproc:       ELF-64 executable object file - PA-RISC 2.0 (LP64)
%

Vous trouverez plus d'informations sur les exécutables HP-UX à cette adresse : http://devrsrc1.external.hp.com/STK/libscan.html

20 octobre 2004

Installer Mandrake Linux 10.1 sous VMware 4.5.2

Voici la procédure pour installer (ou tester) la distribution Linux MandrakeLinux 10.1, sous Windows avec VMware 4.5.2.

1. Installation de la distribution

J'ai utilisé une installation réseau en faisant pointer le lecteur de disquette de ma machine virtuelle sur le fichier network.img puis sur le fichier network_drivers.img.

Aucun problème particulier...

2. Configuration au moment de l'installation

Il faut juste éviter de choisir l'option permettant de lancer l'interface graphique au démarrage.

3. Premier démarrage

Le démarrage normal ne fonctionne pas, donc il est préférable de choisir un démarrage linux-nonfb

4. RPMs supplémentaires

Pour installer correctement les VMware Tools, il faut ajouter les rpms suivants : pciutils, kernel-source


% export ftp_proxy=http://monproxy.exemple.com:8888/ # si nécessaire
% urpmi pciutils
% urpmi kernel-source-2.6

5. Installation des VMware's tools

Dans le menu VM de la Machine Virtuelle, on choisit "Install VMware tools...".

Sous linux, en tant que root on tape ceci :


% mount -t iso9660 /dev/cdrom /mnt
% cp /mnt/vmware-linux-tools.tar.gz /tmp
% umount /dev/cdrom
% cd /tmp
% tar zxf vmware-linux-tools.tar.gz

Plus d'informations ICI

6. PATCH

Quelques modifications sont nécessaires pour faire fonctionner l'interface graphique :

Premièrement

Editer le fichier /tmp/vmware-tools-distrib/bin/vmware-config-tools.pl

Modifier la ligne :


XFree86 Version (\d+\.\d+\.?\d*)/ ? $1: '0.0.0';

Pour obtenir cette nouvelle ligne :


XFree86 Version (\d+\.\d+\.?\d*)/ ? $1: '4.3.0';

Deuxièmement

Modifier le fichier /etc/lilo.conf, pour éviter un découpage en quatre de l'écran lors d'un démarrage et pour permettre à la machine virtuelle de s'éteindre toute seule.

image=/boot/vmlinuz
        label="linux"
        root=/dev/sda1
        initrd=/boot/initrd.img
        vga=normal
        append="devfs=mount resume=/dev/sda5 acpi=on"
        read-only

Troisièmement

Il faut ajouter, dans le fichier /etc/fonts/local.conf, les lignes suivantes :

    <match target="font">
        <edit name="rgba" mode="assign"><const>rgb</const></edit>
    </match>

Ceci pour résoudre en problème de couleurs de police.

Plus d'infos ICI

7. Lancement de l'interface graphique

Aprés avoir redémmarrer, il suffit de lancer l'interface graphique à l'aide de la commande suivante :


% startx

8. Problème de lenteur du système

Voici les 2 conséquences visibles de la lenteur du système :

  • La vitesse du clavier et notamment la vitesse de répétition d'une touche est extrêmement lente.
  • L'horloge tourne (environ) 2 fois moins vite que l'horloge de windows.

En fait, le problème vient apparement du module acpi du kernel. Donc pour éviter d'avoir le problème il suffit de ne pas utiliser ce module.

Le fichier /etc/lilo.conf sera modifié comme ceci :


image=/boot/vmlinuz
        label="linux"
        root=/dev/sda1
        initrd=/boot/initrd.img
        vga=normal
        append="devfs=mount resume=/dev/sda5 acpi=off clock=pit "
        read-only

Si on souhaite utiliser quand même acpi, on peut uniquement accélerer la vitesse du clavier. Pour cela créer un fichier nommé $HOME/clavier :


#!/bin/sh

# Speed up keyboard
xset r rate 200 60

Aprés il ne reste plus qu'à exécuter ce fichier au démarrage de chaque session de X.

Si on place cette commande dans le fichier $HOME/.xinitrc ou dans le fichier /etc/X11/xinit/xinitrc ça ne fonctionne pas...

9. Synchronisation de l'horloge avec windows

Cette opération est extrêmenent simple, il suffit d'exécuter, en tant que root, l'utilitaire /usr/bin/vmware-toolbox, puis d'aller cocher la bonne case ...

10. Conclusion

C'est pas spécialement simple, mais ça fonctionne bien...

Synchroniser l’heure de son système Linux ?

Voici une procédure pour avoir toujours un système à l'heure.

1. Prérequis

Vous devez disposer des outils NTP. Pour les installer sous Linux Mandrake :


% urpmi ntp

2. Configuration

La configuration est très simple, il suffit pour cela d'éditer le fichier /etc/ntp.conf :

Pour une synchronisation avec l'horloge interne :


server 127.0.0.1
fudge 127.0.0.1 stratum 10 

Pour une synchronisation avec un serveur de temps.


server ntp1.exemple.com prefer
server ntp2.exemple.com

3. Synchronisation

Pour connaitre son décalage :


% ntptrace -vd ntp1.exemple.com

Pour se synchroniser :


% ntpdate ntp1.exemple.com

4. Automatiser

Pour avoir une correction régulière, il suffit d'ajouter
ce fichier dans le répertoire /etc/cron.hourly/:


#!/bin/sh
ntpdate ntp1.exemple.com