{"id":10598,"date":"2015-09-28T21:33:59","date_gmt":"2015-09-28T19:33:59","guid":{"rendered":"http:\/\/flaven.fr\/?p=10598"},"modified":"2015-10-02T08:00:30","modified_gmt":"2015-10-02T06:00:30","slug":"multilinguisme-symfony-app-generer-un-fichier-de-traduction-depuis-un-csv-issu-dun-google-doc","status":"publish","type":"post","link":"https:\/\/flaven.fr\/2015\/09\/multilinguisme-symfony-app-generer-un-fichier-de-traduction-depuis-un-csv-issu-dun-google-doc\/","title":{"rendered":"Multilinguisme, Symfony, App &#8211; G\u00e9n\u00e9rer un fichier de traduction depuis un csv issu d&#8217;un google doc"},"content":{"rendered":"<p>Le multilinguisme est souvent un \u00e9l\u00e9ment essentiel dans d\u00e9veloppement d&#8217;un site web ou d&#8217;une application. Cette n\u00e9cessit\u00e9 va de pair avec la difficult\u00e9 de faire traduire et de partager un document qui sera ensuite exploitable, aupr\u00e8s d&#8217;une \u00e9quipe de traduction diss\u00e9min\u00e9e.<\/p>\n<p><b>Comme dans de pr\u00e9c\u00e9dents articles de ce blog, on a choisi des solutions accesibles et gratuites. Pour g\u00e9rer la source de traduction, quoi de plus facile que de g\u00e9rer le tout dans un tableur google doc. Ensuite, ce tableur sera export\u00e9 au format CSV pour \u00eatre transform\u00e9 en XML ou en XLIFF.<\/b> <\/p>\n<h4>Format de fichier de traduction pour mobile et pour Symfony<\/h4>\n<p>Pour Symfony, les fichiers de traduction sont au format <code>.xliff<\/code>. La structure est assez simple en voici un extrait ci-dessous ainsi que quelques explications : la balise <code>source<\/code> contient la chaine qui sera appel\u00e9 dans le template <b>twig<\/b> et la balise <code>target<\/code> contient la traduction de cette m\u00eame chaine.<\/p>\n<p><b>Extrait d&#8217;un fichier <code>.xliff<\/code><\/b><\/p>\n<pre lang=\"xml\" escaped=\"true\">\r\n\t&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n\t&lt;xliff xmlns=\"urn:oasis:names:tc:xliff:document:1.2\" xmlns:jms=\"urn:jms:translation\" version=\"1.2\"&gt;\r\n\t  &lt;file date=\"2014-09-22T17:36:52Z\" source-language=\"en\" target-language=\"fr\" datatype=\"plaintext\" original=\"not.available\"&gt;\r\n\t    &lt;header&gt;\r\n\t      &lt;tool tool-id=\"JMSTranslationBundle\" tool-name=\"JMSTranslationBundle\" tool-version=\"1.1.0-DEV\"\/&gt;\r\n\t      &lt;note&gt;The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as \"form.label.firstname\", then the developer has not provided a default message.&lt;\/note&gt;\r\n\t    &lt;\/header&gt;\r\n\t    &lt;body&gt;\r\n\t      &lt;trans-unit id=\"d9b69806431d9c0165fdbede07565b0b4c2a8d73\" resname=\"kw_see_it\"&gt;\r\n\t        &lt;source&gt;kw_see_it&lt;\/source&gt;\r\n\t        &lt;target&gt; See the keyword&lt;\/target&gt;\r\n\t      &lt;\/trans-unit&gt;\r\n\t\t  ...\r\n<\/pre>\n<p>Dans le cadre des applications mobiles, on a souvent affaire \u00e0 des fichiers <code>xml<\/code> dont la structure peut varier mais cela se r\u00e9v\u00e8le entre guillemets beaucoup plus simple.<\/p>\n<pre lang=\"xml\" escaped=\"true\">\r\n\t&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n\t&lt;resources&gt;\r\n\t\t  &lt;string name=\"kw_see_it\"&gt; See the keyword&lt;\/string&gt;\r\n\t\t  ...\r\n\t\r\n<\/pre>\n<p><b>La question qui reste en suspens est comment convertir rapidement un fichier <code>.csv<\/code>, issu de notre tableur google doc au format <code>.xliff<\/code> ou <code>.xml<\/code><\/b><\/p>\n<h4>Transformation \u00e0 l&#8217;aide d&#8217;un script PHP<\/h4>\n<p>Comme souvent, on livre un script en php qui fera l&#8217;affaire permettant une conversion quasi instantan\u00e9 d&#8217;un CSV au format .xml ou .xliff. Tout le code est disponible sur Github.<\/p>\n<p><b>L&#8217;objectif de ce script est de faire gagner du temps \u00e0 un non-d\u00e9veloppeur, un chef de projet par exemple qui \u00e0 l&#8217;aide d&#8217;un tableur google doc et de ce script pourrait g\u00e9rer bon an, mal an la traduction des futurs interfaces sous Symfony et\/ou sous Android\/iOS par exemple.<\/b><\/p>\n<p>Voir sur github <a href=\"https:\/\/github.com\/bflaven\/BlogArticlesExamples\/tree\/master\/convert-csv-2-xml-or-xliff\" target=\"_blank\">Convert .csv to .xml or .xliff<\/a><\/p>\n<h2>Un peu d&#8217;auto-promo&#8230;<\/h2>\n<ul>\n<li>Chinois, Multilingue, WordPress \u2013 G\u00e9rer la conversion chinois simplifi\u00e9 vers traditionnel via un plugin<br \/><a href=\"https:\/\/flaven.fr\/2015\/09\/chinois-multilingue-wordpress-gerer-la-conversion-chinois-simplifie-vers-traditionnel-via-un-plugin\/\" target=\"_blank\">https:\/\/flaven.fr\/2015\/09\/chinois-multilingue-wordpress-gerer-la-conversion-chinois-simplifie-vers-traditionnel-via-un-plugin\/<\/a><\/li>\n<li>Chinois, Simplifi\u00e9, Traditionnel \u2013 Int\u00e9grer un affichage simplifi\u00e9 et traditionnel en php<br \/><a href=\"https:\/\/flaven.fr\/2014\/09\/chinois-simplifie-traditionnel-integrer-un-affichage-simplifie-et-traditionnel-en-php\/\" target=\"_blank\">https:\/\/flaven.fr\/2014\/09\/chinois-simplifie-traditionnel-integrer-un-affichage-simplifie-et-traditionnel-en-php\/<\/a><\/li>\n<li>Google, SaaS, Office \u2013 Ecrire des scripts pour la suite de google docs<br \/><a href=\"https:\/\/flaven.fr\/2013\/11\/google-saas-office-ecrire-des-scripts-pour-la-suite-de-google-docs\/\" target=\"_blank\">https:\/\/flaven.fr\/2013\/11\/google-saas-office-ecrire-des-scripts-pour-la-suite-de-google-docs\/<\/a><\/li>\n<li>Google, SaaS, Office \u2013 Ecrire des scripts pour la suite de google docs<br \/><a href=\"https:\/\/flaven.fr\/2011\/11\/php-ligne-de-commande-mysql-utiliser-des-scripts-php-en-ligne-de-commande\/\" target=\"_blank\">https:\/\/flaven.fr\/2011\/11\/php-ligne-de-commande-mysql-utiliser-des-scripts-php-en-ligne-de-commande\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Le multilinguisme est souvent un \u00e9l\u00e9ment essentiel dans d\u00e9veloppement d&#8217;un site web ou d&#8217;une application. Cette n\u00e9cessit\u00e9 va de pair avec la difficult\u00e9 de faire&hellip; <\/p>\n<p class=\"text-center\"><a href=\"https:\/\/flaven.fr\/2015\/09\/multilinguisme-symfony-app-generer-un-fichier-de-traduction-depuis-un-csv-issu-dun-google-doc\/\" class=\"more-link\">Continue reading &rarr; <span class=\"screen-reader-text\">Multilinguisme, Symfony, App &#8211; G\u00e9n\u00e9rer un fichier de traduction depuis un csv issu d&#8217;un google doc<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":10599,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"bf_ai_meta_description":"Multilinguisme in Symfony apps: tools to convert Google Docs CSV to XML\/XLIFF for seamless translation management.","bf_ai_og_title":"Multilinguisme Symfony App","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[3437,3454,3444,3447,3449,3450,3452],"tags":[2238,2299,2214,518,2298,182,2300,90],"class_list":["post-10598","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-business-case-studies","category-journalism-writing","category-programming-databases","category-technology-trends","category-tutorials-how-to","category-ux-product-design","category-wordpress-cms","tag-android","tag-app","tag-google","tag-ios","tag-multilinguisme","tag-symfony","tag-xliff","tag-xml"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Vuhl-2KW","jetpack_featured_media_url":"https:\/\/flaven.fr\/wp-content\/uploads\/2015\/09\/from_csv_to_xml_xliff_b.jpg","_links":{"self":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/10598","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/comments?post=10598"}],"version-history":[{"count":5,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/10598\/revisions"}],"predecessor-version":[{"id":10604,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/10598\/revisions\/10604"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media\/10599"}],"wp:attachment":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media?parent=10598"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/categories?post=10598"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/tags?post=10598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}