Skip to content

Commit e3200b7

Browse files
authored
Merge pull request tomalaforge#278 from nelsongutidev/feat/add-internationalization-docs
feat(docs): add internationalization and add spanish lang
2 parents 3a159eb + 79450aa commit e3200b7

File tree

11 files changed

+496
-0
lines changed

11 files changed

+496
-0
lines changed

docs/astro.config.mjs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import starlight from '@astrojs/starlight';
22
import { defineConfig } from 'astro/config';
33

4+
export const locales = {
5+
root: { label: 'English', lang: 'en' },
6+
es: { label: 'Español', lang: 'es' },
7+
};
8+
49
// https://astro.build/config
510
export default defineConfig({
611
integrations: [
@@ -21,10 +26,16 @@ export default defineConfig({
2126
{
2227
label: 'Guides',
2328
autogenerate: { directory: 'guides' },
29+
translations: {
30+
es: 'Guías',
31+
},
2432
},
2533
{
2634
label: 'Challenges',
2735
autogenerate: { directory: 'challenges' },
36+
translations: {
37+
es: 'Desafíos',
38+
},
2839
},
2940
],
3041
head: [
@@ -52,6 +63,17 @@ export default defineConfig({
5263
PageTitle: './src/components/PageTitle.astro',
5364
MobileMenuFooter: './src/components/MobileMenuFooter.astro',
5465
},
66+
defaultLocale: 'root',
67+
locales: {
68+
root: {
69+
label: 'English',
70+
lang: 'en',
71+
},
72+
es: {
73+
label: 'Español',
74+
lang: 'es',
75+
},
76+
},
5577
}),
5678
],
5779
});
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
title: 🟢 Proyección
3+
description: Desafio 1 trata sobre aprender a proyectar elementos del DOM a través de componentes,
4+
author: Thomas Laforge
5+
challengeNumber: 1
6+
command: angular-projection
7+
blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5
8+
videoLink:
9+
link: https://www.youtube.com/watch?v=npyEyUZxoIw&ab_channel=ArthurLannelucq
10+
alt: Projection video by Arthur Lannelucq
11+
flag: FR
12+
sidebar:
13+
order: 1
14+
---
15+
16+
## Información
17+
18+
En Angular, la proyección de contenido es una técnica poderosa para crear componentes altamente personalizables. Utilizar y comprender los conceptos de <b>ng-content</b> y <b>ngTemplateOutlet</b> puede mejorar significativamente su capacidad para crear componentes reutilizables.
19+
20+
Puedes aprender todo sobre <b>ng-content</b> [aquí](https://angular.io/guide/content-projection#projecting-content-in-more-complex-environments) desde la proyección simple hasta las más complejas.
21+
22+
Para aprender sobre <b>ngTemplateOutlet</b>, puedes encontrar la documentación de la API [aquí](https://angular.io/api/common/NgTemplateOutlet) junto con algunos ejemplos básicos.
23+
24+
Con estas dos herramientas en la mano, ahora estás listo para asumir el desafío.
25+
26+
## Declaración
27+
28+
Comenzarás con una aplicación completamente funcional que incluye un tablero con una tarjeta de profesor y una tarjeta de estudiante. El objetivo es implementar la tarjeta de la ciudad.
29+
30+
Aunque la aplicación funciona, la experiencia del desarrollador está lejos de ser óptima. Cada vez que necesitas implementar una nueva tarjeta, tienes que modificar el `card.component.ts`. En proyectos reales, este componente puede ser compartido entre muchas aplicaciones. El objetivo del desafío es crear un `CardComponent` que se pueda personalizar sin ninguna modificación. Una vez que hayas creado este componente, puedes comenzar a implementar el `CityCardComponent` y asegurarte de que no estás tocando el `CardComponent`.
31+
32+
## Restricciones
33+
34+
- <b>Debes</b> refactorizar el `CardComponent` and `ListItemComponent`.
35+
- La directiva NgFor debe ser declarada y permanecer dentro del `CardComponent`. Puedes sentirte tentado a moverla al `ParentCardComponent` como `TeacherCardComponent`.
36+
- CardComponent no debe contener ningún `NgIf` o `NgSwitch`.
37+
- CSS: intenta evitar usar `::ng-deep`. Encuentra una mejor manera de manejar los estilos de CSS.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
title: 🟠 InjectionToken
3+
description: Desafio de Angular 39 para aprender sobre el poder del InjectionToken
4+
author: Thomas Laforge
5+
challengeNumber: 39
6+
command: angular-injection-token
7+
sidebar:
8+
order: 118
9+
badge: New
10+
---
11+
12+
## Información
13+
14+
En esta pequeña aplicación, comenzamos con un `VideoComponent` que contiene un timer de **1 segundo**. El equipo de desarrollo decidió usar una constante global para almacenar el valor del temporizador: `DEFAULT_TIMER`. Sin embargo, unas semanas más tarde, el equipo de producto quiere agregar una nueva pantalla para llamadas telefónicas llamada `PhoneComponent`, y queremos reutilizar el `TimerComponent`. Sin embargo, el equipo de producto quiere un temporizador de **2 segundos**. ¿Cómo podemos lograr esto?
15+
16+
## Enunciado
17+
18+
Actualmente, el temporizador sigue siendo de 1 segundo para el `PhoneComponent`. El objetivo de este desafío es cambiar el valor del temporizador a 2 segundos para el `PhoneComponent`.
19+
20+
## Restricciones
21+
22+
Se prohíbe el uso de `@Input`. Este ejemplo es básico, y el uso de `@Input` podría ser una buena opción, pero en aplicaciones más complejas, el componente que necesitamos actualizar puede estar profundamente anidado, lo que hace que el uso de `@Input` sea un diseño realmente malo.
23+
24+
## Pista
25+
26+
<details>
27+
<summary>Pista 1</summary>
28+
29+
Mirar este [blog post](https://itnext.io/stop-being-scared-of-injectiontokens-ab22f72f0fe9) puede ser de gran ayuda.
30+
31+
</details>
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
title: Revisar la Respuesta de Alguien
3+
description: Guía para revisar la respuesta de otra persona.
4+
sidebar:
5+
order: 3
6+
---
7+
8+
Todas las respuestas a los Desafíos de Angular se presentarán en forma de Pull Request (PR). Para verlas y seguirlas, navega a través de la página **Files Changes** en GitHub. Sin embargo, entender y seguir este proceso puede no ser sencillo si no estás familiarizado con la interfaz. En muchos casos, puedes preferir revisar la rama y revisar la solución en tu IDE preferido.
9+
10+
Esta guía ha sido creada para ayudarte a lograr esto.
11+
12+
## Revisar localmente una PR de otra persona
13+
14+
### Sincroniza tu repositorio
15+
16+
Primero necesitas sincronizar tu fork para asegurarte de que está al día con el repositorio del que hiciste fork.
17+
18+
Esto se puede lograr haciendo clic en el botón **Sync fork** en la página principal de tu fork.
19+
20+
![Sync project header](../../../../assets/fork-sync.png)
21+
22+
La imagen de arriba muestra que mi rama está atrasada respecto a la rama principal por 8 commits, y necesito sincronizarla para estar al día.
23+
24+
![Sync project update modal](../../../../assets/sync-fork-update.png)
25+
26+
### Revisar localmente
27+
28+
Navega a la PR que deseas revisar localmente y obtén su ID. La encontrarás en el título de la PR (como se muestra a continuación).
29+
30+
![PR header](../../../../assets/PR-header.png)
31+
32+
A continuación, ve a cualquier terminal dentro de tu directorio de proyecto y ejecuta el siguiente comando:
33+
34+
```bash
35+
gh pr checkout <ID>
36+
```
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
title: Contribuye
3+
description: Guía para contribuir al proyecto
4+
sidebar:
5+
order: 4
6+
---
7+
8+
Puedes contribuir a este repositorio de muchas maneras:
9+
10+
🔥 Crea un nuevo desafío siguiendo las instrucciones [aquí](/guides/create-challenge).
11+
12+
🔥 Resuelve desafíos y envía los resultados. (guía [aquí](/guides/resolve-challenge)).
13+
14+
🔥 Comenta las soluciones de otros proporcionando retroalimentación constructiva y afectuosa.
15+
16+
🔥 Corrige errores tipográficos o de inglés dentro de la documentación.
17+
18+
🔥 Envía un issue para sugerir nuevas ideas de desafíos o reportar un error.
19+
20+
🔥 Patrocina el proyecto [aquí](https://github.com/sponsors/tomalaforge)
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
title: Crea tu propio desafío
3+
description: Guía para crear un desafío
4+
sidebar:
5+
order: 5
6+
---
7+
8+
Tienes una idea que quieres compartir, un error interesante con el que estás luchando en uno de tus proyectos privados o secundarios, o un tip de Angular que descubriste. Todas estas posibilidades son un buen punto de partida para crear un desafío y compartir la solución con los demás.
9+
10+
Pero, ¿cómo empiezas a crear estos desafíos?
11+
12+
## Configuración de Plantillas (Boilerplate)
13+
14+
Para agilizar el proceso, he creado un generador Nx que configurará todo el boilerplate por ti y te preparará más rápido. La forma más sencilla de ejecutarlo es utilizando la consola Nx: ve a <b>Nx Console > generate > @angular-challenges/cli - challenge</b>
15+
16+
### Parámetros
17+
18+
#### parámetros obligatorios
19+
20+
- <b>title</b>: El título que quieres darle a tu desafío.
21+
:::note[Nota]
22+
El título debe tener un máximo de 25 caracteres.
23+
:::
24+
25+
- <b>challengeDifficulty</b>: La dificultad que crees que tiene tu desafío. Hay tres niveles de dificultad: 🟢 fácil / 🟠 medio / 🔴 difícil
26+
27+
- <b>name</b>: nombre de la aplicación Nx.
28+
:::note[Nota]
29+
Debe escribirse en **kebab-case**
30+
:::
31+
32+
- <b>docRepository</b>: La categoría de tu Desafío: Nx, Angular, Angular Performance, Rxjs, NgRx, Typescript.
33+
34+
#### parámetros opcionales
35+
36+
- <b>directory</b>: Si quieres que tu aplicación se encuentre en una carpeta específica dentro de `apps`.
37+
38+
- <b>addTest</b>: Si quieres agregar configuración de pruebas.
39+
40+
### Qué se crea
41+
42+
- El generador creará todos los archivos necesarios para tener una nueva aplicación de trabajo. Todos estos archivos se crearán dentro de `apps/${directory}/${name}`
43+
44+
- Se creará un archivo Markdown con la configuración mínima dentro de `docs/src/content/docs/challenges/${docRepository}`
45+
46+
## Creación del Desafío
47+
48+
Lo único que queda por hacer es crear tu desafío. 🚀
49+
50+
:::danger[Importante]
51+
52+
No olvides actualizar la documentación para presentar tu desafío y proporcionar tus instrucciones.
53+
54+
:::
55+
56+
¡Es tu turno de actuar! 💪
57+
58+
## Envío de la Solución
59+
60+
Después de una semana más o menos, no olvides proporcionar tu solución a tu desafío.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
title: Preguntas Frecuentes
3+
description: Preguntas frecuentes sobre el proyecto
4+
sidebar:
5+
order: 7
6+
---
7+
8+
<details>
9+
<summary>¿Por qué mi aplicación no se está iniciando o por qué encuentro errores en mi terminal cuando ejecuto `nx serve`?</summary>
10+
11+
La mayoría de las veces, este problema surge porque sus node_modules están desactualizados y necesita actualizarlos ejecutando `npm ci`.
12+
13+
Si el proceso de instalación falla, puede resolverlo eliminando su carpeta node_modules usando el comando `rm -rf node_modules` o `npx npkill` y luego volviendo a ejecutar `npm ci`.
14+
15+
Si el problema persiste, informe el problema [aquí](https://github.com/tomalaforge/angular-challenges/issues/new).
16+
17+
</details>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
title: Inicio
3+
description: Una guía para comenzar con los Desafíos de Angular
4+
sidebar:
5+
order: 1
6+
---
7+
8+
Para comenzar con <b>Desafió de Angular</b>, siga estos pasos:
9+
10+
## Crea una cuenta de Github
11+
12+
Si desea enviar una solución, deberá tener su propia cuenta de GitHub. Además, tener una cuenta de GitHub siempre es beneficioso y es gratis.
13+
14+
## Crea un fork del proyecto de github
15+
16+
Navegue al [Repositorio de Desafíos de Angular](https://github.com/tomalaforge/angular-challenges) y haga clic en el <span class="github-neutral-btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2">
17+
<path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path></svg>Fork</span> button in the header. This will create a copy of this repository on your own GitHub page.
18+
19+
## Clone el repositorio en su máquina local
20+
21+
Seleccione un directorio en su computadora local y clone este repositorio.
22+
23+
Abra una terminal, navegue hasta el directorio elegido y escriba el siguiente comando:
24+
25+
```bash
26+
git clone https://github.com/[YOUR_GITHUB_NAME]/angular-challenges.git
27+
```
28+
29+
:::note
30+
Puede encontrar la URL de clonación haciendo clic en el botón <span class="github-success-btn"><> Code</span> en su <b>propia instancia</b> del repositorio de Desafíos de Angular.
31+
32+
![Header of github workpspace](../../../../assets/header-github.png)
33+
34+
:::
35+
36+
## Abra el proyecto en su IDE favorito
37+
38+
Abra el proyecto en cualquier IDE de su elección.
39+
40+
## Instale todas las dependencias
41+
42+
```bash
43+
npm ci
44+
```
45+
46+
## Escoja un desafío
47+
48+
Su proyecto ahora está corriendo. El único paso restante es elegir un desafío 🚀
49+
50+
Cada desafío consta de:
51+
52+
- <b>Nombre</b>: indicando de qué se trata el desafío.
53+
- <b>Número</b>: orden de creación. El número no tiene ningún significado en particular, pero ayuda para hacer referencia en la sección de Pull Request de Github.
54+
- <b>Badge</b>: ayuda a visualizar el grado de dificultad. Es totalmente subjetivo 😅
55+
- 🟢 fácil
56+
- 🟠 medio
57+
- 🔴 difícil
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
---
2+
title: Hacer rebase a tu rama
3+
description: Guía para hacer rebase a tu rama
4+
sidebar:
5+
order: 6
6+
---
7+
8+
En ocasiones, pueden agregarse cambios al proyecto. Intentaré hacer cambios que no rompan nada, pero a veces es inevitable.
9+
10+
La mayoría de las veces, no necesitarás hacer rebase a tu solución, pero aquí hay una guía para ayudarte a saber cómo hacerlo en caso de ser necesario.
11+
12+
:::note[Nota]
13+
Esta guía es aplicable a cualquier Proyecto de Código Abierto.
14+
:::
15+
16+
## Pasos para hacer rebase a tu rama
17+
18+
### Sincroniza tu repositorio
19+
20+
Primero, necesitas sincronizar tu fork para asegurarte de que esté actualizado con el repositorio bifurcado.
21+
22+
Puedes lograr esto haciendo clic en el botón Sync fork en la página principal de tu fork.
23+
24+
![Sync project header](../../../../assets/fork-sync.png)
25+
26+
La imagen de arriba muestra que mi rama está detrás de la rama principal por 8 commits, y necesito sincronizarla para estar actualizada.
27+
28+
![Sync project update modal](../../../../assets/sync-fork-update.png)
29+
30+
### Abre una terminal
31+
32+
Abre cualquier terminal de tu elección, ya sea la de tu IDE favorito o una instancia independiente.
33+
34+
### Git
35+
36+
Sigue los siguientes comandos para hacer rebase a tu rama local:
37+
38+
- git checkout main
39+
- git pull
40+
- git checkout [tu rama]
41+
- git rebase main
42+
- Resuelve los conflictos
43+
44+
En este paso, el rebase puede detenerse porque tu rama local tiene archivos conflictivos con la rama principal. Corrígelos. Después de esto:
45+
46+
- git add .
47+
- git rebase --continue
48+
49+
Si tu rama no tiene conflictos, se mostrará un mensaje de éxito.
50+
51+
### Envía tu trabajo de vuelta a la rama remota
52+
53+
Finalmente, envía tu trabajo de vuelta a GitHub:
54+
55+
- git push -f

0 commit comments

Comments
 (0)