<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>The World is mine &#187; I18N</title>
	<atom:link href="http://grozeille.com/tag/i18n/feed/" rel="self" type="application/rss+xml" />
	<link>http://grozeille.com</link>
	<description>Just another Wordpress.com weblog</description>
	<lastBuildDate>Sat, 07 Jan 2012 12:00:31 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='grozeille.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The World is mine &#187; I18N</title>
		<link>http://grozeille.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://grozeille.com/osd.xml" title="The World is mine" />
	<atom:link rel='hub' href='http://grozeille.com/?pushpress=hub'/>
		<item>
		<title>Utiliser des *.resx externes (avec Spring.net)</title>
		<link>http://grozeille.com/2008/04/27/utiliser-des-resx-externes-avec-springnet/</link>
		<comments>http://grozeille.com/2008/04/27/utiliser-des-resx-externes-avec-springnet/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 19:19:38 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[I18N]]></category>
		<category><![CDATA[Spring.net]]></category>

		<guid isPermaLink="false">http://grozeille.wordpress.com/?p=32</guid>
		<description><![CDATA[On a parfois besoin de livrer une application .Net avec les fichiers de ressources, afin qu&#8217;un traducteur, voir même un intégrateur, puisse faire les traductions au dernier moment. Si cette personne doit recompiler l&#8217;application pour voir le fruit de son travail, ce n&#8217;est pas très pratique voir impossible: allez lui expliquer que VisualStudio n&#8217;est pas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&amp;blog=173450&amp;post=32&amp;subd=grozeille&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>On a parfois besoin de livrer une application .Net avec les fichiers de ressources, afin qu&#8217;un traducteur, voir même un intégrateur, puisse faire les traductions au dernier moment.</p>
<p>Si cette personne doit recompiler l&#8217;application pour voir le fruit de son travail, ce n&#8217;est pas très pratique voir impossible: allez lui expliquer que VisualStudio n&#8217;est pas nécessaire et qu&#8217;il est possible de créer des ressources avec <a href="http://msdn2.microsoft.com/fr-fr/library/ccec7sz1(VS.80).aspx">ResGen.exe</a> (et <a href="http://msdn2.microsoft.com/fr-fr/library/c405shex(VS.80).aspx">al.exe</a> pour faire des <a href="http://msdn2.microsoft.com/fr-fr/library/sb6a8618(VS.80).aspx">assembly satellites</a>). Très franchement, les traducteurs ne veulent pas de quelque chose d&#8217;aussi et vont vous fuir comme la peste si vous leur demander d&#8217;être des développeurs.</p>
<p><span id="more-32"></span>La solution est donc d&#8217;utiliser simplement des fichier *.resx sans les compiler, et elle a plusieurs avantages:</p>
<ul>
<li>le traducteur n&#8217;a pas à savoir comment compiler des ressources (ce n&#8217;est pas un développeur)</li>
<li>les fichiers *.resx sont sous la forme XML, et donc (très?) lisible (la structure propose même un champ &#8220;commentaire&#8221;)</li>
<li>il existe bien sûr des éditeurs de fichiers *.resx pour ceux qui ne veulent même pas savoir ce que XML veut dire: <a href="http://www.aisto.com/roeder/dotnet/">Resourcer for .net</a></li>
</ul>
<p>Vous pouvez retrouver ces explication sur <a href="http://blechie.com/WPierce/archive/2007/08/01/Using-Resx-Files-with-a-ResourceManager.aspx">le blog suivant</a>. <a href="http://blechie.com/WPierce/archive/2007/08/01/Using-Resx-Files-with-a-ResourceManager.aspx"><br />
</a>Et Oh joie! Ce blog explique comment réaliser un <code>ResourceManager</code> personnalisé capable de charger des fichiers .resx! C&#8217;est donc tous ce qu&#8217;il nous faut, nul besoin de réinventer un autre mécanisme de traduction maison.</p>
<p>Pour pousser la réflexion plus loin, je voulais utiliser Spring.net pour obtenir la traduction. Cette solution à pour avantage de ne passer que par le contexte pour obtenir cette dernière, peut importe dans quel fichier elle se trouve. Il suffit alors de paramétrer dans le fichier <code>App.Config</code> le chemin de chaque fichier *.resx.</p>
<p>Pour ce faire, rien de plus facile: Spring.net fournit une classe qui recense un certain nombre de <code>ResourceManager</code>. En référençant donc notre <code>ResxResourceManager</code> qui pointe sur notre fichier *.resx, le contexte Spring sera alors capable de fournir les bonnes traductions si on l&#8217;interroge. Pour obtenir une traduction dans la culture courante, il suffira alors d&#8217;écrire ceci:<br />
<pre class="brush: csharp;">
ContextRegistry.GetContext().GetMessage(&quot;MaClef&quot;);
</pre><br />
Le XML de configuration ressemble à ça:<br />
<pre class="brush: xml;">
&lt;object name=&quot;messageSource&quot; type=&quot;Spring.Context.Support.ResourceSetMessageSource, Spring.Core&quot;&gt;
  &lt;property name=&quot;ResourceManagers&quot;&gt;
    &lt;list&gt;
      &lt;!-- ResourceManager qui pointe sur notre fichier Resx\MyResource.resx --&gt;
      &lt;object id=&quot;MyResource&quot; type=&quot;TestWinformsRessources.ResxResourceManager&quot;&gt;
        &lt;constructor-arg name=&quot;baseName&quot; value=&quot;MyResource&quot;/&gt;
        &lt;constructor-arg name=&quot;resourceDir&quot; value=&quot;Resx&quot;/&gt;
      &lt;/object&gt;
    &lt;/list&gt;
  &lt;/property&gt;
&lt;/object&gt;
</pre><br />
Vous pouvez voire concrètement ce que ça donne avec <a href="http://www.box.net/shared/al00ws8w0s">un petit exemple</a>.</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgrozeille.wordpress.com%2f2008%2f04%2f27%2futiliser-des-resx-externes-avec-springnet%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgrozeille.wordpress.com%2f2008%2f04%2f27%2futiliser-des-resx-externes-avec-springnet%2f&amp;border=6699cc&amp;bgcolor=99cc66&amp;cbgcolor=f3f6ec" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/grozeille.wordpress.com/32/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/grozeille.wordpress.com/32/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/32/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&amp;blog=173450&amp;post=32&amp;subd=grozeille&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2008/04/27/utiliser-des-resx-externes-avec-springnet/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgrozeille.wordpress.com%2f2008%2f04%2f27%2futiliser-des-resx-externes-avec-springnet%2f&#38;border=6699cc&#38;bgcolor=99cc66&#38;cbgcolor=f3f6ec" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>
	</item>
	</channel>
</rss>
