diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-data-structures/iterate-through-the-keys-of-an-object-with-a-for...in-statement.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-data-structures/iterate-through-the-keys-of-an-object-with-a-for...in-statement.md index fccfd7fcc10..9400d309b6f 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-data-structures/iterate-through-the-keys-of-an-object-with-a-for...in-statement.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-data-structures/iterate-through-the-keys-of-an-object-with-a-for...in-statement.md @@ -16,7 +16,7 @@ for (let user in users) { } ``` -Esto registrará `Alan`, `Jeff`, `Sarah`, y `Ryan`, cada valor en su propia línea. +Esto devolvería `Alan`, `Jeff`, y `Sarah` - cada valor en su propia línea. En esta sentencia, definimos una variable `user`, y como puedes ver, esta variable se restablece durante cada iteración a cada una de las claves del objeto a medida que la sentencia hace un bucle a través del objeto, dando como resultado que el nombre de cada usuario se imprima en la consola. diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/access-multi-dimensional-arrays-with-indexes.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/access-multi-dimensional-arrays-with-indexes.md index ebbaf87236f..1ea0e7fdf50 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/access-multi-dimensional-arrays-with-indexes.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/access-multi-dimensional-arrays-with-indexes.md @@ -21,12 +21,12 @@ const arr = [ [[10, 11, 12], 13, 14] ]; -arr[3]; -arr[3][0]; -arr[3][0][1]; +const subarray = arr[3]; +const nestedSubarray = arr[3][0]; +const element = arr[3][0][1]; ``` -`arr[3]` es `[[10, 11, 12], 13, 14]`, `arr[3][0]` es `[10, 11, 12]` y `arr[3][0][1]` es `11`. +En este ejemplo, `subarray` tiene el valor `[[10, 11, 12], 13, 14]`, `nestedSubarray` tiene el valor `[10, 11, 12]`, y `element` tiene el valor `11`. **Nota:** No debe haber ningún espacio entre el nombre del arreglo y los corchetes, ni `array [0][0]` o `array [0] [0]` están permitidos. Aunque JavaScript pueda procesar esto correctamente, puedes confundir a otros programadores al leer tu código. diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/accessing-object-properties-with-variables.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/accessing-object-properties-with-variables.md index 03419b61091..aa99545fb81 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/accessing-object-properties-with-variables.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/accessing-object-properties-with-variables.md @@ -27,29 +27,11 @@ console.log(myBreed); La cadena `Doberman` se mostrará en la consola. -Otra forma de usar este concepto es cuando el nombre de la propiedad se recoge dinámicamente durante la ejecución del programa, de la siguiente manera: - -```js -const someObj = { - propName: "John" -}; - -function propPrefix(str) { - const s = "prop"; - return s + str; -} - -const someProp = propPrefix("Name"); -console.log(someObj[someProp]); -``` - -`someProp` tendrá una cadena con un valor `propName` y la cadena `John` se mostrará en la consola. - -Ten en cuenta que *no* usamos comillas alrededor del nombre de la variable cuando la usamos para acceder a la propiedad porque utilizamos el *valor* de la variable, no el *nombre*. +Ten en cuenta que *no* utilizamos comillas alrededor del nombre de la variable cuando la usamos para acceder a la propiedad porque utilizamos el *valor* de la variable, no el *nombre*. # --instructions-- -Establece la variable `playerNumber` a `16`. Luego, usa la variable para buscar el nombre del jugador y asignarlo a `player`. +Asigna la variable `playerNumber` a `16`. Luego, usa la variable para buscar el nombre del jugador y asignarlo a `player`. # --hints-- @@ -71,7 +53,7 @@ El valor de `player` debe ser la cadena `Montana` assert(player === 'Montana'); ``` -Debes usar la notación de corchete para acceder a `testObj` +Debes usar la notación de corchetes para acceder a `testObj` ```js assert(/testObj\s*?\[.*?\]/.test(code)); @@ -83,7 +65,7 @@ No debes asignar el valor de `Montana` a la variable `player` directamente. assert(!code.match(/player\s*=\s*"|\'\s*Montana\s*"|\'\s*;/gi)); ``` -Debes usar la variable `playerNumber` en tu notación de corchete +Debes usar la variable `playerNumber` en tu notación de corchetes ```js assert(/testObj\s*?\[\s*playerNumber\s*\]/.test(code)); diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/assignment-with-a-returned-value.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/assignment-with-a-returned-value.md index f4197e2ed20..4c134547e33 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/assignment-with-a-returned-value.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/assignment-with-a-returned-value.md @@ -9,7 +9,7 @@ dashedName: assignment-with-a-returned-value # --description-- -Si recuerdas de nuestra discusión sobre [almacenar valores con el operador de asignación](/learn/javascript-algorithms-and-data-structures/basic-javascript/storing-values-with-the-assignment-operator), todo a la derecha del signo de igualdad se resuelve antes de asignar el valor. Esto significa que podemos tomar el valor devuelto de una función y asignarlo a una variable. +Si recuerda nuestra discusión sobre el almacenamiento de valores con el operador de asignación, todo lo que está a la derecha del signo de igualdad se resuelve antes de asignar el valor. Esto significa que podemos tomar el valor devuelto de una función y asignarlo a una variable. Supongamos que hemos predefinido una función `sum` que suma dos números juntos, entonces: diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/concatenating-strings-with-plus-operator.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/concatenating-strings-with-plus-operator.md index 9390cce0a52..aad95864f85 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/concatenating-strings-with-plus-operator.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/concatenating-strings-with-plus-operator.md @@ -25,26 +25,32 @@ Ejemplo: const ourStr = "I come first. " + "I come second."; ``` -La cadena `I come first. I come second.` se mostrará en la consola. +La cadena `I come first. I come second.` se mostraría en la consola. # --instructions-- Construye `myStr` a partir de las cadenas `This is the start.` y `This is the end.` utilizando el operador `+`. Asegúrate de incluir un espacio entre las dos cadenas. # --hints-- -`myStr` debe tener una cadena con valor `This is the start. This is the end.` +`myStr` Debe tener un solo carácter de espacio entre las dos cadenas. + +```js +assert(/start\. This/.test(myStr)); +``` + +`myStr` debe tener un valor de la cadena `This is the start. This is the end.` ```js assert(myStr === 'This is the start. This is the end.'); ``` -Debes usar el operador `+` para construir `myStr`. +Deberías usar el operador `+` para construir `myStr`. ```js assert(code.match(/(["']).*\1\s*\+\s*(["']).*\2/g)); ``` -`myStr` debe ser creada usando la palabra clave `const`. +`myStr` Debe crearse una variable con la palabra reservada `const`. ```js assert(/const\s+myStr/.test(code)); diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/concatenating-strings-with-the-plus-equals-operator.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/concatenating-strings-with-the-plus-equals-operator.md index 71f31f0e0b9..ae6eb1acbb1 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/concatenating-strings-with-the-plus-equals-operator.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/concatenating-strings-with-the-plus-equals-operator.md @@ -28,13 +28,19 @@ Construye `myStr` en varias líneas concatenando estas dos cadenas: `This is the # --hints-- -`myStr` debe tener una cadena con valor `This is the first sentence. This is the second sentence.` +`myStr` Debe tener un solo carácter de espacio entre las dos cadenas. + +```js +assert(/sentence\. This/.test(myStr)); +``` + +`myStr` Debe tener un valor de la cadena `This is the first sentence. This is the second sentence.` ```js assert(myStr === 'This is the first sentence. This is the second sentence.'); ``` -Debes usar el operador `+=` para construir `myStr`. +Deberías usar el operador `+=` para construir `myStr`. ```js assert(code.match(/myStr\s*\+=\s*(["']).*\1/g)); diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/counting-cards.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/counting-cards.md index cb4dc04a670..7655489d512 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/counting-cards.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/counting-cards.md @@ -25,6 +25,19 @@ NO incluyas comillas (individuales o dobles) en el resultado. # --hints-- +Su función debe devolver un valor para el conteo y el texto (`Bet` o `Hold`) con un carácter de espacio entre ellos. + +```js +assert(// + (function () { + count = 0; + let out = cc(10); + const hasSpace = /-?\d+ (Bet|Hold)/.test('' + out); + return hasSpace; + })() +); +``` + La secuencia de cartas 2, 3, 4, 5, 6 debe devolver la cadena `5 Bet` ```js diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/create-decimal-numbers-with-javascript.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/create-decimal-numbers-with-javascript.md index d3bd35862fe..a37c0ac1d11 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/create-decimal-numbers-with-javascript.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/create-decimal-numbers-with-javascript.md @@ -11,7 +11,7 @@ dashedName: create-decimal-numbers-with-javascript También podemos almacenar números decimales en variables. Los números decimales a veces se denominan números de coma flotante o flotantes. -**Nota:** computadoras representan números con precisión finita. Por eso las operaciones de punto flotante no pueden representar exactamente verdaderas operaciones aritméticas, y esto conduce a muchas situaciones sorprendentes. si te enfrentas con uno de estos problemas, abre el tema en el [foro de freeCodeCamp](https://forum.freecodecamp.org/). +**Nota:** cuando calculas números, se calculan con precisión finita. Las operaciones con puntos flotantes pueden producir resultados diferentes a los deseados. Si obtiene uno de estos resultados, abra un tema en el foro de freeCodeCamp. # --instructions-- diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/escaping-literal-quotes-in-strings.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/escaping-literal-quotes-in-strings.md index a4d96b88250..25c378b2e5e 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/escaping-literal-quotes-in-strings.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/escaping-literal-quotes-in-strings.md @@ -39,7 +39,7 @@ Debes usar dos comillas dobles (`"`) y cuatro comillas dobles escapadas (`\"`). assert(code.match(/\\"/g).length === 4 && code.match(/[^\\]"/g).length === 2); ``` -La variable myStr debe contener la cadena: `I am a "double quoted" string inside "double quotes".` +La variable `myStr` debe contener la cadena: `I am a "double quoted" string inside "double quotes".` ```js assert(/I am a "double quoted" string inside "double quotes(\."|"\.)$/.test(myStr)); diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/generate-random-fractions-with-javascript.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/generate-random-fractions-with-javascript.md index 60edb42b85d..a5e13cd8883 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/generate-random-fractions-with-javascript.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/generate-random-fractions-with-javascript.md @@ -13,7 +13,7 @@ Los números aleatorios son útiles para crear comportamientos aleatorios. JavaScript tiene una función `Math.random()` que genera un número decimal aleatorio entre `0` (inclusivo) y `1` (exclusivo). Así que `Math.random()` puede devolver un `0` pero nunca devuelve un `1`. -**Nota:** Así como aprendimos en [almacenando valores con el operador de igualdad](/learn/javascript-algorithms-and-data-structures/basic-javascript/storing-values-with-the-assignment-operator), todas las llamadas de funciones se resolverán antes de que el `return` se ejecute, así que podemos devolver (`return`) el valor de la función `Math.random()`. +**Nota:** Al igual que el almacenamiento de valores con el operador de asignación, todas las llamadas a la función se resolverán antes de que se ejecute el `return`, por lo que el `return` devuelve el valor de la función `Math.random()`. # --instructions-- diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/global-scope-and-functions.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/global-scope-and-functions.md index 5dc2a7d5cdc..83b47185103 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/global-scope-and-functions.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/global-scope-and-functions.md @@ -17,7 +17,7 @@ Las variables que se declaran sin las palabras clave `let` o `const` se crean au Usando `let` o `const`, declara una variable global llamada `myGlobal` fuera de cualquier función. Inicialízala con un valor de `10`. -Dentro de la función `fun1`, asigna `5` a `oopsGlobal` ***sin*** usar las palabras clave `let` o `const`. +Dentro de la función `fun1`, asigna `5` a `oopsGlobal` ***sin usar*** las palabras clave `var`, `let` o `const`. # --hints-- diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/iterate-with-javascript-do...while-loops.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/iterate-with-javascript-do...while-loops.md index ec75b75adb2..9cde8169f16 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/iterate-with-javascript-do...while-loops.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/iterate-with-javascript-do...while-loops.md @@ -21,7 +21,7 @@ do { } while (i < 5); ``` -El ejemplo anterior se comporta de forma similar a otros tipos de bucles, siendo el arreglo resultante `[0, 1, 2, 3, 4]`. Sin embargo, lo que hace que el bucle `do...while` sea diferente a otros bucles es cómo se comporta cuando la condición falla en la primera verificación. Veamos esto en acción: Aquí puedes ver un bucle `while` que ejecutará el código una y otra vez siempre que `i < 5`: +El ejemplo anterior se comporta de forma similar a otros tipos de bucles, siendo el arreglo resultante `[0, 1, 2, 3, 4]`. Sin embargo, lo que hace que el bucle `do...while` sea diferente a otros bucles es cómo se comporta cuando la condición falla en la primera verificación. Veamos esto en acción. Aquí hay un bucle `while` normal que ejecutara el código en el bucle mientras `i < 5`: ```js const ourArray = []; diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/return-early-pattern-for-functions.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/return-early-pattern-for-functions.md index 7d1507c0818..d58c38fc7c3 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/return-early-pattern-for-functions.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/return-early-pattern-for-functions.md @@ -28,8 +28,8 @@ Lo anterior mostrará la cadena `Hello` en la consola y devolverá la cadena `Wo Modifica la función `abTest` para que cuando `a` o `b` sean menores que `0` la función salga inmediatamente con un valor `undefined`. -**Sugerencia** -Recuerda que [`undefined` es una palabra clave](https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/understanding-uninitialized-variables), no una cadena. +**Pista** +Recuerda que undefined es una palabra clave, no una cadena. # --hints-- diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/returning-boolean-values-from-functions.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/returning-boolean-values-from-functions.md index 400b79963f6..92009939929 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/returning-boolean-values-from-functions.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/returning-boolean-values-from-functions.md @@ -9,7 +9,7 @@ dashedName: returning-boolean-values-from-functions # --description-- -Podrás recordar que en [Comparación con el operador de igualdad](/learn/javascript-algorithms-and-data-structures/basic-javascript/comparison-with-the-equality-operator) todos los operadores de comparación devuelven un valor booleano `true`, o `false`. +Puede recordar de la comparación con el operador de igualdad que todos los operadores de comparación devuelven un valor booleano `true` o `false`. A veces la gente usa una sentencia `if/else` para hacer una comparación, como esta: diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/use-recursion-to-create-a-countdown.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/use-recursion-to-create-a-countdown.md index 5f6c13ec6d6..69acdec7e29 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/use-recursion-to-create-a-countdown.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/use-recursion-to-create-a-countdown.md @@ -8,7 +8,7 @@ dashedName: use-recursion-to-create-a-countdown # --description-- -En el [desafío anterior](/learn/javascript-algorithms-and-data-structures/basic-javascript/replace-loops-using-recursion), aprendiste como usar la recursión para reemplazar un bucle `for`. Ahora, echemos un vistazo a una función más compleja que devuelve un arreglo de enteros consecutivos empezando con `1` hasta el número pasado a la función. +En un reto anterior, aprendiste a utilizar la recursividad para sustituir un bucle `for`. Ahora, echemos un vistazo a una función más compleja que devuelve un arreglo de enteros consecutivos empezando con `1` hasta el número pasado a la función. Como se menciona en el desafío anterior, habrá un caso base. El caso base le dice a la función recursiva cuando no necesita llamarse a sí misma. Es un caso simple donde el valor de retorno ya se conoce. También habrá una llamada recursiva la cual ejecuta la función original con argumentos diferentes. Si la función se escribe correctamente, eventualmente el caso base será alcanzado. diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/using-objects-for-lookups.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/using-objects-for-lookups.md index 406b1506643..cbde8c3c269 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/using-objects-for-lookups.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/using-objects-for-lookups.md @@ -25,14 +25,14 @@ const alpha = { 26:"A" }; -alpha[2]; -alpha[24]; +const thirdLetter = alpha[2]; +const lastLetter = alpha[24]; const value = 2; -alpha[value]; +const valueLookup = alpha[value]; ``` -`alpha[2]` es la cadena `Y`, `alpha[24]` es la cadena `C`, y `alpha[value]` es la cadena `Y`. +`thirdLetter` es la cadena `Y`, `lastLetter` es la cadena `C`, y `valueLookup` es la cadena `Y`. # --instructions-- diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/word-blanks.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/word-blanks.md index f75493b4e7f..c92697ecfe1 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/word-blanks.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/basic-javascript/word-blanks.md @@ -9,11 +9,9 @@ dashedName: word-blanks # --description-- -Ahora vamos a usar nuestro conocimiento sobre cadenas para construir un juego de palabras estilo "Mad Libs" que llamaremos "Palabras en blanco". Crearás una frase (opcionalmente humorística) del estilo: Rellena los espacios vacíos. +Se te proporcionan oraciones con algunas palabras faltantes, como sustantivos, verbos, adjetivos y adverbios. Luego, completa las piezas que faltan con palabras de tu elección de una manera que la oración completa tenga sentido. -En un juego de "Mad Libs", se te proporcionan oraciones con algunas palabras faltantes, como sustantivos, verbos, adjetivos y adverbios. Luego, rellenas las piezas que faltan con palabras de tu elección de una manera que la frase completa tenga sentido. - -Considera esta oración: It was really **\_\_\_\_**, and we **\_\_\_\_** ourselves **\_\_\_\_**. Esta oración tiene tres piezas faltantes: un adjetivo, un verbo y un adverbio, y podemos añadir palabras de nuestra elección para completarla. A continuación, podemos asignar la oración completa a una variable de la siguiente manera: +Considera esta oración: It was really **\_\_\_\_**, and we **\_\_\_\_** ourselves **\_\_\_\_**. Esta oración tiene tres piezas faltantes: un adjetivo, un verbo y un adverbio, y podemos añadir palabras de nuestra elección para completarla. Luego podemos asignar la oración completa a una variable de la siguiente manera: ```js const sentence = "It was really " + "hot" + ", and we " + "laughed" + " ourselves " + "silly" + "."; @@ -21,9 +19,9 @@ const sentence = "It was really " + "hot" + ", and we " + "laughed" + " ourselve # --instructions-- -En este desafío, te proporcionamos un sustantivo, un verbo, un adjetivo y un adverbio. Necesita formar una oración completa usando palabras de tu elección, junto con las palabras que te proporcionamos. +En este desafío, te proporcionamos un sustantivo, un verbo, un adjetivo y un adverbio. Necesitas formar una oración completa usando palabras de tu elección, junto con las palabras que te proporcionamos. -Necesitarás usar el operador de concatenación de cadenas `+` para construir una nueva cadena, usando las variables proporcionadas: `myNoun`, `myAdjective`, `myVerb`, y `myAdverb`. Luego asignarás la cadena formada a la variable `wordBlanks`. No debes cambiar las palabras asignadas a las variables. +Necesitarás usar el operador de concatenación de cadenas `+` para construir una nueva cadena, usando las variables proporcionadas: `myNoun`, `myAdjective`, `myVerb`, y `myAdverb`. A continuación, asignarás la cadena formada a la variable `wordBlanks`. No debes cambiar las palabras asignadas a las variables. También tendrás que tener en cuenta los espacios en tu cadena, para que la frase final tenga espacios entre todas las palabras. El resultado debe ser una oración completa. @@ -58,7 +56,7 @@ assert( ); ``` -`wordBlanks` debe contener todas las palabras asignadas a las variables `myNoun`, `myVerb`, `myAdjective` y `myAdverb` separados por espacios (y cualquier palabra adicional en tu madlib). +`wordBlanks` debe contener todas las palabras asignadas a las variables `myNoun`, `myVerb`, `myAdjective` y `myAdverb` separadas por espacios (y cualquier palabra adicional a tu elección). ```js assert( diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/es6/compare-scopes-of-the-var-and-let-keywords.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/es6/compare-scopes-of-the-var-and-let-keywords.md index 78dcb12f162..632e99456f0 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/es6/compare-scopes-of-the-var-and-let-keywords.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/es6/compare-scopes-of-the-var-and-let-keywords.md @@ -8,7 +8,7 @@ dashedName: compare-scopes-of-the-var-and-let-keywords # --description-- -Si no estás familiarizado con `let`, echa un vistazo a [este desafío](/learn/javascript-algorithms-and-data-structures/basic-javascript/explore-differences-between-the-var-and-let-keywords). +Si no estás familiarizado con `let`, verifica este desafío sobre la diferencia entre let y var. Cuando declaras una variable con la palabra clave `var`, esta es declarada globalmente o localmente sí es declarada dentro de una función. diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/es6/mutate-an-array-declared-with-const.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/es6/mutate-an-array-declared-with-const.md index 41775436362..7eabc5f17e1 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/es6/mutate-an-array-declared-with-const.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/es6/mutate-an-array-declared-with-const.md @@ -8,7 +8,7 @@ dashedName: mutate-an-array-declared-with-const # --description-- -Si no estás familiarizado con `const`, echa un vistazo a [este desafío](/learn/javascript-algorithms-and-data-structures/basic-javascript/declare-a-read-only-variable-with-the-const-keyword). +Si no estás familiarizada con `const`, verifica este desafío sobre la palabra clave const. La declaración `const` tiene muchos casos de uso, en el JavaScript moderno. @@ -23,7 +23,7 @@ s[2] = 45; console.log(s); ``` -`s = [1, 2, 3]` resultará en un error. El `console.log` mostrará el valor `[5, 6, 45]`. +`s = [1, 2, 3]` resultará en un error. Después de comentar esa línea, el `console.log` mostrará el valor `[5, 6, 45]`. Como puedes ver, puedes mutar el objeto `[5, 6, 7]` en sí mismo y la variable `s` seguirá apuntado al arreglo alterado `[5, 6, 45]`. Como todos los arreglos, los elementos del arreglo en `s` son mutables, pero debido a que se utilizó `const`, no puedes utilizar el identificador de la variable `s` para apuntar a un arreglo diferente usando el operador de asignación. diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/arguments-optional.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/arguments-optional.md index d63e8887e5b..fba7a65a59f 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/arguments-optional.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/arguments-optional.md @@ -66,6 +66,12 @@ assert.isUndefined(addTogether(2)([3])); assert.isUndefined(addTogether('2', 3)); ``` +`addTogether(5, undefined)` Debería devolver `undefined`. + +```js +assert.isUndefined(addTogether(5, undefined)); +``` + # --seed-- ## --seed-contents-- diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/dna-pairing.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/dna-pairing.md index a4b874b0e18..d9e5c7bb985 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/dna-pairing.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/dna-pairing.md @@ -1,14 +1,14 @@ --- id: afd15382cdfb22c9efe8b7de title: Emparejamiento de ADN -challengeType: 5 +challengeType: 1 forumTopicId: 16009 dashedName: dna-pairing --- # --description-- -Los pares de las cadenas de ADN consisten en pares de base de proteínas. Los pares de base son representados por los caracteres AT y CG, que forman bloques de doble hélix ADN. +El par de hebras del ADN esta formado por pares de nucleobases. Los pares de base son representados por los caracteres AT y CG, que forman bloques de doble hélix ADN. A la cadena de ADN le falta el elemento de emparejamiento. Escribe una función que coincida con los pares de base faltantes para la hebra de ADN proporcionada. Para cada carácter de la cadena proporcionada, encuentra el carácter de par base. Devuelve los resultados como un arreglo 2d. diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/javascript-algorithms-and-data-structures-projects/caesars-cipher.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/javascript-algorithms-and-data-structures-projects/caesars-cipher.md index 9c01b9c0d02..0c8ec8d934b 100644 --- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/javascript-algorithms-and-data-structures-projects/caesars-cipher.md +++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/javascript-algorithms-and-data-structures-projects/caesars-cipher.md @@ -10,9 +10,9 @@ dashedName: caesars-cipher Uno de los cifrados más simples y conocidos es el cifrado César, también conocido como cifrado por desplazamiento. En un cifrado por desplazamiento los significados de las letras se desplazan por una cantidad determinada. -Un uso moderno común es el cifrado [ROT13](https://www.freecodecamp.org/news/how-to-code-the-caesar-cipher-an-introduction-to-basic-encryption-3bf77b4e19f7/), donde los valores de las letras son desplazados por 13 lugares. Así que `A ↔ N`, `B ↔ O` y así sucesivamente. +Un uso moderno común es el cifrado ROT13, donde los valores de las letras son desplazados por 13 lugares. Así que `A ↔ N`, `B ↔ O` y así sucesivamente. -Escribe una función que reciba una cadena codificada en [ROT13](https://www.freecodecamp.org/news/how-to-code-the-caesar-cipher-an-introduction-to-basic-encryption-3bf77b4e19f7/) como entrada y devuelva una cadena decodificada. +Escribe una función que reciba una cadena codificada en ROT13 como entrada y devuelva una cadena decodificada. Todas las letras estarán en mayúsculas. No transformes ningún carácter no alfabético (espacios, puntuación, por ejemplo), pero si transmítelos. diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-25-5-clock.md b/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-25-5-clock.md index 69bca9bb57e..7a4ebb394d2 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-25-5-clock.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-25-5-clock.md @@ -8,7 +8,7 @@ dashedName: build-a-25--5-clock # --description-- -**Objetivo:** Crear una aplicación que sea funcionalmente similar a . +**Objetivo:** Crea una aplicación que sea funcionalmente similar a esto: https://codepen.io/freeCodeCamp/full/XpKrrW. Completa las historias de usuario a continuación y obtén todas las pruebas para aprobar. Utiliza cualquier librería o API que necesites. Dale tu propio estilo. @@ -70,7 +70,7 @@ Puedes utilizar cualquier combinación de HTML, JavaScript, CSS, Bootstrap, SASS **Historia de usuario #28:** El elemento de audio con id: `beep` dejará de reproducirse y se reiniciará al hacer clic en el elemento con id: `reset`. -Puedes construir tu proyecto con usando esta plantilla CodePen y haciendo clic en `Save` para crear tu propio pen. O puedes utilizar este enlace CDN para ejecutar las pruebas en cualquier entorno que desees: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js` +Puedes construir tu proyecto usando esta plantilla CodePen y haciendo clic en `Save` para crear tu propio entorno. O puedes utilizar este enlace CDN para ejecutar las pruebas en cualquier entorno que desees: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js` Una vez que hayas terminado, envía la URL de tu proyecto funcional con todas las pruebas pasadas. diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-markdown-previewer.md b/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-markdown-previewer.md index 9bf759237aa..6bb74e95253 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-markdown-previewer.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-markdown-previewer.md @@ -8,7 +8,7 @@ dashedName: build-a-markdown-previewer # --description-- -**Objetivo:** Crear una aplicación que sea funcionalmente similar a . +**Objetivo:** Crea una aplicación con funciones similares a esta: https://codepen.io/freeCodeCamp/full/GrZVVO. Completa las historias de usuario a continuación y obtén todas las pruebas para aprobar. Utiliza cualquier librería o API que necesites. Dale tu propio estilo. @@ -28,7 +28,7 @@ Puedes utilizar cualquier combinación de HTML, JavaScript, CSS, Bootstrap, SASS **Bonus opcional (No necesitas hacer esto para pasar esta prueba):** Mi previsualizador de markdown interpreta los retornos de carro y las renderiza como elementos `br` (salto de línea). -Puedes construir tu proyecto con usando esta plantilla CodePen y haciendo clic en `Save` para crear tu propio pen. O puedes utilizar este enlace CDN para ejecutar las pruebas en cualquier entorno que desees: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js` +Puedes crear tu proyecto usando esta plantilla, haciendo clic en `Save` para crear tu propio proyecto CodePen. O puedes utilizar este enlace CDN para ejecutar las pruebas en cualquier entorno que desees: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js` Una vez que hayas terminado, envía la URL de tu proyecto funcional con todas las pruebas pasadas. diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-random-quote-machine.md b/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-random-quote-machine.md index 7b364ddc130..0b7f87e3862 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-random-quote-machine.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/front-end-development-libraries-projects/build-a-random-quote-machine.md @@ -8,7 +8,7 @@ dashedName: build-a-random-quote-machine # --description-- -**Objetivo:** Crear una aplicación que sea funcionalmente similar a . +**Objetivo:** Crea una aplicación con funciones similares a esta: https://codepen.io/freeCodeCamp/full/qRZeGZ. Completa las historias de usuario a continuación y obtén todas las pruebas para aprobar. Utiliza cualquier librería o API que necesites. Dale tu propio estilo. @@ -36,7 +36,7 @@ Puedes utilizar cualquier combinación de HTML, JavaScript, CSS, Bootstrap, SASS **Historia de usuario #11:** El elemento contenedor `#quote-box` debe estar centrado horizontalmente. Ejecuta las pruebas con el nivel de zoom del navegador al 100% y la página maximizada. -Puedes construir tu proyecto con usando esta plantilla CodePen y haciendo clic en `Save` para crear tu propio pen. O puedes utilizar este enlace CDN para ejecutar las pruebas en cualquier entorno que desees: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js` +Puedes construir tu proyecto utilizando esta plantilla CodePen y haciendo clic en `Save` para crear tu propio proyecto CodePen. O puedes utilizar este enlace CDN para ejecutar las pruebas en cualquier entorno que desees: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js` Una vez que hayas terminado, envía la URL de tu proyecto funcional con todas las pruebas pasadas. diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/jquery/change-text-inside-an-element-using-jquery.md b/curriculum/challenges/espanol/03-front-end-development-libraries/jquery/change-text-inside-an-element-using-jquery.md index c98ca7a0936..dfe9a074624 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/jquery/change-text-inside-an-element-using-jquery.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/jquery/change-text-inside-an-element-using-jquery.md @@ -22,7 +22,7 @@ jQuery también tiene una función similar llamada `.text()` que solamente alter Cambia el botón con id `target4` enfatizando su texto. -[ Ve a nuestro artículo sobre <em>](https://www.freecodecamp.org/news/html-elements-explained-what-are-html-tags/#em-element) para aprender la diferencia entre `` y `` y sus usos. +Vea nuestro artículo de noticias para <em> aprender la diferencia entre `` y `` y sus usos. Ten en cuenta que mientras la etiqueta `` tradicionalmente se usaba para enfatizar texto, fue adaptada para ser usada como etiqueta para iconos. La etiqueta `` ahora es ampliamente aceptada como la etiqueta de énfasis. Cualquiera de las dos servirá para este desafío. diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/react-and-redux/moving-forward-from-here.md b/curriculum/challenges/espanol/03-front-end-development-libraries/react-and-redux/moving-forward-from-here.md index 1fe26eb71be..e1deded253c 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/react-and-redux/moving-forward-from-here.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/react-and-redux/moving-forward-from-here.md @@ -10,7 +10,7 @@ dashedName: moving-forward-from-here ¡Felicidades! Has terminado las lecciones sobre React y Redux. Hay un último punto que vale la pena señalar antes de seguir adelante. Por lo general, no escribirás aplicaciones React en un editor de código como este. Este desafío te da una idea de cómo es la sintaxis si trabajas con npm y un sistema de archivos en tu propia máquina. El código debería ser similar, excepto por el uso de las sentencias `import` (éstas traen todas las dependencias que se te han proporcionado en los desafíos). La sección "Gestión de paquetes con npm" cubre npm con más detalle. -Por último, escribir código React y Redux generalmente requiere cierta configuración. Esto puede complicarse rápidamente. Si te interesa experimentar en tu propia máquina, Create React App viene configurado y listo para funcionar. +Por último, escribir código React y Redux generalmente requiere cierta configuración. Esto puede complicarse rápidamente. Si te interesa experimentar en tu propia máquina, Create React App viene configurado y listo para funcionar. Alternativamente, puedes habilitar Babel como un preprocesador de JavaScript en CodePen, añadir React y ReactDOM como recursos externos de JavaScript, y trabajar allí también. diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/react/create-a-stateful-component.md b/curriculum/challenges/espanol/03-front-end-development-libraries/react/create-a-stateful-component.md index 9d1e65f39ec..4f396acbc9a 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/react/create-a-stateful-component.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/react/create-a-stateful-component.md @@ -22,7 +22,7 @@ Tienes acceso al objeto `state` a lo largo de la vida de tu componente. Puedes a # --instructions-- -Hay un componente en el editor de código que está intentando renderizar una propiedad `name` desde su `state`. Sin embargo, no hay ningún `state` definido. Inicializa el componente con `state` en el `constructor` y asigna tu nombre a una propiedad de `name`. +Hay un componente en el editor de código que está intentando renderizar una propiedad `firstName` desde su `state`. Sin embargo, no hay ningún `state` definido. Inicia el componente con `state` en el `constructor` y asigna tu nombre a la propiedad`firstName`. # --hints-- @@ -55,7 +55,7 @@ assert( ); ``` -El estado de `StatefulComponent` debe inicializarse con una propiedad `name` establecida a una cadena. +El estado de `StatefulComponent` debe iniciarse con la propiedad`firstName` establecida como un "string". ```js assert( @@ -65,13 +65,13 @@ assert( ); const initialState = mockedComponent.state(); return ( - typeof initialState === 'object' && typeof initialState.name === 'string' + typeof initialState === 'object' && typeof initialState.firstName === 'string' ); })() ); ``` -La propiedad `name` en el estado de `StatefulComponent` debe renderizarse en el elemento `h1`. +La propiedad `firstName` en el estado `StatefulComponent` debe renderizar en el elemento `h1`. ```js assert( @@ -80,7 +80,7 @@ assert( React.createElement(StatefulComponent) ); const initialState = mockedComponent.state(); - return mockedComponent.find('h1').text() === initialState.name; + return mockedComponent.find('h1').text() === initialState.firstName; })() ); ``` @@ -106,7 +106,7 @@ class StatefulComponent extends React.Component { render() { return (
-

{this.state.name}

+

{this.state.firstName}

); } @@ -120,13 +120,13 @@ class StatefulComponent extends React.Component { constructor(props) { super(props); this.state = { - name: 'freeCodeCamp!' + firstName: 'freeCodeCamp!' } } render() { return (
-

{this.state.name}

+

{this.state.firstName}

); } diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/react/introducing-inline-styles.md b/curriculum/challenges/espanol/03-front-end-development-libraries/react/introducing-inline-styles.md index a3bf96e7aa6..32de7ccc214 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/react/introducing-inline-styles.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/react/introducing-inline-styles.md @@ -8,7 +8,7 @@ dashedName: introducing-inline-styles # --description-- -Hay otros conceptos complejos que añaden poderosas capacidades a tu código de React. Pero tal vez te estés preguntando sobre el problema más sencillo de cómo dar estilo a esos elementos JSX que creas en React. Probablemente sepas que no será exactamente lo mismo que trabajar con HTML debido a [la manera en que aplicas clases a los elementos JSX](/learn/front-end-development-libraries/react/define-an-html-class-in-jsx). +Hay otros conceptos complejos que añaden poderosas capacidades a tu código de React. Pero tal vez te estés preguntando sobre el problema más sencillo de cómo dar estilo a esos elementos JSX que creas en React. Probablemente sepas que no será exactamente lo mismo que trabajar con HTML debido a la manera en que aplicas clases a los elementos JSX. Si importas estilos desde una hoja de estilos, esto no es muy diferente. Aplica una clase a tu elemento JSX usando el atributo `className`, y aplica estilos a la clase en tu hoja de estilos. Otra opción es aplicar estilos en línea, los cuales son muy comunes en el desarrollo de ReactJS. diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/react/render-conditionally-from-props.md b/curriculum/challenges/espanol/03-front-end-development-libraries/react/render-conditionally-from-props.md index 904b80a1bcc..f724c4cd2b2 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/react/render-conditionally-from-props.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/react/render-conditionally-from-props.md @@ -123,7 +123,7 @@ Cada vez que se hace clic en el botón, el contador debe incrementarse por un va })(); ``` -Cuando el componente `GameOfChance` se monta por primera vez en el DOM y cada vez que se hace clic en el botón, un solo elemento `h1` debe ser devuelto, el cual renderiza aleatoriamente `You Win!` o `You Lose!`. +Cuando el componente `GameOfChance` se monta primero en el DOM y cada vez que se hace clic en el botón a partir de entonces, un solo `h1` debe devolverse un elemento que represente aleatoriamente `You Win!` o `You Lose!`. Nota: esto puede fallar aleatoriamente. Si eso sucede, inténtalo de nuevo. ```js (() => { @@ -265,6 +265,11 @@ class GameOfChance extends React.Component { # --solutions-- ```jsx +// We want this to be deterministic for testing purposes. +const randomSequence = [true, false, false, true, true, false, false, true, true, false]; +let index = 0; +const fiftyFifty = () => randomSequence[index++ % randomSequence.length]; + class Results extends React.Component { constructor(props) { super(props); @@ -290,11 +295,10 @@ class GameOfChance extends React.Component { }); } render() { - const expression = Math.random() >= 0.5; return (
- +

{'Turn: ' + this.state.counter}

); diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/react/set-state-with-this.setstate.md b/curriculum/challenges/espanol/03-front-end-development-libraries/react/set-state-with-this.setstate.md index dc6ceabf44b..6c4139a69f8 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/react/set-state-with-this.setstate.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/react/set-state-with-this.setstate.md @@ -16,7 +16,7 @@ this.setState({ }); ``` -React espera que nunca modifiques `state` directamente. En su lugar, siempre usa `this.setState()` cuando ocurran cambios de estado. Además, ten en cuenta que React puede agrupar múltiples actualizaciones de estado con el fin de mejorar el rendimiento. Esto significa que las actualizaciones de estado a través del método `setState` pueden ser asíncronas. Existe una sintaxis alternativa para el método `setState` que proporciona una forma de evitar ese problema. Esto es raramente necesario, ¡pero es bueno tenerlo en cuenta! Por favor, consulta la [documentación de React](https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous) para más información. +React espera que nunca modifiques `state` directamente. En su lugar, siempre usa `this.setState()` cuando ocurran cambios de estado. Además, ten en cuenta que React puede agrupar múltiples actualizaciones de estado con el fin de mejorar el rendimiento. Esto significa que las actualizaciones de estado a través del método `setState` pueden ser asíncronas. Existe una sintaxis alternativa para el método `setState` que proporciona una forma de evitar ese problema. Esto es raramente necesario, ¡pero es bueno tenerlo en cuenta! Por favor, consulte la documentación de React para más información. # --instructions-- diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-array.map-to-dynamically-render-elements.md b/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-array.map-to-dynamically-render-elements.md index 74b6e13ef34..ebe68545138 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-array.map-to-dynamically-render-elements.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-array.map-to-dynamically-render-elements.md @@ -16,7 +16,7 @@ Por ejemplo, crea una aplicación simple "To Do List". Como programador, no tien El editor de código tiene la mayoría del componente `MyToDoList` configurado. Parte de este código debería parecer familiar si completaste el desafío de formulario controlado. Vas a notar un `textarea` y un `button`, junto con un par de métodos que rastrean sus estados, pero aún no se muestra nada a la página. -Dentro del `constructor`, crea un objeto `this.state` y define dos estados: `userInput` que debe inicializarse como una cadena vacía, y `toDoList` que debe inicializarse como un arreglo vacío. Luego, elimina el comentario junto a la variable `items` del método `render()`. En su lugar, utiliza la función map() para recorrer el arreglo `toDoList` almacenado en el estado interno del componente y renderizar un `li` por cada artículo. Intenta introducir la cadena `eat, code, sleep, repeat` dentro del `textarea`, haz clic en el botón y ve qué sucede. +Dentro del `constructor`, crea un objeto `this.state` y define dos estados: `userInput` que debe inicializarse como una cadena vacía, y `toDoList` que debe inicializarse como un arreglo vacío. Luego, elimina el valor `null` del método `render()` a un costado de la variable `items`. En su lugar, utiliza la función map() para recorrer el arreglo `toDoList` almacenado en el estado interno del componente y renderizar un `li` por cada artículo. Intenta introducir la cadena `eat, code, sleep, repeat` dentro del `textarea`, haz clic en el botón y ve qué sucede. **Nota:** Puede que sepas que todos los elementos hijos hermanos creados por una operación map como ésta necesitan poseer un atributo `key` único. No te preocupes, este es el tema de nuestro próximo desafío. diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-proptypes-to-define-the-props-you-expect.md b/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-proptypes-to-define-the-props-you-expect.md index edc42096c08..cbbd520c1fb 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-proptypes-to-define-the-props-you-expect.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-proptypes-to-define-the-props-you-expect.md @@ -16,7 +16,7 @@ Se considera una muy buena práctica definir los `propTypes` cuando conoces el t MyComponent.propTypes = { handleClick: PropTypes.func.isRequired } ``` -En el ejemplo anterior, la parte de `PropTypes.func` verifica que `handleClick` es una función. Añadir `isRequired` le dice a React que `handleClick` es una propiedad obligatoria para ese componente. Verás una advertencia si no se proporciona esa propiedad. También ten en cuenta que `func` representa `function`. Entre los siete tipos primitivos de JavaScript, `function` y `boolean` (escrito como `bool`) son los únicos dos que utilizan ortografía diferente. Además de los tipos primitivos, hay otros tipos disponibles. Por ejemplo, puedes validar si una prop es un elemento React. Por favor, consulta la [documentación](https://reactjs.org/docs/typechecking-with-proptypes.html#proptypes) para todas las opciones. +En el ejemplo anterior, la parte de `PropTypes.func` verifica que `handleClick` es una función. Añadir `isRequired` le dice a React que `handleClick` es una propiedad obligatoria para ese componente. Verás una advertencia si no se proporciona esa propiedad. También ten en cuenta que `func` representa `function`. Entre los siete tipos primitivos de JavaScript, `function` y `boolean` (escrito como `bool`) son los únicos dos que utilizan ortografía diferente. Además de los tipos primitivos, hay otros tipos disponibles. Por ejemplo, puedes validar si una prop es un elemento React. Por favor, consulta la documentación para todas las opciones. **Nota:** A partir de React v15.5.0, `PropTypes` se importa de manera independiente de React, así: `import PropTypes from 'prop-types';` diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-the-lifecycle-method-componentwillmount.md b/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-the-lifecycle-method-componentwillmount.md index 18ba5d33d84..8537bf937df 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-the-lifecycle-method-componentwillmount.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/react/use-the-lifecycle-method-componentwillmount.md @@ -10,7 +10,7 @@ dashedName: use-the-lifecycle-method-componentwillmount Los componentes React tienen varios métodos especiales que proporcionan oportunidades para realizar acciones en puntos específicos en el ciclo de vida de un componente. Estos se llaman métodos de ciclo de vida, o interceptores (hooks) de ciclo de vida, y te permiten interceptar componentes en determinados momentos del tiempo. Esto puede ser antes de que se rendericen, antes de que se actualicen, antes de que reciban las props, antes de que se desmonten, etc. Aquí hay una lista de algunos de los métodos principales del ciclo de vida: `componentWillMount()` `componentDidMount()` `shouldComponentUpdate()` `componentDidUpdate()` `componentWillUnmount()`. Las siguientes lecciones cubrirán algunos de los casos de uso básicos para estos métodos del ciclo de vida. -**Nota:** El método de ciclo de vida `componentWillMount` se desaprobará en una versión futura de 16.X y se eliminará en la versión 17. [(Fuente)](https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html) +**Nota:** El método de ciclo de vida `componentWillMount` se desaprobará en una versión futura de 16.X y se eliminará en la versión 17. Más información en este artículo # --instructions-- diff --git a/curriculum/challenges/espanol/03-front-end-development-libraries/redux/create-a-redux-store.md b/curriculum/challenges/espanol/03-front-end-development-libraries/redux/create-a-redux-store.md index 43fcc0276de..ba52aafb00c 100644 --- a/curriculum/challenges/espanol/03-front-end-development-libraries/redux/create-a-redux-store.md +++ b/curriculum/challenges/espanol/03-front-end-development-libraries/redux/create-a-redux-store.md @@ -20,7 +20,7 @@ El `store` (almacén) de Redux es un objeto que guarda y gestiona el `state` (es Declara una variable `store` y asígnala al método `createStore()`, pasando el `reducer` como argumento. -**Nota:** El código del editor utiliza la sintaxis de los argumentos por defecto de ES6 para inicializar este estado y mantener un valor de `5`. Si no estás familiarizado con los argumentos por defecto, puedes consultar la sección [ES6 en el Plan de Estudios](https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/es6/set-default-parameters-for-your-functions) que cubre este tema. +**Nota:** El código del editor utiliza la sintaxis de los argumentos por defecto de ES6 para inicializar este estado y mantener un valor de `5`. Si no está familiarizado con los argumentos predeterminados, puede consultar elES6 section in the Curriculum que cubre este tema. # --hints-- diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/exercise-tracker.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/exercise-tracker.md index 5122a09bd2e..8b068dfa9ed 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/exercise-tracker.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/exercise-tracker.md @@ -8,10 +8,10 @@ dashedName: exercise-tracker # --description-- -Construye una aplicación full stack de JavaScript que sea funcionalmente similar a esta: . Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: +Crea una aplicación full stack de JavaScript que sea funcionalmente similar a esta: https://exercise-tracker.freecodecamp.rocks/. Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-project-exercisetracker/) y completa tu proyecto localmente. -- Usa [nuestro proyecto de inicio en Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-exercisetracker) para completar tu proyecto. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa este proyecto inicial de Replit para completar tu proyecto. - Utiliza un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que un demo funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`. @@ -309,7 +309,7 @@ async (getUserInput) => { }; ``` -Una solicitud `GET` a `/api/users/:id/logs` devolverá el objeto de usuario con un arreglo `log` de todos los ejercicios añadidos. +Una solicitud `GET` a `/api/users/:_id/logs` devolverá el objeto de usuario con un arreglo `log` de todos los ejercicios añadidos. ```js async(getUserInput) => { @@ -353,7 +353,7 @@ async(getUserInput) => { }; ``` -Cada elemento en el arreglo `log` que es devuelto desde `GET /api/users/:id/logs` es un objeto que debe tener las propiedades `description`, `duration` y `date`. +Cada elemento en el arreglo `log` que es devuelto desde `GET /api/users/:_id/logs` es un objeto que debe tener las propiedades `description`, `duration` y `date`. ```js async(getUserInput) => { @@ -400,7 +400,7 @@ async(getUserInput) => { }; ``` -La propiedad `description` de cualquier objeto en el arreglo `log` que es devuelto desde `GET /api/users/:id/logs` debe ser una cadena. +La propiedad `description` de cualquier objeto en el arreglo `log` que es devuelto desde `GET /api/users/:_id/logs` debe ser una cadena. ```js async(getUserInput) => { @@ -447,7 +447,7 @@ async(getUserInput) => { }; ``` -La propiedad `duration` de cualquier objeto en el arreglo `log` que es devuelto desde `GET /api/users/:id/logs` debe ser un número. +La propiedad `duration` de cualquier objeto en el arreglo `log` que es devuelto desde `GET /api/users/:_id/logs` debe ser un número. ```js async(getUserInput) => { @@ -494,7 +494,7 @@ async(getUserInput) => { }; ``` -La propiedad `date` de cualquier objeto en el arrelgo `log` que es devuelto desde `GET /api/users/:id/logs` debe ser una cadena.. Utiliza el formato `dateString` de la API `Date`. +La propiedad `date` de cualquier objeto en el arrelgo `log` que es devuelto desde `GET /api/users/:_id/logs` debe ser una cadena. Utiliza el formato `dateString` de la API `Date`. ```js async(getUserInput) => { diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md index 1e8106fea8c..8f411ff3d6d 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md @@ -8,10 +8,10 @@ dashedName: file-metadata-microservice # --description-- -Construye una aplicación full stack de JavaScript que sea funcionalmente similar a esta: . Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: +Crea una aplicación full stack de JavaScript que sea funcionalmente similar a esta: https://file-metadata-microservice.freecodecamp.rocks/. Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-project-filemetadata/) y completa tu proyecto localmente. -- Usa [nuestro proyecto de inicio en Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-filemetadata) para completar tu proyecto. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa este proyecto inicial de Replit para completar tu proyecto. - Utiliza un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que un demo funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`. diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/request-header-parser-microservice.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/request-header-parser-microservice.md index 38c4fca9bfa..78c0b807170 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/request-header-parser-microservice.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/request-header-parser-microservice.md @@ -8,10 +8,10 @@ dashedName: request-header-parser-microservice # --description-- -Construye una aplicación full stack de JavaScript que sea funcionalmente similar a esta: . Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: +Crea una aplicación full stack de JavaScript que sea funcionalmente similar a esta: https://request-header-parser-microservice.freecodecamp.rocks/. Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-project-headerparser/) y completa tu proyecto localmente. -- Usa [nuestro proyecto de inicio en Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-headerparser) para completar tu proyecto. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa este proyecto inicial de Replit para completar tu proyecto. - Utiliza un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que un demo funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`. diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md index d5fb065f4ad..ce41efce5ee 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md @@ -8,10 +8,10 @@ dashedName: timestamp-microservice # --description-- -Construye una aplicación full stack de JavaScript que sea funcionalmente similar a esta: . Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: +Crea una aplicación full stack de JavaScript que sea funcionalmente similar a esta: https://timestamp-microservice.freecodecamp.rocks/. Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-project-timestamp/) y completa tu proyecto localmente. -- Usa [nuestro proyecto de inicio en Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-timestamp) para completar tu proyecto. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa este proyecto inicial de Replit para completar tu proyecto. - Utiliza un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que un demo funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`. diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md index 69c796ebe98..dea295ac24d 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md @@ -8,10 +8,10 @@ dashedName: url-shortener-microservice # --description-- -Construye una aplicación full stack de JavaScript que sea funcionalmente similar a esta: . Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: +Crea una aplicación full stack de JavaScript que sea funcionalmente similar a esta: https://url-shortener-microservice.freecodecamp.rocks/. Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-project-urlshortener/) y completa tu proyecto localmente. -- Usa [nuestro proyecto de inicio en Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-urlshortener) para completar tu proyecto. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa este proyecto inicial de Replit para completar tu proyecto. - Utiliza un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que un demo funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`. diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/chain-middleware-to-create-a-time-server.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/chain-middleware-to-create-a-time-server.md index 4f93504b335..13aa836495f 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/chain-middleware-to-create-a-time-server.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/chain-middleware-to-create-a-time-server.md @@ -8,7 +8,7 @@ dashedName: chain-middleware-to-create-a-time-server # --description-- -Un middleware se puede montar en una ruta especifica usando `app.METHOD(path, middlewareFunction)`. El middleware también se puede encadenar dentro de la definición de la ruta. +Un middleware se puede montar en una ruta especifica usando `app.METHOD(path, middlewareFunction)`. El middleware también se puede encadenar dentro de una definición de ruta. Veamos el siguiente ejemplo: @@ -49,7 +49,7 @@ El endpoint /now debe tener el middleware montado ); ``` -El endpoint /now debe devolver un tiempo que es +/- 20 segundos a partir de este momento +El endpoint `/now` debe devolver la hora actual. ```js (getUserInput) => diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/meet-the-node-console.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/meet-the-node-console.md index b33200dade1..60ff2d4ceb7 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/meet-the-node-console.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/meet-the-node-console.md @@ -10,8 +10,8 @@ dashedName: meet-the-node-console Trabajar en estos desafíos implica escribir tu código usando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-express/) y completa estos desafíos localmente. -- Usa [nuestro proyecto inicial de Replit](https://replit.com/github/freeCodeCamp/boilerplate-express) para completar estos desafíos. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa nuestro proyecto de inicio Replit para completar estos desafíos. - Utiliza un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que un demo funcional de tu proyecto esté alojado en algún lugar público. A continuación, envía la URL en el campo `Solution Link`. diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/use-body-parser-to-parse-post-requests.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/use-body-parser-to-parse-post-requests.md index 9008541c06c..6a8d2075ac4 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/use-body-parser-to-parse-post-requests.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/use-body-parser-to-parse-post-requests.md @@ -22,11 +22,11 @@ Content-Length: 20 name=John+Doe&age=25 ``` -Como puedes ver, el cuerpo está codificado como la cadena de consulta. Este es el formato por defecto utilizado por los formularios HTML. Con Ajax, también puedes utilizar JSON para manejar datos con una estructura más compleja. También hay otro tipo de codificación: multiparte/form-data. Este se utiliza para subir archivos binarios. En este ejercicio, usarás un cuerpo urlencoded. Para analizar los datos provenientes de peticiones POST, tienes que instalar el paquete `body-parser`. Este paquete te permite usar una serie de middleware, que pueden decodificar datos en diferentes formatos. +Como puedes ver, el cuerpo está codificado como la cadena de consulta. Este es el formato por defecto utilizado por los formularios HTML. Con Ajax, también puedes utilizar JSON para manejar datos con una estructura más compleja. También hay otro tipo de codificación: multiparte/form-data. Este se utiliza para subir archivos binarios. En este ejercicio, usarás un cuerpo codificado por URL. Para analizar los datos provenientes de peticiones POST, tendrás que usar el paquete `body-parser`. Este paquete te permite usar una serie de middleware, que pueden decodificar datos en diferentes formatos. # --instructions-- -Instala el módulo `body-parser` en tu `package.json`. Luego, agrega `require` en la parte superior del archivo con el nuevo módulo. Almacénelo en una variable llamada `bodyParser`. El middleware para manejar datos urlencoded es devuelto por `bodyParser.urlencoded({extended: false})`. Pasa la función devuelta por el método anterior llamada a `app.use()`. Como de costumbre, el middleware debe ser montado antes de todas las rutas que dependen de él. +`body-parser` ya ha sido instalado y está en el archivo `package.json` de tu proyecto. Usa `require` en la parte superior del archivo `myApp.js` y almacena los resultados en una variable llamada `bodyParser`. El middleware para manejar datos codificados por URL es devuelto por `bodyParser.urlencoded({extended: false})`. Pasa la función devuelta por la llamada al método anterior a `app.use()`. Como de costumbre, el middleware debe ser montado antes de todas las rutas que dependen de él. **Nota:** `extended` es una opción de configuración que le dice a `body-parser` qué análisis necesita ser usado. Cuando `extended=false`, utiliza la biblioteca `querystring` de codificación clásica. Cuando `extended=true` utiliza la biblioteca `qs` para analizar la sintaxis. diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/use-the-.env-file.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/use-the-.env-file.md index 12f586e435e..f5f20a9a65b 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/use-the-.env-file.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/basic-node-and-express/use-the-.env-file.md @@ -18,11 +18,11 @@ Añadamos una variable de entorno como opción de configuración. Crea un archivo `.env` en la raíz del directorio de tu proyecto y almacena la variable `MESSAGE_STYLE=uppercase` en él. -Luego, en el manejador de rutas `/json` GET creado en el último desafío, transforma el mensaje del objeto de respuesta a mayúsculas si `process.env.MESSAGE_STYLE` es igual a `uppercase`. El objeto de respuesta debe ser `{"message": "Hello json"}` o `{"message": "HELLO JSON"}`, dependiendo del valor `MESSAGE_STYLE`. +Luego, en el manejador `/json` GET route que creaste en el último ejercicio accede a `process.env.MESSAGE_STYLE` y transformar el `message` del objeto de respuesta a mayúsculas si la variable es igual a `uppercase`. El objeto de respuesta debe ser `{"message": "Hello json"}` o `{"message": "HELLO JSON"}`, dependiendo del valor `MESSAGE_STYLE`. **Nota:** Si estás usando Replit, no puedes crear un archivo `.env`. En su lugar, utiliza la pestaña integrada SECRETS para añadir la variable. -Si estás trabajando localmente, necesitarás el paquete `dotenv`. Carga variables de entorno desde tu archivo `.env` en `process.env`. Instálalo con `npm install dotenv`. Luego, en la parte superior de tu archivo `myApp.js`, importa y carga las variables con `require('dotenv').config()`. +Si estás trabajando localmente, necesitarás el paquete `dotenv`. Carga variables de entorno desde tu archivo `.env` en `process.env`. El paquete `dotenv` se a instalado, y se aguardado en tu archivo `package.json` dentro del proyecto. Arriba de tu archivo `myApp.js`, importa y carga las variables con `require('dotenv').config()`. # --hints-- diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/expand-your-project-with-external-packages-from-npm.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/expand-your-project-with-external-packages-from-npm.md index 24082571fc6..0163622f223 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/expand-your-project-with-external-packages-from-npm.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/expand-your-project-with-external-packages-from-npm.md @@ -22,13 +22,13 @@ En esta sección, los paquetes que tu proyecto necesita se almacenan usando el s # --instructions-- -Añade la versión "2.14.0" del paquete "moment" al campo `dependencies` del archivo package.json. +Añade la versión "1.1.0" del paquete `@freecodecamp/example` al campo `dependencies` del archivo `package.json`. -**Nota:** Moment es una biblioteca muy útil para trabajar con tiempo y fechas. +**Nota:** `@freecodecamp/example` es un paquete falso usado como una herramienta de aprendizaje. # --hints-- -"dependencies" debe incluir "moment" +`"dependencies"` debería incluir `"@freecodecamp/example"`. ```js (getUserInput) => @@ -37,8 +37,8 @@ Añade la versión "2.14.0" del paquete "moment" al campo `dependencies` del arc var packJson = JSON.parse(data); assert.property( packJson.dependencies, - 'moment', - '"dependencies" does not include "moment"' + '@freecodecamp/example', + '"dependencies" does not include "@freecodecamp/example"' ); }, (xhr) => { @@ -47,7 +47,7 @@ Añade la versión "2.14.0" del paquete "moment" al campo `dependencies` del arc ); ``` -la versión de "moment" debe ser "2.14.0" +`"@freecodecamp/example"` debería tener la versión `"1.1.0"`. ```js (getUserInput) => @@ -55,9 +55,9 @@ la versión de "moment" debe ser "2.14.0" (data) => { var packJson = JSON.parse(data); assert.match( - packJson.dependencies.moment, - /^[\^\~]?2\.14\.0/, - 'Wrong version of "moment" installed. It should be 2.14.0' + packJson.dependencies["@freecodecamp/example"], + /^[\^\~]?1\.1\.0/, + 'Wrong version of "@freecodecamp/example" installed. It should be 1.1.0' ); }, (xhr) => { diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.md index e565f15a4de..c72e78ca96e 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.md @@ -10,11 +10,11 @@ dashedName: how-to-use-package-json-the-core-of-any-node-js-project-or-npm-packa Trabajar en estos desafíos implica escribir tu código usando uno de los siguientes métodos: -- Clona [este repositorio de Github](https://github.com/freeCodeCamp/boilerplate-npm/) y completa estos desafíos localmente. -- Usa [nuestro proyecto modelo de Replit](https://replit.com/github/freeCodeCamp/boilerplate-npm) para completar estos retos. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa nuestro proyecto de inicio Replit para completar estos desafíos. - Utiliza un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. -Cuando hayas terminado, asegúrate de que un demo funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`. +Cuando hayas terminado, asegúrate de que un demo funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. El archivo `package.json` es el centro de cualquier proyecto Node.js o paquete npm. Almacena información sobre tu proyecto, similar a cómo la sección <head> de un documento HTML describe el contenido de una página web. Consiste en un único objeto JSON donde la información se almacena en pares clave-valor. Sólo hay dos campos obligatorios; "name" y "version", pero es una buena práctica proporcionar información adicional sobre tu proyecto que podría ser útil para futuros usuarios o mantenedores. diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/manage-npm-dependencies-by-understanding-semantic-versioning.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/manage-npm-dependencies-by-understanding-semantic-versioning.md index d1d51f2f7d6..56523410041 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/manage-npm-dependencies-by-understanding-semantic-versioning.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/manage-npm-dependencies-by-understanding-semantic-versioning.md @@ -20,11 +20,11 @@ La versión MAJOR debe incrementarse cuando hagas cambios de API incompatibles. # --instructions-- -En la sección de dependencias de tu archivo package.json, cambia la `version` de moment para que coincida con la versión 2 de MAJOR, la versión 10 de MINOR y la versión 2 de PATCH +En la sección de dependencias de `package.json`, cambie la versión de `@freecodecamp/example` para que coincida con MAJOR versión 1, la MINOR versión 2 y PATCH versión 13 # --hints-- -"dependencies" debe incluir "moment" +`"dependencies"` debería incluir `"@freecodecamp/example"`. ```js (getUserInput) => @@ -33,8 +33,8 @@ En la sección de dependencias de tu archivo package.json, cambia la `version` d var packJson = JSON.parse(data); assert.property( packJson.dependencies, - 'moment', - '"dependencies" does not include "moment"' + '@freecodecamp/example', + '"dependencies" does not include "@freecodecamp/example"' ); }, (xhr) => { @@ -43,7 +43,7 @@ En la sección de dependencias de tu archivo package.json, cambia la `version` d ); ``` -la versión de "moment" debe ser "2.10.2" +`"@freecodecamp/example"` debería tener la versión `"1.2.13"`. ```js (getUserInput) => @@ -51,9 +51,9 @@ la versión de "moment" debe ser "2.10.2" (data) => { var packJson = JSON.parse(data); assert.equal( - packJson.dependencies.moment, - '2.10.2', - 'Wrong version of "moment". It should be 2.10.2' + packJson.dependencies["@freecodecamp/example"], + '1.2.13', + 'Wrong version of "@freecodecamp/example". It should be 1.2.13' ); }, (xhr) => { diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/remove-a-package-from-your-dependencies.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/remove-a-package-from-your-dependencies.md index 8208b6bc20c..50e9ad1d304 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/remove-a-package-from-your-dependencies.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/managing-packages-with-npm/remove-a-package-from-your-dependencies.md @@ -12,17 +12,17 @@ Ahora has probado algunas maneras en que puedes gestionar las dependencias de tu Pero, ¿Qué pasa si deseas eliminar un paquete externo que ya no necesitas? Puede que ya lo hayas adivinado, simplemente elimina el par clave-valor correspondiente a ese paquete de tus dependencias. -Este mismo método se aplica para eliminar otros campos de tu package.json +Este mismo método se aplica para eliminar otros zonas de tu package.json. # --instructions-- -Elimina el paquete moment de tus dependencias. +Retire el paquete `@freecodecamp/example` de sus dependencias. **Nota:** Asegúrate de que tienes la cantidad correcta de comas después de eliminarlo. # --hints-- -Las "dependencies" no deben incluir "moment" +`"dependencies"` no debe incluir `"@freecodecamp/example"`. ```js (getUserInput) => @@ -31,8 +31,8 @@ Las "dependencies" no deben incluir "moment" var packJson = JSON.parse(data); assert.notProperty( packJson.dependencies, - 'moment', - '"dependencies" still includes "moment"' + '@freecodecamp/example', + '"dependencies" still includes "@freecodecamp/example"' ); }, (xhr) => { diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/create-a-model.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/create-a-model.md index 0ce98085af2..c5ecedf3ed6 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/create-a-model.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/create-a-model.md @@ -38,7 +38,7 @@ age : number favoriteFoods : array of strings (*) ``` -Usa los tipos básicos de esquemas de Mongoose. Si quieres también puedes añadir más campos, utilizar validadores sencillos como required o unique, y establecer valores por defecto. Consulta la [documentación de Mongoose](http://mongoosejs.com/docs/guide.html). +Usa los tipos básicos de esquemas de Mongoose. Si quieres también puedes añadir más campos, utilizar validadores sencillos como required o unique, y establecer valores por defecto. Mira nuestro artículo sobre Mongoose . Ahora, crea un modelo llamado `Person` del `personSchema`. diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/install-and-set-up-mongoose.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/install-and-set-up-mongoose.md index f7990366683..a39cc9a8bab 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/install-and-set-up-mongoose.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/install-and-set-up-mongoose.md @@ -10,19 +10,23 @@ dashedName: install-and-set-up-mongoose Trabajar en estos desafíos implica escribir tu código usando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-mongomongoose/) y completa estos desafíos localmente. -- Usa [nuestro proyecto inicial de Replit](https://replit.com/github/freeCodeCamp/boilerplate-mongomongoose) para completar estos desafíos. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa nuestro proyecto de inicio Replit para completar estos desafíos. - Utiliza un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que un demo funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. En este desafío, configurarás una base de datos de MongoDB Atlas e importarás los paquetes necesarios para conectarse a él. -Sigue este tutorial para configurar una base de datos alojada en MongoDB Atlas. +Sigue este tutorial para configurar una base de datos alojada en MongoDB Atlas. # --instructions-- -Añade `mongodb@~3.6.0` y `mongoose@~5.4.0` al `package.json` del proyecto. Luego, requiere mongoose como `mongoose` en `myApp.js`. Crea un archivo `.env` y añade una variable `MONGO_URI`. Su valor debe ser tu URI de base de datos de MongoDB Atlas. Asegúrate de envolver la URI con comillas simples o dobles, y recuerda que no puedes usar espacios alrededor de `=` en las variables de entorno. Por ejemplo, `MONGO_URI='VALUE'`. Cuando hayas terminado, conéctate a la base de datos usando la siguiente sintaxis: +`mongoose@^5.11.15` ha sido añadido al archivo `package.json` de su proyecto. Primero, requiere mongoose como `mongoose` en `myApp.js`. A continuación, cree un archivo `.env` y añada una variable `MONGO_URI` a él. Su valor debe ser tu URI de base de datos de MongoDB Atlas. Asegúrate de envolver la URI con comillas simples o dobles, y recuerda que no puedes usar espacios alrededor de `=` en las variables de entorno. Por ejemplo, `MONGO_URI='VALUE'`. + +**Nota:** Si estás usando Replit, no puedes crear un archivo `.env`. En su lugar, utiliza la pestaña integrada SECRETS para añadir la variable. No rodee los valores con comillas al usar la pestaña SECRETS. + +Cuando hayas terminado, conéctate a la base de datos usando la siguiente sintaxis: ```js mongoose.connect(, { useNewUrlParser: true, useUnifiedTopology: true }); @@ -30,22 +34,7 @@ mongoose.connect(, { useNewUrlParser: true, useUnifiedTopology: true } # --hints-- -la dependencia "mongodb" debe estar en package.json - -```js -(getUserInput) => - $.get(getUserInput('url') + '/_api/file/package.json').then( - (data) => { - var packJson = JSON.parse(data); - assert.property(packJson.dependencies, 'mongodb'); - }, - (xhr) => { - throw new Error(xhr.responseText); - } - ); -``` - -la dependencia "mongoose" debe estar en package.json +la dependencia "versión mongoose ^5.11.15" debería estar en package.json ```js (getUserInput) => @@ -53,6 +42,11 @@ la dependencia "mongoose" debe estar en package.json (data) => { var packJson = JSON.parse(data); assert.property(packJson.dependencies, 'mongoose'); + assert.match( + packJson.dependencies.mongoose, + /^\^5\.11\.15/, + 'Wrong version of "mongoose". It should be ^5.11.15' + ); }, (xhr) => { throw new Error(xhr.responseText); @@ -60,7 +54,7 @@ la dependencia "mongoose" debe estar en package.json ); ``` -"mongoose" debe estar conectado a una base de datos +"mongoose" debería estar conectado a una base de datos ```js (getUserInput) => diff --git a/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save.md b/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save.md index b610e212abb..932001f5a93 100644 --- a/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save.md +++ b/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save.md @@ -14,7 +14,7 @@ En los buenos tiempos, esto era lo que había que hacer si se quería editar un Modifica la función `findEditThenSave` para encontrar a una persona por `_id` (usa cualquiera de los métodos anteriores) con el parámetro `personId` como la clave de búsqueda. Añade `"hamburger"` a la lista de `favoriteFoods` (puedes usar `Array.push()`). Luego - dentro del callback de búsqueda: `save()` la `Person` actualizada. -**Nota:** Esto puede ser complicado, si está en tu esquema, declaraste `favoriteFoods` como un arreglo, sin especificar el tipo (por ejemplo `[String]`). En ese caso, `favoriteFoods` por defecto es de tipo Mixto, y tienes que marcarlo manualmente como editado usando `document.markModified('edited-field')`. Consulta la documentación de [Mongoose](https://mongoosejs.com/docs/schematypes.html#Mixed) +**Nota:** Esto puede ser complicado, si está en tu esquema, declaraste `favoriteFoods` como un arreglo, sin especificar el tipo (por ejemplo `[String]`). En ese caso, `favoriteFoods` por defecto es de tipo Mixto, y tienes que marcarlo manualmente como editado usando `document.markModified('edited-field')`. Mira nuestro artículo sobre Mongoose . # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/announce-new-users.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/announce-new-users.md index f4a2a2b988b..5528be7dbba 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/announce-new-users.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/announce-new-users.md @@ -34,7 +34,7 @@ socket.on('user', data => { }); ``` -Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto [aquí](https://gist.github.com/camperbot/bf95a0f74b756cf0771cd62c087b8286). +Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes consultar el proyecto completado hasta este momento. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/authentication-strategies.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/authentication-strategies.md index 5debb56e80c..62888943075 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/authentication-strategies.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/authentication-strategies.md @@ -10,7 +10,7 @@ dashedName: authentication-strategies Una estrategia es una manera de autenticar a un usuario. Puedes utilizar una estrategia para permitir que los usuarios se autentiquen basándose en la información guardada localmente (si les haces registrarse primero) o desde una variedad de proveedores como Google o GitHub. Para este proyecto, usaremos el agente intermedio Passport. Passport provee un comprensivo set de estrategias que soportan la autenticación usando un nombre de usuario y una contraseña, GitHub, Google, y más. -Agrega `passport-local@~1.0.0` como dependencia y agrégalo a tu servidor de la siguiente manera: `const LocalStrategy = require('passport-local');` +`passport-local@~1.0.0` ya ha sido añadido como una dependencia, así que añádela a tu servidor de la siguiente manera: `const LocalStrategy = require('passport-local');` Ahora tendrás que decirle a passport que **use** un objeto LocalStrategy instanciado con algunas configuraciones definidas. ¡Asegúrate que esto (al igual que todo lo que se haga a partir de ahora) esté encapsulado en la conexión a la base de datos, ya que depende de ella! @@ -34,7 +34,7 @@ Muchas estrategias se configuran con diferentes ajustes, pero generalmente es f En el siguiente paso, ¡configuraremos cómo llamar a la estrategia de autenticación para validar un usuario basado en los datos del formulario! -Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto [aquí](https://gist.github.com/camperbot/53b495c02b92adeee0aa1bd3f3be8a4b). +Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes consultar el proyecto completado hasta este momento. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/authentication-with-socket.io.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/authentication-with-socket.io.md index 6fb5b117408..a519224ccd2 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/authentication-with-socket.io.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/authentication-with-socket.io.md @@ -10,7 +10,7 @@ dashedName: authentication-with-socket-io Actualmente, no puedes determinar quién está conectado a tu web socket. Mientras que `req.user` contiene el objeto user, eso es sólo cuando tu usuario interactúa con el servidor web, y con los web sockets no tienes la `req` (petición) y por lo tanto no hay datos del usuario. Una forma de resolver el problema de saber quién está conectado a tu socket web es analizando (parsing) y decodificando la cookie que contiene la sesión del pasaporte y luego deserializándola para obtener el objeto user. Por suerte, ¡hay un paquete en NPM sólo para esto que convierte una tarea antes compleja en algo sencillo! -Agrega `passport.socketio@~3.7.0`, `connect-mongo@~3.2.0`y `cookie-parser@~1.4.5` como dependencias y requiérelas como `passportSocketIo`, `MongoStore`y `cookieParser` respectivamente. Además, necesitamos inicializar un nuevo almacén de memoria, a partir de `express-session` que requerimos previamente. Debe verse así: +`passport.socketio@~3.7.0`, `connect-mongo@~3.2.0`, y `cookie-parser@~1.4.5` ya han sido añadidas como dependencias. Requerirlas como `passportSocketIo`, `MongoStore`y `cookieParser` respectivamente. También, necesitamos inicializar un nuevo almacenamiento de memoria, desde `express-session` que previamente requerimos. Debería verse así: ```js const MongoStore = require('connect-mongo')(session); @@ -65,7 +65,7 @@ console.log('user ' + socket.request.user.name + ' connected'); ¡Se registrará en la consola del servidor quién se ha conectado! -Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto [aquí](https://gist.github.com/camperbot/1414cc9433044e306dd7fd0caa1c6254). +Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto aquí. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/clean-up-your-project-with-modules.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/clean-up-your-project-with-modules.md index 4e77ececd85..1166cc8b254 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/clean-up-your-project-with-modules.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/clean-up-your-project-with-modules.md @@ -26,7 +26,7 @@ Sigue agregándolos hasta que no existan más errores, y tu archivo de servidor Ahora haz lo mismo en tu archivo auth.js con todas las cosas relacionadas con la autenticación como la serialización y la configuración de la estrategia local y bórralas de tu archivo del servidor. Asegúrate de agregar las dependencias y llamar a `auth(app, myDataBase)` en el servidor en el mismo lugar. -Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar un ejemplo del proyecto completado [aquí](https://gist.github.com/camperbot/2d06ac5c7d850d8cf073d2c2c794cc92). +Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes consultar el proyecto completado hasta este momento. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/communicate-by-emitting.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/communicate-by-emitting.md index c7869e09345..b2f87a3ecaf 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/communicate-by-emitting.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/communicate-by-emitting.md @@ -38,7 +38,7 @@ socket.on('user count', function(data) { Ahora, ¡intenta cargar tu aplicación, autentifica, y debes ver en tu consola "1" que representa el recuento de usuarios actual! Trata de cargar más clientes y de autentificar para ver cómo sube el número. -Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto [aquí](https://gist.github.com/camperbot/28ef7f1078f56eb48c7b1aeea35ba1f5). +Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes consultar el proyecto completado hasta este momento. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/create-new-middleware.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/create-new-middleware.md index fc17465bb9e..a4e01b073d6 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/create-new-middleware.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/create-new-middleware.md @@ -31,7 +31,7 @@ app }); ``` -Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto [aquí](https://gist.github.com/camperbot/ae49b8778cab87e93284a91343da0959). +Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes consultar el proyecto completado hasta este momento. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.md index d2fdb123641..1257e08889c 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.md @@ -18,7 +18,7 @@ Si la autentificación fue exitosa, el user object se guardará en `req.user`. En este punto, si introduces un nombre de usuario y una contraseña en el formulario, debe redirigirse a la página de inicio `/`, y la consola de tu servidor debe mostrar `'User {USERNAME} attempted to log in.'`, ya que actualmente no podemos iniciar la sesión de un usuario que no está registrado. -Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto [aquí](https://gist.github.com/camperbot/7ad011ac54612ad53188b500c5e99cb9). +Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes consultar el proyecto completado hasta este momento. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.md index cd30141dfeb..87a13dd1822 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.md @@ -42,7 +42,7 @@ myDataBase.findOneAndUpdate( Deberías ser capaz de iniciar sesión en tu aplicación ahora... ¡pruébalo! -Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto [aquí](https://gist.github.com/camperbot/183e968f0e01d81dde015d45ba9d2745). +Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes consultar el proyecto completado hasta este momento. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.md index 72bb90b3e57..c399626766a 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.md @@ -18,7 +18,7 @@ La ruta básica que seguirá este tipo de autenticación en tu aplicación es: Las estrategias con OAuth requieren que tengas al menos un *Client ID* y un *Client Secret* que es una forma de que el servicio verifique de quién viene la solicitud de autentificación y si es válida. Estos se obtienen del sitio con el que intentas implementar la autentificación, como GitHub, y son únicos para tu aplicación: **NO SE DEBEN COMPARTIR** y nunca deben subirse a un repositorio público ni escribirse directamente en tu código. Una práctica común es ponerlos en tu archivo `.env` y referenciarlos así: `process.env.GITHUB_CLIENT_ID`. Para este desafío vamos a usar la estrategia de GitHub. -Obtener tu *Client ID y Secret* de GitHub se realiza en la configuración del perfil de tu cuenta, en 'developer settings', y luego en '[OAuth applications](https://github.com/settings/developers)'. Haz clic en 'Register a new application', dale un nombre a tu aplicación, pega la url de tu página de inicio de Replit (**No la url del código del proyecto**), y por último, para la url de callback, pega la misma url de la página de inicio pero con `/auth/github/callback` añadido. Aquí es donde los usuarios serán redirigidos para que los manejemos después de autentificarse en GitHub. Guarda la información devuelta como `'GITHUB_CLIENT_ID'` y `'GITHUB_CLIENT_SECRET'` en tu archivo `.env`. +El obtener tu *Client ID and Secret* de GitHub se realiza en la configuración del perfil de tu cuenta, en 'developer settings', y luego en 'OAuth applications. Haz clic en 'Register a new application', dale un nombre a tu aplicación, pega la url de tu página de inicio de Replit (**No la url del código del proyecto**), y por último, para la url de callback, pega la misma url de la página de inicio pero con `/auth/github/callback` añadido. Aquí es donde los usuarios serán redirigidos para que los manejemos después de autentificarse en GitHub. Guarda la información devuelta como `'GITHUB_CLIENT_ID'` y `'GITHUB_CLIENT_SECRET'` en tu archivo `.env`. En tu archivo `routes.js`, agrega `showSocialAuth: true` a la ruta de la página de inicio, después de `showRegistration: true`. Ahora, crea 2 rutas aceptando peticiones GET: `/auth/github` y `/auth/github/callback`. La primera solo debe llamar al passport para autentificar `'github'`. El segundo debe llamar a passport para autentificar `'github'` con una redirección de fallo a `/`, y luego si eso es exitoso redirigir a `/profile` (similar a nuestro último proyecto). @@ -31,7 +31,7 @@ app.route('/login') }); ``` -Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto [aquí](https://gist.github.com/camperbot/1f7f6f76adb178680246989612bea21e). +Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto aquí. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.md index c5508db82d0..3e478b3fa45 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.md @@ -28,7 +28,7 @@ En `client.js`, ahora debes escuchar el evento `'chat message'` y, una vez recib En este punto, ¡el chat debe ser totalmente funcional y enviar mensajes a todos los clientes! -Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto completado hasta este punto [aquí](https://gist.github.com/camperbot/d7af9864375207e254f73262976d2016). +Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes consultar el proyecto completado hasta este momento. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/use-a-template-engines-powers.md b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/use-a-template-engines-powers.md index a3861f31018..2c212913d20 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/use-a-template-engines-powers.md +++ b/curriculum/challenges/espanol/06-quality-assurance/advanced-node-and-express/use-a-template-engines-powers.md @@ -44,7 +44,7 @@ Para pasarlos desde nuestro servidor, debes agregar un objeto como segundo argum !Debe verse así: `res.render(process.cwd() + '/views/pug/index', {title: 'Hello', message: 'Please login'});` Ahora actualiza tu página y debes ver esos valores representados en tu vista en el lugar correcto como se establece en tu archivo `index.pug`! -Envía tu página cuando creas que la tienes correcta. Si te encuentras con errores, puedes consultar el [proyecto completado hasta este momento](https://gist.github.com/camperbot/4af125119ed36e6e6a8bb920db0c0871). +Envía tu página cuando creas que la tienes correcta. Si te encuentras con errores, puedes consultar el proyecto completado hasta este momento. # --hints-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/assert-deep-equality-with-.deepequal-and-.notdeepequal.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/assert-deep-equality-with-.deepequal-and-.notdeepequal.md index e7f67d818b6..af500274d4b 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/assert-deep-equality-with-.deepequal-and-.notdeepequal.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/assert-deep-equality-with-.deepequal-and-.notdeepequal.md @@ -8,7 +8,7 @@ dashedName: assert-deep-equality-with--deepequal-and--notdeepequal # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Como recordatorio, este proyecto esta siendo construído con base en el siquiente proyecto inicial,Replit o clonado de GitHub. `deepEqual()` confirma que dos objetos son iguales en profundidad. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/compare-the-properties-of-two-elements.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/compare-the-properties-of-two-elements.md index c09f47b56a9..71cc60773b3 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/compare-the-properties-of-two-elements.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/compare-the-properties-of-two-elements.md @@ -8,11 +8,11 @@ dashedName: compare-the-properties-of-two-elements # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial Repl.it, o clonado desde GitHub. # --instructions-- -Dentro de `tests/1_unit-tests.js` bajo la prueba etiquetada `#8` en `Comparisons` suite, cambiar cada `assert` a `assert.isAbove` o `assert.isAtMost` para que el test sea superado (debe evaluarse a `true`). No modifiques los argumentos pasados ​​a los verificadores. +Dentro de `tests/1_unit-tests.js` bajo la prueba etiquetada `#8` en `Comparisons` suite, cambiar cada `assert` a `assert.isAbove` o `assert.isAtMost` para que el test sea aprovado (debe evaluarse a `true`). No modifiques los argumentos pasados ​​a los verificadores. # --hints-- @@ -48,7 +48,7 @@ Debe elegir el método correcto para la primera aserción - `isAbove` vs. `isAtM ); ``` -Debe elegir el método correcto para la segunda aserción - `isAbove` vs. `isAtMost`. +Debes elegir el método correcto para la segunda aserción - `isAbove` vs. `isAtMost`. ```js (getUserInput) => @@ -62,7 +62,7 @@ Debe elegir el método correcto para la segunda aserción - `isAbove` vs. `isAtM ); ``` -Debe elegir el método correcto para la tercera aserción - `isAbove` vs. `isAtMost`. +Debes elegir el método correcto para la tercera aserción - `isAbove` vs. `isAtMost`. ```js (getUserInput) => diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/learn-how-javascript-assertions-work.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/learn-how-javascript-assertions-work.md index e833ed1c419..d6b01fe1878 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/learn-how-javascript-assertions-work.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/learn-how-javascript-assertions-work.md @@ -10,8 +10,8 @@ dashedName: learn-how-javascript-assertions-work Trabajar en estos desafíos implica escribir tu código usando uno de los siguientes métodos: -- Clona [este repositorio de Github](https://github.com/freeCodeCamp/boilerplate-mochachai/) y completa estos desafíos localmente. -- Usa [nuestro proyecto inicial de Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai) para completar estos desafíos. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa nuestro proyecto de inicio Replit para completar estos desafíos. - Utiliza un constructor de sitios web de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que un demo funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iii---put-method.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iii---put-method.md index 96374eab6c2..5846918d971 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iii---put-method.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iii---put-method.md @@ -8,7 +8,7 @@ dashedName: run-functional-tests-on-an-api-response-using-chai-http-iii---put-me # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial Repl.it, o clonado desde GitHub. Cuando se prueba una solicitud `PUT`, a menudo enviarás datos junto con ella. Los datos que incluye con su solicitud `PUT` se llama el body de la petición. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iv---put-method.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iv---put-method.md index ee670f67449..6c2a792ccef 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iv---put-method.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iv---put-method.md @@ -8,7 +8,7 @@ dashedName: run-functional-tests-on-an-api-response-using-chai-http-iv---put-met # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial Repl.it, o clonado desde GitHub. Este ejercicio es similar al anterior. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http-ii.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http-ii.md index 772e74ffcd3..9e00b161ddc 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http-ii.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http-ii.md @@ -8,7 +8,7 @@ dashedName: run-functional-tests-on-api-endpoints-using-chai-http-ii # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Repl.it](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial Repl.it, o clonado desde GitHub. # --instructions-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.md index d30b6787e3a..b366c701308 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.md @@ -8,7 +8,7 @@ dashedName: run-functional-tests-on-api-endpoints-using-chai-http # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial Repl.it, o clonado desde GitHub. Mocha te permite comprobar operaciones asíncronas como llamadas a los endpoints de la API con un complemento llamado `chai-http`. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser.md index e780332fbf5..9dead37043f 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser.md @@ -8,7 +8,7 @@ dashedName: run-functional-tests-using-a-headless-browser # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial Repl.it, o clonado desde GitHub. En la página hay un formulario de entrada. Envía datos al endpoint `PUT /travellers` como una solicitud AJAX. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/simulate-actions-using-a-headless-browser.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/simulate-actions-using-a-headless-browser.md index 816c29fff93..facbc86e370 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/simulate-actions-using-a-headless-browser.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/simulate-actions-using-a-headless-browser.md @@ -7,7 +7,7 @@ dashedName: simulate-actions-using-a-headless-browser # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial Repl. it, o clonado desde GitHub. En los siguientes desafíos, simularás la interacción humana con una página usando un navegador sin interfaz gráfica. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-for-truthiness.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-for-truthiness.md index 2ee32394e3f..63c9bc9c052 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-for-truthiness.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-for-truthiness.md @@ -8,7 +8,7 @@ dashedName: test-for-truthiness # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. `isTrue()` probará el valor booleano `true` y `isNotTrue()` pasará cuando se le dé cualquier cosa que no sea el valor booleano de `true`. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.md index 4d0d8471710..3652e827356 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.md @@ -8,7 +8,7 @@ dashedName: test-if-a-string-contains-a-substring # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. `include()` y `notInclude()` también funcionan con cadenas! `include()` comprueba que la cadena actual contiene el substring esperado. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.md index 7469c374b84..de7330f6316 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.md @@ -8,7 +8,7 @@ dashedName: test-if-a-value-falls-within-a-specific-range # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Repl.it](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. ```javascript .approximately(actual, expected, delta, [message]) diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-a-string.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-a-string.md index 9b62bbe2180..23c09436c72 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-a-string.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-a-string.md @@ -8,7 +8,7 @@ dashedName: test-if-a-value-is-a-string # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. `isString` o `isNotString` comprueba que el valor actual es una cadena. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md index 5bbc0a720f0..123fa2fa7cf 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md @@ -8,7 +8,7 @@ dashedName: test-if-a-value-is-an-array # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial Repl.it, o clonado desde GitHub. # --instructions-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-of-a-specific-data-structure-type.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-of-a-specific-data-structure-type.md index 498014e87df..5baf927dd1f 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-of-a-specific-data-structure-type.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-of-a-specific-data-structure-type.md @@ -8,7 +8,7 @@ dashedName: test-if-a-value-is-of-a-specific-data-structure-type # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Repl.it](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. `#typeOf` verifica que el tipo de dato es string, como lo determina `Object.prototype.toString`. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-variable-or-function-is-defined.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-variable-or-function-is-defined.md index 0e72aa5aef7..fb132b56426 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-variable-or-function-is-defined.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-variable-or-function-is-defined.md @@ -8,7 +8,7 @@ dashedName: test-if-a-variable-or-function-is-defined # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. # --instructions-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-array-contains-an-item.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-array-contains-an-item.md index 1a48c590840..51357177931 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-array-contains-an-item.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-array-contains-an-item.md @@ -8,7 +8,7 @@ dashedName: test-if-an-array-contains-an-item # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Repl.it](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. # --instructions-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-has-a-property.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-has-a-property.md index 41d5a084f2b..cc9f2762a5d 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-has-a-property.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-has-a-property.md @@ -8,7 +8,7 @@ dashedName: test-if-an-object-has-a-property # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. `property` verifica que el objeto actual tiene una propiedad determinada. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-is-an-instance-of-a-constructor.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-is-an-instance-of-a-constructor.md index 9e4eb8d88df..464b8a55012 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-is-an-instance-of-a-constructor.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-is-an-instance-of-a-constructor.md @@ -8,7 +8,7 @@ dashedName: test-if-an-object-is-an-instance-of-a-constructor # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. `#instanceOf` verifica que un objeto es una instancia de un constructor. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-one-value-is-below-or-at-least-as-large-as-another.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-one-value-is-below-or-at-least-as-large-as-another.md index e031b2ff432..9666a20d96c 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-one-value-is-below-or-at-least-as-large-as-another.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-one-value-is-below-or-at-least-as-large-as-another.md @@ -8,7 +8,7 @@ dashedName: test-if-one-value-is-below-or-at-least-as-large-as-another # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. # --instructions-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-assert.isok-and-assert.isnotok.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-assert.isok-and-assert.isnotok.md index a5ccc7ddf6b..23675b1bb1a 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-assert.isok-and-assert.isnotok.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-assert.isok-and-assert.isnotok.md @@ -8,11 +8,11 @@ dashedName: use-assert-isok-and-assert-isnotok # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial Repl. it, o clonado desde GitHub. `isOk()` prueba un valor verdadero y `isNotOk()` prueba un valor falso. -Para aprender más sobre los valores verdaderos y falsos, prueba nuestro desafío de [Falsy Bouncer](https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-algorithm-scripting/falsy-bouncer). +Para aprender más sobre los valores verdaderos y falsos, prueba nuestro desafío de Falsy Bouncer. # --instructions-- diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-regular-expressions-to-test-a-string.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-regular-expressions-to-test-a-string.md index 9d51eea61fc..8e6e60ff1e7 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-regular-expressions-to-test-a-string.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-regular-expressions-to-test-a-string.md @@ -8,7 +8,7 @@ dashedName: use-regular-expressions-to-test-a-string # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. `match()` verifica que el valor real coincide con la expresión regular del segundo argumento. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-double-equals-to-assert-equality.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-double-equals-to-assert-equality.md index d6589cf719f..2495a064476 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-double-equals-to-assert-equality.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-double-equals-to-assert-equality.md @@ -8,7 +8,7 @@ dashedName: use-the-double-equals-to-assert-equality # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. `equal()` compara objetos usando `==`. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-triple-equals-to-assert-strict-equality.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-triple-equals-to-assert-strict-equality.md index 799ed0d9d3b..bdc60aebac4 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-triple-equals-to-assert-strict-equality.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-triple-equals-to-assert-strict-equality.md @@ -8,7 +8,7 @@ dashedName: use-the-triple-equals-to-assert-strict-equality # --description-- -Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/). +Recuerda, este proyecto se está construyendo partir de una plantilla en Replit o clonado de GitHub. `strictEqual()` compara objetos usando `===`. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/american-british-translator.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/american-british-translator.md index f739688fca8..80047bac4b7 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/american-british-translator.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/american-british-translator.md @@ -8,10 +8,10 @@ dashedName: american-british-translator # --description-- -Construye una aplicación full stack de JavaScript que sea funcionalmente similar a esta: . Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: +Crea una aplicación full stack de JavaScript que sea funcionalmente similar a esta: https://american-british-translator.freecodecamp.rocks/. Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-project-american-british-english-translator/) y completa tu proyecto localmente. -- Usa [nuestro proyecto inicial de Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-american-british-english-translator) para completar tu proyecto. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa nuestro proyecto inicial de Replit para completar tu proyecto. - Usa un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que una demostración funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/issue-tracker.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/issue-tracker.md index e44583de4ee..148a284bb00 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/issue-tracker.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/issue-tracker.md @@ -8,10 +8,10 @@ dashedName: issue-tracker # --description-- -Construye una aplicación full stack de JavaScript que sea funcionalmente similar a esta: . Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: +Crea una aplicación full stack de JavaScript que sea funcionalmente similar a esta: https://issue-tracker.freecodecamp.rocks/. Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-project-issuetracker/) y completa tu proyecto localmente. -- Usa [nuestro proyecto inicial de Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-issuetracker) para completar tu proyecto. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa nuestro proyecto inicial de Replit para completar tu proyecto. - Usa un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que una demostración funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/metric-imperial-converter.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/metric-imperial-converter.md index 4430fcbedcd..d46522de9c2 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/metric-imperial-converter.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/metric-imperial-converter.md @@ -8,10 +8,10 @@ dashedName: metric-imperial-converter # --description-- -Construye una aplicación full stack de JavaScript que sea funcionalmente similar a esta: . Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: +Crea una aplicación full stack de JavaScript que sea funcionalmente similar a esta: https://metric-imperial-converter.freecodecamp.rocks/. Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-project-metricimpconverter/) y completa tu proyecto localmente. -- Usa [nuestro proyecto de inicio en Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-metricimpconverter) para completar tu proyecto. +- Clone este repositorio de GitHub y complete estos desafíos localmente. +- Usa este proyecto inicial de Replit para completar tu proyecto. - Usa un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que una demostración funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`. diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/personal-library.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/personal-library.md index 702dcb78578..f9ea7fd3e47 100644 --- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/personal-library.md +++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-projects/personal-library.md @@ -8,10 +8,10 @@ dashedName: personal-library # --description-- -Construye una aplicación full stack de JavaScript que sea funcionalmente similar a esta: . Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: +Construye una aplicacion Javascript full stack que funcione similarmente a esta: https://personal-library.freecodecamp.rocks/. Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos: -- Clona [este repositorio de GitHub](https://github.com/freeCodeCamp/boilerplate-project-library) y completa tu proyecto localmente. -- Usa [nuestro proyecto inicial de Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-library) para completar tu proyecto. +- Clona este repositorio de GitHub y complete estos desafíos localmente. +- Usa este proyecto inicial de Replit para completar tu proyecto. - Usa un constructor de sitios de tu elección para completar el proyecto. Asegúrate de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando hayas terminado, asegúrate de que una demostración funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`. diff --git a/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/build-your-own-functions.md b/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/build-your-own-functions.md index c27ed3a632f..fd00ff51f4e 100644 --- a/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/build-your-own-functions.md +++ b/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/build-your-own-functions.md @@ -14,7 +14,7 @@ dashedName: build-your-own-functions Más recursos: -\- [Ejercicio](https://www.youtube.com/watch?v=ksvGhDsjtpw) +\- Ejercicio # --question-- diff --git a/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/comparing-and-sorting-tuples.md b/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/comparing-and-sorting-tuples.md index b562909efe8..00a839c6149 100644 --- a/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/comparing-and-sorting-tuples.md +++ b/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/comparing-and-sorting-tuples.md @@ -14,7 +14,7 @@ dashedName: comparing-and-sorting-tuples Más recursos: -\- [Ejercicio](https://www.youtube.com/watch?v=EhQxwzyT16E) +\- Ejercicio # --question-- diff --git a/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/dictionaries-and-loops.md b/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/dictionaries-and-loops.md index 41162222424..4afcd95639b 100644 --- a/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/dictionaries-and-loops.md +++ b/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/dictionaries-and-loops.md @@ -14,7 +14,7 @@ dashedName: dictionaries-and-loops Más recursos: -\- [Ejercicio](https://www.youtube.com/watch?v=PrhZ9qwBDD8) +\- Ejercicio # --question-- diff --git a/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/files-as-a-sequence.md b/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/files-as-a-sequence.md index 2da38392741..dcf783a5542 100644 --- a/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/files-as-a-sequence.md +++ b/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/files-as-a-sequence.md @@ -14,7 +14,7 @@ dashedName: files-as-a-sequence Más recursos: -\- [Ejercicios](https://www.youtube.com/watch?v=il1j4wkte2E) +\- Ejercicio # --question-- diff --git a/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/web-services-api-rate-limiting-and-security.md b/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/web-services-api-rate-limiting-and-security.md index 2efec620223..1a4fc2a98a7 100644 --- a/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/web-services-api-rate-limiting-and-security.md +++ b/curriculum/challenges/espanol/07-scientific-computing-with-python/python-for-everybody/web-services-api-rate-limiting-and-security.md @@ -14,13 +14,13 @@ dashedName: web-services-api-rate-limiting-and-security Mas recursos: -\- [Ejercicio: GeoJSON](https://www.youtube.com/watch?v=TJGJN0T8tak) +\- Ejercicio: GeoJSON -\- [Ejercicio: JSON](https://www.youtube.com/watch?v=vTmw5RtfGMY) +\- Ejercicio: JSON -\- [Ejercicio: Twitter](https://www.youtube.com/watch?v=2c7YwhvpCro) +\- Ejercicio: Twitter -\- [Ejercicio: XML](https://www.youtube.com/watch?v=AopYOlDa-vY) +\- Ejercicio: XML # --question-- diff --git a/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md b/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md index bdd87a075fb..e6a0e327a7e 100644 --- a/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md +++ b/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md @@ -8,7 +8,7 @@ dashedName: budget-app # --description-- -Estarás [trabajando en este proyecto con nuestro código inicial de Replit](https://replit.com/github/freeCodeCamp/boilerplate-budget-app). +Estarás trabajando en este proyecto con nuestro código inicial en Replit. # --instructions-- diff --git a/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/polygon-area-calculator.md b/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/polygon-area-calculator.md index c8c17dfd44e..c8cc224643f 100644 --- a/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/polygon-area-calculator.md +++ b/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/polygon-area-calculator.md @@ -8,7 +8,7 @@ dashedName: polygon-area-calculator # --description-- -Estarás [trabajando en este proyecto con nuestro código inicial de Replit](https://replit.com/github/freeCodeCamp/boilerplate-polygon-area-calculator). +Estarás trabajando en este proyecto con nuestro código inicial en Replit. # --instructions-- diff --git a/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/time-calculator.md b/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/time-calculator.md index 0afe42a9eb0..838cb822a78 100644 --- a/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/time-calculator.md +++ b/curriculum/challenges/espanol/07-scientific-computing-with-python/scientific-computing-with-python-projects/time-calculator.md @@ -8,7 +8,7 @@ dashedName: time-calculator # --description-- -Estarás [trabajando en este proyecto con nuestro código inicial de Replit](https://replit.com/github/freeCodeCamp/boilerplate-time-calculator). +Estarás trabajando en este proyecto con nuestro código inicial en Replit. # --instructions-- diff --git a/curriculum/challenges/espanol/08-data-analysis-with-python/data-analysis-with-python-course/introduction-to-data-analysis.md b/curriculum/challenges/espanol/08-data-analysis-with-python/data-analysis-with-python-course/introduction-to-data-analysis.md index 6eb6b327cd0..733903d6f0d 100644 --- a/curriculum/challenges/espanol/08-data-analysis-with-python/data-analysis-with-python-course/introduction-to-data-analysis.md +++ b/curriculum/challenges/espanol/08-data-analysis-with-python/data-analysis-with-python-course/introduction-to-data-analysis.md @@ -11,16 +11,17 @@ dashedName: introduction-to-data-analysis --- # --description-- +El análisis de datos es el acto de convertir datos crudos y desordenados en información útil limpiando los datos, transformándolos, manipulándolos e inspeccionándolos. Más recursos: -\- [Diapositivas](https://docs.google.com/presentation/d/1cUIt8b2ySz-85_ykfeuuWsurccwTAuFPn782pZBzFsU/edit?usp=sharing) +\- Artículo de noticias # --question-- ## --text-- -¿Cuál de las siguientes opciones no **es** parte del Análisis de Datos? +¿Cuál de las siguientes opciones **no es** parte del Análisis de Datos? ## --answers-- @@ -28,7 +29,7 @@ Construcción de modelos estadísticos y visualización de datos. --- -Elegir una conclusión deseada para el análisis. +Selección de una conclusión deseada para el análisis. --- @@ -36,7 +37,7 @@ Corregir valores incorrectos y eliminar datos no válidos. --- -Transformación de datos en una estructura de datos apropiada. +Transformando datos en una estructura de datos apropiada. ## --video-solution-- diff --git a/curriculum/challenges/espanol/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.md b/curriculum/challenges/espanol/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.md index f7efd693685..dd42bd3990e 100644 --- a/curriculum/challenges/espanol/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.md +++ b/curriculum/challenges/espanol/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.md @@ -1,6 +1,6 @@ --- id: 58a25bcff9fc0f352b528e7e -title: Hash and Compare Passwords Synchronously +title: Picar y comparar contraseñas sincrónicamente challengeType: 2 forumTopicId: 301579 dashedName: hash-and-compare-passwords-synchronously @@ -8,31 +8,31 @@ dashedName: hash-and-compare-passwords-synchronously # --description-- -As a reminder, this project is being built upon the following starter project on [Replit](https://replit.com/github/freeCodeCamp/boilerplate-bcrypt), or cloned from [GitHub](https://github.com/freeCodeCamp/boilerplate-bcrypt/). +Como recordatorio, este proyecto se basa en el siguiente proyecto inicial en Replit, o clonado de GitHub. -Hashing synchronously is just as easy to do but can cause lag if using it server side with a high cost or with hashing done very often. Hashing with this method is as easy as calling +Picar sincrónicamente es igual de fácil de hacer, pero puede causar retrasos si se usa en el lado del servidor con un alto costo o si se pica con mucha frecuencia. Picar con este método es tan fácil como llamar ```js var hash = bcrypt.hashSync(myPlaintextPassword, saltRounds); ``` -Add this method of hashing to your code and then log the result to the console. Again, the variables used are already defined in the server so you won't need to adjust them. You may notice even though you are hashing the same password as in the async function, the result in the console is different- this is due to the salt being randomly generated each time as seen by the first 22 characters in the third string of the hash. Now to compare a password input with the new sync hash, you would use the compareSync method: +Agrega este método de hash a tu código y luego registre el resultado en la consola. Nuevamente, las variables usadas ya están definidas en el servidor asique no necesitará ajustarlas. Tal vez notes que aunque estás hasheando la misma contraseña que en la función asincrónica, el resultado en la consola es diferente -esto es porque el salto está siendo generado al azar cada vez como se ve en los primeros 22 carácteres en la tercera string del hash. Ahora para comparar un input de contraseña con el hash sincronizado nuevo, deberás usar el método compareSync: ```js var result = bcrypt.compareSync(myPlaintextPassword, hash); ``` -with the result being a boolean true or false. +con el resultado siendo un booleano verdadero o falso. # --instructions-- -Add the function in and log the result to the console to see it working. +Añade la función y registra el resultado en la consola para ver cómo funciona. -Submit your page when you think you've got it right. +Envía tu página cuando creas que está correcto. # --hints-- -Sync hash should be generated and correctly compared. +Sync hash debe generarse y compararse correctamente. ```js (getUserInput) => diff --git a/curriculum/challenges/espanol/09-information-security/information-security-with-helmetjs/install-and-require-helmet.md b/curriculum/challenges/espanol/09-information-security/information-security-with-helmetjs/install-and-require-helmet.md index b55a943559e..8aa0919e375 100644 --- a/curriculum/challenges/espanol/09-information-security/information-security-with-helmetjs/install-and-require-helmet.md +++ b/curriculum/challenges/espanol/09-information-security/information-security-with-helmetjs/install-and-require-helmet.md @@ -10,8 +10,8 @@ dashedName: install-and-require-helmet Trabajar en estos desafíos implica escribir tu código usando uno de los siguientes métodos: -- Clona [este repositorio de Github](https://github.com/freeCodeCamp/boilerplate-infosec/) y completa estos desafíos localmente. -- Use [nuestro proyecto inicial de Replit](https://replit.com/github/freeCodeCamp/boilerplate-infosec) para completar estos desafios. +- Clona este repositorio de GitHub y completa esos retos localmente. +- Usa nuestro proyecto de inicial Replit para completar estos retos. - Utilice un constructor de sitios de su elección para completar el proyecto. Asegúrese de incorporar todos los archivos de nuestro repositorio de GitHub. Cuando haya terminado, asegúrese de que un demo funcional de su proyecto esté alojado en algún lugar público. A continuación, envíe la URL en el campo `Solution Link`. @@ -22,7 +22,7 @@ Helmet te ayuda a proteger tus aplicaciones Express configurando varias cabecera Todo su código para estas lecciones va en el archivo `myApp.js` entre las líneas de código con las que hemos iniciado. No cambie o elimine el código que hemos añadido para usted. -Instale la versión `3.21.3` de Helmet, luego requiérala. Puede instalar una versión específica de un paquete con `npm install --save-exact package@version`, o agregándolo a su paquete `package.json` directamente. +La versión de Helmet `3.21.3` ya ha sido instalada, así que requiera `helmet` en `myApp.js`. # --hints-- diff --git a/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-a-banner-grabber.md b/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-a-banner-grabber.md index 88f5f3fcfe1..6e5c2e2fcc1 100644 --- a/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-a-banner-grabber.md +++ b/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-a-banner-grabber.md @@ -1,8 +1,12 @@ --- id: 5ea9997bbec2e9bc47e94db3 -title: Developing a Banner Grabber +title: Desarrollar un grabador de estandarte challengeType: 11 videoId: CeGW761BIsA +bilibiliIds: + aid: 633014533 + bvid: BV1Sb4y127H9 + cid: 409036288 dashedName: developing-a-banner-grabber --- @@ -10,7 +14,7 @@ dashedName: developing-a-banner-grabber ## --text-- -Fill in the blanks to complete the `banner` function below: +Rellena los espacios en blanco para completar la función `banner` a continuación: ```py def banner(ip, port): @@ -23,7 +27,7 @@ def banner(ip, port): A: `connect` -B: `port` +B:`port` --- diff --git a/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-a-port-scanner.md b/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-a-port-scanner.md index a35002583eb..26b1978215e 100644 --- a/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-a-port-scanner.md +++ b/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-a-port-scanner.md @@ -1,8 +1,12 @@ --- id: 5ea9997bbec2e9bc47e94db4 -title: Developing a Port Scanner +title: Desarrollar un escáner de puertos challengeType: 11 videoId: z_qkqZS7KZ4 +bilibiliIds: + aid: 208077317 + bvid: BV1Uh411p7HS + cid: 409036706 dashedName: developing-a-port-scanner --- @@ -10,19 +14,19 @@ dashedName: developing-a-port-scanner ## --text-- -What is the main difference between the `.connect()` and `.connect_ex()` methods? +¿Cuál es la diferencia principal entre los métodos `.connect()` y `.connect_ex()`? ## --answers-- -There is no difference between the two methods. +No hay diferencia entre ambos métodos. --- -If there is an error or if no host is found, `.connect()` returns an error code while `.connect_ex()` raises an exception. +Si hay un error o si no se encuentra un host, `.connect()` devuelve un código de error mientras `.connect_ex()` plantea una excepción. --- -If there is an error or if no host is found, `.connect()` raises an exception while `.connect_ex()` returns an error code. +Si hay un error o si no se encuentra un host, `.connect()` devuelve un código de error mientras `.connect_ex()` plantea una excepción. ## --video-solution-- diff --git a/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-an-nmap-scanner-part-1.md b/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-an-nmap-scanner-part-1.md index 8f26492699b..deb50e2bedf 100644 --- a/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-an-nmap-scanner-part-1.md +++ b/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/developing-an-nmap-scanner-part-1.md @@ -1,8 +1,12 @@ --- id: 5ea9997bbec2e9bc47e94db1 -title: Developing an Nmap Scanner part 1 +title: Desarrollando un escáner de Nmap parte 1 challengeType: 11 videoId: jYk9XaGoAnk +bilibiliIds: + aid: 805657338 + bvid: BV1o34y1S7zf + cid: 414718986 dashedName: developing-an-nmap-scanner-part-1 --- @@ -10,7 +14,7 @@ dashedName: developing-an-nmap-scanner-part-1 ## --text-- -What is the correct command to install the Python 3 version of the `python-nmap` library? +¿Cuál es el comando correcto para instalar la versión de Python 3 de la librería `python-nmap`? ## --answers-- diff --git a/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/introduction-and-setup.md b/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/introduction-and-setup.md index c243ea29541..bab62cab8fc 100644 --- a/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/introduction-and-setup.md +++ b/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/introduction-and-setup.md @@ -1,8 +1,12 @@ --- id: 5ea9997bbec2e9bc47e94dae -title: Introduction and Setup +title: Introducción y configuración challengeType: 11 videoId: XeQ7ZKtb998 +bilibiliIds: + aid: 718017704 + bvid: BV13Q4y1k7hX + cid: 409033630 dashedName: introduction-and-setup --- @@ -10,19 +14,19 @@ dashedName: introduction-and-setup ## --text-- -What code editor and extension does the instructor recommend for developing penetration testing tools in Python? +¿Qué editor de código y extensión recomienda el instructor para desarrollar herramientas de prueba de penetración en Python? ## --answers-- -Atom and the atom-python-run extension. +Atom y la extensión atom-python-run. --- -VSCode and Microsoft's Python extension. +Extensión VSCode y Python de Microsoft. --- -Sublime Text and the Anaconda package. +Sublime Text y el paquete Anaconda. ## --video-solution-- diff --git a/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/understanding-sockets-and-creating-a-tcp-server.md b/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/understanding-sockets-and-creating-a-tcp-server.md index 7a0f528118f..6c041d725c8 100644 --- a/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/understanding-sockets-and-creating-a-tcp-server.md +++ b/curriculum/challenges/espanol/09-information-security/python-for-penetration-testing/understanding-sockets-and-creating-a-tcp-server.md @@ -1,8 +1,12 @@ --- id: 5ea9997bbec2e9bc47e94daf -title: Understanding Sockets and Creating a TCP Server +title: Entendiendo Sockets y Creando un Servidor TCP challengeType: 11 videoId: F1QI9tNuDQg +bilibiliIds: + aid: 848005038 + bvid: BV1bL4y1a7kJ + cid: 409034113 dashedName: understanding-sockets-and-creating-a-tcp-server --- @@ -10,7 +14,7 @@ dashedName: understanding-sockets-and-creating-a-tcp-server ## --text-- -Which of the following functions creates a socket object? +¿Cuál de las siguientes funciones crea un objeto socket? ## --answers-- diff --git a/curriculum/challenges/espanol/11-machine-learning-with-python/tensorflow/natural-language-processing-with-rnns-sentimental-analysis.md b/curriculum/challenges/espanol/11-machine-learning-with-python/tensorflow/natural-language-processing-with-rnns-sentimental-analysis.md index 60118b25c81..081aa380334 100644 --- a/curriculum/challenges/espanol/11-machine-learning-with-python/tensorflow/natural-language-processing-with-rnns-sentimental-analysis.md +++ b/curriculum/challenges/espanol/11-machine-learning-with-python/tensorflow/natural-language-processing-with-rnns-sentimental-analysis.md @@ -1,8 +1,12 @@ --- id: 5e8f2f13c4cdbe86b5c72d9e -title: 'Natural Language Processing With RNNs: Sentiment Analysis' +title: 'Procesamiento del lenguaje natural con RNN: análisis de sentimiento' challengeType: 11 videoId: lYeLtu8Nq7c +bilibiliIds: + aid: 933111408 + bvid: BV1TM4y137VB + cid: 409135996 dashedName: natural-language-processing-with-rnns-sentiment-analysis --- @@ -10,13 +14,13 @@ dashedName: natural-language-processing-with-rnns-sentiment-analysis ## --text-- -Fill in the blanks below to create the model for the RNN: +Complete los espacios en blanco a continuación para crear el modelo para la RNN: ```py model = __A__.keras.Sequential([ __A__.keras.layers.__B__(88584, 32), __A__.keras.layers.__C__(32), - __A__.keras.layers.DENSE(1, activation='sigmoid') + __A__.keras.layers.Dense(1, activation='sigmoid') ]) ``` diff --git a/curriculum/challenges/espanol/14-responsive-web-design-22/build-a-survey-form-project/build-a-survey-form.md b/curriculum/challenges/espanol/14-responsive-web-design-22/build-a-survey-form-project/build-a-survey-form.md new file mode 100644 index 00000000000..51501673bd9 --- /dev/null +++ b/curriculum/challenges/espanol/14-responsive-web-design-22/build-a-survey-form-project/build-a-survey-form.md @@ -0,0 +1,518 @@ +--- +id: 587d78af367417b2b2512b03 +title: Crea un formulario de encuesta +challengeType: 14 +forumTopicId: 301145 +dashedName: build-a-survey-form +--- + +# --description-- + +**Objetivo:** Crea una aplicación que sea funcionalmente similar a https://survey-form.freecodecamp.rocks + +**Historias de usuario:** + +1. Debes tener un título de página en un elemento `h1` con un `id` de `title` +1. Debes tener una corta explicación en el elemento `p` con un `id` de `description` +1. Debes tener un elemento `form` con un `id` de `survey-form` +1. Dentro del elemento form, debe ser **required** (requerido) ingresar tu nombre en un campo de `input` que tenga un `id` de `name` y un `type` de `text` +1. Dentro del elemento form **required** (requerido) ingresar tu nombre en un campo de `input` que tenga un `id` de `email` +1. Si ingresas un email que no tenga el formato correcto, verás un error de validación HTML5 +1. Dentro del formulario, puedes ingresar un número en un campo de `input` que tenga un `id` de `number` +1. Si ingresas valores no numéricos en el campo de entrada de números, verás un error de validación HTML5 +1. Si ingrisas un número que esté fuera del rango de números permitido, que es definido por los atributos `min` y `max`, verás un error de validación de HTML5 +1. Para los campos de entrada de nombre, email y número, puedes ver los correspondientes elementos `label` en el formulario, que describen el propósito de cada campo con los siguientes id: `id="name-label"`, `id="email-label"` y `id="number-label"` +1. Para los campos de entrada de nombre, email y número, podrás ver un texto provisional que da una descripción o instrucciones para cada campo +1. Dentro del elemento form, debes tener un elemento desplegable `select` con un `id` de `dropdown` con al menos dos opciones para elegir +1. Dentro del elemento form, puedes seleccionar una opción de un grupo de al menos dos botones de radio que son agrupado utilizando el atributo `name` +1. Dentro del elemento form, puedes seleccionar varios campos en una serie de casillas de verificación, cada una debe tener un atributo `value` +1. Dentro del elemento form, se te presenta un `textarea` para comentarios adicionales +1. Dentro del elemento form, se te presenta un botón con un `id` de `submit` para enviar todas las entradas + +Completa las historias de usuario y pasa todas las pruebas a continuación para completar este proyecto. Dale tu propio estilo personal. ¡Feliz día programando! + +**Nota:** Asegurate de agregar `` en tu HTML para enlazar tu hoja de estilos y aplicar tu CSS + +# --hints-- + +Debes tener un elemento `h1` con un `id` de `title`. + +```js +const el = document.getElementById('title') +assert(!!el && el.tagName === 'H1') +``` + +Tu `#title` no debe estar vacío. + +```js +const el = document.getElementById('title') +assert(!!el && el.innerText.length > 0) +``` + +Debes tener un elemento `p` con un `id` de `description`. + +```js +const el = document.getElementById('description') +assert(!!el && el.tagName === 'P') +``` + +Tu `#description` no debe estar vacío. + +```js +const el = document.getElementById('description') +assert(!!el && el.innerText.length > 0) +``` + +Debes tener un elemento `form` con un `id` de `survey-form`. + +```js +const el = document.getElementById('survey-form') +assert(!!el && el.tagName === 'FORM') +``` + +Debes tener un elemento `input` con un `id` de `name`. + +```js +const el = document.getElementById('name') +assert(!!el && el.tagName === 'INPUT') +``` + +Tu `#name` debe tener un `type` de `text`. + +```js +const el = document.getElementById('name') +assert(!!el && el.type === 'text') +``` + +Tu `#name` debe requerir una entrada. + +```js +const el = document.getElementById('name') +assert(!!el && el.required) +``` + +Tu `#name` debe ser un descendiente de `#survey-form`. + +```js +const el = document.querySelector('#survey-form #name') +assert(!!el) +``` + +Debes tener un elemento `input` con un `id` de `email`. + +```js +const el = document.getElementById('email') +assert(!!el && el.tagName === 'INPUT') +``` + +Tu `#email` debe tener un `type` de `email`. + +```js +const el = document.getElementById('email') +assert(!!el && el.type === 'email') +``` + +Tu `#email` debe requerir una entrada. + +```js +const el = document.getElementById('email') +assert(!!el && el.required) +``` + +Tu `#email` debe ser descendiente de `#survey-form` + +```js +const el = document.querySelector('#survey-form #email') +assert(!!el) +``` + +Debes tener un elemento `input` con un `id` de `number`. + +```js +const el = document.getElementById('number') +assert(!!el && el.tagName === 'INPUT') +``` + +Tu `#number` debe ser descendiente de `#survey-form`. + +```js +const el = document.querySelector('#survey-form #number') +assert(!!el) +``` + +Tu `#number` debe tner un `type`de `number`. + +```js +const el = document.getElementById('number') +assert(!!el && el.type === 'number') +``` + +Tu `#number` debe tener un atributo `min` con un valor numérico. + +```js +const el = document.getElementById('number') +assert(!!el && el.min && isFinite(el.min)) +``` + +Tu `#number` debe tener un atributo `max` con un valor numérico. + +```js +const el = document.getElementById('number') +assert(!!el && el.max && isFinite(el.max)) +``` + +Debes tener un elemento `label` con un `id` de `name-label`. + +```js +const el = document.getElementById('name-label') +assert(!!el && el.tagName === 'LABEL') +``` + +Debes tener un elemento `label` con un `id` de `email-label`. + +```js +const el = document.getElementById('email-label') +assert(!!el && el.tagName === 'LABEL') +``` + +Debes tener un elemento `label` con un `id` de `number-label`. + +```js +const el = document.getElementById('number-label') +assert(!!el && el.tagName === 'LABEL') +``` + +Tu `#name-label` debe contener un texto que describa la entrada. + +```js +const el = document.getElementById('name-label') +assert(!!el && el.innerText.length > 0) +``` + +Tu `#email-label` debe contener un texto que describa la entrada. + +```js +const el = document.getElementById('email-label') +assert(!!el && el.innerText.length > 0) +``` + +Tu `#number-label` debe contener un texto que describa la entrada. + +```js +const el = document.getElementById('number-label') +assert(!!el && el.innerText.length > 0) +``` + +Tu `#name-label` debe ser descendiente de `#survey-form`. + +```js +const el = document.querySelector('#survey-form #name-label') +assert(!!el) +``` + +Tu `#email-label` debe ser descendiente de `#survey-form`. + +```js +const el = document.querySelector('#survey-form #email-label') +assert(!!el) +``` + +Tu `#number-label` debe ser descendiente de `#survey-form`. + +```js +const el = document.querySelector('#survey-form #number-label') +assert(!!el) +``` + +Tu `#name` debe tener el atributo `placeholder` y un valor. + +```js +const el = document.getElementById('name') +assert(!!el && !!el.placeholder && el.placeholder.length > 0) +``` + +Tu `#email` debe tener un atributo `placeholder` y un valor. + +```js +const el = document.getElementById('email') +assert(!!el && !!el.placeholder && el.placeholder.length > 0) +``` + +Tu `#number` debe tener un atributo `placeholder` y un valor. + +```js +const el = document.getElementById('number') +assert(!!el && !!el.placeholder && el.placeholder.length > 0) +``` + +Debes tener un campo `select` con un `id` de `dropdown`. + +```js +const el = document.getElementById('dropdown') +assert(!!el && el.tagName === 'SELECT') +``` + +Tu `#dropdown` debe tener al menos dos elementos `option` seleccionables (no deshabilitados). + +```js +const els = document.querySelectorAll('#dropdown option:not([disabled])') +assert(els.length >= 2) +``` + +Tu `#dropdown` debe ser descendiente de `#survey-form`. + +```js +const el = document.querySelector('#survey-form #dropdown') +assert(!!el) +``` + +Debes tener al menos dos elementos `input` con un `type` de `radio` (botones de radio). + +```js +const els = document.querySelectorAll('input[type="radio"]') +assert(els.length >= 2) +``` + +Debes tener al menos dos botones de radio que sean descendientes de `#survey-form`. + +```js +const els = document.querySelectorAll('#survey-form input[type="radio"]') +assert(els.length >= 2) +``` + +Todos tus botones de radio deben tener un atributo `value` y un valor. + +```js +const els1 = document.querySelectorAll('input[type="radio"]') +const els2 = document.querySelectorAll('input[type="radio"][value=""], input[type="radio"]:not([value])') +assert(els1.length > 0 && els2.length === 0) +``` + +Todos tus botones de radio deben tener un atributo `name` y un valor. + +```js +const els1 = document.querySelectorAll('input[type="radio"]') +const els2 = document.querySelectorAll('input[type="radio"][name=""], input[type="radio"]:not([name])') +assert(els1.length > 0 && els2.length === 0) +``` + +Cada grupo de botón de radio debe tener al menos 2 botones de radio. + +```js +const radioButtons = document.querySelectorAll('input[type="radio"]'); +const groups = {} + +if (radioButtons) { + radioButtons.forEach(el => { + if (!groups[el.name]) groups[el.name] = [] + groups[el.name].push(el) + }) +} + +const groupKeys = Object.keys(groups) + +groupKeys.forEach(key => { + if (groups[key].length < 2) assert(false) +}) + +assert(groupKeys.length > 0) +``` + +Debes tener al menos dos elementos `input` con un `type` de `checkbox` (casillas de verificación) que sean descendientes de `#survey-form`. + +```js +const els = document.querySelectorAll('#survey-form input[type="checkbox"]'); +assert(els.length >= 2) +``` + +Todos tus casillas de verificación dentro de `#survey-form` deben tener un atributo `value` y un valor. + +```js +const els1 = document.querySelectorAll('#survey-form input[type="checkbox"]') +const els2 = document.querySelectorAll('#survey-form input[type="checkbox"][value=""], #survey-form input[type="checkbox"]:not([value])') +assert(els1.length > 0 && els2.length === 0) +``` + +Debes tener al menos un elemento de `textarea` que sea descendiente de `#survey-form`. + +```js +const el = document.querySelector('#survey-form textarea') +assert(!!el) +``` + +Debes tener un elemento `input` o `button` con un `id` de `submit`. + +```js +const el = document.getElementById('submit') +assert(!!el && (el.tagName === 'INPUT' || el.tagName === 'BUTTON')) +``` + +Tu `#submit` debe tener un `type` de `submit`. + +```js +const el = document.getElementById('submit') +assert(!!el && el.type === 'submit') +``` + +Tu `#submit` debe ser descendiente de `#survey-form`. + +```js +const el = document.querySelector('#survey-form #submit') +assert(!!el) +``` + +# --seed-- + +## --seed-contents-- + +```html + +``` + +```css + +``` + +## --solutions-- + +```html + + + + + + Survey Form + + +

Survey Form

+

The card below was built as a sample survey form for freeCodeCamp.

+
+

Join the Togepi Fan Club!

+

+ Enter your information here to receive updates about club activities, + our monthly newsletter, and other email communications. +

+
+ + + + +

Who is your favourite Pokemon?

+ + + +

Which communications do you want to receive?

+ + + +

Any other information you would like to share?

+ +

+ Please note: This form is a proof of concept. Submitting the form + will not actually transmit your data. +

+ +
+
+ + + +``` + +```css +main { + text-align: center; + background-color: #92869c; + background-blend-mode: lighten; + max-width: 500px; + margin: 20px auto; + border-radius: 50px; + box-shadow: 10px 10px rgba(0, 0, 0, 0.5); + color: black; +} +body { + text-align: center; + background: #3a3240; + color: white; +} +input, textarea, select, button { + background: #3a3240; + color: white; +} +a { + color: white; +} +``` diff --git a/curriculum/challenges/espanol/14-responsive-web-design-22/build-a-tribute-page-project/build-a-tribute-page.md b/curriculum/challenges/espanol/14-responsive-web-design-22/build-a-tribute-page-project/build-a-tribute-page.md new file mode 100644 index 00000000000..0d070cdc4cf --- /dev/null +++ b/curriculum/challenges/espanol/14-responsive-web-design-22/build-a-tribute-page-project/build-a-tribute-page.md @@ -0,0 +1,325 @@ +--- +id: bd7158d8c442eddfaeb5bd18 +title: Construye una página de homenaje +challengeType: 14 +forumTopicId: 301147 +dashedName: build-a-tribute-page +--- + +# --description-- + +**Objetivo:** Crea una aplicación que sea funcionalmente similar a https://tribute-page.freecodecamp.rocks + +**Instrucciones:** + +1. Tu página de homenaje debe tener un elemento `main` con un `id` correspondiente de `main`, que contiene los demás elementos +1. La página debe tener un elemento `id` de `title`, el cual contendrá una cadena de caracteres (p. ej. texto), que describe el tema de la página de homenaje (p. ej. "Dr. Norman Borlaug") +1. La página debe tener tanto un elemento `figure` o un elemento `div` con un `id` de `img-div` +1. Dentro del elemento `#img-div` debe tener un elemento `img` con su correspondiente `id="image"` +1. Dentro del elemento `#img-div`, debes ver un elemento con un `id="img-caption"` correspondiente que contiene contenido textual describiendo la imagen mostrada en `#img-div` +1. Debe tener su correspondiente elemento `id="tribute-info"`, que contendrá una descripción textual del sujeto de la página tributo +1. Debes ver un elemento `a` con su `id="tribute-link"` correspondiente, que contiene información adicional sobre el tema de la página de homenaje. CONSEJO: Debes dar al elemento un atributo `target` y establecerlo como `_blank` para que tu enlace se abra en una nueva pestaña +1. Tu `#image` debe usar las propiedades `max-width` y `height` para redimensionar automaticamente, el ancho relativo de la imagen, sin exceder el tamaño original +1. Tu elemento `img` debe estar centrado con respecto al elemento que lo contiene + +Completa las historias de usuario y pasa todas las pruebas a continuación para completar este proyecto. Dale tu propio estilo. ¡Feliz día programando! + +**Nota:** Asegúrate de agregar `` en tu HTML para enlazar tu hoja de estilos y aplicar tu CSS + +# --hints-- + +Debes tener un elemento `main` con un `id` de `main`. + +```js +const el = document.getElementById('main') +assert(!!el && el.tagName === 'MAIN') +``` + +Tu `#img-div`, `#image`, `#img-caption`, `#tribute-info`, y `#tribute-link` deben ser descendientes de `#main`. + +```js +const el1 = document.querySelector('#main #img-div') +const el2 = document.querySelector('#main #image') +const el3 = document.querySelector('#main #img-caption') +const el4 = document.querySelector('#main #tribute-info') +const el5 = document.querySelector('#main #tribute-link') +assert(!!el1 & !!el2 && !!el3 && !!el4 && !!el5) +``` + +Debes tener un elemento con un `id` de `title`. + +```js +const el = document.getElementById('title') +assert(!!el) +``` + +Tu `#title` no debe estar vacío. + +```js +const el = document.getElementById('title') +assert(!!el && el.innerText.length > 0) + +``` + +Debes tener un elemento `figure` o `div` con un `id` de `img-div`. + +```js +const el = document.getElementById('img-div') +assert(!!el && (el.tagName === 'DIV' || el.tagName === 'FIGURE')) +``` + +Debes tener un elemento `img` con un `id` de `image`. + +```js +const el = document.getElementById('image') +assert(!!el && el.tagName === 'IMG') +``` + +Tu `#image` debe ser descendiente de `#img-div`. + +```js +const el = document.querySelector('#img-div #image') +assert(!!el) +``` + +Deberías tener un elemento `figcaption` o `div` con un `id` de `img-caption`. + +```js +const el = document.getElementById('img-caption') +assert(!!el && (el.tagName === 'DIV' || el.tagName === 'FIGCAPTION')) +``` + +Tu `#img-caption` debe ser descendiente de `#img-div`. + +```js +const el = document.querySelector('#img-div #img-caption') +assert(!!el) +``` + +Tu `#img-caption` no debe estar vacío. + +```js +const el = document.getElementById('img-caption') +assert(!!el && el.innerText.length > 0) +``` + +Debes tener un elemento con un `id` de `tribute-info`. + +```js +const el = document.getElementById('tribute-info') +assert(!!el) +``` + +Tu `#tribute-info` no debe estar vacío. + +```js +const el = document.getElementById('tribute-info') +assert(!!el && el.innerText.length > 0) +``` + +Debes tener un elemento `a` con un `id` de `tribute-link`. + +```js +const el = document.getElementById('tribute-link') +assert(!!el && el.tagName === 'A') +``` + +Tu `#tribute-link` debe tener un atributo `href` con un enlace. + +```js +const el = document.getElementById('tribute-link') +assert(!!el && !!el.href && el.href.length > 0) +``` + +Tu `#tribute-link` debe tener un atributo `target` establecido en `_blank`. + +```js +const el = document.getElementById('tribute-link') +assert(!!el && el.target === '_blank') +``` + +Tu elemento `img` debe tener un `display` de `block`. + +```js +const img = document.getElementById('image'); +const imgStyle = window.getComputedStyle(img); +const style = imgStyle?.getPropertyValue('display') +assert(style === 'block') +``` + +Tu `#image` debe tener un `max-width` de `100%`. + +```js +const img = document.getElementById('image'); +const imgStyle = window.getComputedStyle(img); +const style = imgStyle?.getPropertyValue('max-width') +assert(style === '100%') +``` + +Tu `#image` debe tener un `height` de `auto`. + +```js +// taken from the testable-projects repo +const img = document.getElementById('image'); +const imgStyle = window.getComputedStyle(img); +const oldDisplayValue = imgStyle.getPropertyValue('display'); +const oldDisplayPriority = imgStyle.getPropertyPriority('display'); +img?.style.setProperty('display', 'none', 'important'); +const heightValue = imgStyle?.getPropertyValue('height') +img?.style.setProperty('display', oldDisplayValue, oldDisplayPriority); +assert(heightValue === 'auto') +``` + +Tu `#image` debe estar centrado con respecto al elemento que lo contiene. + +```js +// taken from the testable-projects repo +const img = document.getElementById('image'), + imgParent = img?.parentElement, + imgLeft = img?.getBoundingClientRect().left, + imgRight = img?.getBoundingClientRect().right, + parentLeft = imgParent?.getBoundingClientRect().left, + parentRight = imgParent?.getBoundingClientRect().right, + leftMargin = imgLeft - parentLeft, + rightMargin = parentRight - imgRight; +assert(leftMargin - rightMargin < 6 && rightMargin - leftMargin < 6) +``` + +# --seed-- + +## --seed-contents-- + +```html + +``` + +```css + +``` + +## --solutions-- + +```html + + + + + + + + Tribute Page + + +

Tribute Page

+

The below card was designed as a tribute page for freeCodeCamp.

+
+
+ An image of Togepi +
Togepi, happy as always.
+
+

Togepi

+
+
+

+ Togepi was first discovered in the Johto region, when Ash Ketchum + discovered a mysterious egg. However, when the egg hatched, Togepi saw + Ash's friend Misty first and imprinted on her. Like many other + creatures, this imprinting process created a bond and Togepi views + Misty as his mother. +

+

+ Togepi is a very childlike Pokemon, and is very emotionally + expressive. He demonstrates extreme levels of joy and sadness. +

+
+

Battle Information

+
    +
  • Type: Fairy
  • +
  • Evolutions: Togepi -> Togetic -> Togekiss
  • +
  • Moves: Growl, Pound, Sweet Kiss, Charm
  • +
  • Weaknesses: Poison, Steel
  • +
  • Resistances: Dragon
  • +
+

+ Check out this + Bulbapedia article on Togepi + for more information on this great Pokemon. +

+
+
+ + + +``` + +```css +body { + background-color: #3a3240; + color: white; +} +main { + background-color: #92869c; + font-family: Lobster; + max-width: 500px; + margin: 20px auto; + color: black; + border-radius: 50px; + box-shadow: 10px 10px rgba(0, 0, 0, 0.5); +} +h2 { + text-align: center; + font-size: 20pt; + font-family: Pacifico; +} +body { + text-align: center; + font-size: 12pt; +} +footer { + text-align: center; + font-size: 10pt; +} +.border { + border-color: black; + border-width: 5px; + border-style: solid; +} +#image { + height: auto; + display: block; + margin: auto; + max-width: 100%; + border-radius: 50%; +} +#img-caption { + font-size: 10pt; +} +a:not(#tribute-link) { + color: white; +} +hr { + border-color: black; +} +``` diff --git a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6140827cff96e906bd38fc2b.md b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6140827cff96e906bd38fc2b.md index 33f159859b6..b7253e97caf 100644 --- a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6140827cff96e906bd38fc2b.md +++ b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6140827cff96e906bd38fc2b.md @@ -7,7 +7,7 @@ dashedName: step-9 # --description-- -Como se describe en la [Guia de Estilo de freeCodeCamp](https://design-style-guide.freecodecamp.org/), el logo debe mantener una relación de aspecto de `35 / 4`, y tener un relleno alrededor del texto. +Como se describe en la Guia de Estilo de freeCodeCamp, el logo debe mantener una relación de aspecto de `35 / 4` y tener un relleno alrededor del texto. En primer lugar, cambia el `background-color` a `#0a0a23` para que pueda ver el logo. Luego, usa la propiedad `aspect-ratio` para establecer la relación de aspecto a `35 / 4`. Finalmente, agrega alrededor un `padding` de `0.4rem`. diff --git a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6145f8f8bcd4370f6509078e.md b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6145f8f8bcd4370f6509078e.md index d8ceac35177..f3318b766b0 100644 --- a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6145f8f8bcd4370f6509078e.md +++ b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6145f8f8bcd4370f6509078e.md @@ -16,8 +16,6 @@ California
USA ``` -Puedes visitarlo, pero puede que no encuentres nada... - # --hints-- Debes agregar el texto de arriba incluyendo las etiquetas `
` en el elemento `address`. diff --git a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6148e41c728f65138addf9cc.md b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6148e41c728f65138addf9cc.md new file mode 100644 index 00000000000..bbaf79b5b22 --- /dev/null +++ b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/6148e41c728f65138addf9cc.md @@ -0,0 +1,360 @@ +--- +id: 6148e41c728f65138addf9cc +title: Paso 66 +challengeType: 0 +dashedName: step-66 +--- + +# --description-- + +Ciertos tipos de animaciones basadas en el movimiento pueden causar molestias a algunos usuarios. En particular, personas con trastornos vestibulares tienen sensibilidad a ciertos desencadenantes del movimiento. + +La regla-at `@media` tiene una característica de medios llamada `prefers-reduced-motion` para establecer CSS basado en las preferencias del usuario. Puede tomar uno de los siguientes valores: + +- `reduce` +- `no-preference` + +```CSS +@media (feature: value) { + selector { + styles + } +} +``` + +--- + +Envuelve la regla de estilo que establece `scroll-behavior: smooth` dentro de una regla-at `@media` con la característica de medios `prefers-reduced-motion` que tiene `no-preference` establecido como valor. + +# --hints-- + +Debes tener una regla `@media (prefers-reduced-motion: no-preference)`. + +```js +assert.equal(new __helpers.CSSHelp(document).getRuleListsWithinMedia('(prefers-reduced-motion: no-preference)').length, 1); +``` + +Debes envolver la regla `*` existente dentro de la regla `@media`. + +```js +assert.equal(new __helpers.CSSHelp(document).getRuleListsWithinMedia('(prefers-reduced-motion: no-preference)')?.find(x => x.selectorText === '*')?.style?.scrollBehavior, 'smooth'); +assert.notExists(new __helpers.CSSHelp(document).getStyle('*')); +``` + +# --seed-- + +## --seed-contents-- + +```html + + + + + + + Accessibility Quiz + + + +
+ +

HTML/CSS Quiz

+ +
+
+
+
+

Student Info

+
+ + +
+
+ + +
+
+ + +
+
+
+

HTML

+
+

1

+
+ + The legend element represents a caption for the content of its + parent fieldset element + +
    +
  • + +
  • +
  • + +
  • +
+
+
+
+

2

+
+ + A label element nesting an input element is required to have a + for attribute with the same value as the input's id + +
    +
  • + +
  • +
  • + +
  • +
+
+
+
+
+

CSS

+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ + + + +``` + +```css +--fcc-editable-region-- +* { + scroll-behavior: smooth; +} +--fcc-editable-region-- + +body { + background: #f5f6f7; + color: #1b1b32; + font-family: Helvetica; + margin: 0; +} + +header { + width: 100%; + height: 50px; + background-color: #1b1b32; + display: flex; + justify-content: space-between; + align-items: center; + position: fixed; + top: 0; +} + +#logo { + width: max(100px, 18vw); + background-color: #0a0a23; + aspect-ratio: 35 / 4; + padding: 0.4rem; +} + +h1 { + color: #f1be32; + font-size: min(5vw, 1.2em); + text-align: center; +} + +nav { + width: 50%; + max-width: 300px; + height: 50px; +} + +nav > ul { + display: flex; + justify-content: space-evenly; + flex-wrap: wrap; + align-items: center; + padding-inline-start: 0; + margin-block: 0; + height: 100%; +} + +nav > ul > li { + color: #dfdfe2; + margin: 0 0.2rem; + padding: 0.2rem; + display: block; +} + +nav > ul > li:hover { + background-color: #dfdfe2; + color: #1b1b32; + cursor: pointer; +} + +li > a { + color: inherit; + text-decoration: none; +} + +main { + padding-top: 50px; +} + +section { + width: 80%; + margin: 0 auto 10px auto; + max-width: 600px; +} + +h1, +h2 { + font-family: Verdana, Tahoma; +} + +h2 { + border-bottom: 4px solid #dfdfe2; + margin-top: 0px; + padding-top: 60px; +} + +.info { + padding: 10px 0 0 5px; +} + +.formrow { + margin-top: 30px; + padding: 0px 15px; +} + +input { + font-size: 16px; +} + +.info label, .info input { + display: inline-block; + text-align: right; +} + +.info input { + width: 50%; + text-align: left; +} + +.info label { + width: 10%; + min-width: 55px; +} + +.question-block { + text-align: left; + display: block; + width: 100%; + margin-top: 20px; + padding-top: 5px; +} + +p { + margin-top: 5px; + padding-left: 15px; + font-size: 20px; +} + +p::before { + content: "Question #"; +} + +.question { + border: none; + padding-bottom: 0; +} + +.answers-list { + list-style: none; + padding: 0; +} + +button { + display: block; + margin: 40px auto; + width: 40%; + padding: 15px; + font-size: 23px; + background: #d0d0d5; + border: 3px solid #3b3b4f; +} + +footer { + background-color: #2a2a40; + display: flex; + justify-content: center; +} + +footer, +footer a { + color: #dfdfe2; +} + +address { + text-align: center; + padding: 0.3em; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +``` diff --git a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f33071498eb2472b87ddee4.md b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f33071498eb2472b87ddee4.md index 6de9cb5881d..62f245a88a3 100644 --- a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f33071498eb2472b87ddee4.md +++ b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f33071498eb2472b87ddee4.md @@ -9,7 +9,7 @@ dashedName: step-1 Como has aprendido en los pasos anteriores del proyecto Cat Photo App, hay una estructura básica necesaria para comenzar a construir tu página web. -Añade la etiqueta `` y un elemento `html`. +Añade la etiqueta `` y un elemento `html` con un atributo `lang` con el valor `en`. # --hints-- @@ -19,10 +19,10 @@ Debes tener la declaración `DOCTYPE`. assert(code.match(//i)); ``` -Debes tener una etiqueta `` de apertura. +Debes tener una etiqueta `` de apertura con un atributo `lang` con el valor `en`. ```js -assert(code.match(//i)); +assert(code.match(//gi)); ``` Debes tener una etiqueta `` de cierre. Recuerda que las etiquetas de cierre tienen una `/` después del corchete `<` de apertura. diff --git a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae34c1239cafe128be.md b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae34c1239cafe128be.md index 32dd008fd2f..35cb66951c3 100644 --- a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae34c1239cafe128be.md +++ b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae34c1239cafe128be.md @@ -15,7 +15,7 @@ selector1, selector2 { } ``` -Usa una lista de selectores para centrar los elementos `h1`, `h2` y `p` al mismo tiempo. +Elimina los tres selectores de tipo existentes y reemplázalos con una sola lista de selectores, que centre el texto de los elementos `h1`, `h2` y `p`. # --hints-- diff --git a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477aefa51bfc29327200b.md b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477aefa51bfc29327200b.md index e339bd686a7..d8ae8b51bd0 100644 --- a/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477aefa51bfc29327200b.md +++ b/curriculum/challenges/espanol/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477aefa51bfc29327200b.md @@ -31,12 +31,10 @@ Tu selector debe establecer la propiedad `text-align` al valor `center`. } ``` -Debes tener un solo selector. +Tu código no debe contener las etiquetas `