{"id":726,"date":"2014-09-07T11:42:56","date_gmt":"2014-09-07T09:42:56","guid":{"rendered":"http:\/\/dev.bratched.fr\/fr\/?p=726"},"modified":"2014-09-07T11:42:56","modified_gmt":"2014-09-07T09:42:56","slug":"migration-vers-xaml-8-1-les-resw-migration-rapide","status":"publish","type":"post","link":"https:\/\/bratched.com\/fr\/2014\/09\/07\/migration-vers-xaml-8-1-les-resw-migration-rapide\/","title":{"rendered":"Migration vers XAML 8.1 &#8211; les resw (migration rapide)"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>Cet article fait suite au <a title=\"Migration vers 8.1 : Les fichiers de ressources resw\" href=\"http:\/\/dev.bratched.fr\/fr\/migration-vers-8-1-les-fichiers-de-ressources-resw\/\">pr\u00e9c\u00e9dent article<\/a> concernant la migration de la partie \u00ab\u00a0traduction\u00a0\u00bb d&rsquo;une application Windows Phone (7, 8 et Silverlight 8.1) en 8.1 XAML (Universal Apps)<\/p>\n<h1>Universal apps et traduction<\/h1>\n<p><a href=\"http:\/\/dev.bratched.fr\/fr\/wp-content\/uploads\/sites\/2\/2014\/09\/UniversalApps.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-727\" src=\"http:\/\/dev.bratched.fr\/fr\/wp-content\/uploads\/sites\/2\/2014\/09\/UniversalApps.jpg\" alt=\"Universal Apps\" width=\"412\" height=\"208\" srcset=\"https:\/\/bratched.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/09\/UniversalApps.jpg 939w, https:\/\/bratched.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/09\/UniversalApps-300x152.jpg 300w, https:\/\/bratched.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/09\/UniversalApps-768x388.jpg 768w\" sizes=\"(max-width: 412px) 100vw, 412px\" \/><\/a><\/p>\n<p>Nous avons pu voir pr\u00e9c\u00e9demment que le portage pouvait \u00eatre\u00a0parfois un peu lourd.<br \/>\nDans le cas o\u00f9 vous avez d\u00e9j\u00e0 de nombreuses ressources traduites dans les\u00a0fichiers resx volumineux (et dans plusieurs langues), la suite peut vous int\u00e9resser.<\/p>\n<h2>Les identifiants de ressources<\/h2>\n<p>Nous avons vu dans le pr\u00e9c\u00e9dent article qu&rsquo;il suffisait de<\/p>\n<ol>\n<li>renommer les fichiers .resx en .resw<\/li>\n<li>les mettre dans des r\u00e9pertoires norm\u00e9s avec un identifiant les ressources (ex : en-US, fr-FR,..)<\/li>\n<li>modifier le XAML pour remplacer le \u00ab\u00a0{Binding&#8230;\u00a0\u00bb par un x:Uid<\/li>\n<li>modifier <span style=\"color: #ff0000\">tous les identifiants de ressources<\/span> pour ajouter la propri\u00e9t\u00e9 du contr\u00f4le qui sera traduite.<\/li>\n<\/ol>\n<p>Pour \u00e9viter ce dernier cas parfois tr\u00e8s lourd, il existe un solution qui peux vous faire gagner un peu de temps.<\/p>\n<p><!--more--><\/p>\n<h2>Les ressources XAML \u00ab\u00a0CustomResource\u00a0\u00bb<\/h2>\n<p>La premi\u00e8re chose \u00e0 faire est de surcharger la classe CustomXamlResourceLoader. Cette classe permet de d\u00e9finir ses propres ressources XAML \u00ab\u00a0Custom\u00a0\u00bb<\/p>\n<pre class=\"lang:default decode:true\">public class TranslationResourceProvider : CustomXamlResourceLoader\n   {\n       readonly ResourceLoader _resourceLoader = new ResourceLoader();\n\n       protected override object GetResource(string resourceId, string objectType, string propertyName, string propertyType)\n\n       {\n           return _resourceLoader.GetString(resourceId);\n       }\n   }\n<\/pre>\n<p>Cr\u00e9er une nouvelle classe\u00a0\u00ab\u00a0TranslationResourceProvider.cs\u00a0\u00bb et copiez le code ci-dessus directement dans la classe.<\/p>\n<p>Il faut ensuite initialiser\u00a0ce nouvel objet par exemple dans la App.xaml.cs<\/p>\n<pre class=\"lang:default decode:true\">public App()\n       {\n           this.InitializeComponent();\n           CustomXamlResourceLoader.Current = new TranslationResourceProvider();\n\n...\n<\/pre>\n<p>Une fois initialis\u00e9, vous pouvez utiliser directement dans le XAML\u00a0la syntaxe {CustomResource key} ou key repr\u00e9sente l&rsquo;identifiant donn\u00e9 \u00e0 la ressource \u00e0 traduire.<\/p>\n<p>Exemple : vous pourrez utiliser cette syntaxe :<\/p>\n<pre class=\"lang:default decode:true\">&lt;Button Content=\"{CustomResource BtnStop}\" \/&gt;<\/pre>\n<p>Ce qui reste assez simple \u00e0\u00a0porter car il suffit juste de remplacer le \u00ab\u00a0{Binding,&#8230;\u00a0\u00bb par {CustomResource&#8230;\u00a0\u00bb. Vous n&rsquo;aurez pas besoin de revenir sur le fichier .resw.<\/p>\n<p>Vous pouvez m\u00eame mixer cette syntaxe avec\u00a0<a title=\"Migration vers 8.1 : Les fichiers de ressources resw\" href=\"http:\/\/dev.bratched.fr\/fr\/migration-vers-8-1-les-fichiers-de-ressources-resw\/\">la m\u00e9thode pr\u00e9c\u00e9dente<\/a>, l&rsquo;un n&#8217;emp\u00eache pas l&rsquo;autre\u00a0:<\/p>\n<pre class=\"lang:default decode:true\">&lt;Button x:Uid=\"BtnStart\" Content=\"\" \/&gt;\n<\/pre>\n<p>Ci dessous, un exemple de fichier de ressources resw\u00a0avec<\/p>\n<ul>\n<li>en premi\u00e8re ligne, la syntaxe standard que vous devrez avoir pour un projet classique (Windows 8\/8.1 et WP8.1 XAML)<\/li>\n<li>en\u00a0deuxi\u00e8me ligne, vous pouvez conserver votre ancienne syntaxe qui reste compatible avec les anciens projets Windows phone 7.x, 8.0 et Silverlight 8.1.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"307\">\u00a0BtnStart.Content<\/td>\n<td width=\"307\">\u00a0\u00a0Start<\/td>\n<\/tr>\n<tr>\n<td width=\"307\">\u00a0BtnStop<\/td>\n<td width=\"307\">\u00a0\u00a0Stop<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bonnes traductions et bonne migration !<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Cet article fait suite au pr\u00e9c\u00e9dent article concernant la migration de la partie \u00ab\u00a0traduction\u00a0\u00bb d&rsquo;une application Windows Phone (7, 8 et Silverlight 8.1) en 8.1 XAML (Universal Apps) Universal apps et traduction Nous avons pu voir pr\u00e9c\u00e9demment que le portage pouvait \u00eatre\u00a0parfois un peu lourd. Dans le cas o\u00f9 vous avez d\u00e9j\u00e0 de nombreuses [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[59,62,63],"tags":[71,53,58,8],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/posts\/726"}],"collection":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/comments?post=726"}],"version-history":[{"count":0,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/posts\/726\/revisions"}],"wp:attachment":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/media?parent=726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/categories?post=726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/tags?post=726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}