🌐 Update translations for es (add-missing)

This commit is contained in:
github-actions[bot] 2025-12-16 15:22:51 +00:00
parent 04519af098
commit 481c46c4cf
4 changed files with 718 additions and 0 deletions

503
docs/es/docs/_llm-test.md Normal file
View File

@ -0,0 +1,503 @@
# Archivo de prueba de LLM { #llm-test-file }
Este documento prueba si el <abbr title="Large Language Model Modelo de lenguaje grande">LLM</abbr>, que traduce la documentación, entiende el `general_prompt` en `scripts/translate.py` y el prompt específico del idioma en `docs/{language code}/llm-prompt.md`. El prompt específico del idioma se agrega al final de `general_prompt`.
Las pruebas añadidas aquí serán vistas por todas las personas que diseñan prompts específicos del idioma.
Úsalo de la siguiente manera:
* Ten un prompt específico del idioma `docs/{language code}/llm-prompt.md`.
* Haz una traducción fresca de este documento a tu idioma destino (mira, por ejemplo, el comando `translate-page` de `translate.py`). Esto creará la traducción en `docs/{language code}/docs/_llm-test.md`.
* Comprueba si todo está bien en la traducción.
* Si es necesario, mejora tu prompt específico del idioma, el prompt general, o el documento en inglés.
* Luego corrige manualmente los problemas restantes en la traducción para que sea una buena traducción.
* Vuelve a traducir, teniendo la buena traducción en su lugar. El resultado ideal sería que el LLM ya no hiciera cambios a la traducción. Eso significa que el prompt general y tu prompt específico del idioma están tan bien como pueden estar (a veces hará algunos cambios aparentemente aleatorios; la razón es que <a href="https://doublespeak.chat/#/handbook#deterministic-output" class="external-link" target="_blank">los LLMs no son algoritmos deterministas</a>).
Las pruebas:
## Fragmentos de código { #code-snippets }
//// tab | Prueba
Este es un fragmento de código: `foo`. Y este es otro fragmento de código: `bar`. Y otro más: `baz quux`.
////
//// tab | Información
El contenido de los fragmentos de código debe dejarse tal cual.
Consulta la sección `### Content of code snippets` en el prompt general en `scripts/translate.py`.
////
## Comillas { #quotes }
//// tab | Prueba
Ayer, mi amigo escribió: "Si escribes 'incorrectly' correctamente, lo habrás escrito incorrectamente". A lo que respondí: "Correcto, pero 'incorrectly' está incorrecto, no '"incorrectly"'".
/// note | Nota
El LLM probablemente traducirá esto mal. Lo interesante es si mantiene la traducción corregida al volver a traducir.
///
////
//// tab | Información
La persona que diseña el prompt puede elegir si quiere convertir comillas neutras a comillas tipográficas. También está bien dejarlas como están.
Consulta por ejemplo la sección `### Quotes` en `docs/de/llm-prompt.md`.
////
## Comillas en fragmentos de código { #quotes-in-code-snippets }
//// tab | Prueba
`pip install "foo[bar]"`
Ejemplos de literales de string en fragmentos de código: `"this"`, `'that'`.
Un ejemplo difícil de literales de string en fragmentos de código: `f"I like {'oranges' if orange else "apples"}"`
Hardcore: `Yesterday, my friend wrote: "If you spell incorrectly correctly, you have spelled it incorrectly". To which I answered: "Correct, but 'incorrectly' is incorrectly not '"incorrectly"'"`
////
//// tab | Información
... Sin embargo, las comillas dentro de fragmentos de código deben quedarse tal cual.
////
## bloques de código { #code-blocks }
//// tab | Prueba
Un ejemplo de código Bash...
```bash
# Imprime un saludo al universo
echo "Hello universe"
```
...y un ejemplo de código de consola...
```console
$ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid">main.py</u>
<span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting server
Searching for package file structure
```
...y otro ejemplo de código de consola...
```console
// Crea un directorio "Code"
$ mkdir code
// Cambia a ese directorio
$ cd code
```
...y un ejemplo de código Python...
```Python
wont_work() # Esto no va a funcionar 😱
works(foo="bar") # Esto funciona 🎉
```
...y eso es todo.
////
//// tab | Información
El código en bloques de código no debe modificarse, con la excepción de los comentarios.
Consulta la sección `### Content of code blocks` en el prompt general en `scripts/translate.py`.
////
## Pestañas y cajas coloreadas { #tabs-and-colored-boxes }
//// tab | Prueba
/// info | Información
Algo de texto
///
/// note | Nota
Algo de texto
///
/// note | Detalles técnicos
Algo de texto
///
/// check | Revisa
Algo de texto
///
/// tip | Consejo
Algo de texto
///
/// warning | Advertencia
Algo de texto
///
/// danger | Peligro
Algo de texto
///
////
//// tab | Información
Las pestañas y los bloques `Info`/`Note`/`Warning`/etc. deben tener la traducción de su título añadida después de una barra vertical (`|`).
Consulta las secciones `### Special blocks` y `### Tab blocks` en el prompt general en `scripts/translate.py`.
////
## Enlaces web e internos { #web-and-internal-links }
//// tab | Prueba
El texto del enlace debe traducirse, la dirección del enlace debe permanecer sin cambios:
* [Enlace al encabezado de arriba](#code-snippets)
* [Enlace interno](index.md#installation){.internal-link target=_blank}
* <a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">Enlace externo</a>
* <a href="https://fastapi.tiangolo.com/css/styles.css" class="external-link" target="_blank">Enlace a un estilo</a>
* <a href="https://fastapi.tiangolo.com/js/logic.js" class="external-link" target="_blank">Enlace a un script</a>
* <a href="https://fastapi.tiangolo.com/img/foo.jpg" class="external-link" target="_blank">Enlace a una imagen</a>
El texto del enlace debe traducirse, la dirección del enlace debe apuntar a la traducción:
* <a href="https://fastapi.tiangolo.com/es/" class="external-link" target="_blank">Enlace a FastAPI</a>
////
//// tab | Información
Los enlaces deben traducirse, pero su dirección debe permanecer sin cambios. Una excepción son los enlaces absolutos a páginas de la documentación de FastAPI. En ese caso deben enlazar a la traducción.
Consulta la sección `### Links` en el prompt general en `scripts/translate.py`.
////
## Elementos HTML "abbr" { #html-abbr-elements }
//// tab | Prueba
Aquí algunas cosas envueltas en elementos HTML "abbr" (algunas son inventadas):
### El abbr da una frase completa { #the-abbr-gives-a-full-phrase }
* <abbr title="Getting Things Done Hacer las cosas">GTD</abbr>
* <abbr title="less than menor que"><code>lt</code></abbr>
* <abbr title="XML Web Token Token web XML">XWT</abbr>
* <abbr title="Parallel Server Gateway Interface Interfaz de pasarela de servidor paralela">PSGI</abbr>
### El abbr da una explicación { #the-abbr-gives-an-explanation }
* <abbr title="Un grupo de máquinas configuradas para estar conectadas y trabajar juntas de alguna manera.">clúster</abbr>
* <abbr title="Un método de machine learning que usa redes neuronales artificiales con numerosas capas ocultas entre las capas de entrada y salida, desarrollando así una estructura interna completa">Deep Learning</abbr>
### El abbr da una frase completa y una explicación { #the-abbr-gives-a-full-phrase-and-an-explanation }
* <abbr title="Mozilla Developer Network Red de Desarrolladores de Mozilla: documentación para desarrolladores, escrita por la gente de Firefox">MDN</abbr>
* <abbr title="Input/Output Entrada/Salida: lectura o escritura de disco, comunicaciones de red.">I/O</abbr>.
////
//// tab | Información
Los atributos "title" de los elementos "abbr" se traducen siguiendo instrucciones específicas.
Las traducciones pueden añadir sus propios elementos "abbr" que el LLM no debe eliminar. P. ej., para explicar palabras en inglés.
Consulta la sección `### HTML abbr elements` en el prompt general en `scripts/translate.py`.
////
## Encabezados { #headings }
//// tab | Prueba
### Desarrolla una webapp - un tutorial { #develop-a-webapp-a-tutorial }
Hola.
### Anotaciones de tipos y -anotaciones { #type-hints-and-annotations }
Hola de nuevo.
### Superclases y subclases { #super-and-subclasses }
Hola de nuevo.
////
//// tab | Información
La única regla estricta para los encabezados es que el LLM deje la parte del hash dentro de llaves sin cambios, lo que asegura que los enlaces no se rompan.
Consulta la sección `### Headings` en el prompt general en `scripts/translate.py`.
Para instrucciones específicas del idioma, mira p. ej. la sección `### Headings` en `docs/de/llm-prompt.md`.
////
## Términos usados en la documentación { #terms-used-in-the-docs }
//// tab | Prueba
* tú
* tu
* p. ej.
* etc.
* `foo` como un `int`
* `bar` como un `str`
* `baz` como una `list`
* el Tutorial - Guía de usuario
* la Guía de usuario avanzada
* la documentación de SQLModel
* la documentación de la API
* la documentación automática
* Ciencia de datos
* Deep Learning
* Machine Learning
* Inyección de dependencias
* autenticación HTTP Basic
* HTTP Digest
* formato ISO
* el estándar JSON Schema
* el JSON Schema
* la definición del esquema
* Flujo de contraseña
* Móvil
* obsoleto
* diseñado
* inválido
* sobre la marcha
* estándar
* por defecto
* sensible a mayúsculas/minúsculas
* insensible a mayúsculas/minúsculas
* servir la aplicación
* servir la página
* la app
* la aplicación
* la request
* la response
* la response de error
* la path operation
* el decorador de path operation
* la path operation function
* el body
* el request body
* el response body
* el body JSON
* el body del formulario
* el body de archivo
* el cuerpo de la función
* el parámetro
* el parámetro del body
* el parámetro del path
* el parámetro de query
* el parámetro de cookie
* el parámetro de header
* el parámetro del formulario
* el parámetro de la función
* el evento
* el evento de inicio
* el inicio del servidor
* el evento de apagado
* el evento de lifespan
* el manejador
* el manejador de eventos
* el manejador de excepciones
* manejar
* el modelo
* el modelo de Pydantic
* el modelo de datos
* el modelo de base de datos
* el modelo de formulario
* el objeto del modelo
* la clase
* la clase base
* la clase padre
* la subclase
* la clase hija
* la clase hermana
* el método de clase
* el header
* los headers
* el header de autorización
* el header `Authorization`
* el header Forwarded
* el sistema de inyección de dependencias
* la dependencia
* el dependable
* el dependiente
* limitado por I/O
* limitado por CPU
* concurrencia
* paralelismo
* multiprocesamiento
* la variable de entorno
* la variable de entorno
* el `PATH`
* la variable `PATH`
* la autenticación
* el proveedor de autenticación
* la autorización
* el formulario de autorización
* el proveedor de autorización
* el usuario se autentica
* el sistema autentica al usuario
* la CLI
* la interfaz de línea de comandos
* el servidor
* el cliente
* el proveedor en la nube
* el servicio en la nube
* el desarrollo
* las etapas de desarrollo
* el dict
* el diccionario
* la enumeración
* el enum
* el miembro del enum
* el codificador
* el decodificador
* codificar
* decodificar
* la excepción
* lanzar
* la expresión
* el statement
* el frontend
* el backend
* la discusión de GitHub
* el issue de GitHub
* el rendimiento
* la optimización de rendimiento
* el tipo de retorno
* el valor de retorno
* la seguridad
* el esquema de seguridad
* la tarea
* la tarea en segundo plano
* la función de tarea
* la plantilla
* el motor de plantillas
* la anotación de tipos
* la anotación de tipos
* el worker del servidor
* el worker de Uvicorn
* el Gunicorn Worker
* el worker process
* la worker class
* la carga de trabajo
* el despliegue
* desplegar
* el SDK
* el kit de desarrollo de software
* el `APIRouter`
* el `requirements.txt`
* el Bearer Token
* el cambio incompatible
* el bug
* el botón
* el invocable
* el código
* el commit
* el context manager
* la corrutina
* la sesión de base de datos
* el disco
* el dominio
* el motor
* el X falso
* el método HTTP GET
* el ítem
* el paquete
* el lifespan
* el bloqueo
* el middleware
* la aplicación móvil
* el módulo
* el montaje
* la red
* el origen
* el override
* el payload
* el procesador
* la propiedad
* el proxy
* el pull request
* la query
* la RAM
* la máquina remota
* el código de estado
* el string
* la etiqueta
* el framework web
* el comodín
* devolver
* validar
////
//// tab | Información
Esta es una lista no completa y no normativa de términos (mayormente) técnicos vistos en la documentación. Puede ayudar a la persona que diseña el prompt a identificar para qué términos el LLM necesita una mano. Por ejemplo cuando sigue revirtiendo una buena traducción a una traducción subóptima. O cuando tiene problemas conjugando/declinando un término en tu idioma.
Mira p. ej. la sección `### List of English terms and their preferred German translations` en `docs/de/llm-prompt.md`.
////

View File

@ -0,0 +1,65 @@
# FastAPI Cloud { #fastapi-cloud }
Puedes desplegar tu app de FastAPI en <a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a> con un solo comando; ve y únete a la lista de espera si aún no lo has hecho. 🚀
## Iniciar sesión { #login }
Asegúrate de que ya tienes una cuenta de **FastAPI Cloud** (te invitamos desde la lista de espera 😉).
Luego inicia sesión:
<div class="termy">
```console
$ fastapi login
You are logged in to FastAPI Cloud 🚀
```
</div>
## Desplegar { #deploy }
Ahora despliega tu app, con un solo comando:
<div class="termy">
```console
$ fastapi deploy
Deploying to FastAPI Cloud...
✅ Deployment successful!
🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
```
</div>
¡Eso es todo! Ahora puedes acceder a tu app en esa URL. ✨
## Acerca de FastAPI Cloud { #about-fastapi-cloud }
**<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>** está creado por el mismo autor y equipo detrás de **FastAPI**.
Agiliza el proceso de **crear**, **desplegar** y **acceder** a una API con el mínimo esfuerzo.
Aporta la misma **experiencia de desarrollador** de crear apps con FastAPI al **desplegarlas** en la nube. 🎉
También se encargará de la mayoría de las cosas que necesitas al desplegar una app, como:
* HTTPS
* Replicación, con autoescalado basado en requests
* etc.
FastAPI Cloud es el sponsor principal y proveedor de financiación de los proyectos open source de *FastAPI and friends*. ✨
## Desplegar en otros proveedores de la nube { #deploy-to-other-cloud-providers }
FastAPI es open source y está basado en estándares. Puedes desplegar apps de FastAPI en cualquier proveedor de la nube que elijas.
Sigue las guías de tu proveedor de la nube para desplegar apps de FastAPI con ellos. 🤓
## Despliega tu propio servidor { #deploy-your-own-server }
También te enseñaré más adelante en esta guía de **Despliegue** todos los detalles, para que puedas entender qué está pasando, qué tiene que ocurrir o cómo desplegar apps de FastAPI por tu cuenta, también con tus propios servidores. 🤓

View File

@ -0,0 +1,17 @@
# Usar los códigos de estado antiguos 403 para errores de autenticación { #use-old-403-authentication-error-status-codes }
Antes de FastAPI versión `0.122.0`, cuando las utilidades de seguridad integradas devolvían un error al cliente después de una autenticación fallida, usaban el código de estado HTTP `403 Forbidden`.
A partir de FastAPI versión `0.122.0`, usan el código de estado HTTP `401 Unauthorized`, más apropiado, y devuelven un `WWW-Authenticate` header adecuado en la response, siguiendo las especificaciones HTTP, <a href="https://datatracker.ietf.org/doc/html/rfc7235#section-3.1" class="external-link" target="_blank">RFC 7235</a>, <a href="https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized" class="external-link" target="_blank">RFC 9110</a>.
Pero si por alguna razón tus clientes dependen del comportamiento anterior, puedes volver a él sobrescribiendo el método `make_not_authenticated_error` en tus clases de seguridad.
Por ejemplo, puedes crear una subclase de `HTTPBearer` que devuelva un error `403 Forbidden` en lugar del `401 Unauthorized` por defecto:
{* ../../docs_src/authentication_error_status_code/tutorial001_an_py39.py hl[9:13] *}
/// tip | Consejo
Ten en cuenta que la función devuelve la instance de la excepción, no la lanza. El lanzamiento se hace en el resto del código interno.
///

View File

@ -0,0 +1,133 @@
# Migra de Pydantic v1 a Pydantic v2 { #migrate-from-pydantic-v1-to-pydantic-v2 }
Si tienes una app de FastAPI antigua, podrías estar usando Pydantic versión 1.
FastAPI ha tenido compatibilidad con Pydantic v1 o v2 desde la versión 0.100.0.
Si tenías instalado Pydantic v2, lo usaba. Si en cambio tenías Pydantic v1, usaba ese.
Pydantic v1 está deprecado y su soporte se eliminará en las próximas versiones de FastAPI, deberías migrar a Pydantic v2. Así obtendrás las funcionalidades, mejoras y correcciones más recientes.
/// warning | Advertencia
Además, el equipo de Pydantic dejó de dar soporte a Pydantic v1 para las versiones más recientes de Python, comenzando con Python 3.14.
Si quieres usar las funcionalidades más recientes de Python, tendrás que asegurarte de usar Pydantic v2.
///
Si tienes una app de FastAPI antigua con Pydantic v1, aquí te muestro cómo migrarla a Pydantic v2 y las nuevas funcionalidades en FastAPI 0.119.0 para ayudarte con una migración gradual.
## Guía oficial { #official-guide }
Pydantic tiene una <a href="https://docs.pydantic.dev/latest/migration/" class="external-link" target="_blank">Guía de migración</a> oficial de v1 a v2.
También incluye qué cambió, cómo las validaciones ahora son más correctas y estrictas, posibles consideraciones, etc.
Puedes leerla para entender mejor qué cambió.
## Tests { #tests }
Asegúrate de tener [tests](../tutorial/testing.md){.internal-link target=_blank} para tu app y de ejecutarlos en integración continua (CI).
Así podrás hacer la actualización y asegurarte de que todo sigue funcionando como esperas.
## `bump-pydantic` { #bump-pydantic }
En muchos casos, cuando usas modelos de Pydantic normales sin personalizaciones, podrás automatizar gran parte del proceso de migración de Pydantic v1 a Pydantic v2.
Puedes usar <a href="https://github.com/pydantic/bump-pydantic" class="external-link" target="_blank">`bump-pydantic`</a> del mismo equipo de Pydantic.
Esta herramienta te ayudará a cambiar automáticamente la mayor parte del código que necesita cambiarse.
Después de esto, puedes ejecutar los tests y revisa si todo funciona. Si es así, ya terminaste. 😎
## Pydantic v1 en v2 { #pydantic-v1-in-v2 }
Pydantic v2 incluye todo lo de Pydantic v1 como un submódulo `pydantic.v1`.
Esto significa que puedes instalar la versión más reciente de Pydantic v2 e importar y usar los componentes viejos de Pydantic v1 desde ese submódulo, como si tuvieras instalado el Pydantic v1 antiguo.
{* ../../docs_src/pydantic_v1_in_v2/tutorial001_an_py310.py hl[1,4] *}
### Compatibilidad de FastAPI con Pydantic v1 en v2 { #fastapi-support-for-pydantic-v1-in-v2 }
Desde FastAPI 0.119.0, también hay compatibilidad parcial para Pydantic v1 desde dentro de Pydantic v2, para facilitar la migración a v2.
Así que podrías actualizar Pydantic a la última versión 2 y cambiar los imports para usar el submódulo `pydantic.v1`, y en muchos casos simplemente funcionaría.
{* ../../docs_src/pydantic_v1_in_v2/tutorial002_an_py310.py hl[2,5,15] *}
/// warning | Advertencia
Ten en cuenta que, como el equipo de Pydantic ya no da soporte a Pydantic v1 en versiones recientes de Python, empezando por Python 3.14, usar `pydantic.v1` tampoco está soportado en Python 3.14 y superiores.
///
### Pydantic v1 y v2 en la misma app { #pydantic-v1-and-v2-on-the-same-app }
No está soportado por Pydantic tener un modelo de Pydantic v2 con sus propios campos definidos como modelos de Pydantic v1 o viceversa.
```mermaid
graph TB
subgraph "❌ Not Supported"
direction TB
subgraph V2["Pydantic v2 Model"]
V1Field["Pydantic v1 Model"]
end
subgraph V1["Pydantic v1 Model"]
V2Field["Pydantic v2 Model"]
end
end
style V2 fill:#f9fff3
style V1 fill:#fff6f0
style V1Field fill:#fff6f0
style V2Field fill:#f9fff3
```
...pero puedes tener modelos separados usando Pydantic v1 y v2 en la misma app.
```mermaid
graph TB
subgraph "✅ Supported"
direction TB
subgraph V2["Pydantic v2 Model"]
V2Field["Pydantic v2 Model"]
end
subgraph V1["Pydantic v1 Model"]
V1Field["Pydantic v1 Model"]
end
end
style V2 fill:#f9fff3
style V1 fill:#fff6f0
style V1Field fill:#fff6f0
style V2Field fill:#f9fff3
```
En algunos casos, incluso es posible tener modelos de Pydantic v1 y v2 en la misma path operation de tu app de FastAPI:
{* ../../docs_src/pydantic_v1_in_v2/tutorial003_an_py310.py hl[2:3,6,12,21:22] *}
En el ejemplo anterior, el modelo de entrada es un modelo de Pydantic v1 y el modelo de salida (definido en `response_model=ItemV2`) es un modelo de Pydantic v2.
### Parámetros de Pydantic v1 { #pydantic-v1-parameters }
Si necesitas usar algunas de las herramientas específicas de FastAPI para parámetros como `Body`, `Query`, `Form`, etc. con modelos de Pydantic v1, puedes importarlas de `fastapi.temp_pydantic_v1_params` mientras terminas la migración a Pydantic v2:
{* ../../docs_src/pydantic_v1_in_v2/tutorial004_an_py310.py hl[4,18] *}
### Migra por pasos { #migrate-in-steps }
/// tip | Consejo
Primero prueba con `bump-pydantic`; si tus tests pasan y eso funciona, entonces terminaste con un solo comando. ✨
///
Si `bump-pydantic` no funciona para tu caso, puedes usar la compatibilidad de modelos Pydantic v1 y v2 en la misma app para hacer la migración a Pydantic v2 de forma gradual.
Podrías primero actualizar Pydantic para usar la última versión 2 y cambiar los imports para usar `pydantic.v1` para todos tus modelos.
Luego puedes empezar a migrar tus modelos de Pydantic v1 a v2 por grupos, en pasos graduales. 🚶