<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Valentin Avalos - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Valentin Avalos - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 07 May 2026 08:47:01 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/valentin/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Aprende JavaScript: Curso JS gratis para principiantes ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript es un lenguaje de programación popular utilizado para construir aplicaciones web, entre muchas otras cosas. En este artículo, proporcionaré un listado de recursos en línea gratuitos donde puedas comenzar a aprender JavaScript. Después de haber aprendido los conceptos básicos, puede comenzar a construir proyectos para principiantes. [/espanol/news/40-proyectos-de-javascript-para-principiantes-ideas-faciles-para-empezar-a-codificar-en-js/]  1. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/aprende-javascript-curso-js-gratis-para-principiantes/</link>
                <guid isPermaLink="false">62c6e056c5b22c08edf8e03e</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Valentin Avalos ]]>
                </dc:creator>
                <pubDate>Fri, 15 Jul 2022 01:41:54 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/07/greg-rakozy-vw3Ahg4x1tY-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/learn-javascript-free-js-courses-for-beginners/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Learn JavaScript – Free JS Courses for Beginners</a>
      </p><p>JavaScript es un lenguaje de programación popular utilizado para construir aplicaciones web, entre muchas otras cosas.</p><p>En este artículo, proporcionaré un listado de recursos en línea gratuitos donde puedas comenzar a aprender JavaScript. Después de haber aprendido los conceptos básicos, puede comenzar a construir <a href="https://www.freecodecamp.org/espanol/news/40-proyectos-de-javascript-para-principiantes-ideas-faciles-para-empezar-a-codificar-en-js/">proyectos para principiantes.</a></p><ol><li><a href="#algoritmos-y-estructuras-de-datos-de-javascript">Algoritmos y estructuras de datos de JavaScript</a> (freeCodeCamp)</li><li><a href="#aprende-javascript-curso-completo-para-principiantes">Aprende JavaScript - Curso completo para principiantes</a> (freeCodeCamp)</li><li><a href="#full-stack-javascript">Full Stack JavaScript </a>(El Proyecto Odin)</li><li><a href="#el-tutorial-de-javascript-moderno">El tutorial de JavaScript Moderno</a> (javascript.info)</li><li><a href="#learnjs">LearnJS</a> (learn-js.org)</li><li><a href="#curso-de-javascript">Curso de JavaScript</a> (SoloLearn)</li><li><a href="#programaci-n-javascript">Programación JavaScript</a> (freeCodeCamp)</li><li><a href="#tutorial-de-javascript-para-principiantes-aprende-javascript-en-1-hora">Tutorial de JavaScript para principiantes: Aprende JavaScript en 1 hora</a> (Programando con Mosh)</li><li><a href="#curso-intensivo-de-javascript-para-principiantes">Curso Intensivo de JavaScript para principiantes</a> (Traversy Media)</li></ol><h2 id="algoritmos-y-estructuras-de-datos-de-javascript">Algoritmos y estructuras de datos de JavaScript</h2><p>En <a href="https://www.freecodecamp.org/espanol/learn/javascript-algorithms-and-data-structures/">este curso de freeCodeCamp</a>, aprenderás sobre JavaScript básico, ES6, expresiones regulares, estructuras de datos básicas, Programación Orientada a Objetos, y programación funcional.</p><p>Este es un entorno interactivo donde aprenderás JavaScript haciendo cientos de desafíos y cinco desafíos de algoritmos de certificación.</p><p>Al final puedes recibir una certificación gratuita para compartir en Twitter o publicar en tu perfil de LinkedIn.</p><h2 id="aprende-javascript-curso-completo-para-principiantes"><strong>Aprende JavaScript - Curso completo para principiantes</strong></h2><p>En <a href="https://youtu.be/ivdTnPl1ND0">este curso de freeCodeCamp por Youtube</a>, aprenderás sobre condicionales, bucles, funciones, objetos, arreglos, y ES6.</p><p>Este popular curso tiene más de 7 millones de visitas en YouTube. Beau Carnes lo guiará a través de todos los <a href="https://www.freecodecamp.org/espanol/learn/javascript-algorithms-and-data-structures/#basic-javascript">desafíos básicos de JavaScript de freeCodeCamp</a> y le proporcionará explicaciones detalladas en el camino.</p><h2 id="full-stack-javascript"><strong><strong>Full stack JavaScript</strong></strong></h2><p>El Proyecto Odin tiene un curso de JavaScript para principiantes en la <a href="https://www.theodinproject.com/paths/foundations/courses/foundations">sección Fundamentos</a>. Aprenderás los conceptos básicos, incluidas las condiciones, los bucles, las funciones, los objetos, las matrices y ES6.</p><p>Luego puede pasar a este <a href="https://www.theodinproject.com/paths/full-stack-javascript?">curso del Proyecto Odin</a> que le enseñará conceptos más avanzados y lo hará construir proyectos más avanzados.</p><p>Aquí hay una lista de algunos de los proyectos que construirás a lo largo del curso:</p><ul><li>Un juego de piedras, papel, tijeras</li><li>Ta Te Ti</li><li>Lista de tareas</li><li>Página de un restaurante</li><li>y más...</li></ul><h2 id="el-tutorial-de-javascript-moderno"><strong>El tutorial de JavaScript Moderno</strong></h2><p>En <a href="https://es.javascript.info/">este tutorial</a>, aprenderás sobre los conceptos básicos de JavaScript, el manejo de errores, las promesas, Async / await, el DOM y más.</p><p>Este es un curso muy detallado, lleno de cientos de lecciones y desafíos para que los completes. También tienen una comunidad en línea muy activa donde puedes hacer preguntas en la sección de comentarios y recibir asistencia.</p><h2 id="learnjs"><strong><strong>LearnJS</strong></strong></h2><p>En <a href="https://www.learn-js.org/">este tutorial</a>, aprenderá sobre conceptos básicos de JavaScript, Programación Orientada a Objetos, herencia y estructuras de datos.</p><p>Esta es una gran introducción al lenguaje llena de docenas de desafíos en el camino.</p><h2 id="curso-de-javascript"><strong>Curso de JavaScript</strong></h2><p>En <a href="https://www.sololearn.com/learning/1024">este curso de SoloLearn</a>, aprenderá sobre condiciones, bucles, funciones, objetos, arreglos, el DOM y eventos.</p><p>Hay docenas de desafíos, cuestionarios y proyectos para hacer a lo largo del curso.</p><p>Aquí hay una lista de algunos de los proyectos que construirás en el camino.</p><ul><li>Planificador de viajes</li><li>El caracol en el pozo</li><li>Convertidor de divisas</li><li>Gestor de contactos</li><li>y más...</li></ul><h2 id="programaci-n-javascript"><strong>Programación JavaScript</strong></h2><p>En <a href="https://www.youtube.com/watch?v=jS4aFq5-91M">este curso de freeCodeCamp en YouTube</a>, aprenderá sobre los conceptos básicos de JavaScript, incluyendo condicionales, bucles, funciones, objetos, arreglos y ES6. También construirás un juego de blackjack y una extensión de Google Chrome.</p><p>Este es un curso muy extenso de más de 7 horas que le dará una buena base de inicio en JavaScript.</p><h2 id="tutorial-de-javascript-para-principiantes-aprende-javascript-en-1-hora"><strong>Tutorial de JavaScript para principiantes: Aprende JavaScript en 1 hora</strong></h2><p>En <a href="https://www.youtube.com/watch?v=W6NZfCO5SIk">este curso de Programación con Mosh</a>, aprenderá sobre los conceptos básicos de JavaScript, incluyendo condicionales, bucles, funciones, objetos, arreglos y características de ES6.</p><p>Este es un gran curso introductorio corto y Mosh es un desarrollador experimentado que te guiará a través de todos estos conceptos de una manera fácil de entender.</p><h2 id="curso-intensivo-de-javascript-para-principiantes">Curso intensivo de JavaScript para principiantes</h2><p>En <a href="https://www.youtube.com/watch?v=hdI2bqOjy3c">este curso de YouTube de Traversy Media</a>, aprenderá sobre los conceptos básicos de JavaScript, incluyendo condicionales, bucles, funciones, objetos, arreglos y ES6</p><p>Este es un gran curso introductorio corto y Brad es un desarrollador experimentado que lo guiará a través de todos estos conceptos de una manera fácil de entender.</p><p>Si te gustaron los videos de Brad, echa un vistazo a sus otros videos de JavaScript sugeridos.</p><ul><li><a href="https://www.youtube.com/watch?v=0ik6X4DJKCc">Curso intensivo de JavaScript DOM - Parte 1</a></li><li><a href="https://www.youtube.com/watch?v=mPd2aJXCZ2g">Curso intensivo de JavaScript DOM - Parte 2</a></li><li><a href="https://www.youtube.com/watch?v=Oive66jrwBs">Introducción a fetch API</a></li><li><a href="https://www.youtube.com/watch?v=82hnvUYY6QA">Curso intensivo de AJAX (JavaScript Vanilla)</a></li><li><a href="https://www.youtube.com/watch?v=vDJpGenyHaA">Curso intensivo de JavaScript POO (ES5 &amp; ES6)</a></li><li><a href="https://www.youtube.com/watch?v=wI1CWzNtE-M">Curso Intensivo de JSON</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tutorial de React: Como construir un traductor de texto PWA ]]>
                </title>
                <description>
                    <![CDATA[ En este artículo, te mostraré como crear una aplicación de traducción de texto con React.  Admitirá 17 idiomas, y también podrás hacer traducciones cruzadas. Esto es que crearemos: Así es como se verá nuestra aplicación después de que hayamos terminado de construirla. Tiene dos áreas de entrada de texto - ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/tutorial-de-react-como-construir-un-traductor-de-texto-pwa/</link>
                <guid isPermaLink="false">62be1950c5b22c08edf8cc9a</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Valentin Avalos ]]>
                </dc:creator>
                <pubDate>Thu, 14 Jul 2022 19:17:16 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/07/How-to-Build-a-Weather-Application-using-React--7-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/react-tutorial-build-a-text-translation-pwa/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">React Tutorial – How to Build a Text Translation PWA</a>
      </p><p>En este artículo, te mostraré como crear una aplicación de traducción de texto con React. &nbsp;Admitirá 17 idiomas, y también podrás hacer traducciones cruzadas.</p><p>Esto es que crearemos:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screenshot-2021-09-12-123442-1.png" class="kg-image" alt="Screenshot-2021-09-12-123442-1" width="600" height="400" loading="lazy"></figure><p>Así es como se verá nuestra aplicación después de que hayamos terminado de construirla. Tiene dos áreas de entrada de texto - una tendrá el código fuente, y la otra tendrá el texto resultante de la traducción. Tenemos también un campo seleccionable donde el usuario podrá elegir los idiomas que desee.</p><p>Entonces, entremos de lleno en ello. </p><h2 id="como-construir-la-interfaz-de-usuario"><strong>Como construir la Interfaz de usuario</strong></h2><p>Para crear la interfaz fácilmente, usaremos una librería de Interfaces de Usuario llamado Semantic UI.</p><p>Por lo tanto, navegue al sitio web de Semantic UI en <a href="https://react.semantic-ui.com/">https://react.semantic-ui.com/</a>.</p><p>A continuación, selecciona "Get Started" en el menú lateral:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screenshot-2021-09-12-112404.png" class="kg-image" alt="Screenshot-2021-09-12-112404" width="600" height="400" loading="lazy"></figure><p>Instalemos la librería usando uno de los siguientes comandos. Puedes utilizar yarn add o npm install.</p><pre><code>$  yarn add semantic-ui-react semantic-ui-css
## O
$  npm install semantic-ui-react semantic-ui-css</code></pre><p>Después de que finalizó la instalación, debemos importar el paquete dentro de nuestro archivo index.js de la siguiente manera:</p><pre><code class="language-js">import 'semantic-ui-css/semantic.min.css'</code></pre><p>Ahora, ya podemos usar Semantic UI.</p><h3 id="como-crear-los-componentes-de-la-aplicaci-n"><strong>Como crear los componentes de la aplicación</strong></h3><p>Vamos a crear un componente llamado <strong>Traductor</strong>. Este tendrá todos los elementos que necesitamos.</p><p>Primero, necesitamos un título principal para la aplicación. Entonces, dentro del componente Traductor, crea un encabezado como este:</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react';

export default function Traductor() {
    return (
        &lt;div&gt;
            &lt;div className="app-header"&gt;
                &lt;h2 className="header"&gt;Traductor de texto&lt;/h2&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    )
}
</code></pre><figcaption>Traductor.js</figcaption></figure><p>Ahora vamos a agregarle un poco de estilos con CSS. En el archivo App.css quitaremos los estilos que vienen por defecto, y agregaremos los nuestros:</p><figure class="kg-card kg-code-card"><pre><code>@import url('https://fonts.googleapis.com/css2?family=Azeret+Mono&amp;display=swap');

.app-header{
  text-align: center;
  padding: 20px;
}

.header{
  font-family: 'Azeret Mono', monospace;
  font-size: 30px;
}</code></pre><figcaption>App.css Styling</figcaption></figure><p>Acá, estamos usando una fuente llamada Azeret Mono de Google Fonts, y hemos alineado el encabezado (header) y le dimos un poco de relleno (padding).</p><p>Para lograr ver los cambios, en el archivo App.js debemos reemplazar todas las líneas de código &nbsp;del return de la función App por un &lt;div&gt; con el componente Traductor. Quedando de esta manera: </p><figure class="kg-card kg-code-card"><pre><code>import './App.css';
import Traductor from './componentes/Traductor';

function App() {
  return (
    &lt;div&gt;
      &lt;Traductor /&gt;
    &lt;/div&gt;
  );
}

export default App;</code></pre><figcaption>App.js</figcaption></figure><p>Al hacer <code>npm start</code>, así es como se verá nuestro encabezado en este punto:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screenshot-2021-09-12-113234.png" class="kg-image" alt="Screenshot-2021-09-12-113234" width="600" height="400" loading="lazy"></figure><p>También necesitamos otros cuatro elementos. En primer lugar, nuestra área de entrada de texto, segundo el menú desplegable para seleccionar el idioma, tercero es el área de texto de salida donde se reflejará nuestro texto traducido, y por último es un botón que traducirá nuestro texto.</p><p>Podemos importar los elementos Form, TextArea, Button e Icon directamente desde Semantic UI de esta manera:</p><figure class="kg-card kg-code-card"><pre><code>import {
    Form,
    TextArea,
    Button,
    Icon
} from 'semantic-ui-react';</code></pre><figcaption>Traductor.js</figcaption></figure><p>A continuación, crearemos otro div después de &nbsp;<code>app-header</code> llamado <code>app-body</code> con el siguiente código:</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react';
import {
    Form,
    TextArea,
    Button,
    Icon
} from 'semantic-ui-react';

export default function Traductor() {
    return (
        &lt;div&gt;
            &lt;div className="app-header"&gt;
                &lt;h2 className="header"&gt;Traductor de texto&lt;/h2&gt;
            &lt;/div&gt;

            &lt;div className='app-body'&gt;
                &lt;div&gt;
                    &lt;Form&gt;
                        &lt;Form.Field
                            control={TextArea}
                            placeholder='Escribe el texto a traducir..'
                        /&gt;

                        &lt;select className="select-idioma"&gt;
                            &lt;option&gt;Por favor selecciona un idioma..&lt;/option&gt;
                        &lt;/select&gt;

                        &lt;Form.Field
                            control={TextArea}
                            placeholder='El resultado de la traducción..'
                        /&gt;

                        &lt;Button
                            color="orange"
                            size="large"
                        &gt;
                            &lt;Icon name='traducir' /&gt;
                            Traducir&lt;/Button&gt;
                    &lt;/Form&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    )
}
</code></pre><figcaption>Traductor.js</figcaption></figure><p>Y le agregaremos un poco de estilo con el siguiente CSS:</p><figure class="kg-card kg-code-card"><pre><code>@import url('https://fonts.googleapis.com/css2?family=Azeret+Mono&amp;display=swap');

.app-header{
  text-align: center;
  padding: 20px;
}

.header{
  font-family: 'Azeret Mono', monospace;
  font-size: 30px;
}

.app-body{
  padding: 20px;
  text-align: center;
}

.select-idioma{
  height: 40px !important;
  margin-bottom: 15px;
  outline: none !important;
}</code></pre><figcaption>App.css</figcaption></figure><p>Así es como se verá nuestra aplicación ahora. Puedes ver que tenemos las áreas de texto, seleccionar opciones y un botón para traducir.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screenshot-2021-09-12-114039.png" class="kg-image" alt="Screenshot-2021-09-12-114039" width="600" height="400" loading="lazy"></figure><h3 id="c-mo-configurar-las-apis"><strong>Cómo configurar las APIs</strong></h3><p>Para habilitar la traducción, usaremos la API <a href="https://libretranslate.de/docs/">LibreTranslate</a>. Por lo tanto, vaya a su sitio web para elegir tu API.</p><figure class="kg-card kg-image-card kg-width-full"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screenshot-2021-09-12-114304.png" class="kg-image" alt="Screenshot-2021-09-12-114304" width="600" height="400" loading="lazy"></figure><p>Como puedes ver en la imagen de arriba, tiene cuatro APIs.</p><p>Para empezar, necesitamos detectar nuestro idioma de entrada utilizando la API /detect que es de tipo POST.</p><h3 id="c-mo-instalar-axios"><strong>Cómo instalar Axios</strong></h3><p>Primeramente, vamos a instalar Axios, ya que necesitaremos usarlo para realizar solicitudes a la API.</p><p>Para instalar Axios, simplemente escriba el siguiente comando:</p><figure class="kg-card kg-code-card"><pre><code>yarn add axios

##O

npm i axios</code></pre><figcaption>Instalando Axios</figcaption></figure><p>Podemos usar <code>yarn add axios</code> o <code>npm i axios</code>, dependiendo de su administrador de paquetes que haya instalado.</p><p>Ahora, vamos a importarlo en nuestro componente Traductor.</p><pre><code>import axios from 'axios';</code></pre><p>También necesitamos los hooks <code>useState</code> y <code>useEffect</code>.</p><pre><code>import React, { useState, useEffect } from 'react';</code></pre><p>A continuación, cree un estado llamado inputText.</p><pre><code>const [textoEntrante, setTextoEntrante] = useState('');</code></pre><p>Y en el campo de área de texto de entrada, enlazarlo a un controlador de eventos onChange.</p><pre><code>&lt;Form.Field
 control={TextArea}
 placeholder='Escribe el texto a traducir..'
 onChange={(e) =&gt; setTextoEntrante(e.target.value)}
/&gt;</code></pre><p>Si introducimos algún texto, se almacenará en el estado <code>textoEntrante</code>.</p><h3 id="c-mo-llamar-a-la-api-de-detecci-n-de-idioma"><strong>Cómo llamar a la API de detección de idioma</strong></h3><p>Ahora, llamemos a la API de detección de idioma para detectar nuestro idioma de entrada.</p><p>Crea una función llamada <code>obtenerFuenteDelIdioma()</code> como esta:</p><pre><code>const obtenerFuenteDelIdioma = () =&gt; {
        axios.post(`https://libretranslate.de/detect`, {
            q: textoEntrante
        })
        .then((respuesta) =&gt; {
            console.log(respuesta.data[0].language)
        })
    }</code></pre><p>Aquí, estamos llamando a la API de detección, y estamos pasando nuestra entrada como el cuerpo del POST.</p><p>Estamos usando <code>axios.post</code> para enviar el texto de entrada como cuerpo, y estamos usando q como parámetro de encabezado.</p><p>Además, querremos llamar a esta función al hacer clic en el botón Traducir, así que vincule esta función al botón Traducir de esta manera:</p><pre><code>&lt;Button
                            color="orange"
                            size="large"
                            onClick={obtenerFuenteDelIdioma}
                        &gt;
                            &lt;Icon name='traducir' /&gt;
                            Traducir&lt;/Button&gt;</code></pre><p>Escribe algo en el primer cuadro de entrada de texto y, a continuación, pulse el botón Traducir. Verá un objeto, con la clave de idioma detectada en la consola, que necesitamos.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screenshot-2021-09-12-115444.png" class="kg-image" alt="Screenshot-2021-09-12-115444" width="600" height="400" loading="lazy"></figure><p>Ahora, necesitamos almacenar esta clave de idioma en un estado. Por lo tanto, cree un estado llamado <code>claveIdiomaDetectada</code>.</p><p>Luego, establezca el estado con la respuesta del llamado de la siguiente manera:</p><pre><code>const obtenerFuenteDelIdioma = () =&gt; {
        axios.post(`https://libretranslate.de/detect`, {
            q: textoEntrante
        })
            .then((respuesta) =&gt; {
                setClaveIdiomaDetectada(respuesta.data[0].language)
            })
    }</code></pre><p>Estamos estableciendo el índice cero a partir de los datos de respuesta, porque ahí es donde comienzan nuestros datos.</p><p>Aquí está todo el código hasta este punto:</p><pre><code>import React, { useState, useEffect } from 'react';
import {
    Form,
    TextArea,
    Button,
    Icon
} from 'semantic-ui-react';
import axios from 'axios';

export default function Traducir() {
    const [textoEntrante, setTextoEntrante] = useState('');
    const [claveIdiomaDetectada, setClaveIdiomaDetectada] = useState('')
    const obtenerFuenteDelIdioma = () =&gt; {
        axios.post(`https://libretranslate.de/detect`, {
            q: textoEntrante
        })
            .then((respuesta) =&gt; {
                setClaveIdiomaDetectada(respuesta.data[0].language)
            })
    }

    return (
        &lt;div&gt;
            &lt;div className="app-header"&gt;
                &lt;h2 className="header"&gt;Traductor de texto&lt;/h2&gt;
            &lt;/div&gt;

            &lt;div className='app-body'&gt;
                &lt;div&gt;
                    &lt;Form&gt;
                        &lt;Form.Field
                            control={TextArea}
                            placeholder='Escribe el texto a traducir..'
                            onChange={(e) =&gt; setTextoEntrante(e.target.value)}
                        /&gt;

                        &lt;select className="select-idioma"&gt;
                            &lt;option&gt;Por favor seleccione un idioma..&lt;/option&gt;
                        &lt;/select&gt;

                        &lt;Form.Field
                            control={TextArea}
                            placeholder='El resultado de su traducción..'
                        /&gt;

                        &lt;Button
                            color="orange"
                            size="large"
                            onClick={obtenerFuenteDelIdioma}
                        &gt;
                            &lt;Icon name='traducir' /&gt;
                            Traducir&lt;/Button&gt;
                    &lt;/Form&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    )
}
</code></pre><h3 id="c-mo-llamar-a-la-api-de-idiomas-admitidos-para-el-men-desplegable"><strong>Cómo llamar a la API de idiomas admitidos para el menú desplegable</strong></h3><p>Ahora, la segunda API obtiene los idiomas admitidos. Usaremos la lista en nuestro menú desplegable de selección.</p><p>Cree un hook <code>useEffect</code> para llamar a nuestra API de idiomas compatibles. <code>useEffect</code> es una función que se ejecutará cada vez que nuestro componente se renderice o cargue.</p><pre><code>useEffect(() =&gt; {
        axios.get(`https://libretranslate.de/languages`)
            .then((respuesta) =&gt; {
                console.log(respuesta.data)
            })
    }, [])</code></pre><p>Aquí estamos llamando a la API para idiomas compatibles utilizando el método axios.get. Luego estamos imprimiendo la respuesta en la consola.</p><p>Abra la consola para comprobar la lista de idiomas. Deberías ver algo como esto:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screenshot-2021-09-12-120348.png" class="kg-image" alt="Screenshot-2021-09-12-120348" width="600" height="400" loading="lazy"></figure><p>Establezcamos estos datos en un estado. Por lo tanto, cree un estado llamado <code>listadoIdiomas</code>. Será un arreglo vacío.</p><pre><code>const [listadoIdiomas, setListadoIdiomas] = useState([])</code></pre><pre><code>useEffect(() =&gt; {
        axios.get(`https://libretranslate.de/languages`)
            .then((respuesta) =&gt; {
                setListadoIdiomas(respuesta.data)
            })
    }, [])</code></pre><p>Luego, en el hook <code>useEffect</code>, debemos establecer la lista de idiomas usando <code>setListadoIdiomas</code>.</p><p>Necesitamos mostrar esta lista de idiomas en la opción de selección. Por lo tanto, asignemos el menú desplegable de selección utilizando el estado <code>listadoIdiomas</code> de la siguiente manera:</p><pre><code>&lt;select className="select-idioma"&gt;
                            &lt;option&gt;Por favor seleccione un idioma..&lt;/option&gt;
                            {listadoIdiomas.map((idioma) =&gt; {
                                return (
                                    &lt;option value={idioma.code}&gt;
                                        {idioma.name}
                                    &lt;/option&gt;
                                )
                            })}
                        &lt;/select&gt;</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screenshot--605-.png" class="kg-image" alt="Screenshot--605-" width="600" height="400" loading="lazy"></figure><p>Ahora, podemos seleccionar nuestro idioma en el menú desplegable de selección.</p><h3 id="c-mo-obtener-el-c-digo-del-idioma-seleccionado"><strong>Cómo obtener el código del idioma seleccionado</strong></h3><p>Ahora, si seleccionamos un idioma, por ejemplo, español, necesitamos obtener el código del idioma, ya que necesitamos ese código de idioma en nuestra API de traducción final.</p><p>Crea una función llamada <code>claveIdioma()</code> como esta:</p><pre><code>const claveIdioma = () =&gt; {
     
}</code></pre><p>Y en la opción de selección (&lt;select&gt;), debemos unir esta función usando el evento onChange:</p><pre><code>&lt;select className="select-idioma" onChange={claveIdioma}&gt;
                            &lt;option&gt;Por favor seleccione un idioma..&lt;/option&gt;
                            {listadoIdiomas.map((idioma) =&gt; {
                                return (
                                    &lt;option value={idioma.code}&gt;
                                        {idioma.name}
                                    &lt;/option&gt;
                                )
                            })}
                        &lt;/select&gt;</code></pre><p>Además, necesitamos almacenar el código del idioma en un estado, así que vamos a crearlo.</p><p>Cree un estado llamado <code>claveIdiomaSeleccionada</code>, que tendrá nuestra clave del idioma seleccionado de la entrada de selección.</p><pre><code>const [claveIdiomaSeleccionada, setClaveIdiomaSeleccionada] = useState('')</code></pre><p>Esta función <code>claveIdioma</code> aceptará un parámetro denominado <code>idiomaSeleccionado</code>. Y almacenaremos estos datos en el estado <code>claveIdiomaSeleccionada</code>, que obtendremos de la entrada de selección.</p><pre><code>const claveIdioma = (idiomaSeleccionado) =&gt; {
        setClaveIdiomaSeleccionada(idiomaSeleccionado.target.value)
}</code></pre><p>Ahora, si nos fijamos en la documentación de LibreTranslate, necesitamos tres entradas de datos:</p><ol><li>El texto a traducir.</li><li>El código del idioma fuente. (source)</li><li>El código del idioma de destino. (target)</li></ol><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screenshot-2021-09-12-120659.png" class="kg-image" alt="Screenshot-2021-09-12-120659" width="600" height="400" loading="lazy"></figure><p>No necesitamos la clave de la API (api_key) porque este servicio es gratuito.</p><p>Tenemos los tres inputs que necesitamos enviar en el cuerpo contenido en estos estados a continuación:</p><pre><code>const [textoEntrante, setTextoEntrante] = useState('');
const [claveIdiomaDetectada, setClaveIdiomaDetectada] = useState('');
const [claveIdiomaSeleccionada, setClaveIdiomaSeleccionada] = useState('')</code></pre><p>Ahora, llamemos a nuestra API final, que es /translate.</p><h3 id="c-mo-llamar-a-la-api-de-traducci-n-para-traducir-nuestro-texto">Cómo llamar a la API de traducción para traducir nuestro texto</h3><p>Cree un estado final denominado <code>textoResultante</code>. Este estado contendrá nuestro texto traducido de salida.</p><pre><code>const [textoResultante, setTextoResultante] = useState('');</code></pre><p>Cree una función que llame a la API de traducción:</p><pre><code>const traducirTexto = () =&gt; {
       obtenerFuenteDelIdioma();

        let data = {
            q : textoEntrante,
            source: claveIdiomaDetectada,
            target: claveIdiomaSeleccionada
        }
        axios.post(`https://libretranslate.de/translate`, data)
        .then((respuesta) =&gt; {
            setTextoResultante(respuesta.data.translatedText)
        })
    }</code></pre><p>Como puedes ver, estamos configurando <code>textoEntrante</code> en el estado <code>textoResultante</code>, y estamos llamando a la función <code>obtenerFuenteDelIdioma</code> dentro de la función <code>traducirTexto</code>. Por lo tanto, cada vez que se ejecute esta función, <code>obtenerFuenteDelIdioma</code> los activará automáticamente para obtener la fuente del idioma.</p><p>En otras palabras, al hacer clic (evento onClick) en el botón Traducir, la función <code>traducirTexto()</code> establecerá la fuente del idioma a través de <code>obtenerFuenteDelIdioma()</code>, y luego llamará a la API de traducción.</p><p>Entonces, en el botón Traducir, conecta esta función:</p><pre><code>&lt;Button
                            color="orange"
                            size="large"
                            onClick={traducirTexto}
                        &gt;
                            &lt;Icon name='traducir' /&gt;
                            Traducir&lt;/Button&gt;</code></pre><p>A continuación, vamos a crear un objeto llamado data. Enviaremos dentro de él toda la información que obtuvimos previamente, como <code>textoEntrante</code>, <code>claveIdiomaDetectada</code>, y la clave de <code>claveIdiomaSeleccionada</code> como q, source, y target respectivamente.</p><pre><code>let data = {
            q : textoEntrante,
            source: claveIdiomaDetectada,
            target: claveIdiomaSeleccionada
        }</code></pre><p>Luego, llamamos a la API de traducción usando axios.post y enviamos el objeto data como un parámetro de cuerpo de la petición.</p><pre><code>let data = {
            q : textoEntrante,
            source: claveIdiomaDetectada,
            target: claveIdiomaSeleccionada
        }
        axios.post(`https://libretranslate.de/translate`, data)</code></pre><p>Por último, establecemos la respuesta devuelta en el estado <code>textoResultante</code>.</p><pre><code>.then((respuesta) =&gt; {
            setTextoResultante(respuesta.data.translatedText)
        })</code></pre><p>Por lo tanto, ahora escriba algo en el cuadro de entrada, seleccione el idioma y haga clic en Traducir. Obtendrá su texto traducido.</p><p>Aquí está todo el código hasta este punto, para su referencia:</p><figure class="kg-card kg-code-card"><pre><code>import React, { useState, useEffect } from 'react';
import {
    Form,
    TextArea,
    Button,
    Icon
} from 'semantic-ui-react';
import axios from 'axios';

export default function Traductor() {
    const [textoEntrante, setTextoEntrante] = useState('');
    const [claveIdiomaDetectada, setClaveIdiomaDetectada] = useState('');
    const [claveIdiomaSeleccionada, setClaveIdiomaSeleccionada] = useState('')
    const [listadoIdiomas, setListadoIdiomas] = useState([])
    const [textoResultante, setTextoResultante] = useState('');
    const obtenerFuenteDelIdioma = () =&gt; {
        axios.post(`https://libretranslate.de/detect`, {
            q: textoEntrante
        })
            .then((respuesta) =&gt; {
                setClaveIdiomaDetectada(respuesta.data[0].language)
            })
    }
    useEffect(() =&gt; {
        axios.get(`https://libretranslate.de/languages`)
            .then((respuesta) =&gt; {
                setListadoIdiomas(respuesta.data)
            })
    }, [])

    const claveIdioma = (idiomaSeleccionado) =&gt; {
        setClaveIdioma(idiomaSeleccionado.target.value)
    }

    const traducirTexto = () =&gt; {
        obtenerFuenteDelIdioma();

        let data = {
            q : textoEntrante,
            source: claveIdiomaDetectada,
            target: claveIdiomaSeleccionada
        }
        axios.post(`https://libretranslate.de/translate`, data)
        .then((respuesta) =&gt; {
            setTextoResultante(respuesta.data.translatedText)
        })
    }

    return (
        &lt;div&gt;
            &lt;div className="app-header"&gt;
                &lt;h2 className="header"&gt;Traductor de texto&lt;/h2&gt;
            &lt;/div&gt;

            &lt;div className='app-body'&gt;
                &lt;div&gt;
                    &lt;Form&gt;
                        &lt;Form.Field
                            control={TextArea}
                            placeholder='Escribe el texto a traducir..'
                            onChange={(e) =&gt; setTextoEntrante(e.target.value)}
                        /&gt;

                        &lt;select className="select-idioma" onChange={claveIdioma}&gt;
                            &lt;option&gt;Por favor seleccione un idioma..&lt;/option&gt;
                            {listadoIdiomas.map((idioma) =&gt; {
                                return (
                                    &lt;option value={idioma.code}&gt;
                                        {idioma.name}
                                    &lt;/option&gt;
                                )
                            })}
                        &lt;/select&gt;

                        &lt;Form.Field
                            control={TextArea}
                            placeholder='El resultado de su traducción..'
                            value={textoResultante}
                        /&gt;

                        &lt;Button
                            color="orange"
                            size="large"
                            onClick={traducirTexto}
                        &gt;
                            &lt;Icon name='traducir' /&gt;
                            Traducir&lt;/Button&gt;
                    &lt;/Form&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    )
}
</code></pre><figcaption>Traductor.js</figcaption></figure><p>Ahora, el último paso. En el hook <code>useEffect</code>, llama a la función <code>obtenerFuenteDelIdioma()</code>, y establece <code>textoEntrante</code> como el arreglo de dependencias del <code>useEffect</code>. Esto significa que siempre y cuando nuestro <code>textoEntrada</code> cambie su texto, o este estado se actualice, se ejecutará la función <code>useEffect</code>, y llamará a la función <code>obtenerFuenteDelIdioma()</code> cada vez que se ejecute.</p><pre><code>useEffect(() =&gt; {
       axios.get(`https://libretranslate.de/languages`)
       .then((respuesta) =&gt; {
        setListadoIdiomas(respuesta.data)
       })

       obtenerFuenteDelIdioma()
    }, [textoEntrante])</code></pre><p>Ahora, veamos nuestra salida:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screenshot-2021-09-12-123442.png" class="kg-image" alt="Screenshot-2021-09-12-123442" width="600" height="400" loading="lazy"></figure><p>Escriba algo de texto como entrada y seleccione el idioma. Presione Traducir y verá sus datos traducidos en el espacio de salida.</p><h2 id="conclusi-n"><strong>Conclusión</strong></h2><p>Ahora ya sabes cómo crear un traductor de texto con React. Puedes crear tu propia interfaz de usuario si lo deseas.</p><p>Así que adelante, construye y experimenta un poco con él. Hay toneladas de cosas que puedes hacer.</p><blockquote>Buen aprendizaje!</blockquote> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
