GetText

La traduction d’une application est un vrais problème car il faut une méthode qui rajoute peu de travail au développeur et qui permettent une traduction facile.

On peut bien sur bricoler un système personelle pour gérer ce problème mais il faudra aussi dévelloper les outils annexe permettant de maintenir à jours les différentes traduction

GetText est un outils très utilisé dans le monde de l’open source et disponible pour de nombreux languages. Il est très discret à utiliser puisqu’il suffit de remplacer:

echo "Hello World";

par

echo _("Hello World");

La chaine hello world sera ensuite extraite automatiquement de votre code source par les outils de gettext. Les développeurs n’ont donc pas à se soucier de maintenir à jour le fichier de traduction.

#Extraction des chaines à traduire Pour extraire les chaines à traduire de vos fichier php il suffit d’utiliser la commande:

xgettext *.php

Cela va vous générer un fichier messages.po.

Il faut ensuite le compiler en fichier .mo utilisable par gettext.

msgfmt messages.po

L’un des principeaux problème avec beaucoup de méthode est la mise à jour des fichier de traduction. Et c’est là où à mon gout gettext trouve tout son intêret.

  • Commencez par renommer le fichier messages.po en old.po.
  • Générez le fichier messages.po
  • Mergez les deux fichier grace à cette commande:
msgmerge old.po messages.po --output-file=messages.po

#Quid des performances? GetText est puissant et on pourrait penser que cette solution est plus lente que un $lang[$language][‘welcome’]. Et bien non l’extension gettext est écrite en C et ses performance sont meilleur que le simple tableau de string.

Un benchmark

#Bibliographie Un article intérressant sur gettext et php: http://www.onlamp.com/pub/a/php/2002/06/13/php.html

Le site de gettext: http://www.gnu.org/software/gettext/

Annuler une revision

Dans subversion pour annuler une modification en ligne de commande.

Ce placer dans le répertoire.

A l’aide de la commande svn info récupérez l’URL du dépots.

Chemin :

noplay# svn info
Chemin: .
URL : http://svn.noplay.net/
Racine du depot : svn://svn.noplay.net
UUID du depot : 9e0b0c50-2be5-40e4-8cd1-2e3fc7b79647
Revision : 42
Type de noeud : repertoire
Tache programme : normale
Auteur de la derniere modification : noplay
Revision de la derniere modification : 42
Date de la derniere modification: 2008-07-18 21:09:59 +0200 (ven 18 jui 2008

A l’aide de la commande svn log récupérez la revision que vous souhaitez annuler:

noplay# svn log | head
------------------------------------------------------------------------
r42 | noplay | 2008-07-18 21:09:59 +0200 (ven 18 jui 2008) | 1 line
Je casse tout

Dans notre exemple c’est 42

Puis on repart en arrière:

svn merge -r 42:41 http://svn.noplay.net
svn commit

Pourquoi il ne faut pas utiliser ?>

La plupart des codes PHP ressemblent à cela:

<?php
echo "Hello";
?>

Cela marche très bien. Le problème c’est que si vous laissez des espaces après le tag fermant il seront aussi envoyé aux navigateurs. Quel est le soucis me direz vous?

#Le problème Imaginons que vous vouliez générer un fichier binaire comme par exemple une image, les espaces supplémentaires risque de corrompre le fichier.

Autres problèmes plus courant c’est dans le cadre de l’utilisation de session. Nous avons deux fichier

lib.php:

<?php
function hello() {
}
?>
PLEIN D ESPACES

index.php:

<?php
include("lib.php");
session_start();
?>

Vous allez voir ce type d’erreur: Warning: session_start(): Cannot send session cookie - headers already sent by

En effet le mécanisme de session de PHP nécessite de modifier les headers HTTP et lorsque PHP voit le premier caractère du contenu de la page il envoi les headers.

#La solution La solution est de ne pas mettre le tag fermant votre code marchera parfaitement et vous éliminés le risque de caractères parasites.

The Gimp 2.6

La version 2.6 de The Gimp est disponible.

Le changement qui m’a sauté immédiatement aux yeux c’est qu’il n’y a plus de menu dans la boite à outils et lors du lancement on voit une fenêtre image vide.

<168 center>

La fenêtre d’image devient donc la principale fenêtre de l’applications et les autres fenêtres des fenêtres utilitaire. Cela n’a l’air de rien, mais ces modifications devraient permettre aux Windows manager de mieux gérer les fenêtres de The Gimp.

Détecter si on est dans une iframe

Parfois il peut être utile de détecter si notre Javascript est lancé dans une iframe.

Le code suivant affiche une boite d’alerte si on est dans une iframe.

<script language="JavaScript">
<!--
if (top.frames.length!=0) *
   alert('Dans une iframe');
*
// --> 
</script>