{"id":1922,"date":"2023-05-16T13:53:14","date_gmt":"2023-05-16T13:53:14","guid":{"rendered":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?p=1922"},"modified":"2023-06-28T05:10:08","modified_gmt":"2023-06-28T05:10:08","slug":"flutter-do-you-speak-english-parles-tu-francais-hablas-espanol","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/","title":{"rendered":"Flutter: Do you speak English?, Parles-tu fran\u00e7ais? Hablas espa\u00f1ol?"},"content":{"rendered":"<h1 id=\"flutter-do-you-speak-english-parles-tu-fran\u00e7ais-hablas-espa\u00f1ol\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1952\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/Screenshot_1.jpg\" alt=\"\" width=\"757\" height=\"481\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/Screenshot_1.jpg 757w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/Screenshot_1-300x191.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/Screenshot_1-610x388.jpg 610w\" sizes=\"auto, (max-width: 757px) 100vw, 757px\" \/><\/h1>\n<p><strong>Flutter<\/strong>, por defecto, s\u00f3lo proporciona localizaciones para ingl\u00e9s de Estados Unidos. Por lo tanto, si queremos que nuestra aplicaci\u00f3n est\u00e9 localizada en castellano, vamos a tener que indic\u00e1rselo. Veamos c\u00f3mo.<\/p>\n<p><!--more--><\/p>\n<h2 id=\"configurando-nuestra-aplicaci\u00f3n\">Configurando nuestra aplicaci\u00f3n<\/h2>\n<p>Lo primero que debemos hacer es a\u00f1adir en nuestro fichero <em>pubspec.yaml<\/em> el paquete <strong>flutter_localizations<\/strong>. Lo correcto es que est\u00e9 justo debajo del <em>sdk:flutter<\/em> o tambi\u00e9n podemos instalarlo desde la consola con la siguiente l\u00ednea de comando: <code>flutter pub add flutter_localizations --sdk=flutter<\/code><\/p>\n<blockquote><p>Nuestro fichero <em>pubspec.yaml<\/em> deber\u00eda quedar as\u00ed:<\/p><\/blockquote>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">dependencies:\r\nflutter:\r\n  sdk: flutter\r\nflutter_localizations:\r\n  sdk: flutter\r\n<\/pre>\n<p>Esto nos dar\u00e1 acceso a todo lo necesario para continuar internacionalizando nuestra aplicaci\u00f3n. Entre estas cosas, el paquete nos da acceso a los delegados que controlan las traducciones necesarias para los widgets de Android o de iOS que utilicemos, as\u00ed c\u00f3mo las traducciones de otros widgets gen\u00e9ricos de <strong>Flutter<\/strong>.<\/p>\n<blockquote><p>Estos delegados respectivamente son:<\/p><\/blockquote>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">GlobalMaterialLocalizations.delegate\r\nGlobalCupertinoLocalizations.delegate\r\nGlobalWidgetsLocalizations.delegate\r\n<\/pre>\n<p>Para usarlos en nuestra aplicaci\u00f3n, deberemos a\u00f1adirlos en el constructor de nuestra <em>MaterialApp<\/em> como <em>localizationsDelegates<\/em><\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">return const MaterialApp(\r\n   localizationsDelegates: &#x5B;\r\n     GlobalMaterialLocalizations.delegate,\r\n     GlobalWidgetsLocalizations.delegate,\r\n     GlobalCupertinoLocalizations.delegate\r\n         \r\n   ]);\r\n<\/pre>\n<p>Mas adelante veremos c\u00f3mo crear nuestro propio delegado para traducir\u00a0 cadenas de textos, pero por ahora, sigamos configurando la aplicaci\u00f3n.<\/p>\n<p>Lo siguiente que debemos hacer es indicarle qu\u00e9 idiomas vamos a soportar. Para ello debemos seguir modificando el constructor de nuestra <em>MaterialApp<\/em>. En el ejemplo, vamos a soportar el espa\u00f1ol de Espa\u00f1a e ingl\u00e9s gen\u00e9rico, sin c\u00f3digo de pa\u00eds.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">return const MaterialApp(\r\n    localizationsDelegates: &#x5B;\r\n      GlobalMaterialLocalizations.delegate,\r\n      GlobalWidgetsLocalizations.delegate,\r\n      GlobalCupertinoLocalizations.delegate\r\n         \r\n    ],\r\n    supportedLocales: const &#x5B;\r\n      Locale('es', 'ES'), \/\/Espa\u00f1ol de espa\u00f1a\r\n      Locale('en'),       \/\/Ingl\u00e9s, cualquier pa\u00eds\r\n    ],);\r\n<\/pre>\n<p>Una vez a\u00f1adidos los idiomas que vamos a soportar, ya podr\u00edamos arrancar nuestra aplicaci\u00f3n y, por ejemplo, si colocamos un <code>CalendarDatePicker<\/code> en nuestra p\u00e1gina principal y cambiamos el idioma de nuestro tel\u00e9fono de Espa\u00f1ol a Ingl\u00e9s, veremos c\u00f3mo el primer d\u00eda de la semana del calendario cambia de lunes a domingo y viceversa.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">class _MyHomePageState extends State&amp;lt;MyHomePage&amp;gt; {\r\n @override\r\n Widget build(BuildContext context) {\r\n   return Scaffold(\r\n     appBar: AppBar(\r\n       title: Text(widget.title),\r\n     ),\r\n     body: Column(\r\n       mainAxisAlignment: MainAxisAlignment.start,\r\n       children: &amp;lt;Widget&amp;gt;&#x5B;\r\n          CalendarDatePicker(\r\n               initialDate: DateTime.now(),\r\n               firstDate: DateTime(1900),\r\n               lastDate: DateTime(2100),\r\n               onDateChanged: (value) {}),\r\n       ],\r\n     ),\r\n   );\r\n }\r\n}\r\n<\/pre>\n<p data-wp-editing=\"1\"><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/change_language.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1923\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/change_language-460x1024.png\" alt=\"Cambiamos el idioma del tel\u00e9fono\" width=\"460\" height=\"1024\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/change_language-460x1024.png 460w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/change_language-135x300.png 135w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/change_language.png 597w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><\/a><\/p>\n<p data-wp-editing=\"1\"><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/spanish_calendar.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1929\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/spanish_calendar.png\" alt=\"Calendario en espa\u00f1ol\" width=\"596\" height=\"622\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/spanish_calendar.png 596w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/spanish_calendar-287x300.png 287w\" sizes=\"auto, (max-width: 596px) 100vw, 596px\" \/><\/a><\/p>\n<p data-wp-editing=\"1\"><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/english_calendar.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1924\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/english_calendar.png\" alt=\"Calendario en ingl\u00e9s\" width=\"597\" height=\"611\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/english_calendar.png 597w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/english_calendar-293x300.png 293w\" sizes=\"auto, (max-width: 597px) 100vw, 597px\" \/><\/a><\/p>\n<h2 id=\"construyendo-nuestro-propio-delegado\">Construyendo nuestro propio delegado<\/h2>\n<p>Ahora veamos c\u00f3mo hacer para traducir nuestras propias cadenas de texto. Como ya hemos dicho, vamos a necesitar crear un delegado. Lo bueno es que, de la parte de \u00abcrear el delegado\u00bb se va encargar el generador de c\u00f3digo de <em>Flutter<\/em>. Nosotros s\u00f3lo tenemos que crear un fichero de configuraci\u00f3n con formato <em>.yaml<\/em>, los ficheros de recursos con formato <em>.arb<\/em> y habilitar el generador de c\u00f3digo de <em>Flutter<\/em><\/p>\n<p>Comencemos por el fichero de configuraci\u00f3n. Este fichero lo colocamos en la ra\u00edz del proyecto y, como estamos hablando de localizar nuestra aplicaci\u00f3n, lo podemos llamar <em>l10n.yaml<\/em>.<br \/>\nEl contenido del fichero ser\u00e1 el siguiente:<\/p>\n<blockquote><p>l10n.yaml<\/p>\n<pre class=\"brush: yaml; title: ; notranslate\" title=\"\">arb-dir: lib\/l10n\r\ntemplate-arb-file: strings_es.arb\r\noutput-localization-file: app_localizations.dart\r\nuntranslated-messages-file: untranslated.txt\r\n<\/pre>\n<\/blockquote>\n<ul>\n<li><strong>arb-dir: <\/strong>Indica la carpeta donde vamos a colocar los ficheros con las traducciones.<\/li>\n<li><strong>template-arb-file: <\/strong>Indica el fichero de traducciones por defecto de nuestra aplicaci\u00f3n. Este fichero deber\u00e1 estar incluido en la carpeta que hemos escrito en la opci\u00f3n anterior ( <em>arb-dir<\/em> ) y como ya sabemos, tendr\u00e1 el formato <em>.arb<\/em> que b\u00e1sicamente es muy parecido a un fichero<em> .json<\/em> y en su contenido tendremos una serie de identificadores de las cadenas a traducir, su traducci\u00f3n y una breve descripci\u00f3n. M\u00e1s adelante veremos esto con detalle. En este ejemplo, el fichero lo he llamado <em>strings_<\/em><em><strong>es<\/strong>.<em>arb<\/em>, pero podr\u00eda llamarse <em>papa_<\/em><\/em><strong>es<\/strong>.<em>arb<\/em>. Lo importante es entender que este ser\u00e1 el fichero plantilla para la generaci\u00f3n del c\u00f3digo, es decir, los identificadores de las cadenas de texto que no est\u00e9n en este fichero, pero s\u00ed puedan estar en otros, no se tendr\u00e1n en cuenta para la generaci\u00f3n.<\/li>\n<li><strong>output-localization-file: <\/strong>Indica el nombre del fichero que <em>Flutter<\/em> debe generar con el delegado para soportar los diferentes lenguajes que utilicemos. Lo podemos llamar como queramos, pero la clase que generar\u00e1 se llamar\u00e1 <em>AppLocalizations<\/em> con lo que por convenci\u00f3n el archivo lo llamamos <em>app_localizations.dart<\/em><\/li>\n<li><strong>untranslated-messages-file: <\/strong>Este apartado no es obligatorio, pero, en mi opini\u00f3n, es realmente \u00fatil al indicarlo y poner un nombre de fichero con extensi\u00f3n <em>.txt<\/em>. El proceso de generaci\u00f3n nos escribir\u00e1 en \u00e9l los posibles errores durante el proceso de generaci\u00f3n, identificadores de cadenas que no existen en un fichero u otro por ejemplo, con lo que facilita el mantenimiento de nuestras traducciones.<\/li>\n<\/ul>\n<p>Este ser\u00eda el contenido b\u00e1sico del fichero de configuraci\u00f3n para la generaci\u00f3n de nuestro delegado. Hay muchas mas opciones que puedes consultar <a href=\"https:\/\/docs.flutter.dev\/accessibility-and-localization\/internationalization#configuring-the-l10nyaml-file\">aqu\u00ed.<\/a><\/p>\n<h2 id=\"a\u00f1adiendo-nuestras-traducciones\">A\u00f1adiendo nuestras traducciones<\/h2>\n<p>Nuestro siguiente paso es generar los ficheros con las traducciones, como ya hemos visto. Estos ficheros deber\u00e1n estar en la carpeta <strong><em>lib\/l10n<\/em><\/strong>. Recordemos que tendremos tantos ficheros como idiomas queramos soportar.<\/p>\n<p>En el fichero de configuraci\u00f3n hemos decidido que los ficheros se van a llamar strings<strong>&lt;c\u00f3digo de idiona&gt;<\/strong>.arb, por lo que en nuestro ejemplo, deber\u00edamos terminar con dos ficheros:<br \/>\n<a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/files_in_folder.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1925\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/files_in_folder.png\" alt=\"Ficheros en la carpeta lib\/l10n\" width=\"301\" height=\"107\" \/><\/a><\/p>\n<p>En su forma mas sencilla, el contenido de los ficheros ser\u00e1 el siguiente:<\/p>\n<p><em>strings<\/em>_<strong>en<\/strong>.<em>arb<\/em><\/p>\n<blockquote>\n<p> {<br \/>\n   &quot;titleApp&quot;: &quot;Traducciones&quot;,<br \/>\n   &quot;@titleApp&quot;: {<br \/>\n       &quot;description&quot;: &quot;El t\u00edtulo de la aplicaci\u00f3n&quot;<br \/>\n   },<br \/>\n   &quot;helloWorld&quot;: &quot;Hola Mundo!&quot;,<br \/>\n   &quot;@helloWorld&quot;: {<br \/>\n       &quot;description&quot;: &quot;El saludo convencional del programador novato.&quot;<br \/>\n   }<br \/>\n }<\/p>\n<\/blockquote>\n<p>Y por lo tanto el contenido del fichero <em>strings<\/em>_<strong>en<\/strong>.<em>arb<\/em>\u00a0deber\u00e1 ser:<\/p>\n<blockquote>\n<p>{<br \/>\n &quot;titleApp&quot;: &quot;Translations!&quot;,<br \/>\n &quot;@titleApp&quot;: {<br \/>\n   &quot;description&quot;: &quot;The title of the app&quot;<br \/>\n },<br \/>\n &quot;helloWorld&quot;: &quot;Hello World!&quot;,<br \/>\n &quot;@helloWorld&quot;: {<br \/>\n   &quot;description&quot;: &quot;The conventional newborn programmer greeting&quot;<br \/>\n }<br \/>\n}<\/p>\n<\/blockquote>\n<ul>\n<li>Identificador de la cadena: El identificador de la cadena debe ser \u00fanico y estar\u00e1 acompa\u00f1ado del valor traducido. En el ejemplo estamos viendo el fichero en espa\u00f1ol. Este identificativo deber\u00e1 existir igual en el fichero <em>strings<strong>_en<\/strong>.arb<\/em>, pero con la traducci\u00f3n de la palabra <em>Traducciones<\/em> al idioma ingl\u00e9s.<\/li>\n<li>Referencia al indicador: La generaci\u00f3n del c\u00f3digo podemos controlarla gracias al formato <em>.arb<\/em>. Con este formato podemos a\u00f1adir descripciones para la cadena e incluso operaciones m\u00e1s complejas, como configurar <em>placeholders<\/em>, la pluralizaci\u00f3n o sustituci\u00f3n de valores dentro de la cadena traducida, etc. Para m\u00e1s informaci\u00f3n sobre c\u00f3mo controlar la generaci\u00f3n puedes consultarla <a href=\"https:\/\/docs.flutter.dev\/accessibility-and-localization\/internationalization#placeholders-plurals-and-selects\">aqu\u00ed.<\/a><\/li>\n<\/ul>\n<h2 id=\"activando-la-generaci\u00f3n-de-c\u00f3digo\">Activando la generaci\u00f3n de c\u00f3digo<\/h2>\n<p>Ya por \u00faltimo, s\u00f3lo nos queda habilitar la generaci\u00f3n de c\u00f3digo de <em>Flutter<\/em>. Para ello, volvemos al fichero <em>pubspec.yaml<\/em> y buscamos la parte de <em>Flutter<\/em>, ah\u00ed a\u00f1adimos <em>generate: true<\/em>.<\/p>\n<blockquote><p>El fichero deber\u00eda quedar de la siguiente manera:<\/p><\/blockquote>\n<pre class=\"brush: yaml; title: ; notranslate\" title=\"\">flutter:\r\n generate: true\r\n<\/pre>\n<p>Ahora, desde el terminal, debemos realizar un <code>flutter clean<\/code> y un <code>flutter pub get<\/code>. Si todo ha ido bien, que s\u00ed, <em>Flutter<\/em> nos habr\u00e1 generado en nuestra carpeta de proyecto la siguiente estructura:<\/p>\n<blockquote><p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/generated_folder.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1926\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/generated_folder.png\" alt=\"Carpeta, con los ficheros auto-generadas\" width=\"344\" height=\"188\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/generated_folder.png 344w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/generated_folder-300x164.png 300w\" sizes=\"auto, (max-width: 344px) 100vw, 344px\" \/><\/a><\/p><\/blockquote>\n<p>Vemos que tenemos los ficheros <em>app_localizations<\/em><strong>_en<\/strong>.dart, app_localizations_**_es**.dart y app_localizations.dart. Este \u00faltimo es el delegado que controlar\u00e1 nuestras traducciones, y si lo abrimos, ya nos explica los siguientes pasos que debemos seguir para a\u00f1adir el delegado en la aplicaci\u00f3n.<\/p>\n<h2 id=\"a\u00f1adiendo-nuestro-delegado\">A\u00f1adiendo nuestro delegado<\/h2>\n<p>Como \u00faltimo paso, debemos a\u00f1adir nuestro delegado en la lista de delegados para la localizaci\u00f3n. Esta lista la a\u00f1adimos en <em>MaterialApp<\/em> casi al principio de este tutorial.<\/p>\n<blockquote><p>Para poder configurarlo, primero debemos importar el fichero en nuestro <em>main.dart<\/em> o donde estemos inicializando <em>MaterialApp<\/em><\/p><\/blockquote>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">import 'package:flutter_gen\/gen_l10n\/app_localizations.dart';<\/pre>\n<p>Y luego ya podemos a\u00f1adir el delegado<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">return const MaterialApp(\r\n   localizationsDelegates: &#x5B;\r\n     AppLocalizations.delegate,\r\n     GlobalMaterialLocalizations.delegate,\r\n     GlobalWidgetsLocalizations.delegate,\r\n     GlobalCupertinoLocalizations.delegate\r\n         \r\n   ],\r\n   supportedLocales: const &#x5B;\r\n     Locale('es', 'ES'), \/\/Espa\u00f1ol de espa\u00f1a\r\n     Locale('en'),       \/\/Ingl\u00e9s, cualquier pa\u00eds\r\n   ],);\r\n<\/pre>\n<p>Ya <strong>podemos usar nuestras cadenas de texto<\/strong> y <strong>ver c\u00f3mo son traducidas<\/strong>, para ello basta con invocarlas de la siguiente manera:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">AppLocalizations.of(context)!.helloWorld<\/pre>\n<p>Podemos hacerlo dentro de cualquier widget, por ejemplo, a\u00f1adamos un widget de texto debajo del calendario<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">class _MyHomePageState extends State&amp;lt;MyHomePage&amp;gt; {\r\n @override\r\n Widget build(BuildContext context) {\r\n   return Scaffold(\r\n     appBar: AppBar(\r\n       title: Text(widget.title),\r\n     ),\r\n     body: Column(\r\n       mainAxisAlignment: MainAxisAlignment.start,\r\n       children: &amp;lt;Widget&amp;gt;&#x5B;\r\n          CalendarDatePicker(\r\n               initialDate: DateTime.now(),\r\n               firstDate: DateTime(1900),\r\n               lastDate: DateTime(2100),\r\n               onDateChanged: (value) {}),\r\n         Text(AppLocalizations.of(context)!.helloWorld),\r\n       ],\r\n     ),\r\n   );\r\n }\r\n}\r\n<\/pre>\n<p>Ahora,\u00a0 si ejecutamos la aplicaci\u00f3n y cambiamos el idioma, veremos c\u00f3mo nuestro widget de texto, con el texto Hola Mundo! ser\u00e1 traducido al idioma seleccionado.<\/p>\n<blockquote><p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_es.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1928\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_es.png\" alt=\"Hola mundo en espa\u00f1ol\" width=\"776\" height=\"861\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_es.png 776w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_es-270x300.png 270w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_es-768x852.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_es-610x677.png 610w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_en.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1927\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_en.png\" alt=\"Hola mundo en ingl\u00e9s\" width=\"775\" height=\"871\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_en.png 775w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_en-267x300.png 267w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_en-768x863.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/hello_world_en-610x686.png 610w\" sizes=\"auto, (max-width: 775px) 100vw, 775px\" \/><\/a><\/p><\/blockquote>\n<p>Y <em>voil\u00e0<\/em>, hemos terminado de localizar nuestra aplicaci\u00f3n de <em>Flutter<\/em>, por lo menos en cuanto a las cadenas de texto y los controles por defecto&#8230; porque, existe otro paquete que nos ayudar\u00e1 tambi\u00e9n a localizar nuestra aplicaci\u00f3n d\u00e1ndonos herramientas para el formato num\u00e9rico, el formato de las fechas e incluso para trabajar mejor con nuestros ficheros <em>.arb<\/em>. Ese paquete es <a href=\"https:\/\/pub.dev\/packages\/intl\"><em>intl<\/em>,<\/a> pero ese, ser\u00e1 otro post \ud83d\ude09<\/p>\n<p>Tienes el c\u00f3digo de ejemplo en este <a href=\"https:\/\/github.com\/Encamina\/SmartDevices\/tree\/main\/flutter_localizations\">enlace.<\/a><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>Flutter, por defecto, s\u00f3lo proporciona localizaciones para ingl\u00e9s de Estados Unidos. Por lo tanto, si queremos que nuestra aplicaci\u00f3n est\u00e9 localizada en castellano, vamos a tener que indic\u00e1rselo. Veamos c\u00f3mo.<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":213,"featured_media":1952,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[130],"tags":[],"class_list":["post-1922","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-flutter"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Flutter: Do you speak English?, Parles-tu fran\u00e7ais? Hablas espa\u00f1ol? | ENCAMINA<\/title>\n<meta name=\"description\" content=\"Flutter, por defecto, s\u00f3lo proporciona localizaciones para ingl\u00e9s de Estados Unidos. Si queremos que nuestra aplicaci\u00f3n est\u00e9 localizada en castellano, vamos a tener que indic\u00e1rselo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flutter: Do you speak English?, Parles-tu fran\u00e7ais? Hablas espa\u00f1ol?\" \/>\n<meta property=\"og:description\" content=\"Flutter, por defecto, s\u00f3lo proporciona localizaciones para ingl\u00e9s de Estados Unidos. Si queremos que nuestra aplicaci\u00f3n est\u00e9 localizada en castellano, vamos a tener que indic\u00e1rselo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/\" \/>\n<meta property=\"og:site_name\" content=\"Piensa en software, desarrolla en colores\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-16T13:53:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-28T05:10:08+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/Screenshot_1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"757\" \/>\n\t<meta property=\"og:image:height\" content=\"481\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ciani Afonso D\u00edaz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ciani Afonso D\u00edaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/\"},\"author\":{\"name\":\"Ciani Afonso D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/62f6dbef633fc688b93309ed86cbdab5\"},\"headline\":\"Flutter: Do you speak English?, Parles-tu fran\u00e7ais? Hablas espa\u00f1ol?\",\"datePublished\":\"2023-05-16T13:53:14+00:00\",\"dateModified\":\"2023-06-28T05:10:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/\"},\"wordCount\":1598,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2023\\\/05\\\/Screenshot_1.jpg\",\"articleSection\":[\"Flutter\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/\",\"name\":\"Flutter: Do you speak English?, Parles-tu fran\u00e7ais? Hablas espa\u00f1ol? | ENCAMINA\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2023\\\/05\\\/Screenshot_1.jpg\",\"datePublished\":\"2023-05-16T13:53:14+00:00\",\"dateModified\":\"2023-06-28T05:10:08+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/62f6dbef633fc688b93309ed86cbdab5\"},\"description\":\"Flutter, por defecto, s\u00f3lo proporciona localizaciones para ingl\u00e9s de Estados Unidos. Si queremos que nuestra aplicaci\u00f3n est\u00e9 localizada en castellano, vamos a tener que indic\u00e1rselo.\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2023\\\/05\\\/Screenshot_1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2023\\\/05\\\/Screenshot_1.jpg\",\"width\":757,\"height\":481},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/\",\"name\":\"Piensa en software, desarrolla en colores\",\"description\":\"Las ventajas que te ofrece Microsoft Azure y el mundo.NET\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/62f6dbef633fc688b93309ed86cbdab5\",\"name\":\"Ciani Afonso D\u00edaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/75a137a5818aab49ed1da1cee7371dac1a1ebac461cbc5bc6949611a23269c00?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/75a137a5818aab49ed1da1cee7371dac1a1ebac461cbc5bc6949611a23269c00?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/75a137a5818aab49ed1da1cee7371dac1a1ebac461cbc5bc6949611a23269c00?s=96&d=mm&r=g\",\"caption\":\"Ciani Afonso D\u00edaz\"},\"description\":\"Siempre me ha gustado la inform\u00e1tica, empec\u00e9 muy temprano gracias a mi padre y su primer MSX. Me encantan los dispositivos m\u00f3viles desde sus inicios y por esto me dediqu\u00e9 a aprender lo necesario para programarlos. Mis \u00faltimos a\u00f1os de programador los he dedicado \u00edntegramente a dispositivos m\u00f3viles, utilizando sobre todo Xamarin y desde hace poco, Flutter.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/author\\\/cafonso\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Flutter: Do you speak English?, Parles-tu fran\u00e7ais? Hablas espa\u00f1ol? | ENCAMINA","description":"Flutter, por defecto, s\u00f3lo proporciona localizaciones para ingl\u00e9s de Estados Unidos. Si queremos que nuestra aplicaci\u00f3n est\u00e9 localizada en castellano, vamos a tener que indic\u00e1rselo.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/","og_locale":"es_ES","og_type":"article","og_title":"Flutter: Do you speak English?, Parles-tu fran\u00e7ais? Hablas espa\u00f1ol?","og_description":"Flutter, por defecto, s\u00f3lo proporciona localizaciones para ingl\u00e9s de Estados Unidos. Si queremos que nuestra aplicaci\u00f3n est\u00e9 localizada en castellano, vamos a tener que indic\u00e1rselo.","og_url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/","og_site_name":"Piensa en software, desarrolla en colores","article_published_time":"2023-05-16T13:53:14+00:00","article_modified_time":"2023-06-28T05:10:08+00:00","og_image":[{"width":757,"height":481,"url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/Screenshot_1.jpg","type":"image\/jpeg"}],"author":"Ciani Afonso D\u00edaz","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Ciani Afonso D\u00edaz","Tiempo de lectura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/"},"author":{"name":"Ciani Afonso D\u00edaz","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/62f6dbef633fc688b93309ed86cbdab5"},"headline":"Flutter: Do you speak English?, Parles-tu fran\u00e7ais? Hablas espa\u00f1ol?","datePublished":"2023-05-16T13:53:14+00:00","dateModified":"2023-06-28T05:10:08+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/"},"wordCount":1598,"commentCount":0,"image":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/Screenshot_1.jpg","articleSection":["Flutter"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/","name":"Flutter: Do you speak English?, Parles-tu fran\u00e7ais? Hablas espa\u00f1ol? | ENCAMINA","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/#primaryimage"},"image":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/Screenshot_1.jpg","datePublished":"2023-05-16T13:53:14+00:00","dateModified":"2023-06-28T05:10:08+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/62f6dbef633fc688b93309ed86cbdab5"},"description":"Flutter, por defecto, s\u00f3lo proporciona localizaciones para ingl\u00e9s de Estados Unidos. Si queremos que nuestra aplicaci\u00f3n est\u00e9 localizada en castellano, vamos a tener que indic\u00e1rselo.","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/flutter-do-you-speak-english-parles-tu-francais-hablas-espanol\/#primaryimage","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/Screenshot_1.jpg","contentUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/05\/Screenshot_1.jpg","width":757,"height":481},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/","name":"Piensa en software, desarrolla en colores","description":"Las ventajas que te ofrece Microsoft Azure y el mundo.NET","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/62f6dbef633fc688b93309ed86cbdab5","name":"Ciani Afonso D\u00edaz","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/75a137a5818aab49ed1da1cee7371dac1a1ebac461cbc5bc6949611a23269c00?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/75a137a5818aab49ed1da1cee7371dac1a1ebac461cbc5bc6949611a23269c00?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/75a137a5818aab49ed1da1cee7371dac1a1ebac461cbc5bc6949611a23269c00?s=96&d=mm&r=g","caption":"Ciani Afonso D\u00edaz"},"description":"Siempre me ha gustado la inform\u00e1tica, empec\u00e9 muy temprano gracias a mi padre y su primer MSX. Me encantan los dispositivos m\u00f3viles desde sus inicios y por esto me dediqu\u00e9 a aprender lo necesario para programarlos. Mis \u00faltimos a\u00f1os de programador los he dedicado \u00edntegramente a dispositivos m\u00f3viles, utilizando sobre todo Xamarin y desde hace poco, Flutter.","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/author\/cafonso\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/1922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/users\/213"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/comments?post=1922"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/1922\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media\/1952"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media?parent=1922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/categories?post=1922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/tags?post=1922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}