<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux Attitude&#187; Bibliothèque</title>
	<atom:link href="http://linux-attitude.fr/tag/bibliotheque/feed" rel="self" type="application/rss+xml" />
	<link>http://linux-attitude.fr</link>
	<description>Le libre est un état d&#039;esprit</description>
	<lastBuildDate>Mon, 06 Feb 2012 08:01:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Des logs, des logs, oui mais des logs amis</title>
		<link>http://linux-attitude.fr/post/des-logs-des-logs-oui-mais-des-logs-amis?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=des-logs-des-logs-oui-mais-des-logs-amis</link>
		<comments>http://linux-attitude.fr/post/des-logs-des-logs-oui-mais-des-logs-amis#comments</comments>
		<pubDate>Sat, 05 Jan 2008 23:55:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Bibliothèque]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/des-logs-des-logs-oui-mais-des-logs-amis</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: logs apache en php Un petit article pour tous ceux qui ont un site sur sur un hébergement mutualisé et qui n'ont pas accès aux logs apache. C'est assez gênant, on est limité dans le choix des outils de statistiques. On a quelques outils purement php peu efficaces, ou des outils web [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: logs apache en php</p>


<p>Un petit article pour tous ceux qui ont un site sur sur un hébergement mutualisé et qui n'ont pas accès aux logs apache. C'est assez gênant, on est limité dans le choix des outils de statistiques. On a quelques outils purement php peu efficaces, ou des outils web externes qui stockent les données pour vous (mais à qui appartiennent-elles ?).</p>


<p>Pour permettre d'utiliser les outils courants (awstats, awffull, webalizer ...), j'ai écrit un petit script php qui génère des logs au format apache. Il y a plusieurs inconvénients, tout d'abord, on ne loggue que les appels au php, pas les images, ni les binaires ... D'autre part, le code s'exécute nécessairement avant la fin du code lui-même. Donc il y a certaines informations dont on ne dispose pas, comme la taille totale générée, le code de retour ou des éléments des en-têtes renvoyés.</p>



<p>Ce script s'utilise très simplement, il suffit d'inclure le fichier et éventuellement de préciser le format à utiliser et le nom du fichier de log. En pratique l'entrée de log se fera à la fin de l'exécution du php, ce qui permet de mesurer le temps d'exécution.
Le logformat s'écrit exactement sous la même forme que celui d'apache, les informations inconnues seront simplement remplacées par un '-' . Notez aussi que le %r (ligne contenant la requête intégrale) est généré à partir des informations disponibles.</p>


<p>A mettre dans votre code php&nbsp;:</p>
<pre>
$alog_logFormat = &quot;%h %l %u %t \&quot;%r\&quot; %&gt;s %b&quot;; // optionnel
$alog_logFile   = &quot;/tmp/access.log&quot;; // optionnel
include_once(&quot;ApacheLog.php&quot;);
</pre>


<p>Attention, le nom du fichier est relatif au script appelant.</p>



<p>Vous trouverez le fichier en pièce attachée à cet article.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/logs-locaux-et-distants' rel='bookmark' title='Permanent Link: Logs locaux et distants'>Logs locaux et distants</a></li>
<li><a href='http://linux-attitude.fr/post/mes-amis-les-drapeaux' rel='bookmark' title='Permanent Link: Mes amis les drapeaux'>Mes amis les drapeaux</a></li>
<li><a href='http://linux-attitude.fr/post/internet-pour-les-amis' rel='bookmark' title='Permanent Link: Internet pour les amis'>Internet pour les amis</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/bibliotheque" title="Bibliothèque" rel="tag">Bibliothèque</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/des-logs-des-logs-oui-mais-des-logs-amis/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Localisation</title>
		<link>http://linux-attitude.fr/post/localisation?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=localisation</link>
		<comments>http://linux-attitude.fr/post/localisation#comments</comments>
		<pubDate>Wed, 07 Nov 2007 23:38:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Bibliothèque]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/toujours-du-texte</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: setlocale&#160;; xgettext&#160;; gettextize Maintenant vous savez utiliser gettext. Allons un peu plus loin. Vous avez internationalisé votre application et commencé à la traduire. Mais vous voudriez aussi l'installer et la rendre utilisable par tous facilement. Pour cela il faut choisir la bonne locale en fonction de l'utilisateur. La solution retenue dépendra du [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: setlocale&nbsp;; xgettext&nbsp;; gettextize</p>


<p>Maintenant vous savez utiliser <a href="http://linux-attitude.fr/index.php?post/Donnez-moi-du-texte" hreflang="fr">gettext</a>. Allons un peu plus loin. Vous avez internationalisé votre application et commencé à la traduire. Mais vous voudriez aussi l'installer et la rendre utilisable par tous facilement.</p>


<p>Pour cela il faut choisir la bonne locale en fonction de l'utilisateur. La solution retenue dépendra du type d'application.</p>


<h3>Locale web</h3>

<p>Si c'est une application web, basez vous sur la langue du navigateur, fournie pendant la négociation http ou la lange du serveur par défaut.</p>
<pre>
&lt;?php
// locale par defaut (du serveur)
$locale = getenv('LANG');

// locale préférée du client
if ( isset( $_SERVER[&quot;HTTP_ACCEPT_LANGUAGE&quot;] ) )
{
        $languages = strtolower( $_SERVER[&quot;HTTP_ACCEPT_LANGUAGE&quot;] );
        $language = preg_replace( &quot;/^([^,;]*?)[,;].*$/&quot;,&quot;$1&quot;, $languages );

        if ( $language != &quot;&quot; )
        {
                $locale = $language;
                $locale .= &quot;_&quot;;
                // c'est un peu pauvre comme choix du pays et c'est pas garanti que ca marche
                // si vous avez une bonne idée n'hesitez pas
                $locale .= strtoupper($language);
                if ( $charset == &quot;utf8&quot; || $charset == &quot;utf-8&quot; )
                {
                        $locale .= &quot;UTF-8&quot;;
                }
        }
}

setlocale(LC_ALL, $locale);
?&gt;
</pre>


<p>Notez qu'ici on modifie LC_ALL qui impacte tous les éléments de locale (date, monnaie ...). Si vous ne voulez modifier que la locale liée à la traduction utilisez LC_MESSAGES à la place.</p>



<h3>Locale locale</h3>

<p>Si votre application est un programme local, basez vous sur la locale du système grâce aux variables d'environnement. Pour cela, il suffit d'appeler simplement setlocale&nbsp;:</p>
<pre>
/* code C, transposable aisément :-) */
setlocale( &quot;LC_ALL&quot;, &quot;&quot;);
</pre>



<p><strong>Attention</strong>, quel que soit le langage, setlocale doit être appelée avant vos appels à bindtext et textdomain.</p>




<h3>Industrialisation</h3>



<p>Pour installer vos traductions sur un système unix, mettez les dans /usr/share/locale/fr/LC_MESSAGES.</p>



<p>Il vous faudra aussi maintenir vos traductions, pour cela vous devrez utiliser régulièrement xgettext pour extraire vos chaînes mises à jour. De plus à force de traduire, vous verrez que ce n'est pas toujours drôle de repérer les dernières modifications ou de faire des recherches avec un éditeur de texte normal. C'est pourquoi il vous faudra apprendre à utiliser un outil comme poedit pour éditer les fichiers .po</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/internationalisation' rel='bookmark' title='Permanent Link: Internationalisation'>Internationalisation</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/bibliotheque" title="Bibliothèque" rel="tag">Bibliothèque</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/localisation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internationalisation</title>
		<link>http://linux-attitude.fr/post/internationalisation?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=internationalisation</link>
		<comments>http://linux-attitude.fr/post/internationalisation#comments</comments>
		<pubDate>Mon, 05 Nov 2007 23:53:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Bibliothèque]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/donnez-moi-du-texte</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: gettext Connaissez vous la différence entre internationalisation et localisation (i18n et l10n)&#160;? Hé bien il s'agit tout simplement de deux parties du même processus. L'internationalisation c'est le fait de développer votre code pour qu'il supporte n'importe quelle locale. Par locale on entend la plupart du temps la langue, mais il ne faut [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: gettext</p>



<p>Connaissez vous la différence entre internationalisation et localisation (i18n et l10n)&nbsp;? Hé bien il s'agit tout simplement de deux parties du même processus.</p>


<p><strong>L'internationalisation</strong> c'est le fait de développer votre code pour qu'il supporte n'importe quelle locale. Par locale on entend la plupart du temps la langue, mais il ne faut pas oublier qu'il y a quelques autres particularités comme l'heure, la monnaie, l'affichage des dates ...</p>


<p><strong>La localisation</strong>, c'est le fait de définir les propriétés locales du logiciel. Contrairement à l'internationalisation, ce n'est pas particulièrement un travail de développeur de s'occuper de la localisation. Il s'agit la plupart du temps de traduire du texte (l'heure et la monnaie étant en général fixe et donc déjà localisées).</p>




<p><strong>Gettext</strong> est une bibliothèque pour vous faciliter l'internationalisation et la localisation du texte dans vos programmes. Elle a été pensée pour être utilisée dans du code existant aussi bien que dans du nouveau code. Le principe est de conserver les messages originaux dans le code (en anglais de préférence) et d'externaliser les versions localisées de ces messages dans d'autres fichiers.</p>


<h3>Comment l'utiliser&nbsp;?</h3>


<p>La fonction principale de gettext est ... gettext. On lui passe en paramètre une chaîne de caractères et elle retourne la chaîne de caractères traduite correspondante.</p>


<p>Son action est simple, elle connaît la locale en cours, et en fonction de cette locale elle va chercher dans un fichier de texte localisé la chaîne de caractère correspondant à la chaîne en VO qu'on vient de lui passer. Si elle la trouve c'est gagné, sinon elle retourne la VO.
Par conséquent, toutes les chaînes non traduites dans un logiciel fonctionnent, elles sont juste en VO.</p>


<p>Commençons par un exemple en php.
En php, comme dans la plupart des autres langages, la fonction gettext() existe aussi sous le nom de _(), bien plus rapide à écrire et aussi plus lisible.</p>


<p><span id="more-13"></span></p>
<pre>
&lt;?php
// version non internationalisée
echo &quot;Hello World\n&quot;;
// version internationalisée
echo _(&quot;Hello World\n&quot;);
?&gt;
</pre>


<p>Ouah trop dur&nbsp;! Mieux, si vous décidez de ne pas traduire votre logiciel maintenant, ce n'est pas grave car la chaîne originale sera retournée (VO).</p>


<p>Nous avons <strong>internationalisé</strong> notre soft, il faut maintenant le <strong>localiser</strong>, c'est un peu plus de travail.
Tout d'abord une petite partie dans le code lui-même pour fixer la locale à utiliser&nbsp;:</p>
<pre>
// locale choisie
setlocale(LC_ALL, &quot;fr_FR.UTF-8&quot;);
// choix du fichier de localisation
bindtextdomain('test','/chemin/kivabien');
textdomain('test');
</pre>


<p>Ensuite, il faut lancer la commande suivante&nbsp;:</p>
<pre>
$ xgettext test.php
</pre>


<p>Elle produira un fichier messages.po, c'est lui le fichier de localisation.
Éditez le (avec un simple éditeur pour l'instant) et complétez la ligne msgstr tout en bas du fichier, remplacez les champs qui vous intéressent, et surtout remplacez CHARSET par votre charset (UTF-8 ou ISO-8859-15 en général).</p>


<p>Une fois que c'est traduit, créons un fichier de localisation compilé (test.mo qui sera vraiment utilisé par le programme)&nbsp;:</p>
<pre>
$ msgfmt -o test.mo messages.po
</pre>


<p>Il faut placer ce dernier fichier dans le répertoire /chemin/kivabien/fr/LC_MESSAGES</p>


<p>Et voila&nbsp;!</p>




<p>Notez que gettext est disponible dans la plupart des langages&nbsp;:</p>

<ul>
<li>C</li>
<li>Perl</li>
<li>Python</li>
<li>Ruby</li>
<li>Cherchez</li>
</ul>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/localisation' rel='bookmark' title='Permanent Link: Localisation'>Localisation</a></li>
<li><a href='http://linux-attitude.fr/post/usrbingcc-bis' rel='bookmark' title='Permanent Link: #!/usr/bin/gcc (bis)'>#!/usr/bin/gcc (bis)</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/bibliotheque" title="Bibliothèque" rel="tag">Bibliothèque</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/internationalisation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced (User agent is rejected)
Database Caching 10/44 queries in 0.063 seconds using apc
Object Caching 787/826 objects using apc
Content Delivery Network via N/A

Served from: linux-attitude.fr @ 2012-02-09 01:24:25 -->
