{"id":861,"date":"2024-02-21T09:00:56","date_gmt":"2024-02-21T09:00:56","guid":{"rendered":"https:\/\/poyesis.fr\/blogs\/?p=861"},"modified":"2025-02-03T07:56:43","modified_gmt":"2025-02-03T07:56:43","slug":"comment-traduire-son-application-i18n-react","status":"publish","type":"post","link":"https:\/\/poyesis.fr\/blogs\/comment-traduire-son-application-i18n-react\/","title":{"rendered":"Comment traduire son application ? I18N + React"},"content":{"rendered":"<p style=\"text-align: center;\"><b>Parlez la langue de vos clients ou mourez<\/b><\/p>\n<p>20 %.<\/p>\n<p>C\u2019est le nombre de conversions que vous ratez lorsque votre app d\u2019e-commerce n\u2019est pas disponible dans la langue maternelle d\u2019un segment d\u2019utilisateurs \ud83e\udd72 (<a href=\"https:\/\/blog.weglot.com\/top-multilingual-website-stats-and-website-localization-trends-2021\/\" target=\"_blank\" rel=\"noopener\">source<\/a>).<\/p>\n<p>Et m\u00eame si votre app est g\u00e9nialissime, il y a tr\u00e8s peu de chances qu\u2019un internaute aille <b>apprendre une langue nouvelle <\/b>juste pour l\u2019utiliser.<\/p>\n<p>Si vous souhaitez augmenter votre CA, une application <b>bilingue<\/b>, <b>multilingue<\/b> ou <b>disponible dans toutes les langues<\/b> est un atout de taille.<\/p>\n<p>Et heureusement, traduire une application mobile est assez simple gr\u00e2ce \u00e0 l\u2019internationalisation.<\/p>\n<p>L\u2019internationalisation, ou i18N, consiste \u00e0 concevoir des logiciels facilement adaptables aux diff\u00e9rentes langues. Cerise sur le g\u00e2teau\u00a0: l\u2019i18N ne n\u00e9cessite pas de modifier le code source de votre app.<\/p>\n<p>Alors pourquoi s\u2019en priver\u00a0?<\/p>\n<p>On vous a concoct\u00e9 un guide complet sur comment traduire votre application \u00e0 l\u2019aide du framework i18N.<\/p>\n<p>Let\u2019s go.<\/p>\n<h2>Pourquoi i18N et pas une autre librairie d\u2019internationalisation\u00a0?<\/h2>\n<p>Soyons d\u2019accord\u00a0: vous pouvez traduire automatiquement vos contenus avec un <b>logiciel de traduction<\/b> <b>automatique<\/b> comme <b>Google Traduction<\/b>.<\/p>\n<p>C\u2019est rapide et pas cher.<\/p>\n<p>Par contre, les r\u00e9sultats sont parfois assez douteux.<\/p>\n<p>Raison pour laquelle les d\u00e9veloppeurs optent pour une autre solution\u00a0: les frameworks React.<\/p>\n<p>Il y en a deux\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\">React-intl<\/li>\n<li aria-level=\"1\">React-i18next.<\/li>\n<\/ul>\n<p>Notre choix s\u2019est port\u00e9 sur l\u2019<b>outil de traduction<\/b> React-i18next \u00e0 cause de sa kyrielle d\u2019avantages\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\">c\u2019est une biblioth\u00e8que est int\u00e9gralement \u00e9crite en JavaScript\u00a0;<\/li>\n<li aria-level=\"1\">React-i18N abrite un <b>syst\u00e8me de traduction automatique<\/b> complet pour plusieurs <b>langues diff\u00e9rentes<\/b>\u00a0;<\/li>\n<li aria-level=\"1\">c\u2019est une biblioth\u00e8que ais\u00e9ment scalable gr\u00e2ce \u00e0 sa capacit\u00e9 de s\u00e9parer chaque traduction en plusieurs fichiers et de les charger \u00e0 la demande.<\/li>\n<\/ul>\n<p>Sans transition, voyons ensemble comment traduire votre application en plusieurs <b>langues \u00e9trang\u00e8res<\/b> de A \u00e0 Z.<\/p>\n<h2>5 \u00e9tapes pour traduire int\u00e9gralement les textes d\u2019une application en plusieurs langues<\/h2>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter size-full wp-image-867\" src=\"https:\/\/poyesis.fr\/blogs\/wp-content\/uploads\/2024\/02\/image4-1.png\" alt=\"\" width=\"500\" height=\"889\" srcset=\"https:\/\/poyesis.fr\/wp-content\/uploads\/2024\/02\/image4-1.png 500w, https:\/\/poyesis.fr\/wp-content\/uploads\/2024\/02\/image4-1-169x300.png 169w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/p>\n<h3>1 \u2013 Installez les packages<\/h3>\n<p>Afin de traduire votre application mobile, vous aurez besoin d\u2019installer tous les packages qui suivent :<\/p>\n<ul>\n<li aria-level=\"1\">I18N, la star du jour\u00a0;<\/li>\n<li aria-level=\"1\">React-i18n, qui vous permet d\u2019utiliser toutes les fonctionnalit\u00e9s d\u2019i18N dans votre application mobile react\u00a0;<\/li>\n<li aria-level=\"1\">I18next-browser-languagedetector, qui permet de d\u00e9tecter la langue de l\u2019utilisateur depuis son navigateur\u00a0;<\/li>\n<li aria-level=\"1\">I18next-http-backend, que l\u2019on utilisera pour charger les fichiers de traductions.<\/li>\n<\/ul>\n<p>Pour les installer, rien de plus simple\u00a0: copiez-collez la commande suivante dans votre invite de commande.<\/p>\n<pre>npm install i18next react-i18next i18next-browser-languagedetector i18next-http-backend<\/pre>\n<p>Ps\u00a0: n\u2019oubliez pas de d\u00e9marrer votre serveur node.js avant de saisir cette instruction, sinon \u00e7a ne fonctionnera pas. <a href=\"https:\/\/poyesis.fr\/blogs\/comparatif-framework-node-vs-nest-vs-express\/\" target=\"_blank\" rel=\"noopener\">Si vous ne savez pas ce qu\u2019est node.js, on vous en parle en d\u00e9tail ici<\/a>.<\/p>\n<h3>2 \u2013 Cr\u00e9ez les fichiers de traduction<\/h3>\n<p>Vos <b>textes \u00e0 traduire<\/b> ne seront pas r\u00e9dig\u00e9s directement dans le code source.<\/p>\n<p>Vous pouvez le faire, mais c\u2019est une tr\u00e8s mauvaise id\u00e9e.<\/p>\n<p>\u00c0 la place, voici ce qu\u2019on vous propose\u00a0: cr\u00e9er des fichiers pour chaque <b>langue de traduction<\/b>.<\/p>\n<p>Suivez les instructions suivantes \u00e0 la lettre pour que \u00e7a fonctionne\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\">Allez dans le r\u00e9pertoire \u00ab\u00a0public\u00a0\u00bb de votre app\u00a0\u00bb\u00a0;<\/li>\n<li aria-level=\"1\">Cr\u00e9ez-y un dossier \u00ab\u00a0locales\u00a0\u00bb\u00a0;<\/li>\n<li aria-level=\"1\">Pour chaque <b>langue-cible<\/b> que vous voulez int\u00e9grer, cr\u00e9er un nouveau fichier dans le dossier \u00ab\u00a0locales\u00a0\u00bb. Nommez chaque fichier selon les codes correspondants desdites langues (EN, FR, SP, etc.)\u00a0;<\/li>\n<li aria-level=\"1\">Enfin, dans chacun des dossiers de langues, cr\u00e9ez un fichier \u00ab\u00a0translation.json\u00a0\u00bb.<\/li>\n<\/ul>\n<p>Voici l\u2019architecture que vous devriez normalement avoir\u00a0:<\/p>\n<figure id=\"attachment_865\" aria-describedby=\"caption-attachment-865\" style=\"width: 575px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"size-full wp-image-865\" src=\"https:\/\/poyesis.fr\/blogs\/wp-content\/uploads\/2024\/02\/Architecture-fichiers-I18N-1.png\" alt=\"Architecture fichier i-18next\" width=\"575\" height=\"336\" srcset=\"https:\/\/poyesis.fr\/wp-content\/uploads\/2024\/02\/Architecture-fichiers-I18N-1.png 575w, https:\/\/poyesis.fr\/wp-content\/uploads\/2024\/02\/Architecture-fichiers-I18N-1-300x175.png 300w\" sizes=\"(max-width: 575px) 100vw, 575px\" \/><figcaption id=\"caption-attachment-865\" class=\"wp-caption-text\">Architecture fichier i-18next<\/figcaption><\/figure>\n<h3>3 \u2013 Initialiser i18next<\/h3>\n<p>Maintenant que les packages et les fichiers de traduction sont pr\u00eats, initialisons i18N.<\/p>\n<p>Pour cela, cr\u00e9ez un nouveau fichier i18n.js dans le r\u00e9pertoire src et ajoutez-y le code suivant\u00a0:<\/p>\n<p>&nbsp;<\/p>\n<pre><b>import<\/b> i18n from 'i18next';\r\n<b>import<\/b> { initReactI18next } from 'react-i18next';\r\n<b>import<\/b> LanguageDetector from 'i18next-browser-languagedetector';\r\n<b>import<\/b> Backend from 'i18next-http-backend';\r\ni18n\r\n    .use(Backend)\r\n    .use(LanguageDetector)\r\n    .use(initReactI18next)\r\n    .init({\r\n        debug: <b>true<\/b>,\r\n        fallbackLng: 'en',\r\n        });\r\n<b>export<\/b> <b>default<\/b> i18n;<\/pre>\n<p>&nbsp;<\/p>\n<p>Parmi toutes ces lignes, une est assez int\u00e9ressante\u00a0:<\/p>\n<pre>fallbackLng :\u2019en\u2019;<\/pre>\n<p>Concr\u00e8tement, elle dit \u00e0 l\u2019application\u00a0: \u00ab\u00a0si tu ne trouves pas de fichier de traduction pour la langue de recherch\u00e9e par l\u2019internaute, affiche les contenus en anglais.\u00a0\u00bb.<\/p>\n<p>Sachant qu\u2019un quart des internautes au monde comprennent l\u2019anglais, c\u2019est un choix judicieux d\u2019en faire la <b>langue par d\u00e9faut<\/b>.<\/p>\n<p>Une fois que vous avez cr\u00e9\u00e9 ce fichier, allez dans le fichier index.js, lui aussi situ\u00e9 dans le r\u00e9pertoire \u201csrc\u201d. Rajoutez les lignes suivantes\u00a0:<\/p>\n<pre>import React from 'react';\r\nimport ReactDOM from 'react-dom\/client';\r\nimport '.\/index.css';\r\nimport App from '.\/App';\r\nimport reportWebVitals from '.\/reportWebVitals';\r\nimport '.\/i18n'; \/\/ &lt;--- add this\r\n\r\n\/\/ ... other code ...<\/pre>\n<p>Gr\u00e2ce au composant \u00ab\u00a0Suspense\u00a0\u00bb, nous allons pouvoir charger les traductions de mani\u00e8re asynchrone. Sans lui, si une ressource n\u2019est pas disponible, votre app va afficher un vilain message d\u2019erreur \u00e0 l\u2019utilisateur.<\/p>\n<p>Ouvrez le fichier App.js et rajoutez les importations suivantes\u00a0:<\/p>\n<pre>import { Suspense } from 'react';\r\nimport { useTranslation} from 'react-i18next';\r\n\/\/ ...<\/pre>\n<p>Maintenant, modifions la fonction App()\u00a0:<\/p>\n<pre>import { Suspense } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nfunction App() {\r\n\u00a0\u00a0const { t, i18n } = useTranslation();\r\n\u00a0\u00a0return (\r\n\u00a0\u00a0\u00a0\u00a0&lt;div&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h1&gt;&lt;\/h1&gt;\r\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\r\n\u00a0\u00a0);\r\n}\r\nexport default function WrappedApp() {\r\n\u00a0\u00a0return (\r\n\u00a0\u00a0\u00a0\u00a0&lt;Suspense fallback=\"...loading\"&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;App \/&gt;\r\n\u00a0\u00a0\u00a0\u00a0&lt;\/Suspense&gt;\r\n\u00a0\u00a0)\r\n}<\/pre>\n<p>Pr\u00eatez attention \u00e0 la ligne :<\/p>\n<pre>const { t, i18n } = useTranslation() ;<\/pre>\n<p>&lsquo;T&rsquo; est la fonction que nous allons utiliser pour traduire nos textes.<\/p>\n<p>&lsquo;I18n&rsquo; est l\u2019objet que nous allons utiliser pour charger la liste des langues et les interchanger.<\/p>\n<h3>4 \u2013 Traduisons nos textes pleins avec i18N<\/h3>\n<p>Enfin, le moment tant attendu est arriv\u00e9\u00a0: traduisons nos textes.<\/p>\n<p>Pour \u00e7a, commencez (logiquement) par ajouter des traductions dans chacun de vos fichiers translation.json.<\/p>\n<p>Voici comment faire avec la version anglaise.<\/p>\n<pre>{\r\n\u00a0\u00a0\"main\": {\r\n\u00a0\u00a0\u00a0\u00a0\"header\": \"Welcome to the app!\"\r\n\u00a0\u00a0}\r\n}<\/pre>\n<p>\u00ab\u00a0header\u00a0\u00bb ici est la cl\u00e9 de traduction que l\u2019on va utiliser.<\/p>\n<p>Si vous souhaitez traduire d\u2019autres contenus, changez juste la cl\u00e9 et reprenez le m\u00eame processus.<\/p>\n<p>Refaite la m\u00eame chose avec les autres langues et c\u2019est bon.<\/p>\n<p>Maintenant, il est temps de les utiliser.<\/p>\n<p>Rien de plus simple\u00a0: nous allons passer les noms des cl\u00e9s des textes \u00e0 traduire \u00e0 la fonction \u00ab\u00a0t\u00a0\u00bb. Au moment o\u00f9 le mobinaute voudra charger les contenus, ce sera la valeur de la cl\u00e9 qui sera affich\u00e9e automatiquement.<\/p>\n<p>Maintenant, allez dans le fichier src\/App.js et ajoutez une traduction pour la balise h1\u00a0:<\/p>\n<pre>\/\/ ... imports ...\r\n<b>function<\/b> App() {\r\n    const { t, i18n } = useTranslation();\r\n<b>    return<\/b> (\r\n    &lt;div&gt;\r\n        &lt;h1&gt;{t('main.header')}&lt;\/h1&gt;\r\n    &lt;\/div&gt;\r\n    );\r\n}\r\n\/\/ ... other code ...<\/pre>\n<p>Ensuite, rebootez l\u2019application en entrant la commande npm start dans votre invite de commande. Puis rendez-vous sur votre serveur local (http:\/\/localhost:3000) et v\u00e9rifiez\u00a0: tada, vos textes sont traduits.<\/p>\n<p>Pour afficher la traduction de votre choix, allez dans le fichier i18n.js et ajoutez la commande\u00a0:<\/p>\n<pre>i18n.changeLanguage('ES');<\/pre>\n<p>ES ici signifie espagnol. Mais si vous avez une autre langue en t\u00eate, remplacez ES par ladite langue.<\/p>\n<p>\u00c7a y est\u00a0! Vous venez de cr\u00e9er votre premier <b>contenu traduit<\/b>. Vous n\u2019aurez plus qu\u2019\u00e0 ins\u00e9rer les traductions de chaque contenu dans les fichiers translation.js correspondants.<\/p>\n<h3>5 \u2013 Faire appel \u00e0 une agence de d\u00e9veloppement web ou \u00e0 des traducteurs freelances<\/h3>\n<p>Ok.<\/p>\n<p>Vous savez maintenant comment traduire votre app.<\/p>\n<p>Sauf que vous vous en doutez, si votre app comporte plusieurs interfaces remplies de textes\u2026 cr\u00e9er votre <b>dictionnaire multilingue<\/b> va vous prendre des mois.<\/p>\n<p>Sans compter la gestion des <b>balises \ud83e\udd2f<\/b><\/p>\n<p>Vous avez 2 options\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\">soit vous mobilisez votre \u00e9quipe pendant plusieurs semaines sur \u00e7a\u00a0;<\/li>\n<li aria-level=\"1\">soit vous faites appel \u00e0 des <b>traducteurs professionnels<\/b> en freelance ou \u00e0 une agence de d\u00e9veloppement web et \u00e9conomisez du temps.<\/li>\n<\/ul>\n<p>\u00c0 vous de voir.<\/p>\n<p>Mais si vous voulez en discuter, <a href=\"https:\/\/poyesis.fr\/contactez-nous\/\">n\u2019h\u00e9sitez pas \u00e0 faire un message \u00e0 notre chef de projet informatique<\/a>. En fonction de votre situation, il vous aiguillera vers la meilleure solution (et c\u2019est sans engagement \ud83d\ude01).<\/p>\n<p><a href=\"https:\/\/poyesis.fr\/contactez-nous\/\">C\u2019est par ici<\/a>.<\/p>\n<h2>3+1 Fails r\u00e9currents de traduction d\u2019app \u00e0 \u00e9viter \u00e0 tout prix<\/h2>\n<p>Avant de nous s\u00e9parer, parlons des menaces qui planent sur vos tentatives de traduction.<\/p>\n<p>Et ils sont plus nombreux et plus vicieux que vous ne pouvez le croire.<\/p>\n<p>On vous en a s\u00e9lectionn\u00e9 les 4 plus dangereux.<\/p>\n<h3>1 \u2013 Oublier le formatage et la culture des pays vis\u00e9s<\/h3>\n<p>Aux USA, ils n\u2019affichent pas le temps comme nous.<\/p>\n<p>Tandis que nous sommes habitu\u00e9\u00b7e\u00b7s au format jour\/mois\/ann\u00e9es, les am\u00e9ricains pr\u00e9f\u00e8rent le format jour\/ann\u00e9e\/mois.<\/p>\n<p>Pareil pour le calendrier. Pour nous, la semaine commence le lundi, contre dimanche chez l\u2019Oncle Sam.<\/p>\n<p>Pourquoi je vous parle de tout \u00e7a\u00a0? Pour vous mettre la puce \u00e0 l\u2019oreille sur les erreurs de formatage et de m\u00e9triques.<\/p>\n<p>Et elles ne concernent pas que l\u2019heure. La monnaie, les fuseaux horaires, les unit\u00e9s de mesure\u2026 tout peut varier.<\/p>\n<p>Ps : m\u00e9fiez vous des r\u00e8gles de <b>grammaire<\/b> (You \ud83c\uddec\ud83c\udde7 = Tu et Vous en fran\u00e7ais).<\/p>\n<h3>2 \u2013 Les symboles bizarres face aux caract\u00e8res non latins<\/h3>\n<p>Vous les avez s\u00fbrement d\u00e9j\u00e0 vus.<\/p>\n<p>Ces symboles qui ne veulent humainement rien dire, mais qui sont parfaitement logiques pour les logiciels.<\/p>\n<p>C\u2019est ce qu\u2019il se passe quand vous essayez d\u2019afficher des caract\u00e8res non latins \u2013 chinois,\u00a0 hindi, arabe, etc. &#8211; avec un formatage purement latin (ex\u00a0: ASCII).<\/p>\n<p>Heureusement, la solution ici est assez simple\u00a0: utilisez le format unicode autant que possible.<\/p>\n<h3>3 \u2013 Des boutons calibr\u00e9s au millim\u00e8tre<\/h3>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-866\" src=\"https:\/\/poyesis.fr\/blogs\/wp-content\/uploads\/2024\/02\/image2-1.png\" alt=\"\" width=\"1470\" height=\"1960\" srcset=\"https:\/\/poyesis.fr\/wp-content\/uploads\/2024\/02\/image2-1.png 1470w, https:\/\/poyesis.fr\/wp-content\/uploads\/2024\/02\/image2-1-225x300.png 225w, https:\/\/poyesis.fr\/wp-content\/uploads\/2024\/02\/image2-1-768x1024.png 768w, https:\/\/poyesis.fr\/wp-content\/uploads\/2024\/02\/image2-1-1152x1536.png 1152w, https:\/\/poyesis.fr\/wp-content\/uploads\/2024\/02\/image2-1-750x1000.png 750w, https:\/\/poyesis.fr\/wp-content\/uploads\/2024\/02\/image2-1-1140x1520.png 1140w\" sizes=\"(max-width: 1470px) 100vw, 1470px\" \/><\/p>\n<p>Dans notre article sur <a href=\"https:\/\/poyesis.fr\/blogs\/lois-ux\/\" target=\"_blank\" rel=\"noopener\">les 32 lois de l\u2019UX design<\/a>, on vous avait parl\u00e9 des dangers de ne pas laisser de marge autour de vos contenus.<\/p>\n<p>Et \u00e7a revient encore. Car si votre <a href=\"https:\/\/poyesis.fr\/blogs\/7-experts-essentiels-a-votre-equipe-de-developpement-dapp-mobile\/\" target=\"_blank\" rel=\"noopener\">\u00e9quipe de d\u00e9veloppement<\/a> est anglophone et qu\u2019elle pr\u00e9voit des espaces adapt\u00e9s uniquement \u00e0 l\u2019anglais, vous courrez \u00e0 la catastrophe.<\/p>\n<p>Pourquoi\u00a0? Parce que toutes les langues n\u2019ont pas besoin du m\u00eame <b>nombre de mots<\/b>\/caract\u00e8res pour exprimer la m\u00eame id\u00e9e.<\/p>\n<p>\u201cBonjour\u201d\ud83c\uddeb\ud83c\uddf7 (7 caract\u00e8res) = \u201cHello\u201d\ud83c\uddec\ud83c\udde7 (5 caract\u00e8res) = \u201cGuten Morgen\u201d\ud83c\udde9\ud83c\uddea (12 caract\u00e8res).<\/p>\n<p>Certaines, comme l\u2019anglais, sont tr\u00e8s concises. D\u2019autres, \u00e0 l\u2019instar du fran\u00e7ais et de l\u2019allemand, n\u00e9cessitent beaucoup plus de caract\u00e8res.<\/p>\n<p>Fatalement, si \u00e7a n\u2019a pas \u00e9t\u00e9 pris en compte, vos textes vont d\u00e9border de vos \u00e9l\u00e9ments graphiques. Idem lorsque vos utilisateurs utilisent des <b>extensions <\/b>sur leurs <b>moteurs de recherche<\/b> pour vous comprendre.<\/p>\n<p>Pour \u00e9viter \u00e7a, pr\u00e9voyez toujours 30 % de marge autour des textes lorsque vous concevez la <b>mise en page de vos interfaces<\/b>.<\/p>\n<h3>4 \u2013 Des designs pens\u00e9s pour une seule langue.<\/h3>\n<p>Vous lisez ce texte de gauche \u00e0 droite.<\/p>\n<p>Si je le traduis en japonais, vous ne le ferez plus de droite \u00e0 gauche, mais de haut en bas. Et si j\u2019opte pour l\u2019arable, vous lirez de droite \u00e0 gauche.<\/p>\n<p>En conclusion\u00a0: v\u00e9rifiez toujours que vos textes traduits puissent \u00eatre lus par toutes les audiences et dans tous les sens.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Parlez la langue de vos clients ou mourez 20 %. C\u2019est le nombre de conversions que vous ratez lorsque votre app d\u2019e-commerce n\u2019est pas disponible dans la langue maternelle d\u2019un segment d\u2019utilisateurs \ud83e\udd72 (source). Et m\u00eame si votre app est g\u00e9nialissime, il y a tr\u00e8s peu de chances qu\u2019un internaute aille apprendre une langue nouvelle [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":868,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jnews-multi-image_gallery":[],"jnews_single_post":{"format":"standard","override":[{"template":"7","single_blog_custom":"553","parallax":"1","fullscreen":"1","layout":"no-sidebar-narrow","sidebar":"default-sidebar","second_sidebar":"default-sidebar","sticky_sidebar":"1","share_position":"floatbottom","share_float_style":"share-normal","show_share_counter":"1","show_view_counter":"1","show_featured":"1","show_post_meta":"1","show_post_author":"1","show_post_author_image":"1","show_post_date":"1","post_date_format":"default","post_date_format_custom":"Y\/m\/d","show_post_category":"1","post_reading_time_wpm":"300","post_calculate_word_method":"str_word_count","show_zoom_button":"0","zoom_button_out_step":"2","zoom_button_in_step":"3","number_popup_post":"1","show_post_related":"1"}],"image_override":[{"single_post_thumbnail_size":"crop-500","single_post_gallery_size":"crop-500"}],"trending_post_position":"meta","trending_post_label":"Trending","sponsored_post_label":"Sponsored by","disable_ad":"0","subtitle":""},"jnews_primary_category":[],"jnews_override_bookmark_settings":{"override_bookmark_button":"0","override_show_bookmark_button":"0"},"jnews_override_counter":{"view_counter_number":"0","share_counter_number":"0","like_counter_number":"0","dislike_counter_number":"0"},"footnotes":""},"categories":[196],"tags":[81,217,218,51],"class_list":["post-861","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-mobile","tag-developpement-web","tag-i18n","tag-react","tag-react-native"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/posts\/861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/comments?post=861"}],"version-history":[{"count":1,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/posts\/861\/revisions"}],"predecessor-version":[{"id":1184,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/posts\/861\/revisions\/1184"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/media\/868"}],"wp:attachment":[{"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/media?parent=861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/categories?post=861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/tags?post=861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}