diff --git a/.autocorrectignore b/.autocorrectignore
new file mode 100644
index 00000000000000..cabe9364ee1033
--- /dev/null
+++ b/.autocorrectignore
@@ -0,0 +1,7 @@
+# AutoCorrect Link ignore rules.
+# https://github.com/huacnlee/autocorrect
+#
+# Like `.gitignore`, this file to tell AutoCorrect which files need to check, some need to ignore.
+files/
+docs/
+!files/zh-cn/
diff --git a/.autocorrectrc b/.autocorrectrc
new file mode 100644
index 00000000000000..8b8f715da76117
--- /dev/null
+++ b/.autocorrectrc
@@ -0,0 +1,4 @@
+textRules:
+ 一二三,四五六.七八九: 0
+ 一二三,四五六,七八九,一二三,四五六,七八九: 0
+ 9.9亿: 0
diff --git a/.github/workflows/autocorrect-lint.yml b/.github/workflows/autocorrect-lint.yml
new file mode 100644
index 00000000000000..5c28e32aaf0d37
--- /dev/null
+++ b/.github/workflows/autocorrect-lint.yml
@@ -0,0 +1,44 @@
+# This workflow to use AutoCorrect tool for checking the copywriting, correct spaces and punctuations for CJK contents.
+#
+# For example:
+#
+# - incorrect: "欢迎阅读MDN文档."
+# - correct: "欢迎阅读 MDN 文档。"
+#
+# - incorrect: "Welcome,this is MDN Web Docs。"
+# - correct: "Welcome, to read MDN Web Docs."
+#
+# More details:
+# https://github.com/huacnlee/autocorrect
+name: AutoCorrect Lint
+on:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Get changed files
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
+ HEAD_SHA: ${{ github.event.pull_request.head.sha }}
+ run: |
+ # Use the GitHub API to get the list of changed files
+ # documenation: https://docs.github.com/rest/commits/commits#compare-two-commits
+ DIFF_DOCUMENTS=$(gh api repos/{owner}/{repo}/compare/${{ env.BASE_SHA }}...${{ env.HEAD_SHA }} \
+ --jq '.files | .[] | select(.status|IN("added", "modified", "renamed", "copied", "changed")) | .filename')
+ # filter out files that are not markdown
+ DIFF_DOCUMENTS=$(echo "${DIFF_DOCUMENTS}" | egrep -i "^files/zh-cn/" | xargs)
+ echo "DIFF_DOCUMENTS=${DIFF_DOCUMENTS}" >> $GITHUB_ENV
+
+ - name: AutoCorrect changed content
+ if: ${{ env.DIFF_DOCUMENTS }}
+ uses: huacnlee/autocorrect-action@v2.6.2
+ with:
+ args: ${{ env.DIFF_DOCUMENTS }} --lint --no-diff-bg-color
diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc
index 97c9dbd1c8aa8e..82fefeca20a770 100644
--- a/.markdownlint-cli2.jsonc
+++ b/.markdownlint-cli2.jsonc
@@ -167,15 +167,14 @@
"replace": " ",
"searchScope": "all"
},
- // XXX Many instances still found in translated content
// XXX zh-cn/zh-tw prefers em-dash instead
- // {
- // "name": "m-dash",
- // "message": "Don't use '--'. Use m-dash — instead",
- // "search": " -- ",
- // "replace": " — ",
- // "searchScope": "text"
- // },
+ {
+ "name": "m-dash",
+ "message": "Don't use '--'. Use m-dash — instead",
+ "search": " -- ",
+ "replace": " — ",
+ "searchScope": "text"
+ },
{
"name": "relative-link",
"message": "Internal links should start with '/'",
@@ -229,5 +228,11 @@
}
},
"customRules": ["markdownlint-rule-search-replace"],
- "ignores": ["node_modules", "**/conflicting/**", "**/orphaned/**", ".github/"]
+ "ignores": [
+ "node_modules",
+ ".git",
+ ".github",
+ "**/conflicting/**",
+ "**/orphaned/**"
+ ]
}
diff --git a/.prettierignore b/.prettierignore
index 5e5e7000c9156b..fc7e94e53d6cca 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -19,29 +19,29 @@ build/
/files/fr/glossary/grid_axis/index.md
/files/fr/glossary/grid_lines/index.md
/files/fr/glossary/main_axis/index.md
+/files/fr/learn/server-side/django/forms/index.md
+/files/pt-br/learn/server-side/django/forms/index.md
+/files/ru/learn/server-side/django/forms/index.md
+/files/ru/learn/server-side/django/introduction/index.md
+/files/ru/learn/html/introduction_to_html/the_head_metadata_in_html/index.md
/files/zh-cn/learn/css/howto/css_faq/index.md
+/files/zh-cn/learn/server-side/django/forms/index.md
# A full pass on all Markdown files is being performed.
# The following folders still need a full pass:
# es
-/files/es/web/api/**/*.md
/files/es/web/css/**/*.md
-/files/es/web/html/**/*.md
-/files/es/web/http/**/*.md
-/files/es/web/javascript/**/*.md
+/files/es/web/javascript/reference/**/*.md
# fr
-/files/fr/learn/server-side/**/*.md
/files/fr/mozilla/add-ons/webextensions/api/**/*.md
-/files/fr/web/api/**/*.md
/files/fr/web/css/**/*.md
/files/fr/web/html/**/*.md
/files/fr/web/javascript/**/*.md
# ja
/files/ja/learn/css/**/*.md
-/files/ja/learn/html/**/*.md
/files/ja/learn/javascript/**/*.md
/files/ja/learn/server-side/**/*.md
/files/ja/mozilla/**/*.md
@@ -56,7 +56,6 @@ build/
/files/ja/web/svg/**/*.md
# ko
-/files/ko/games/**/*.md
/files/ko/glossary/**/*.md
/files/ko/learn/**/*.md
/files/ko/learn/css/**/*.md
@@ -77,9 +76,6 @@ build/
/files/ko/web/svg/**/*.md
# pt-br
-/files/pt-br/learn/html/**/*.md
-/files/pt-br/learn/javascript/**/*.md
-/files/pt-br/learn/server-side/**/*.md
/files/pt-br/web/api/**/*.md
/files/pt-br/web/css/**/*.md
/files/pt-br/web/html/**/*.md
@@ -88,10 +84,6 @@ build/
/files/pt-br/web/svg/**/*.md
# ru
-/files/ru/learn/css/**/*.md
-/files/ru/learn/html/**/*.md
-/files/ru/learn/javascript/**/*.md
-/files/ru/learn/server-side/**/*.md
/files/ru/web/api/**/*.md
/files/ru/web/css/**/*.md
/files/ru/web/html/**/*.md
@@ -100,8 +92,6 @@ build/
/files/ru/web/svg/**/*.md
# zh-cn
-/files/zh-cn/learn/javascript/**/*.md
-/files/zh-cn/learn/server-side/**/*.md
/files/zh-cn/web/api/**/*.md
/files/zh-cn/web/css/**/*.md
/files/zh-cn/web/html/**/*.md
diff --git a/files/es/_redirects.txt b/files/es/_redirects.txt
index 0f47fcdad8af3b..0b332e22976662 100644
--- a/files/es/_redirects.txt
+++ b/files/es/_redirects.txt
@@ -1873,8 +1873,8 @@
/es/docs/Web/CSS/Referencia_CSS/Extensiones_Mozilla /es/docs/Web/CSS/Mozilla_Extensions
/es/docs/Web/CSS/Referencia_CSS/background-blend-mode /es/docs/Web/CSS/background-blend-mode
/es/docs/Web/CSS/Referencia_CSS/mix-blend-mode /es/docs/Web/CSS/mix-blend-mode
-/es/docs/Web/CSS/Selectores_CSS /es/docs/Web/CSS/CSS_Selectors
-/es/docs/Web/CSS/Selectores_CSS/Usando_la_pseudo-clase_:target_en_selectores /es/docs/Web/CSS/CSS_Selectors/Using_the_:target_pseudo-class_in_selectors
+/es/docs/Web/CSS/Selectores_CSS /es/docs/Web/CSS/CSS_selectors
+/es/docs/Web/CSS/Selectores_CSS/Usando_la_pseudo-clase_:target_en_selectores /es/docs/Web/CSS/CSS_selectors/Using_the_:target_pseudo-class_in_selectors
/es/docs/Web/CSS/Selectores_atributo /es/docs/Web/CSS/Attribute_selectors
/es/docs/Web/CSS/Selectores_hermanos_adyacentes /es/docs/Web/CSS/Adjacent_sibling_combinator
/es/docs/Web/CSS/Selectores_hermanos_generales /es/docs/Web/CSS/General_sibling_combinator
diff --git a/files/es/_wikihistory.json b/files/es/_wikihistory.json
index b7b025d650fc18..b4dde34bf69d0c 100644
--- a/files/es/_wikihistory.json
+++ b/files/es/_wikihistory.json
@@ -6811,20 +6811,6 @@
"jota1410"
]
},
- "Web/CSS/CSS_Selectors": {
- "modified": "2019-07-09T01:16:13.123Z",
- "contributors": [
- "missmakita",
- "blanchart",
- "Benji1337",
- "metal-gogo",
- "kikolevante"
- ]
- },
- "Web/CSS/CSS_Selectors/Using_the_:target_pseudo-class_in_selectors": {
- "modified": "2020-07-31T07:57:08.167Z",
- "contributors": ["blanchart", "israel-munoz"]
- },
"Web/CSS/CSS_Types": {
"modified": "2019-03-18T21:35:39.343Z",
"contributors": ["lajaso"]
@@ -7069,6 +7055,20 @@
"modified": "2019-03-23T22:32:38.884Z",
"contributors": ["javichito"]
},
+ "Web/CSS/CSS_selectors": {
+ "modified": "2019-07-09T01:16:13.123Z",
+ "contributors": [
+ "missmakita",
+ "blanchart",
+ "Benji1337",
+ "metal-gogo",
+ "kikolevante"
+ ]
+ },
+ "Web/CSS/CSS_selectors/Using_the_:target_pseudo-class_in_selectors": {
+ "modified": "2020-07-31T07:57:08.167Z",
+ "contributors": ["blanchart", "israel-munoz"]
+ },
"Web/CSS/CSS_text": {
"modified": "2019-03-23T22:36:23.444Z",
"contributors": ["pekechis"]
diff --git a/files/es/learn/accessibility/html/index.md b/files/es/learn/accessibility/html/index.md
index 715470725042b0..6965913541b45c 100644
--- a/files/es/learn/accessibility/html/index.md
+++ b/files/es/learn/accessibility/html/index.md
@@ -393,8 +393,8 @@ El siguiente es un ejemplo mucho mejor:
```html example-good
-
-
+
+
```
diff --git a/files/es/learn/server-side/django/admin_site/index.md b/files/es/learn/server-side/django/admin_site/index.md
index 4a77b0a4547695..9a516a34d0ee20 100644
--- a/files/es/learn/server-side/django/admin_site/index.md
+++ b/files/es/learn/server-side/django/admin_site/index.md
@@ -107,9 +107,9 @@ Puedes editar un libro haciendo click en su nombre en la lista. La página de ed
![Admin Site - Book Edit](admin_book_modify.png)
-Ahora regresa a la página **Home** (usando el enlace _Home_ de la barra superior) y observa las listas **Author** y **Genre** -- ya deberías tener algunos registros creados de cuando añadiste los nuevos libros, pero puedes crear algunos más.
+Ahora regresa a la página **Home** (usando el enlace _Home_ de la barra superior) y observa las listas **Author** y **Genre** — ya deberías tener algunos registros creados de cuando añadiste los nuevos libros, pero puedes crear algunos más.
-Lo que no vas a tener es _BookInstances_, porque estas no se crean de los libros (si bien puedes crear un `Book` desde una `BookInstance` -- esta es la naturaleza de los campos `ForeignKey`). Regresa a la página _Home_ y presiona el botón **Add** relacionado para desplegar la pantalla _Add book instance_, como se muestra abajo. Nota el largo y globalmente único Id, que puede ser usado para identificar inequívocamente una única copia de un libro dentro de la biblioteca.
+Lo que no vas a tener es _BookInstances_, porque estas no se crean de los libros (si bien puedes crear un `Book` desde una `BookInstance` — esta es la naturaleza de los campos `ForeignKey`). Regresa a la página _Home_ y presiona el botón **Add** relacionado para desplegar la pantalla _Add book instance_, como se muestra abajo. Nota el largo y globalmente único Id, que puede ser usado para identificar inequívocamente una única copia de un libro dentro de la biblioteca.
![Admin Site - BookInstance Add](admin_bookinstance_add.png)
@@ -211,7 +211,7 @@ class BookAdmin(admin.ModelAdmin):
Desafortunadamente, no podemos especificar directamente el campo `genre` en `list_display` porque es un campo `ManyToManyField` (Django previene esto porque habría un alto "costo" de acceso a base de datos si lo hiciera). En lugar de eso, definiremos una función `display_genre` para obtener la información como una cadena (esta es la función que hemos llamado arriba; la definiremos más abajo).
-> **Nota:** Obtener el `genre` podría no ser una buena idea aquí, debido al "costo" de la operación en la base de datos. Te mostramos cómo hacerlo porque llamar funciones desde tus modelos puede ser muy útil por otras razones -- por ejemplo para añadir un enlace _**Delete**_ junto a cada ítem en la lista.
+> **Nota:** Obtener el `genre` podría no ser una buena idea aquí, debido al "costo" de la operación en la base de datos. Te mostramos cómo hacerlo porque llamar funciones desde tus modelos puede ser muy útil por otras razones — por ejemplo para añadir un enlace _**Delete**_ junto a cada ítem en la lista.
Añade el siguiente código en tu modelo `Book` (**models.py**). Esto crea una cadena con los tres primeros valores del campo `genre` (si existen) y crea una `short_description` (descripción corta) que puede ser usada en el sitio de administración por este método.
@@ -263,7 +263,7 @@ class AuthorAdmin(admin.ModelAdmin):
El atributo `fields` lista solo los campos que se van a desplegar en el formulario, en orden. Los campos se despliegan en vertical por defecto, pero se desplegarán en horizontal si los agrupas en una tupla (como se muestra en los campos "date" arriba).
-Reinicia tu aplicación y ve a la vista de detalle de autor -- ahora debería aparecer como se muestra abajo:
+Reinicia tu aplicación y ve a la vista de detalle de autor — ahora debería aparecer como se muestra abajo:
![Admin Site - Improved Author Detail](admin_improved_author_detail.png)
@@ -290,7 +290,7 @@ class BookInstanceAdmin(admin.ModelAdmin):
)
```
-Cada sección tiene su propio título (o `None`, si no quieres un título) y una tupla de campos asociada en un diccionario -- el formato es complicado de describir pero bastante fácil de entender si observas el fragmento de código que se encuentra justo arriba.
+Cada sección tiene su propio título (o `None`, si no quieres un título) y una tupla de campos asociada en un diccionario — el formato es complicado de describir pero bastante fácil de entender si observas el fragmento de código que se encuentra justo arriba.
Reinicia y navega a una vista de instancia de libro (book instance); el formulario debería aparecer como se muestra abajo:
@@ -312,7 +312,7 @@ class BookAdmin(admin.ModelAdmin):
inlines = [BooksInstanceInline]
```
-Prueba recargando tu aplicación y observando la vista para un libro -- ahora deberías ver al final las instancias relacionadas a este libro (inmediatamente debajo de los campos de género del libro):
+Prueba recargando tu aplicación y observando la vista para un libro — ahora deberías ver al final las instancias relacionadas a este libro (inmediatamente debajo de los campos de género del libro):
![Admin Site - Book with Inlines](admin_improved_book_detail_inlines.png)
diff --git a/files/es/learn/server-side/django/generic_views/index.md b/files/es/learn/server-side/django/generic_views/index.md
index 56c1df78dcd466..f563975edd3325 100644
--- a/files/es/learn/server-side/django/generic_views/index.md
+++ b/files/es/learn/server-side/django/generic_views/index.md
@@ -59,13 +59,13 @@ urlpatterns = [
Como se discutió en el tutorial anterior, la URL debió previamente haber coincidido con `/catalog`, de modo que la vista será llamada en realidad para la URL: `/catalog/books/`.
-La función de vista tiene un formato diferente al anterior -- eso es porque esta vista será en realidad implementada como una clase. Heredaremos desde una función de vista genérica existente que ya hace la mayoría de lo que queremos que esta función de vista haga, en lugar de escribir la nuestra propia desde el inicio.
+La función de vista tiene un formato diferente al anterior — eso es porque esta vista será en realidad implementada como una clase. Heredaremos desde una función de vista genérica existente que ya hace la mayoría de lo que queremos que esta función de vista haga, en lugar de escribir la nuestra propia desde el inicio.
Para las vistas basadas en clases de Django, accedemos a una función de vista apropiada llamando al método de clase `as_view()`. Esto hace todo el trabajo de crear una instancia de la clase, y asegurarse de que los métodos controladores correctos sean llamados para las solicitudes HTTP entrantes.
### Vista (basada en clases)
-Podríamos fácilmente escribir la vista de lista de libros como una función regular (tal como nuestra vista de índice anterior), la cual consultaría a la base de datos por todos los libros, y luego llamar a `render()` para pasar dicha lista a una plantilla específica. Sin embargo, en lugar de eso usaremos una vista de lista genérica basada en clases (ListView) -- una clase que hereda desde una vista existente. Debido a que la vista genérica ya implementa la mayoría de la funcionalidad que necesitamos, y sigue la práctica adecuada de Django, seremos capaces de crear una vista de lista más robusta con menos código, menos repetición, y por último menos mantenimiento.
+Podríamos fácilmente escribir la vista de lista de libros como una función regular (tal como nuestra vista de índice anterior), la cual consultaría a la base de datos por todos los libros, y luego llamar a `render()` para pasar dicha lista a una plantilla específica. Sin embargo, en lugar de eso usaremos una vista de lista genérica basada en clases (ListView) — una clase que hereda desde una vista existente. Debido a que la vista genérica ya implementa la mayoría de la funcionalidad que necesitamos, y sigue la práctica adecuada de Django, seremos capaces de crear una vista de lista más robusta con menos código, menos repetición, y por último menos mantenimiento.
Abre **catalog/views.py**, y copia el siguiente código al final del archivo:
@@ -78,7 +78,7 @@ class BookListView(generic.ListView):
¡Eso es todo! La vista genérica consultará a la base de datos para obtener todos los registros del modelo especificado (`Book`) y renderizará una plantilla ubicada en **/locallibrary/catalog/templates/catalog/book_list.html** (que crearemos más abajo). Dentro de la plantilla puedes acceder a la lista de libros mediante la variable de plantilla llamada `object_list` O `book_list` (esto es, genéricamente, "`nombre_del_modelo_list`").
-> **Nota:** Esta ruta complicada para la ubicación de la plantilla no es un error de digitación -- las vistas genéricas buscan plantillas en `/application_name/the_model_name_list.html` (`catalog/book_list.html` en este caso) dentro del directorio de la aplicación `/application_name/templates/` (`/catalog/templates/`).
+> **Nota:** Esta ruta complicada para la ubicación de la plantilla no es un error de digitación — las vistas genéricas buscan plantillas en `/application_name/the_model_name_list.html` (`catalog/book_list.html` en este caso) dentro del directorio de la aplicación `/application_name/templates/` (`/catalog/templates/`).
Puedes añadir atributos para cambiar el comportamiento por defecto de arriba. Por ejemplo, puedes especificar otro archivo de plantilla si necesitas tener múltiples vistas que usen el mismo modelo, o puedes querer usar un nombre diferente de variable de plantilla si `book_list` no resulta intuitivo para tu caso particular de uso de plantilla. Posiblemente la variación más útil es cambiar/filtrar el conjunto de resultados que se devuelve, así, en lugar de listar todos los libros podrías listar los 5 libros más leídos por otros usuarios.
@@ -192,9 +192,9 @@ El código dentro del lazo crea un ítem de lista para cada libro, que muestra t
Accedemos a los _campos_ del registro del libro asociado usando la "notación de punto" (ej. `book.title` y `book.author`), donde el texto que sigue a la palabra `book` es el nombre del campo (como se definió en el modelo).
-También podemos invocar _funciones_ en el modelo desde dentro de nuestra plantilla -- en este caso invocamos a `book.get_absolute_url()` para obtener una URL que se podría usar para desplegar la página de detalle relacionada. Esto funciona siempre y cuando la función no tenga ningún argumento (¡no hay forma de enviar argumentos!).
+También podemos invocar _funciones_ en el modelo desde dentro de nuestra plantilla — en este caso invocamos a `book.get_absolute_url()` para obtener una URL que se podría usar para desplegar la página de detalle relacionada. Esto funciona siempre y cuando la función no tenga ningún argumento (¡no hay forma de enviar argumentos!).
-> **Nota:** Debemos tener cuidado de los "efectos secundarios" al invocar funciones en las plantillas. Aquí solo obtenemos una URL para desplegar, pero una función puede hacer casi cualquier cosa -- ¡no quisieramos borrar nuestra base de datos (por ejemplo) solo por renderizar nuestra plantilla!
+> **Nota:** Debemos tener cuidado de los "efectos secundarios" al invocar funciones en las plantillas. Aquí solo obtenemos una URL para desplegar, pero una función puede hacer casi cualquier cosa — ¡no quisieramos borrar nuestra base de datos (por ejemplo) solo por renderizar nuestra plantilla!
#### Actualizar la plantilla base
@@ -208,7 +208,7 @@ Abre la plantilla base (**/locallibrary/catalog/templates/_base_generic.html_**)
### ¿Cómo se ve?
-Aún no podrás ver la lista de libros, porque aún nos falta una dependencia -- el mapeo URL para las páginas de detalle de libros, que se necesita para crear los hipervínculos a los libros individuales. Mostraremos tanto la lista de libros como las vistas de detalle después de la siguiente sección.
+Aún no podrás ver la lista de libros, porque aún nos falta una dependencia — el mapeo URL para las páginas de detalle de libros, que se necesita para crear los hipervínculos a los libros individuales. Mostraremos tanto la lista de libros como las vistas de detalle después de la siguiente sección.
## Página de detalle de libros
@@ -438,7 +438,7 @@ Si lo necesitas puedes cambiar la plantilla usada y el nombre del objeto de cont
#### ¿Qué sucede si el registro no existe?
-Si un registro solicitado no existe, la vista de detalle genérica basada en clases lanzará automáticamente por tí una excepción de tipo Http404 -- en producción, esto desplegará automáticamente una página apropiada de "recurso no encontrado", que puedes personalizar si lo deseas.
+Si un registro solicitado no existe, la vista de detalle genérica basada en clases lanzará automáticamente por tí una excepción de tipo Http404 — en producción, esto desplegará automáticamente una página apropiada de "recurso no encontrado", que puedes personalizar si lo deseas.
Solo para darte una idea sobre cómo funciona esto, el fragmento de código de abajo demuestra cómo implementarías la vista basada en clases como una función, si **no** estuvieras usando la vista de detalle genérica basada en clases.
@@ -560,7 +560,7 @@ Este método es necesario porque has declarado un campo `ForeignKey` (uno-a-much
En este punto deberíamos haber creado todo lo necesario para desplegar tanto la lista de libros como las páginas de detalles de libros. Ejecuta el servidor (`python3 manage.py runserver`) y dirígete en tu navegador a `http://127.0.0.1:8000/`.
-> **Advertencia:** No hagas click aún en ningún enlace de autor o de detalles de autores -- ¡los crearás en el reto!
+> **Advertencia:** No hagas click aún en ningún enlace de autor o de detalles de autores — ¡los crearás en el reto!
Haz click en el enlace **All books** para desplegar la lista de libros.
@@ -586,7 +586,7 @@ class BookListView(generic.ListView):
paginate_by = 10
```
-Con esta adición, apenas tengas más de 10 registros la vista comenzará a paginar la información que envía a la plantilla. A las diferentes páginas se accede usando parámetros GET -- para acceder a la página 2 usarías la URL: `/catalog/books/?page=2`.
+Con esta adición, apenas tengas más de 10 registros la vista comenzará a paginar la información que envía a la plantilla. A las diferentes páginas se accede usando parámetros GET — para acceder a la página 2 usarías la URL: `/catalog/books/?page=2`.
### Plantillas
@@ -624,7 +624,7 @@ Usamos `\{{ request.path }}` para obtener la URL de la página actual para crear
### ¿Cómo se ve?
-La captura de pantalla de abajo muestra cómo se ve la paginación -- si no has ingresado más de 10 títulos en tu base de datos, puedes probarlo más fácilmente reduciendo el número especificado en la línea `paginate_by` en tu archivo **catalog/views.py**. Para obtener el resultado de abajo lo cambiamos a `paginate_by = 2`.
+La captura de pantalla de abajo muestra cómo se ve la paginación — si no has ingresado más de 10 títulos en tu base de datos, puedes probarlo más fácilmente reduciendo el número especificado en la línea `paginate_by` en tu archivo **catalog/views.py**. Para obtener el resultado de abajo lo cambiamos a `paginate_by = 2`.
Los enlaces de paginación se muestran en la parte de abajo, con enlaces de next/previous desplegados dependiendo de en qué página estés
diff --git a/files/es/learn/server-side/django/home_page/index.md b/files/es/learn/server-side/django/home_page/index.md
index 09f8cb6f577916..3da1d87a9b715f 100644
--- a/files/es/learn/server-side/django/home_page/index.md
+++ b/files/es/learn/server-side/django/home_page/index.md
@@ -202,7 +202,7 @@ La plantilla base que pensamos usar para el siito web _LocalLibrary_ se muestra
> **Nota:** También introducimos dos etiquetas de plantilla adicionales: `url` y `load static`. Se discute sobre ellas en secciones posteriores.
-Crea un nuevo archivo -- **/locallibrary/catalog/templates/_base_generic.html_** -- y pon en él el siguiente contenido:
+Crea un nuevo archivo — **/locallibrary/catalog/templates/_base_generic.html_** — y pon en él el siguiente contenido:
```django
@@ -245,7 +245,7 @@ Crea un nuevo archivo -- **/locallibrary/catalog/templates/_base_generic.html_**