{"id":9778,"date":"2022-03-12T19:05:57","date_gmt":"2022-03-12T18:05:57","guid":{"rendered":"https:\/\/www.ibidemgroup.com\/edu\/?p=9778"},"modified":"2024-03-04T12:35:25","modified_gmt":"2024-03-04T11:35:25","slug":"traduccion-software-servidor-apollo-graphql","status":"publish","type":"post","link":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/","title":{"rendered":"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL."},"content":{"rendered":"\n<p class=\"has-text-align-center wp-block-paragraph\"><span style=\"color: #0693e3;\" class=\"color\">Chema ha traducido este art\u00edculo sobre <\/span><a href=\"https:\/\/www.ibidemgroup.com\/traduccion-paginas-web.php\"><span style=\"color: #0693e3;\" class=\"color\">traducci\u00f3n de software<\/span><\/a><span style=\"color: #0693e3;\" class=\"color\">, para el Blog de la <a href=\"https:\/\/www.ibidemgroup.com\/\">agencia de traducci\u00f3n<\/a> Ibidem Group.<\/span><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><strong><span style=\"color: #0693e3;\" class=\"color\">Texto original escrito por Olivier Guimbal<\/span><\/strong> <strong><span style=\"color: #0693e3;\" class=\"color\">y publicado en dev.to<\/span><\/strong><span style=\"color: #0693e3;\" class=\"color\"> <\/span><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">***<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_89 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\">INDICE<\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#Indice_de_contenidos\" >\u00cdndice de contenidos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#El_problema\" >El problema<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#El_enfoque_de_smarloc\" >El enfoque de smarloc.<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#Expressjs_%C2%BFComo_se_configura\" >Express.js: \u00bfC\u00f3mo se configura?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#Apollo_GraphQL_%C2%BFComo_se_configura\" >Apollo GraphQL: \u00bfC\u00f3mo se configura?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#Generacion_de_traducciones\" >Generaci\u00f3n de traducciones<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#Conclusiones_finales\" >Conclusiones finales<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Indice_de_contenidos\"><\/span>\u00cdndice de contenidos<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>El problema<\/li><li>Enfoque de smarloc<\/li><li>Express.js: \u00bfC\u00f3mo se configura?<\/li><li>Apollo GraphQL: \u00bfC\u00f3mo se configura?<\/li><li>Generaci\u00f3n de traducciones<\/li><li>Conclusi\u00f3n<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Digamos que tienes un servidor.<br>Digamos que est\u00e1s utilizando un servidor Express.js y\/o Apollo Graphql.<br>Digamos que tus usuarios hablan diferentes idiomas.<br>Digamos que vives en 2020, tu servidor es s\u00f3lo un servidor api, y no te preocupan los procesadores de plantillas (\u00abtemplate engines\u00bb).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83c\udf89 Si es as\u00ed este art\u00edculo es para t\u00ed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">He presentado <a href=\"https:\/\/github.com\/oguimbal\/smartloc\">otra biblioteca i18n<\/a> que desarroll\u00e9 para las necesidades de mi empresa y que (IMO) simplifica la creaci\u00f3n de la implementaci\u00f3n de servidores multi-idioma.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"El_problema\"><\/span>El problema<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando se escribe c\u00f3digo en un manejador de ruta Express, se tiene acceso al objeto \u00abrequest\u00bb original.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u00abbueno\u00bb <\/em>se dir\u00eda. <em>Puedo acceder a \u00abCookies\u00bb, a la cabecera \u00abAccept-Languages\u00bb, o a lo que sea que defina mi idioma de usuario, y traducir el contenido devuelto en base a eso.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A lo que yo responder\u00eda: De acuerdo, claro, pero \u00bfrealmente quieres llevar tu objeto de petici\u00f3n como un argumento de alg\u00fan tipo en toda tu base de c\u00f3digo, s\u00f3lo por conocer tu lenguaje de usuario?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfNo se siente un poco mal?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfNo est\u00e1s cansado de llamar a m\u00e9todos est\u00e1ticos extra\u00f1os con sintaxis extra\u00f1as para obtener una cadena traducida de tu c\u00f3digo?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfRealmente vas a refactorizar esos 500k archivos de c\u00f3digo uni-ling\u00fc\u00edstico que ya escribiste s\u00f3lo para a\u00f1adir soporte de idiomas?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo diablos se supone que se almacenan las cadenas traducibles?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si, como yo, cree que esto est\u00e1 mal, siga leyendo&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"El_enfoque_de_smarloc\"><\/span>El enfoque de smarloc.<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un buen ejemplo vale m\u00e1s que mil palabras:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>\/\/ before<\/code><br><code>const myFunction = () =&gt; `Hello, it is now ${new Date()}`; <\/code><br><code>\/\/ after <\/code><br><code>const myFunction = () =&gt; loc`Hello, it is now ${new Date()}`; <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfVes la diferencia? S\u00ed, hay &#8216;loc&#8217; delante de mi cadena.<br>Su funci\u00f3n ya no devuelve una &#8216;cadena&#8217;, sino un objeto &#8216;LocStr&#8217;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><p>Aqu\u00ed est\u00e1 el truco&#8230; no tienes que conocer tu idioma de usuario cuando emites la cadena que eventualmente tendr\u00e1 que ser traducida. Puedes pasar este objeto por toda tu aplicaci\u00f3n sin decirle al c\u00f3digo que lo manipula que no es una cadena real.<\/p>\n<p>&nbsp;<\/p><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--wCKWF-_C--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/i\/sqat1oczu6ge3wxepoc7.gif\" alt=\"latest\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La traducci\u00f3n ocurrir\u00e1 entonces en el \u00faltimo instante, cuando se serialice la respuesta json enviada a su cliente. Es entonces cuando se leer\u00e1 la cabecera &#8216;Accept-Language&#8217; o lo que sea, y cuando se traducir\u00e1n realmente las instancias de las cadenas &#8216;LocStr&#8217; en el json devuelto. En el \u00faltimo momento.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Expressjs_%C2%BFComo_se_configura\"><\/span>Express.js: \u00bfC\u00f3mo se configura?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--jwSPHjnY--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/i\/i3cu6x6c9ol5tzluv90k.png\" alt=\"expressjs\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En primer lugar (esto debe hacerse antes de que cualquier c\u00f3digo utilice smartloc), tendr\u00e1s que decir en qu\u00e9 idioma escribes tus cadenas.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>import {setDefaultlocale} from 'smartloc'; <\/code><br><br><code>\/\/ lets say our developpers use english in code <\/code><br><code>setDefaultLocale('en'); <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, a\u00f1adir\u00e1s un middleware Express.js que traducir\u00e1 el json devuelto sobre la marcha.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">importar traductor de 'smartloc\/express';<br><br>app.use(traductor()); <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Por defecto, buscar\u00e1 las traducciones que coincidan con la cabecera &#8216;Accept-Language&#8217; de las peticiones entrantes, y por defecto utilizar\u00e1 el idioma por defecto que hayas proporcionado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora puedes usar smartloc as\u00ed<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import {loc} from 'smartloc';<br> app.get('\/', (req, res) =&gt; {<br>     \/\/ sends a JSON object containing text to translate,<br>     \/\/ without bothering to translate it.<br>     res.json({<br>         \/\/ this string will get an automatic ID<br>         hello: loc<code>Hello !<\/code>,<br><code>    \/\/ notice that you can provide an ID like that     \/\/ and use regular templating syntax:     time: loc('myTime')`It is ${new Date()}, mate !`, });<\/code><br>});<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si ejecutas esto, notar\u00e1s que tu api devolver\u00e1 cosas como:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>     \"hello\": \"Hello !\",<br>     \"time\": \"It is , mate !\"<br> }<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>De acuerdo, eso est\u00e1 bien, pero c\u00f3mo eso no nos dice c\u00f3mo proporcionar traducciones reales a las cadenas&#8230;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed, para eso tendr\u00e1s que saltar a la secci\u00f3n de <a href=\"https:\/\/dev.to\/oguimbal\/i18n-express-apollo-graphql-server-translation-made-simple-33f5#translate\">Generar traducciones<\/a> \ud83d\ude42 .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Una versi\u00f3n sencilla de este ejemplo se encuentra <\/em><a href=\"https:\/\/github.com\/oguimbal\/smartloc\/blob\/master\/samples\/graphql\/main.ts\"><em>aqu\u00ed<\/em><\/a><em> (nb: proporciona traducciones codificadas, sin utilizar archivos de traducci\u00f3n)<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Apollo_GraphQL_%C2%BFComo_se_configura\"><\/span>Apollo GraphQL: \u00bfC\u00f3mo se configura?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--RAITO8Zk--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/i\/je29ur16rff5pks6ffcq.png\" alt=\"graphql\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Configurar un servidor Apollo GraphQL es casi lo mismo que configurar un servidor Express.js.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En resumen, es lo mismo que se describe en <a href=\"https:\/\/dev.to\/oguimbal\/i18n-express-apollo-graphql-server-translation-made-simple-33f5#express\">la secci\u00f3n <\/a><a href=\"https:\/\/dev.to\/oguimbal\/i18n-express-apollo-graphql-server-translation-made-simple-33f5#express\">anterior<\/a>, salvo que no tendr\u00e1 que utilizar el middleware traductor expr\u00e9s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En su lugar, tendr\u00e1 que declarar en su esquema qu\u00e9 cadenas son traducibles utilizando el tipo &#8216;GLocString&#8217; en lugar de &#8216;GraphQLString&#8217;, as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import {GLocString} from 'smartloc\/graphql';<br> \/\/\u2026<br> {<br>    type: GLocString,<br>    resolve: () =&gt; loc<code>Hello !<\/code> \/\/ will be translated<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Entonces construye tu servidor apollo as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import {localizeSchema, localizedContext} from 'smartloc\/graphql';<br> const apollo = new ApolloServer({<br>     schema: localizeSchema(schema),<br>     context: localizedContext(async http =&gt; {<br>         \/\/ build your own context here as usual<br>         return {};<br>     })<br> });<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Al hacerlo, todas las propiedades GLocString o JSOn de su esquema ser\u00e1n traducidas autom\u00e1ticamente cuando sus resolvedores devuelvan cosas que contengan instancias LocStr.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, al igual que en la explicaci\u00f3n de Express.js, salta a la secci\u00f3n <a href=\"https:\/\/dev.to\/oguimbal\/i18n-express-apollo-graphql-server-translation-made-simple-33f5#translate\">Generar traducciones<\/a> para saber c\u00f3mo refrescar tus traducciones \ud83d\ude42 .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Una versi\u00f3n sencilla de este ejemplo se encuentra <\/em><a href=\"https:\/\/github.com\/oguimbal\/smartloc\/blob\/master\/samples\/graphql\/main.ts\"><em>aqu\u00ed<\/em><\/a><em> (nb: proporciona traducciones codificadas, sin utilizar archivos de traducci\u00f3n)<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Generacion_de_traducciones\"><\/span><strong>Generaci\u00f3n de traducciones <\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si est\u00e1s aqu\u00ed, asumo que has le\u00eddo una de las dos secciones anteriores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Digamos que ahora quieres a\u00f1adir soporte para el franc\u00e9s. En primer lugar, a\u00f1ada algo como esto en la secci\u00f3n \u00abscripts\u00bb de su package.json:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>    \"scripts\": {<br>        \"collect\": \"smartloc collect --format=json --locales=fr-FR --defaultLocale=en-US --generateDefault\"<br>     }<br> }<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando ejecute npm run collect, se (re)generar\u00e1n dos archivos en el directorio i18n:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>en-us.json <\/strong>: Puedes olvidarte de este archivo, est\u00e1 aqu\u00ed como referencia porque pusiste la opci\u00f3n &#8211;generateDefault en la l\u00ednea de comandos, y puedes proporcionar traducciones en \u00e9l (en cuyo caso la cadena real en c\u00f3digo nunca llegar\u00e1 a tu cliente), pero puedes dejarlo como est\u00e1.<\/li><li><strong>fr-fr.json <\/strong>: Aqu\u00ed es donde tendr\u00e1s que poner tus traducciones.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">En estos archivos, las traducciones se agrupan por el punto izquierdo de los ID de las cadenas.<br>Por ejemplo, si tienes:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">loc<code>Automatic ID<\/code>;<br>loc('someId')<code>Some ID string<\/code>;<br>loc('someGroup.someId')<code>Some grouped ID string<\/code>;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Generar\u00e1 algo as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>    \"$default\": {<br>        \"\": { \"source\": \"Automatic ID\" },<br>        \"someId\": { \"source\": \"Some ID string\" }<br>     },<br>     \"someGroup\": {<br>         \"someId\": { \"source\": \"Some grouped ID string\" }<br>     }<br> }<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00f3lo tienes que a\u00f1adir un \u00abobjetivo\u00bb correspondiente a cada \u00abfuente\u00bb, y estar\u00e1s listo. Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{ <br>   \"source\": \"Some grouped ID string\",<br>   \"target\": \"Une chaine avec ID group\u00e9\"<br> }<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Luego, al iniciar, s\u00f3lo hay que decirle a smartloc d\u00f3nde debe buscar las traducciones:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import {loadAllLocales} from 'smartloc';<br> import path from 'path';<br> \/\/ load all locales in the i18n directory<br> \/\/ \u2026 you could also use loadLocale() to only load one locale file.<br> loadAllLocales(path.resolve(__dirname, 'i18n'));<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83c\udf89 \u00a1Aqu\u00ed est\u00e1! Si tus archivos de traducci\u00f3n est\u00e1n bien, \u00a1tendr\u00e1s un servidor de API multiling\u00fce totalmente funcional!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Te dejar\u00e9 adivinar c\u00f3mo a\u00f1adir m\u00e1s de una traducci\u00f3n \ud83d\ude42<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusiones_finales\"><\/span>Conclusiones finales<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Esta introducci\u00f3n es una muestra de lo que se puede hacer con esta biblioteca.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Llevamos meses us\u00e1ndolo @ <a href=\"https:\/\/justice.cool\/\">justice.cool<\/a> y debo decir que estoy bastante contento con \u00e9l.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de que alguien comente algo como \u00abya sabes, hay otras librer\u00edas que\u00bb &#8230; S\u00e9 que ya hay muchas otras librer\u00edas i18n, pero me apetec\u00eda desarrollar una m\u00e1s sencilla, que <strong>me <\/strong>pareciera bien. Si a ti no te funciona, pues&#8230; mala suerte compa\u00f1ero. Sigue usando esos monstruos que hay por ah\u00ed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para saber un poco m\u00e1s sobre los usos avanzados (transformar cadenas, almacenar cadenas traducibles, traducciones manuales, &#8230; consulta <a href=\"https:\/\/github.com\/oguimbal\/smartloc\">el repo de smartloc<\/a> ), o abre un tema, estar\u00e9 encantado de responder.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-right kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;right&quot;,&quot;id&quot;:&quot;9778&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;5&quot;,&quot;greet&quot;:&quot;Rate this post&quot;,&quot;legend&quot;:&quot;0\\\/5 - (0 votos)&quot;,&quot;size&quot;:&quot;24&quot;,&quot;title&quot;:&quot;C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\\\/Apollo GraphQL.&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} - ({count} {votes})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 19.2px;\">\n            <span class=\"kksr-muted\">Rate this post<\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"Traducci\u00f3n de Ingl\u00e9s a Espa\u00f1ol de un interesant\u00edsimo art\u00edculo de Olivier Guimbal, M\u00e1ster en M\u00e9todos Computacionales Avanzados para Aeron\u00e1utica, que nos explica como configurar un servidor Express\/Apollo GraphQL para generar traducciones de forma sencilla y as\u00ed lograr tus objetivos de internacionalizaci\u00f3n (i18n)","protected":false},"author":8,"featured_media":9948,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[619],"tags":[538,539,198],"class_list":["post-9778","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-traduccion-automatica","tag-apollo-graphql","tag-express","tag-traduccion-software"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"author\" content=\"Mauri Fernandez\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"IBIDEM EDU |\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2022-03-12T18:05:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2024-03-04T11:35:25+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#article\",\"name\":\"C\\u00f3mo generar traducciones de forma sencilla desde un servidor Express\\\/Apollo GraphQL.\",\"headline\":\"C\\u00f3mo generar traducciones de forma sencilla desde un servidor Express\\\/Apollo GraphQL.\",\"author\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/author\\\/mauri\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/traduccion-servidor-graphql-express-apollo.jpg\",\"width\":1140,\"height\":380,\"caption\":\"C\\u00f3mo internacionalizar y traducir con un servidor Express\\\/Apollo\"},\"datePublished\":\"2022-03-12T19:05:57+01:00\",\"dateModified\":\"2024-03-04T12:35:25+01:00\",\"inLanguage\":\"es-ES\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#webpage\"},\"articleSection\":\"Traduccion Automatica, Apollo Graphql, Express, traduccion software\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/#listItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-automatica\\\/#listItem\",\"name\":\"Traduccion Automatica\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-automatica\\\/#listItem\",\"position\":2,\"name\":\"Traduccion Automatica\",\"item\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-automatica\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#listItem\",\"name\":\"C\\u00f3mo generar traducciones de forma sencilla desde un servidor Express\\\/Apollo GraphQL.\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/#listItem\",\"name\":\"Inicio\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#listItem\",\"position\":3,\"name\":\"C\\u00f3mo generar traducciones de forma sencilla desde un servidor Express\\\/Apollo GraphQL.\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-automatica\\\/#listItem\",\"name\":\"Traduccion Automatica\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/#organization\",\"name\":\"IBIDEM EDU\",\"url\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/author\\\/mauri\\\/#author\",\"url\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/author\\\/mauri\\\/\",\"name\":\"Mauri Fernandez\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b7b325afa7a8af8c21ac26bbaac9118b81803ff10d6c403a1b84df7063a874dd?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Mauri Fernandez\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#webpage\",\"url\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/\",\"name\":\"C\\u00f3mo generar traducciones de forma sencilla desde un servidor Express\\\/Apollo GraphQL.\",\"inLanguage\":\"es-ES\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/author\\\/mauri\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/author\\\/mauri\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/traduccion-servidor-graphql-express-apollo.jpg\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#mainImage\",\"width\":1140,\"height\":380,\"caption\":\"C\\u00f3mo internacionalizar y traducir con un servidor Express\\\/Apollo\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-servidor-apollo-graphql\\\/#mainImage\"},\"datePublished\":\"2022-03-12T19:05:57+01:00\",\"dateModified\":\"2024-03-04T12:35:25+01:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/#website\",\"url\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/\",\"name\":\"IBIDEM EDU\",\"inLanguage\":\"es-ES\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL.","description":"","canonical_url":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#article","name":"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL.","headline":"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL.","author":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/author\/mauri\/#author"},"publisher":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.ibidemgroup.com\/edu\/wp-content\/uploads\/2022\/03\/traduccion-servidor-graphql-express-apollo.jpg","width":1140,"height":380,"caption":"C\u00f3mo internacionalizar y traducir con un servidor Express\/Apollo"},"datePublished":"2022-03-12T19:05:57+01:00","dateModified":"2024-03-04T12:35:25+01:00","inLanguage":"es-ES","mainEntityOfPage":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#webpage"},"isPartOf":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#webpage"},"articleSection":"Traduccion Automatica, Apollo Graphql, Express, traduccion software"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.ibidemgroup.com\/edu\/#listItem","position":1,"name":"Inicio","item":"https:\/\/www.ibidemgroup.com\/edu\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-automatica\/#listItem","name":"Traduccion Automatica"}},{"@type":"ListItem","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-automatica\/#listItem","position":2,"name":"Traduccion Automatica","item":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-automatica\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#listItem","name":"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL."},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.ibidemgroup.com\/edu\/#listItem","name":"Inicio"}},{"@type":"ListItem","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#listItem","position":3,"name":"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL.","previousItem":{"@type":"ListItem","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-automatica\/#listItem","name":"Traduccion Automatica"}}]},{"@type":"Organization","@id":"https:\/\/www.ibidemgroup.com\/edu\/#organization","name":"IBIDEM EDU","url":"https:\/\/www.ibidemgroup.com\/edu\/"},{"@type":"Person","@id":"https:\/\/www.ibidemgroup.com\/edu\/author\/mauri\/#author","url":"https:\/\/www.ibidemgroup.com\/edu\/author\/mauri\/","name":"Mauri Fernandez","image":{"@type":"ImageObject","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/b7b325afa7a8af8c21ac26bbaac9118b81803ff10d6c403a1b84df7063a874dd?s=96&d=mm&r=g","width":96,"height":96,"caption":"Mauri Fernandez"}},{"@type":"WebPage","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#webpage","url":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/","name":"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL.","inLanguage":"es-ES","isPartOf":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/#website"},"breadcrumb":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#breadcrumblist"},"author":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/author\/mauri\/#author"},"creator":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/author\/mauri\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.ibidemgroup.com\/edu\/wp-content\/uploads\/2022\/03\/traduccion-servidor-graphql-express-apollo.jpg","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#mainImage","width":1140,"height":380,"caption":"C\u00f3mo internacionalizar y traducir con un servidor Express\/Apollo"},"primaryImageOfPage":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/#mainImage"},"datePublished":"2022-03-12T19:05:57+01:00","dateModified":"2024-03-04T12:35:25+01:00"},{"@type":"WebSite","@id":"https:\/\/www.ibidemgroup.com\/edu\/#website","url":"https:\/\/www.ibidemgroup.com\/edu\/","name":"IBIDEM EDU","inLanguage":"es-ES","publisher":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/#organization"}}]},"og:locale":"es_ES","og:site_name":"IBIDEM EDU |","og:type":"article","og:title":"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL.","og:url":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/","article:published_time":"2022-03-12T18:05:57+00:00","article:modified_time":"2024-03-04T11:35:25+00:00","twitter:card":"summary_large_image","twitter:title":"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL."},"aioseo_meta_data":{"post_id":"9778","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-09-12 16:22:10","updated":"2024-03-04 11:54:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.ibidemgroup.com\/edu\/\" title=\"Inicio\">Inicio<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-automatica\/\" title=\"Traduccion Automatica\">Traduccion Automatica<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tC\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL.\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Inicio","link":"https:\/\/www.ibidemgroup.com\/edu\/"},{"label":"Traduccion Automatica","link":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-automatica\/"},{"label":"C\u00f3mo generar traducciones de forma sencilla desde un servidor Express\/Apollo GraphQL.","link":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-servidor-apollo-graphql\/"}],"_links":{"self":[{"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/posts\/9778","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/comments?post=9778"}],"version-history":[{"count":30,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/posts\/9778\/revisions"}],"predecessor-version":[{"id":10965,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/posts\/9778\/revisions\/10965"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/media\/9948"}],"wp:attachment":[{"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/media?parent=9778"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/categories?post=9778"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/tags?post=9778"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}