{"id":8109,"date":"2021-12-26T09:55:40","date_gmt":"2021-12-26T08:55:40","guid":{"rendered":"https:\/\/www.ibidemgroup.com\/edu\/?p=8109"},"modified":"2024-03-04T12:35:35","modified_gmt":"2024-03-04T11:35:35","slug":"traduccion-software-streamlit","status":"publish","type":"post","link":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/","title":{"rendered":"C\u00f3mo traducir un cuadro de mando en Streamlit\ufeff"},"content":{"rendered":"\n<p class=\"has-text-align-center wp-block-paragraph\"><span style=\"color:#0693e3\" class=\"color\">Traducci\u00f3n de Chema, <\/span><a href=\"https:\/\/www.ibidemgroup.com\/traduccion-tecnica.php\"><span style=\"color:#0693e3\" class=\"color\">experto en traducci\u00f3n de software de Ingl\u00e9s a Espa\u00f1ol<\/span><\/a><span style=\"color:#0693e3\" class=\"color\"> y responsable del dpt. de Traducci\u00f3n de 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 Rafa\u0142 Rybnik<\/span><\/strong><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">***<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Keyword Monitoring Tool: Track your competition in search results\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/3xAl9ktbQGc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Demo: <a rel=\"noreferrer noopener\" href=\"http:\/\/keywordicebreaker.herokuapp.com\/\" target=\"_blank\">http:\/\/keywordicebreaker.herokuapp.com\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En teor\u00eda, hacer una traducci\u00f3n de software, no parece dif\u00edcil. Al fin y al cabo, basta con traducir las etiquetas y descripciones de un idioma a otro y utilizar un diccionario para mapearlas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En la pr\u00e1ctica, este sencillo enfoque lleva mucho tiempo y es propenso a errores. Definitivamente, es mejor no reinventar la rueda y utilizar soluciones establecidas. Una de ellas es Gettext, un conjunto universal de herramientas para generar mensajes traducidos en diversos idiomas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este art\u00edculo, aprender\u00e1s a traducir la aplicaci\u00f3n de software Streamlit utilizando Gettext y Localazy.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/2000\/1*kA6z_U7SsrXLx5P2MWRmWg.gif\" alt=\"Interfaz de usuario gr\u00e1fica, Aplicaci\u00f3n, Teams\n\nDescripci\u00f3n generada autom\u00e1ticamente\"\/><\/figure><\/div>\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-streamlit\/#Inicio_del_proyecto\" >Inicio del proyecto<\/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-streamlit\/#Gettext\" >Gettext<\/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-streamlit\/#Primeras_traducciones\" >Primeras traducciones<\/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-streamlit\/#Gestion_de_las_traducciones\" >Gesti\u00f3n de las traducciones<\/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-streamlit\/#Localazy\" >Localazy<\/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-streamlit\/#Problema_con_las_cadenas_f\" >Problema con las cadenas f<\/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-streamlit\/#Conclusiones\" >Conclusiones<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Inicio_del_proyecto\"><\/span><strong>Inicio del proyecto<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/fischerbach\/streamlit-gettext\">https:\/\/github.com\/fischerbach\/streamlit-gettext<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Incluimos en este art\u00edculo un repositorio de c\u00f3digo. Los pasos est\u00e1n separados individualmente. El archivo README.md contiene instrucciones detalladas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El resultado\ndeber\u00eda ser el siguiente:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/2000\/1*iIilYPH5HyTVS3j6wHhuLA.png\" alt=\"Interfaz de usuario gr\u00e1fica, Aplicaci\u00f3n\n\nDescripci\u00f3n generada autom\u00e1ticamente\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s de\nproporcionar la clave de la API:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/2000\/1*dPPgPbiJWZTh8Bi3XFbz9g.png\" alt=\"Interfaz de usuario gr\u00e1fica, Aplicaci\u00f3n, Teams\n\nDescripci\u00f3n generada autom\u00e1ticamente\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Podr\u00edamos traducir los mensajes a otros idiomas y utilizar sentencias if para cambiarlos seg\u00fan el idioma escogido por el usuario, pero este enfoque ser\u00eda tedioso y propenso a errores. Mejor vamos a extraer todas las cadenas de c\u00f3digo para trabajar con ellas por separado, sin tocar toda la l\u00f3gica del software.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Gettext\"><\/span><strong>Gettext<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a rel=\"noreferrer noopener\" href=\"https:\/\/www.gnu.org\/software\/gettext\/\" target=\"_blank\">GNUgettext <\/a>es un conjunto universal de herramientas para generar mensajes multiling\u00fces (es decir traducciones). Proporciona un marco para soportar cadenas de mensajes traducidas. Soporta muchos lenguajes de programaci\u00f3n \ud83d\ude09, incluyendo Python. El m\u00f3dulo gettext viene incluido en la biblioteca est\u00e1ndar de Python. Lo mejor de gettext es que nos ayudar\u00e1 a extraer sin problemas los mensajes de texto en archivos separados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a intentar generar 3 versiones del software, la original en Ingl\u00e9s y su traducci\u00f3n a Alem\u00e1n y Polaco.  En primer lugar, tenemos que preparar la estructura de directorios.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.<br> \u251c\u2500\u2500 README.md<br> \u251c\u2500\u2500 dashboard.py<br> \u251c\u2500\u2500 locales<br> \u2502   \u251c\u2500\u2500 base.pot<br> \u2502   \u251c\u2500\u2500 de<br> \u2502   \u2502   \u2514\u2500\u2500 LC_MESSAGES<br> \u2502   \u2502       \u2514\u2500\u2500 base.po<br> \u2502   \u2514\u2500\u2500 pl<br> \u2502       \u2514\u2500\u2500 LC_MESSAGES<br> \u2502           \u2514\u2500\u2500 base.po<br> \u2514\u2500\u2500 requirements.txt<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir -p locales\/{de,pl}\/LC_MESSAGES <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A\ncontinuaci\u00f3n, debemos extraer los mensajes del c\u00f3digo.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/Library\/Frameworks\/Python.framework\/Versions\/3.8\/share\/doc\/python3.8\/examples\/Tools\/i18n\/pygettext.py -d base -o locales\/base.pot dashboard.py<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para encontrar el archivo <span style=\"background-color:#eeeeee\" class=\"background-color\">pygettext.py<\/span>, puedes utilizar el comando: <span style=\"background-color:#eeeeee\" class=\"background-color\">locate pygettext.py<\/span> .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso generar\u00e1 en la carpeta de <span style=\"background-color:#eeeeee\" class=\"background-color\">locales <\/span>un archivo <span style=\"background-color:#eeeeee\" class=\"background-color\">base.pot<\/span> con cadenas extraidas del archivo <span style=\"background-color:#eeeeee\" class=\"background-color\">dashboard.py<\/span>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Desafortunadamente, el <span style=\"background-color:#eeeeee\" class=\"background-color\">base.pot <\/span>generado no contiene ninguna cadena de texto a traducir. Para solucionarlo, tenemos que modificar <span style=\"background-color:#eeeeee\" class=\"background-color\">dashboard.py<\/span> marcando los mensajes para su traducci\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import gettext<br> _ = gettext.gettext<br> Each label string replace surround by _() function:<br> st.markdown(_('## This app uses Zenserp API'))<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s de generar de nuevo el <span style=\"background-color:#eeeeee\" class=\"background-color\">base.pot<\/span>, ahora ya s\u00ed aparecen las cadenas de texto a traducir.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">: dashboard.py:9<br> msgid \"Enter API key\"<br> msgstr \"\"<br> : dashboard.py:35<br> msgid \"## This app uses Zenserp API\"<br> msgstr \"\"<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">branch: step1 <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Primeras_traducciones\"><\/span><strong>Primeras traducciones<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora vamos a preparar las primeras traducciones. Para ello lo primero es copiar y renombrar el base.pot en cada carpeta de idioma:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cp locales\/base.pot locales\/de\/LC_MESSAGES\/base.po<br>cp locales\/base.pot locales\/pl\/LC_MESSAGES\/base.po<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Modificamos los archivos de los idiomas:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/locales\/de\/LC_MESSAGES\/base.po<br> : dashboard.py:9<br> msgid \"Enter API key\"<br> msgstr \"API-Schl\u00fcssel eingeben\"<br> : dashboard.py:35<br> msgid \"## This app uses Zenserp API\"<br> msgstr \"Diese App verwendet die Zenserp API\"<br> \/locales\/pl\/LC_MESSAGES\/base.po<br> : dashboard.py:9<br> msgid \"Enter API key\"<br> msgstr \"Podaj klucz API\"<br> : dashboard.py:35<br> msgid \"## This app uses Zenserp API\"<br> msgstr \"## Ta aplikacja u\u017cywa Zenserp API\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para utilizar la traducci\u00f3n en nuestro software, necesitamos generar los archivos MO. Los archivos MO son archivos de datos binarios que sanalizar\u00e1 el m\u00f3dulo <span style=\"background-color:#eeeeee\" class=\"background-color\">gettext <\/span>de Python.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">msgfmt -o locales\/de\/LC_MESSAGES\/base.mo locales\/de\/LC_MESSAGES\/base<br>msgfmt -o locales\/pl\/LC_MESSAGES\/base.mo locales\/pl\/LC_MESSAGES\/base <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora podemos modificar el archivo <span style=\"background-color:#eeeeee\" class=\"background-color\">dashboard.py<\/span> para mostrar los informes en diferentes idiomas.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/335\/1*nmH04Fkfr2ZNc93tpresSw.png\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Al principio del archivo debes a\u00f1adir:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">language = st.sidebar.selectbox('', ['en', 'pl', 'de'])<br> try:<br>   localizator = gettext.translation('base', localedir='locales', languages=[language])<br>   localizator.install()<br>   _ = localizator.gettext <br> except:<br>     pass<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A partir de ahora, el usuario puede seleccionar un idioma en el desplegable. La interfaz se refrescar\u00e1 cada vez que se procese la etiqueta con la funci\u00f3n <span style=\"background-color:#eeeeee\" class=\"background-color\">_()<\/span>:<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"How to build a multi-language dashboard with Streamlit\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/FBNCFypuYVA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dos etiquetas de la app est\u00e1n ya traducidas, es el momento del resto. El procedimiento es el mismo. Cada vez que aparezca una cadena con un mensaje en el c\u00f3digo fuente, rod\u00e9ala con la funci\u00f3n <code>_(\u2018This is a string\u2019)<\/code> . Una vez hecho esto, genera el archivo POT desde el principio, c\u00f3pialo en las localizaciones de cada idioma, trad\u00facelo y genera los archivos binarios.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">branch: step2 <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Gestion_de_las_traducciones\"><\/span>Gesti\u00f3n de las traducciones<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En la siguiente iteraci\u00f3n de nuestra soluci\u00f3n, a\u00f1adiremos funciones al tablero que generen archivos POT y MO. Tienes todos los cambios aqu\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">from os import system, path<br> (\u2026)<br> POT = st.sidebar.button(_('POT generate'))<br> MO = st.sidebar.button('MO generate')<br> if POT:<br>     system(f'cd {path.dirname(path.realpath(<strong>file<\/strong>))} &amp; \/Library\/Frameworks\/Python.framework\/Versions\/3.8\/share\/doc\/python3.8\/examples\/Tools\/i18n\/pygettext.py -d base -o locales\/base.pot dashboard.py')<br>     system(f'cd {path.dirname(path.realpath(<strong>file<\/strong>))} &amp;&amp; cp locales\/base.pot locales\/de\/LC_MESSAGES\/base.po &amp;&amp; cp locales\/base.pot locales\/pl\/LC_MESSAGES\/base.po')<br> if MO:<br>     system(f'cd {path.dirname(path.realpath(<strong>file<\/strong>))} &amp;&amp; msgfmt -o locales\/de\/LC_MESSAGES\/base.mo locales\/de\/LC_MESSAGES\/base &amp; msgfmt -o locales\/pl\/LC_MESSAGES\/base.mo locales\/pl\/LC_MESSAGES\/base')<\/pre>\n\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Localazy\"><\/span>Localazy<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Localazy es un software impresionante que hace que la experiencia de traducci\u00f3n, normalmente horrible, sea soportable e incluso casi agradable. Soporta muchos frameworks y formatos de archivo y proporciona herramientas CLI para la automatizaci\u00f3n del proceso. Mis funciones favoritas son la posibilidad de traducci\u00f3n cooperativa y la gesti\u00f3n autom\u00e1tica de los cambios en los archivos traducidos.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/2000\/1*g2tfU1or3uw3ml7PhQjxfw.png\" alt=\"Interfaz de usuario gr\u00e1fica, Aplicaci\u00f3n\n\nDescripci\u00f3n generada autom\u00e1ticamente\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a integrar nuestro informe con Localazy. Primero, crea una cuenta de Localazy e instala Localazy CLI. Luego, crea una nueva aplicaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, selecciona \u00abarchivos POT\u00bb dentro del listado de formatos disponibles.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/1400\/0*AHCHOW_IWN4C6CNk\" alt=\"Interfaz de usuario gr\u00e1fica, Aplicaci\u00f3n\n\nDescripci\u00f3n generada autom\u00e1ticamente\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ver\u00e1s un archivo de configuraci\u00f3n de plantilla <span style=\"background-color:#eeeeee\" class=\"background-color\">localazy.json<\/span>. C\u00f3pialo en la carpeta principal del proyecto.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/0*jcmVPoe5p_l8yesE\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br> <code>\"writeKey\": \"WRITE_KEY\",<\/code><br><code> \"readKey\": \"READ_KEY\",<\/code><br><br><code> \"upload\": {  <\/code><br><code>   \"type\": \"pot\",<\/code><br><code>   \"files\": \"locales\/base.pot\"     <\/code><br><code>     },<\/code><br><br><code>    \"download\": {<\/code><br><code>         \"files\": \"locales\/${lang}\/LC_MESSAGES\/base.po\"<\/code><br><code> }<\/code><br>   <br> }<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Recuerda\nmodificar la ruta de la carpeta de locales. Ve a tu aplicaci\u00f3n en Localazy y\na\u00f1ade algunos idiomas nuevos.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/0*X1frpzORKVKiYagb\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora puedes volver a generar los archivos PO y cargarlos en Localazy:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/142\/1*RrtPOEj_5O9AJbuJXyz8pQ.png\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<pre class=\"wp-block-preformatted\">localazy upload <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s de\nun rato, ver\u00e1s una lista de frases para traducir en cada idioma de tu\naplicaci\u00f3n.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/2000\/1*6FmFUwp1y3yAXEvY9QW1Gw.png\" alt=\"Interfaz de usuario gr\u00e1fica, Aplicaci\u00f3n\n\nDescripci\u00f3n generada autom\u00e1ticamente\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Y la guinda del pastel, para cada frase ver\u00e1s al lado una traducci\u00f3n autom\u00e1tica!<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/2000\/1*xJhTdjGDNRcN-j2qyx5anA.png\" alt=\"Interfaz de usuario gr\u00e1fica, Aplicaci\u00f3n\n\nDescripci\u00f3n generada autom\u00e1ticamente\"\/><\/figure><\/div>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"How to build a multi-language dashboard with Streamlit\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/PW13Tfap8N4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez aceptadas o modificadas todas las traducciones, puedes descargarlas en tu aplicaci\u00f3n y volver a generar archivos binarios MO.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lamentablemente,\npara que los cambios se carguen en la aplicaci\u00f3n Streamlit, es necesario\nreiniciar la instancia. Si puedo resolver este inconveniente, actualizar\u00e9 el\nart\u00edculo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Resultado final:<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"How to build a multi-language dashboard with Streamlit\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/d_28H97pmSU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<pre class=\"wp-block-preformatted\"> branch: step3  <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Problema_con_las_cadenas_f\"><\/span>Problema con las cadenas f<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El proyecto utiliza bastante las cadenas f. Desafortunadamente, no podemos usarlas como argumentos de la funci\u00f3n <span style=\"background-color:#eeeeee\" class=\"background-color\">_()<\/span>, gettext devolver\u00e1 un error. Describo c\u00f3mo resolver este problema en este art\u00edculo :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/netlabe.com\/how-to-create-automatic-data-report-in-multiple-languages-2a53b6417d42\">https:\/\/netlabe.com\/how-to-create-automatic-data-report-in-multiple-languages-2a53b6417d42<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusiones\"><\/span>Conclusiones<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Como habr\u00e1s podido comprobar, el d\u00fao de Gettext y Localazy es una soluci\u00f3n flexible para la traduccion y localizaci\u00f3n de una aplicaci\u00f3n o software. Cada uno aborda diferentes fuentes de carga de trabajo y se complementan maravillosamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo mejor de\nla combinaci\u00f3n de Gettext y Localazy es que si generamos nuevos archivos POT (y\npor tanto perdemos las partes previamente traducidas), Localazy se encargar\u00e1 de\nvolver a traducirlas, para no repetir el trabajo innecesariamente.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/1400\/1*nwZvfADZ0PWLBXDCdIWjBg.png\" alt=\"\"\/><\/figure><\/div>\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;8109&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 traducir un cuadro de mando en Streamlit\ufeff&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 Rafa\u0142 Rybnik, programador polaco que nos explica c\u00f3mo traducir con Gettext y Localazyel el cuadro de mando de su aplicaci\u00f3n de gestion de keywords desarrollada en Streamlit. An\u00e1lisis detallado de la gestion de carpetas de traducci\u00f3n, generaci\u00f3n de traducciones, archivos .pot, .mo y .po, etc\n\n","protected":false},"author":8,"featured_media":8412,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[619],"tags":[433,390,434,198],"class_list":["post-8109","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-traduccion-automatica","tag-cuadro-de-mando","tag-multilingue","tag-streamlit","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-streamlit\/\" \/>\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 traducir un cuadro de mando en Streamlit\ufeff\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2021-12-26T08:55:40+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2024-03-04T11:35:35+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"C\u00f3mo traducir un cuadro de mando en Streamlit\ufeff\" \/>\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-streamlit\\\/#article\",\"name\":\"C\\u00f3mo traducir un cuadro de mando en Streamlit\\ufeff\",\"headline\":\"C\\u00f3mo traducir un cuadro de mando en Streamlit\\ufeff\",\"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\\\/2021\\\/12\\\/traducir_streamlit_gettext_localazy.jpg\",\"width\":1140,\"height\":380,\"caption\":\"C\\u00f3mo traducir una aplicacion Streamlit\"},\"datePublished\":\"2021-12-26T09:55:40+01:00\",\"dateModified\":\"2024-03-04T12:35:35+01:00\",\"inLanguage\":\"es-ES\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-streamlit\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-streamlit\\\/#webpage\"},\"articleSection\":\"Traduccion Automatica, cuadro de mando, MULTILINGUE, streamlit, traduccion software\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-streamlit\\\/#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-streamlit\\\/#listItem\",\"name\":\"C\\u00f3mo traducir un cuadro de mando en Streamlit\\ufeff\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/#listItem\",\"name\":\"Inicio\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-streamlit\\\/#listItem\",\"position\":3,\"name\":\"C\\u00f3mo traducir un cuadro de mando en Streamlit\\ufeff\",\"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-streamlit\\\/#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-streamlit\\\/#webpage\",\"url\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-streamlit\\\/\",\"name\":\"C\\u00f3mo traducir un cuadro de mando en Streamlit\\ufeff\",\"inLanguage\":\"es-ES\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-streamlit\\\/#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\\\/2021\\\/12\\\/traducir_streamlit_gettext_localazy.jpg\",\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-streamlit\\\/#mainImage\",\"width\":1140,\"height\":380,\"caption\":\"C\\u00f3mo traducir una aplicacion Streamlit\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.ibidemgroup.com\\\/edu\\\/traduccion-software-streamlit\\\/#mainImage\"},\"datePublished\":\"2021-12-26T09:55:40+01:00\",\"dateModified\":\"2024-03-04T12:35:35+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 traducir un cuadro de mando en Streamlit\ufeff","description":"","canonical_url":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/","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-streamlit\/#article","name":"C\u00f3mo traducir un cuadro de mando en Streamlit\ufeff","headline":"C\u00f3mo traducir un cuadro de mando en Streamlit\ufeff","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\/2021\/12\/traducir_streamlit_gettext_localazy.jpg","width":1140,"height":380,"caption":"C\u00f3mo traducir una aplicacion Streamlit"},"datePublished":"2021-12-26T09:55:40+01:00","dateModified":"2024-03-04T12:35:35+01:00","inLanguage":"es-ES","mainEntityOfPage":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/#webpage"},"isPartOf":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/#webpage"},"articleSection":"Traduccion Automatica, cuadro de mando, MULTILINGUE, streamlit, traduccion software"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/#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-streamlit\/#listItem","name":"C\u00f3mo traducir un cuadro de mando en Streamlit\ufeff"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.ibidemgroup.com\/edu\/#listItem","name":"Inicio"}},{"@type":"ListItem","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/#listItem","position":3,"name":"C\u00f3mo traducir un cuadro de mando en Streamlit\ufeff","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-streamlit\/#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-streamlit\/#webpage","url":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/","name":"C\u00f3mo traducir un cuadro de mando en Streamlit\ufeff","inLanguage":"es-ES","isPartOf":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/#website"},"breadcrumb":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/#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\/2021\/12\/traducir_streamlit_gettext_localazy.jpg","@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/#mainImage","width":1140,"height":380,"caption":"C\u00f3mo traducir una aplicacion Streamlit"},"primaryImageOfPage":{"@id":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/#mainImage"},"datePublished":"2021-12-26T09:55:40+01:00","dateModified":"2024-03-04T12:35:35+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 traducir un cuadro de mando en Streamlit\ufeff","og:url":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/","article:published_time":"2021-12-26T08:55:40+00:00","article:modified_time":"2024-03-04T11:35:35+00:00","twitter:card":"summary_large_image","twitter:title":"C\u00f3mo traducir un cuadro de mando en Streamlit\ufeff"},"aioseo_meta_data":{"post_id":"8109","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:26:37","updated":"2026-11-02 15:01:27","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 traducir un cuadro de mando en Streamlit\ufeff\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 traducir un cuadro de mando en Streamlit\ufeff","link":"https:\/\/www.ibidemgroup.com\/edu\/traduccion-software-streamlit\/"}],"_links":{"self":[{"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/posts\/8109","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=8109"}],"version-history":[{"count":27,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/posts\/8109\/revisions"}],"predecessor-version":[{"id":10949,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/posts\/8109\/revisions\/10949"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/media\/8412"}],"wp:attachment":[{"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/media?parent=8109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/categories?post=8109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ibidemgroup.com\/edu\/wp-json\/wp\/v2\/tags?post=8109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}