Browse Source

Intermezzo: Use GPT-5

This commit started as an attempt to  handle translation of abbr elements, which I was not able to get to work in a clean way. Shortly before I resigned I had the idea to try `openai:gpt-5` as agent in the translate.py, instead of `openai:gpt-4o` and BAM it worked. A lot of other things also worked much better. Modifications had to be made though because GPT-5 interpreted some rules stricter, so some reformulation and some more examples were needed. Will translate with that agent in the remaining translations to test if these prompts work well.
pull/14015/head
Nils Lindemann 2 weeks ago
parent
commit
1941c610ee
  1. 6
      docs/de/docs/advanced/behind-a-proxy.md
  2. 4
      docs/de/docs/advanced/events.md
  3. 2
      docs/de/docs/advanced/security/http-basic-auth.md
  4. 2
      docs/de/docs/advanced/security/oauth2-scopes.md
  5. 6
      docs/de/docs/alternatives.md
  6. 2
      docs/de/docs/deployment/concepts.md
  7. 2
      docs/de/docs/deployment/docker.md
  8. 2
      docs/de/docs/deployment/index.md
  9. 14
      docs/de/docs/environment-variables.md
  10. 22
      docs/de/docs/index.md
  11. 6
      docs/de/docs/tutorial/background-tasks.md
  12. 4
      docs/de/docs/tutorial/body.md
  13. 4
      docs/de/docs/tutorial/cors.md
  14. 2
      docs/de/docs/tutorial/path-operation-configuration.md
  15. 22
      docs/de/docs/tutorial/path-params-numeric-validations.md
  16. 2
      docs/de/docs/tutorial/query-params.md
  17. 2
      docs/de/docs/tutorial/request-files.md
  18. 2
      docs/de/docs/tutorial/request-forms.md
  19. 2
      docs/de/docs/tutorial/sql-databases.md
  20. 30
      docs/de/docs/virtual-environments.md
  21. 142
      docs/de/llm-prompt.md
  22. 116
      scripts/translate.py

6
docs/de/docs/advanced/behind-a-proxy.md

@ -2,9 +2,9 @@
In manchen Situationen müssen Sie möglicherweise einen **Proxy**-Server wie Traefik oder Nginx verwenden, mit einer Konfiguration, die ein zusätzliches Pfadpräfix hinzufügt, das von Ihrer Anwendung nicht gesehen wird. In manchen Situationen müssen Sie möglicherweise einen **Proxy**-Server wie Traefik oder Nginx verwenden, mit einer Konfiguration, die ein zusätzliches Pfadpräfix hinzufügt, das von Ihrer Anwendung nicht gesehen wird.
In diesen Fällen können Sie `root_path` verwenden, um Ihre Anwendung zu konfigurieren. In diesen Fällen können Sie <abbr title="Wurzelpfad">`root_path`</abbr> verwenden, um Ihre Anwendung zu konfigurieren.
Der `root_path` (deutsch: Wurzelpfad) ist ein Mechanismus, der von der ASGI-Spezifikation bereitgestellt wird (auf der FastAPI via Starlette aufbaut). Der `root_path` ist ein Mechanismus, der von der ASGI-Spezifikation bereitgestellt wird (auf der FastAPI via Starlette aufbaut).
Der `root_path` wird verwendet, um diese speziellen Fälle zu handhaben. Der `root_path` wird verwendet, um diese speziellen Fälle zu handhaben.
@ -64,7 +64,7 @@ Die Benutzeroberfläche der Dokumentation würde benötigen, dass das OpenAPI-Sc
} }
``` ```
In diesem Beispiel könnte der „Proxy“ etwa **Traefik** sein. Und der Server wäre etwas wie **Uvicorn**, auf dem Ihre FastAPI-Anwendung ausgeführt wird. In diesem Beispiel könnte der „Proxy“ etwa **Traefik** sein. Und der Server wäre etwas wie FastAPI CLI mit **Uvicorn**, auf dem Ihre FastAPI-Anwendung ausgeführt wird.
### Bereitstellung des `root_path` { #providing-the-root-path } ### Bereitstellung des `root_path` { #providing-the-root-path }

4
docs/de/docs/advanced/events.md

@ -4,7 +4,7 @@ Sie können Logik (Code) definieren, die ausgeführt werden soll, bevor die Anwe
Auf die gleiche Weise können Sie Logik (Code) definieren, die ausgeführt werden soll, wenn die Anwendung **heruntergefahren** wird. In diesem Fall wird dieser Code **einmal** ausgeführt, **nachdem** möglicherweise **viele Requests** bearbeitet wurden. Auf die gleiche Weise können Sie Logik (Code) definieren, die ausgeführt werden soll, wenn die Anwendung **heruntergefahren** wird. In diesem Fall wird dieser Code **einmal** ausgeführt, **nachdem** möglicherweise **viele Requests** bearbeitet wurden.
Da dieser Code ausgeführt wird, bevor die Anwendung **beginnt**, Requests entgegenzunehmen, und unmittelbar, nachdem sie die Bearbeitung von Requests **abgeschlossen hat**, deckt er den gesamten Anwendungs-**Lifespan** (deutsch: Lebensdauer) ab (das Wort „Lifespan“ wird gleich wichtig sein 😉). Da dieser Code ausgeführt wird, bevor die Anwendung **beginnt**, Requests entgegenzunehmen, und unmittelbar, nachdem sie die Bearbeitung von Requests **abgeschlossen hat**, deckt er den gesamten Anwendungs-<abbr title="Lebensdauer">**Lifespan**</abbr> ab (das Wort „Lifespan“ wird gleich wichtig sein 😉).
Dies kann sehr nützlich sein, um **Ressourcen** einzurichten, die Sie in der gesamten App verwenden wollen und die von Requests **gemeinsam genutzt** werden und/oder die Sie anschließend **aufräumen** müssen. Zum Beispiel ein Pool von Datenbankverbindungen oder das Laden eines gemeinsam genutzten Modells für maschinelles Lernen. Dies kann sehr nützlich sein, um **Ressourcen** einzurichten, die Sie in der gesamten App verwenden wollen und die von Requests **gemeinsam genutzt** werden und/oder die Sie anschließend **aufräumen** müssen. Zum Beispiel ein Pool von Datenbankverbindungen oder das Laden eines gemeinsam genutzten Modells für maschinelles Lernen.
@ -38,7 +38,7 @@ Und dann, direkt nach dem `yield`, entladen wir das Modell. Dieser Code wird aus
/// tip | Tipp /// tip | Tipp
Das *Herunterfahren* würde erfolgen, wenn Sie die Anwendung **stoppen**. Das `shutdown` würde erfolgen, wenn Sie die Anwendung **stoppen**.
Möglicherweise müssen Sie eine neue Version starten, oder Sie haben es einfach satt, sie auszuführen. 🤷 Möglicherweise müssen Sie eine neue Version starten, oder Sie haben es einfach satt, sie auszuführen. 🤷

2
docs/de/docs/advanced/security/http-basic-auth.md

@ -1,6 +1,6 @@
# HTTP Basic Auth { #http-basic-auth } # HTTP Basic Auth { #http-basic-auth }
Für die einfachsten Fälle können Sie HTTP Basic Auth (deutsch: HTTP-Basisauthentifizierung) verwenden. Für die einfachsten Fälle können Sie <abbr title="HTTP-Basisauthentifizierung">HTTP Basic Auth</abbr> verwenden.
Bei HTTP Basic Auth erwartet die Anwendung einen Header, der einen Benutzernamen und ein Passwort enthält. Bei HTTP Basic Auth erwartet die Anwendung einen Header, der einen Benutzernamen und ein Passwort enthält.

2
docs/de/docs/advanced/security/oauth2-scopes.md

@ -1,6 +1,6 @@
# OAuth2-Scopes { #oauth2-scopes } # OAuth2-Scopes { #oauth2-scopes }
Sie können OAuth2-Scopes (deutsch: Geltungsbereiche) direkt in **FastAPI** verwenden, sie sind nahtlos integriert. Sie können OAuth2-<abbr title="Geltungsbereiche">Scopes</abbr> direkt in **FastAPI** verwenden, sie sind nahtlos integriert.
Das ermöglicht es Ihnen, ein feingranuliertes Berechtigungssystem nach dem OAuth2-Standard in Ihre OpenAPI-Anwendung (und deren API-Dokumentation) zu integrieren. Das ermöglicht es Ihnen, ein feingranuliertes Berechtigungssystem nach dem OAuth2-Standard in Ihre OpenAPI-Anwendung (und deren API-Dokumentation) zu integrieren.

6
docs/de/docs/alternatives.md

@ -20,7 +20,7 @@ Es ist das beliebteste Python-Framework und genießt großes Vertrauen. Es wird
Es ist relativ eng mit relationalen Datenbanken (wie MySQL oder PostgreSQL) gekoppelt, daher ist es nicht sehr einfach, eine NoSQL-Datenbank (wie Couchbase, MongoDB, Cassandra, usw.) als Hauptspeicherengine zu verwenden. Es ist relativ eng mit relationalen Datenbanken (wie MySQL oder PostgreSQL) gekoppelt, daher ist es nicht sehr einfach, eine NoSQL-Datenbank (wie Couchbase, MongoDB, Cassandra, usw.) als Hauptspeicherengine zu verwenden.
Es wurde erstellt, um den HTML-Code im Backend zu generieren, nicht um APIs zu erstellen, die von einem modernen Frontend (wie React, Vue.js und Angular) oder von anderen Systemen (wie <abbr title="Internet of Things">IoT</abbr>-Geräten) verwendet werden, um mit ihm zu kommunizieren. Es wurde erstellt, um den HTML-Code im Backend zu generieren, nicht um APIs zu erstellen, die von einem modernen Frontend (wie React, Vue.js und Angular) oder von anderen Systemen (wie <abbr title="Internet of Things – Internet der Dinge">IoT</abbr>-Geräten) verwendet werden, um mit ihm zu kommunizieren.
### <a href="https://www.django-rest-framework.org/" class="external-link" target="_blank">Django REST Framework</a> { #django-rest-framework } ### <a href="https://www.django-rest-framework.org/" class="external-link" target="_blank">Django REST Framework</a> { #django-rest-framework }
@ -145,7 +145,7 @@ Ohne ein Datenvalidierungssystem müssten Sie alle Prüfungen manuell im Code du
Für diese Funktionen wurde Marshmallow entwickelt. Es ist eine großartige Bibliothek und ich habe sie schon oft genutzt. Für diese Funktionen wurde Marshmallow entwickelt. Es ist eine großartige Bibliothek und ich habe sie schon oft genutzt.
Aber sie wurde erstellt, bevor Typhinweise in Python existierten. Um also ein <abbr title="die Definition, wie Daten geformt sein werden sollen">Schema</abbr> zu definieren, müssen Sie bestimmte Werkzeuge und Klassen verwenden, die von Marshmallow bereitgestellt werden. Aber sie wurde erstellt, bevor Typhinweise in Python existierten. Um also ein <abbr title="die Definition, wie Daten geformt sein sollen">Schema</abbr> zu definieren, müssen Sie bestimmte Werkzeuge und Klassen verwenden, die von Marshmallow bereitgestellt werden.
/// check | Inspirierte **FastAPI** /// check | Inspirierte **FastAPI**
@ -474,7 +474,7 @@ Es ist der empfohlene Server für Starlette und **FastAPI**.
Hauptwebserver zum Ausführen von **FastAPI**-Anwendungen. Hauptwebserver zum Ausführen von **FastAPI**-Anwendungen.
Sie können ihn mit Gunicorn kombinieren, um einen asynchronen Multiprozess-Server zu erhalten. Sie können auch die Kommandozeilenoption `--workers` verwenden, um einen asynchronen Multiprozess-Server zu erhalten.
Weitere Details finden Sie im Abschnitt [Deployment](deployment/index.md){.internal-link target=_blank}. Weitere Details finden Sie im Abschnitt [Deployment](deployment/index.md){.internal-link target=_blank}.

2
docs/de/docs/deployment/concepts.md

@ -186,7 +186,7 @@ In vielen Fällen möchten Sie jedoch mehrere Workerprozesse gleichzeitig ausfü
Wenn Sie mehr Clients haben, als ein einzelner Prozess verarbeiten kann (z. B. wenn die virtuelle Maschine nicht sehr groß ist) und die CPU des Servers **mehrere Kerne** hat, dann könnten **mehrere Prozesse** gleichzeitig mit derselben Anwendung laufen und alle Requests unter sich verteilen. Wenn Sie mehr Clients haben, als ein einzelner Prozess verarbeiten kann (z. B. wenn die virtuelle Maschine nicht sehr groß ist) und die CPU des Servers **mehrere Kerne** hat, dann könnten **mehrere Prozesse** gleichzeitig mit derselben Anwendung laufen und alle Requests unter sich verteilen.
Wenn Sie mit **mehreren Prozessen** dasselbe API-Programm ausführen, werden diese üblicherweise als **Worker** (deutsch: Arbeiter) bezeichnet. Wenn Sie mit **mehreren Prozessen** dasselbe API-Programm ausführen, werden diese üblicherweise als <abbr title="Arbeiter">**Worker**</abbr> bezeichnet.
### Workerprozesse und Ports { #worker-processes-and-ports } ### Workerprozesse und Ports { #worker-processes-and-ports }

2
docs/de/docs/deployment/docker.md

@ -60,7 +60,7 @@ Und der **Container** selbst (im Gegensatz zum **Containerimage**) ist die tats
Docker ist eines der wichtigsten Tools zum Erstellen und Verwalten von **Containerimages** und **Containern**. Docker ist eines der wichtigsten Tools zum Erstellen und Verwalten von **Containerimages** und **Containern**.
Und es gibt einen öffentlichen <a href="https://hub.docker.com/" class="external-link" target="_blank">Docker Hub</a> (deutsch: Umschlagplatz) mit vorgefertigten **offiziellen Containerimages** für viele Tools, Umgebungen, Datenbanken und Anwendungen. Und es gibt einen öffentlichen <a href="https://hub.docker.com/" class="external-link" target="_blank">Docker <abbr title="Umschlagplatz">Hub</abbr></a> mit vorgefertigten **offiziellen Containerimages** für viele Tools, Umgebungen, Datenbanken und Anwendungen.
Beispielsweise gibt es ein offizielles <a href="https://hub.docker.com/_/python" class="external-link" target="_blank">Python-Image</a>. Beispielsweise gibt es ein offizielles <a href="https://hub.docker.com/_/python" class="external-link" target="_blank">Python-Image</a>.

2
docs/de/docs/deployment/index.md

@ -4,7 +4,7 @@ Das Deployment einer **FastAPI**-Anwendung ist relativ einfach.
## Was bedeutet Deployment? { #what-does-deployment-mean } ## Was bedeutet Deployment? { #what-does-deployment-mean }
**Deployment** (deutsch: Bereitstellen der Anwendung) bedeutet, die notwendigen Schritte durchzuführen, um die Anwendung **für die Endbenutzer verfügbar** zu machen. <abbr title="Bereitstellen der Anwendung">**Deployment**</abbr> bedeutet, die notwendigen Schritte durchzuführen, um die Anwendung **für die Endbenutzer verfügbar** zu machen.
Bei einer **Web-API** bedeutet das normalerweise, diese auf einem **entfernten Rechner** zu platzieren, mit einem **Serverprogramm**, welches gute Leistung, Stabilität, usw. bietet, damit Ihre **Benutzer** auf die Anwendung effizient und ohne Unterbrechungen oder Probleme **zugreifen** können. Bei einer **Web-API** bedeutet das normalerweise, diese auf einem **entfernten Rechner** zu platzieren, mit einem **Serverprogramm**, welches gute Leistung, Stabilität, usw. bietet, damit Ihre **Benutzer** auf die Anwendung effizient und ohne Unterbrechungen oder Probleme **zugreifen** können.

14
docs/de/docs/environment-variables.md

@ -10,7 +10,7 @@ Eine Umgebungsvariable (auch bekannt als „**env var**“) ist eine Variable, d
Umgebungsvariablen können nützlich sein, um **Einstellungen** der Anwendung zu handhaben, als Teil der **Installation** von Python usw. Umgebungsvariablen können nützlich sein, um **Einstellungen** der Anwendung zu handhaben, als Teil der **Installation** von Python usw.
## Erstellen und Verwenden von Umgebungsvariablen { #create-and-use-env-vars } ## Umgebungsvariablen erstellen und verwenden { #create-and-use-env-vars }
Sie können Umgebungsvariablen in der **Shell (Terminal)** erstellen und verwenden, ohne Python zu benötigen: Sie können Umgebungsvariablen in der **Shell (Terminal)** erstellen und verwenden, ohne Python zu benötigen:
@ -129,14 +129,14 @@ Hello Wade Wilson from Python
Da Umgebungsvariablen außerhalb des Codes gesetzt werden können, aber vom Code gelesen werden können und nicht mit den restlichen Dateien gespeichert (in `git` committet) werden müssen, werden sie häufig für Konfigurationen oder **Einstellungen** verwendet. Da Umgebungsvariablen außerhalb des Codes gesetzt werden können, aber vom Code gelesen werden können und nicht mit den restlichen Dateien gespeichert (in `git` committet) werden müssen, werden sie häufig für Konfigurationen oder **Einstellungen** verwendet.
Sie können auch eine Umgebungsvariable nur für einen **spezifischen Programmauruf** erstellen, die nur für dieses Programm und nur für dessen Dauer verfügbar ist. Sie können auch eine Umgebungsvariable nur für einen **spezifischen Programmaufruf** erstellen, die nur für dieses Programm und nur für dessen Dauer verfügbar ist.
Um dies zu tun, erstellen Sie sie direkt vor dem Programmaufruf, in derselben Zeile: Um dies zu tun, erstellen Sie sie direkt vor dem Programmaufruf, in derselben Zeile:
<div class="termy"> <div class="termy">
```console ```console
// Erstellen Sie eine Umgebungsvariable MY_NAME in der Zeile für diesen Programmauruf // Erstellen Sie eine Umgebungsvariable MY_NAME in der Zeile für diesen Programmaufruf
$ MY_NAME="Wade Wilson" python main.py $ MY_NAME="Wade Wilson" python main.py
// Jetzt kann es die Umgebungsvariable lesen // Jetzt kann es die Umgebungsvariable lesen
@ -165,7 +165,7 @@ Das bedeutet, dass **jeder Wert**, der in Python von einer Umgebungsvariable gel
Sie werden mehr darüber lernen, wie man Umgebungsvariablen zur Handhabung von **Anwendungseinstellungen** verwendet, im [Handbuch für fortgeschrittene Benutzer – Einstellungen und Umgebungsvariablen](./advanced/settings.md){.internal-link target=_blank}. Sie werden mehr darüber lernen, wie man Umgebungsvariablen zur Handhabung von **Anwendungseinstellungen** verwendet, im [Handbuch für fortgeschrittene Benutzer – Einstellungen und Umgebungsvariablen](./advanced/settings.md){.internal-link target=_blank}.
## `PATH` Umgebungsvariable { #path-environment-variable } ## `PATH`-Umgebungsvariable { #path-environment-variable }
Es gibt eine **spezielle** Umgebungsvariable namens **`PATH`**, die von den Betriebssystemen (Linux, macOS, Windows) verwendet wird, um Programme zu finden, die ausgeführt werden sollen. Es gibt eine **spezielle** Umgebungsvariable namens **`PATH`**, die von den Betriebssystemen (Linux, macOS, Windows) verwendet wird, um Programme zu finden, die ausgeführt werden sollen.
@ -209,7 +209,7 @@ Zum Beispiel, wenn Sie `python` im Terminal eingeben, sucht das Betriebssystem n
Wenn es es findet, wird es **benutzt**. Andernfalls sucht es weiter in den **anderen Verzeichnissen**. Wenn es es findet, wird es **benutzt**. Andernfalls sucht es weiter in den **anderen Verzeichnissen**.
### Installation von Python und Aktualisierung des `PATH` { #installing-python-and-updating-the-path } ### Python installieren und den `PATH` aktualisieren { #installing-python-and-updating-the-path }
Wenn Sie Python installieren, könnten Sie gefragt werden, ob Sie die `PATH`-Umgebungsvariable aktualisieren möchten. Wenn Sie Python installieren, könnten Sie gefragt werden, ob Sie die `PATH`-Umgebungsvariable aktualisieren möchten.
@ -217,7 +217,7 @@ Wenn Sie Python installieren, könnten Sie gefragt werden, ob Sie die `PATH`-Umg
Angenommen, Sie installieren Python und es landet in einem Verzeichnis `/opt/custompython/bin`. Angenommen, Sie installieren Python und es landet in einem Verzeichnis `/opt/custompython/bin`.
Wenn Sie erlauben, die `PATH` Umgebungsvariable zu aktualisieren, fügt der Installer `/opt/custompython/bin` zur `PATH` Umgebungsvariable hinzu. Wenn Sie erlauben, die `PATH`-Umgebungsvariable zu aktualisieren, fügt der Installer `/opt/custompython/bin` zur `PATH`-Umgebungsvariable hinzu.
Das könnte so aussehen: Das könnte so aussehen:
@ -233,7 +233,7 @@ Auf diese Weise, wenn Sie `python` im Terminal eingeben, findet das System das P
Angenommen, Sie installieren Python und es landet in einem Verzeichnis `C:\opt\custompython\bin`. Angenommen, Sie installieren Python und es landet in einem Verzeichnis `C:\opt\custompython\bin`.
Wenn Sie erlauben, die `PATH` Umgebungsvariable zu aktualisieren, fügt der Installer `C:\opt\custompython\bin` zur `PATH` Umgebungsvariable hinzu. Wenn Sie erlauben, die `PATH`-Umgebungsvariable zu aktualisieren, fügt der Installer `C:\opt\custompython\bin` zur `PATH`-Umgebungsvariable hinzu.
```plaintext ```plaintext
C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin

22
docs/de/docs/index.md

@ -5,7 +5,7 @@
</style> </style>
<p align="center"> <p align="center">
<a href="https://fastapi.tiangolo.com"><img src="https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" alt="FastAPI"></a> <a href="https://fastapi.tiangolo.com/de"><img src="https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" alt="FastAPI"></a>
</p> </p>
<p align="center"> <p align="center">
<em>FastAPI-Framework, hochperformant, leicht zu erlernen, schnell zu programmieren, einsatzbereit</em> <em>FastAPI-Framework, hochperformant, leicht zu erlernen, schnell zu programmieren, einsatzbereit</em>
@ -27,7 +27,7 @@
--- ---
**Dokumentation**: <a href="https://fastapi.tiangolo.com" target="_blank">https://fastapi.tiangolo.com</a> **Dokumentation**: <a href="https://fastapi.tiangolo.com/de" target="_blank">https://fastapi.tiangolo.com/de</a>
**Quellcode**: <a href="https://github.com/fastapi/fastapi" target="_blank">https://github.com/fastapi/fastapi</a> **Quellcode**: <a href="https://github.com/fastapi/fastapi" target="_blank">https://github.com/fastapi/fastapi</a>
@ -63,7 +63,7 @@ Seine Schlüssel-Merkmale sind:
<!-- /sponsors --> <!-- /sponsors -->
<a href="https://fastapi.tiangolo.com/fastapi-people/#sponsors" class="external-link" target="_blank">Andere Sponsoren</a> <a href="https://fastapi.tiangolo.com/de/fastapi-people/#sponsors" class="external-link" target="_blank">Andere Sponsoren</a>
## Meinungen { #opinions } ## Meinungen { #opinions }
@ -128,7 +128,7 @@ FastAPI steht auf den Schultern von Giganten:
## Installation { #installation } ## Installation { #installation }
Erstellen und aktivieren Sie eine <a href="https://fastapi.tiangolo.com/virtual-environments/" class="external-link" target="_blank">virtuelle Umgebung</a> und installieren Sie dann FastAPI: Erstellen und aktivieren Sie eine <a href="https://fastapi.tiangolo.com/de/virtual-environments/" class="external-link" target="_blank">virtuelle Umgebung</a> und installieren Sie dann FastAPI:
<div class="termy"> <div class="termy">
@ -191,7 +191,7 @@ async def read_item(item_id: int, q: Union[str, None] = None):
**Hinweis**: **Hinweis**:
Wenn Sie das nicht kennen, schauen Sie sich den Abschnitt _„In Eile?“_ über <a href="https://fastapi.tiangolo.com/async/#in-eile" target="_blank">`async` und `await` in der Dokumentation</a> an. Wenn Sie das nicht kennen, schauen Sie sich den Abschnitt _„In Eile?“_ über <a href="https://fastapi.tiangolo.com/de/async/#in-a-hurry" target="_blank">`async` und `await` in der Dokumentation</a> an.
</details> </details>
@ -233,7 +233,7 @@ Der Befehl `fastapi dev` liest Ihre `main.py`-Datei, erkennt die **FastAPI**-App
Standardmäßig wird `fastapi dev` mit aktiviertem Auto-Reload für die lokale Entwicklung gestartet. Standardmäßig wird `fastapi dev` mit aktiviertem Auto-Reload für die lokale Entwicklung gestartet.
Sie können mehr darüber in der <a href="https://fastapi.tiangolo.com/fastapi-cli/" target="_blank">FastAPI CLI-Dokumentation</a> lesen. Sie können mehr darüber in der <a href="https://fastapi.tiangolo.com/de/fastapi-cli/" target="_blank">FastAPI CLI-Dokumentation</a> lesen.
</details> </details>
@ -251,8 +251,8 @@ Sie haben bereits eine API erstellt, welche:
* HTTP-Anfragen auf den _Pfaden_ `/` und `/items/{item_id}` entgegennimmt. * HTTP-Anfragen auf den _Pfaden_ `/` und `/items/{item_id}` entgegennimmt.
* Beide _Pfade_ erhalten `GET` <em>Operationen</em> (auch bekannt als HTTP _Methoden_). * Beide _Pfade_ erhalten `GET` <em>Operationen</em> (auch bekannt als HTTP _Methoden_).
* Der _Pfad_ `/items/{item_id}` hat einen _Pfadparameter_ `item_id`, der ein `int` sein sollte. * Der _Pfad_ `/items/{item_id}` hat einen _Pfad-Parameter_ `item_id`, der ein `int` sein sollte.
* Der _Pfad_ `/items/{item_id}` hat einen optionalen `str` _Query Parameter_ `q`. * Der _Pfad_ `/items/{item_id}` hat einen optionalen `str` _Query-Parameter_ `q`.
### Interaktive API-Dokumentation { #interactive-api-docs } ### Interaktive API-Dokumentation { #interactive-api-docs }
@ -365,7 +365,7 @@ item: Item
* <abbr title="auch bekannt als: Serialisierung, Parsen, Marshalling">Konvertierung</abbr> von Eingabedaten: Aus dem Netzwerk kommend, zu Python-Daten und -Typen. Lesen von: * <abbr title="auch bekannt als: Serialisierung, Parsen, Marshalling">Konvertierung</abbr> von Eingabedaten: Aus dem Netzwerk kommend, zu Python-Daten und -Typen. Lesen von:
* JSON. * JSON.
* Pfad-Parametern. * Pfad-Parametern.
* Abfrage-Parametern. * Query-Parametern.
* Cookies. * Cookies.
* Header-Feldern. * Header-Feldern.
* Formularen. * Formularen.
@ -427,7 +427,7 @@ Versuchen Sie, diese Zeile zu ändern:
![Editor Unterstützung](https://fastapi.tiangolo.com/img/vscode-completion.png) ![Editor Unterstützung](https://fastapi.tiangolo.com/img/vscode-completion.png)
Für ein vollständigeres Beispiel, mit weiteren Funktionen, siehe das <a href="https://fastapi.tiangolo.com/tutorial/">Tutorial – Benutzerhandbuch</a>. Für ein vollständigeres Beispiel, mit weiteren Funktionen, siehe das <a href="https://fastapi.tiangolo.com/de/tutorial/">Tutorial – Benutzerhandbuch</a>.
**Spoiler-Alarm**: Das Tutorial – Benutzerhandbuch enthält: **Spoiler-Alarm**: Das Tutorial – Benutzerhandbuch enthält:
@ -448,7 +448,7 @@ Für ein vollständigeres Beispiel, mit weiteren Funktionen, siehe das <a href="
Unabhängige TechEmpower-Benchmarks zeigen **FastAPI**-Anwendungen, die unter Uvicorn laufen, als <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">eines der schnellsten verfügbaren Python-Frameworks</a>, nur hinter Starlette und Uvicorn selbst (intern von FastAPI verwendet). (*) Unabhängige TechEmpower-Benchmarks zeigen **FastAPI**-Anwendungen, die unter Uvicorn laufen, als <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">eines der schnellsten verfügbaren Python-Frameworks</a>, nur hinter Starlette und Uvicorn selbst (intern von FastAPI verwendet). (*)
Um mehr darüber zu erfahren, siehe den Abschnitt <a href="https://fastapi.tiangolo.com/benchmarks/" class="internal-link" target="_blank">Benchmarks</a>. Um mehr darüber zu erfahren, siehe den Abschnitt <a href="https://fastapi.tiangolo.com/de/benchmarks/" class="internal-link" target="_blank">Benchmarks</a>.
## Abhängigkeiten { #dependencies } ## Abhängigkeiten { #dependencies }

6
docs/de/docs/tutorial/background-tasks.md

@ -1,6 +1,6 @@
# Hintergrundtasks { #background-tasks } # Hintergrundtasks { #background-tasks }
Sie können Hintergrundtasks (deutsch: Hintergrund-Aufgaben) definieren, die *nach* der Rückgabe einer Response ausgeführt werden sollen. Sie können <abbr title="Hintergrund-Aufgaben">Hintergrundtasks</abbr> definieren, die *nach* der Rückgabe einer Response ausgeführt werden sollen.
Das ist nützlich für Vorgänge, die nach einem Request ausgeführt werden müssen, bei denen der Client jedoch nicht unbedingt auf den Abschluss des Vorgangs warten muss, bevor er die Response erhält. Das ist nützlich für Vorgänge, die nach einem Request ausgeführt werden müssen, bei denen der Client jedoch nicht unbedingt auf den Abschluss des Vorgangs warten muss, bevor er die Response erhält.
@ -71,7 +71,7 @@ Indem Sie nur `BackgroundTasks` (und nicht `BackgroundTask`) verwenden, ist es d
Es ist immer noch möglich, `BackgroundTask` allein in FastAPI zu verwenden, aber Sie müssen das Objekt in Ihrem Code erstellen und eine Starlette-`Response` zurückgeben, die es enthält. Es ist immer noch möglich, `BackgroundTask` allein in FastAPI zu verwenden, aber Sie müssen das Objekt in Ihrem Code erstellen und eine Starlette-`Response` zurückgeben, die es enthält.
Weitere Details finden Sie in der <a href="https://www.starlette.io/background/" class="external-link" target="_blank">offiziellen Starlette-Dokumentation für Hintergrundtasks</a>. Weitere Details finden Sie in <a href="https://www.starlette.io/background/" class="external-link" target="_blank">Starlettes offizieller Dokumentation für Hintergrundtasks</a>.
## Vorbehalt { #caveat } ## Vorbehalt { #caveat }
@ -79,7 +79,7 @@ Wenn Sie umfangreiche Hintergrundberechnungen durchführen müssen und diese nic
Sie erfordern in der Regel komplexere Konfigurationen und einen Nachrichten-/Job-Queue-Manager wie RabbitMQ oder Redis, ermöglichen Ihnen jedoch die Ausführung von Hintergrundtasks in mehreren Prozessen und insbesondere auf mehreren Servern. Sie erfordern in der Regel komplexere Konfigurationen und einen Nachrichten-/Job-Queue-Manager wie RabbitMQ oder Redis, ermöglichen Ihnen jedoch die Ausführung von Hintergrundtasks in mehreren Prozessen und insbesondere auf mehreren Servern.
Wenn Sie jedoch über dieselbe **FastAPI**-Anwendung auf Variablen und Objekte zugreifen oder kleine Hintergrundtasks ausführen müssen (z. B. das Senden einer E-Mail-Benachrichtigung), können Sie einfach `BackgroundTasks` verwenden. Wenn Sie jedoch über dieselbe **FastAPI**-App auf Variablen und Objekte zugreifen oder kleine Hintergrundtasks ausführen müssen (z. B. das Senden einer E-Mail-Benachrichtigung), können Sie einfach `BackgroundTasks` verwenden.
## Zusammenfassung { #recap } ## Zusammenfassung { #recap }

4
docs/de/docs/tutorial/body.md

@ -1,8 +1,8 @@
# Requestbody { #request-body } # Requestbody { #request-body }
Wenn Sie Daten von einem <abbr title="Client: Eine Software, die sich mit einem Server verbindet.">Client</abbr> (sagen wir, einem Browser) zu Ihrer API senden müssen, senden Sie sie als **Requestbody** (deutsch: Anfragekörper). Wenn Sie Daten von einem <abbr title="Client: Eine Software, die sich mit einem Server verbindet.">Client</abbr> (sagen wir, einem Browser) zu Ihrer API senden müssen, senden Sie sie als <abbr title="Anfragekörper">**Requestbody**</abbr>.
Ein **Request**body sind Daten, die vom Client zu Ihrer API gesendet werden. Ein **Response**body (deutsch: Antwortkörper) sind Daten, die Ihre API zum Client sendet. Ein **Request**body sind Daten, die vom Client zu Ihrer API gesendet werden. Ein <abbr title="Antwortkörper">**Response**body</abbr> sind Daten, die Ihre API zum Client sendet.
Ihre API muss fast immer einen **Response**body senden. Aber Clients müssen nicht unbedingt immer **Requestbodys** senden, manchmal fordern sie nur einen Pfad an, vielleicht mit einigen Query-Parametern, aber senden keinen Body. Ihre API muss fast immer einen **Response**body senden. Aber Clients müssen nicht unbedingt immer **Requestbodys** senden, manchmal fordern sie nur einen Pfad an, vielleicht mit einigen Query-Parametern, aber senden keinen Body.

4
docs/de/docs/tutorial/cors.md

@ -1,10 +1,10 @@
# CORS (Cross-Origin Resource Sharing) { #cors-cross-origin-resource-sharing } # CORS (Cross-Origin Resource Sharing) { #cors-cross-origin-resource-sharing }
<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" class="external-link" target="_blank">CORS oder „Cross-Origin Resource Sharing</a> (deutsch: Ursprungsübergreifende Ressourcenfreigabe) bezieht sich auf Situationen, in denen ein Frontend, das in einem Browser läuft, JavaScript-Code enthält, der mit einem Backend kommuniziert, und das Backend sich in einem anderen „Origin“ als das Frontend befindet. <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" class="external-link" target="_blank">CORS oder „<abbr title="Ursprungsübergreifende Ressourcenfreigabe">Cross-Origin Resource Sharing</abbr></a> bezieht sich auf Situationen, in denen ein Frontend, das in einem Browser läuft, JavaScript-Code enthält, der mit einem Backend kommuniziert, und das Backend sich in einem anderen „Origin“ als das Frontend befindet.
## Origin { #origin } ## Origin { #origin }
Ein Origin (deutsch: Ursprung) ist die Kombination aus Protokoll (`http`, `https`), Domain (`myapp.com`, `localhost`, `localhost.tiangolo.com`) und Port (`80`, `443`, `8080`). Ein <abbr title="Ursprung">Origin</abbr> ist die Kombination aus Protokoll (`http`, `https`), Domain (`myapp.com`, `localhost`, `localhost.tiangolo.com`) und Port (`80`, `443`, `8080`).
Alle folgenden sind also unterschiedliche Origins: Alle folgenden sind also unterschiedliche Origins:

2
docs/de/docs/tutorial/path-operation-configuration.md

@ -50,7 +50,7 @@ In diesem Fall macht es Sinn, die Tags in einem `Enum` zu speichern.
## Zusammenfassung und Beschreibung { #summary-and-description } ## Zusammenfassung und Beschreibung { #summary-and-description }
Sie können eine `summary` (deutsch: Zusammenfassung) und eine `description` (deutsch: Beschreibung) hinzufügen: Sie können eine <abbr title="Zusammenfassung">`summary`</abbr> und eine <abbr title="Beschreibung">`description`</abbr> hinzufügen:
{* ../../docs_src/path_operation_configuration/tutorial003_py310.py hl[18:19] *} {* ../../docs_src/path_operation_configuration/tutorial003_py310.py hl[18:19] *}

22
docs/de/docs/tutorial/path-params-numeric-validations.md

@ -4,7 +4,7 @@ So wie Sie mit `Query` für Query-Parameter zusätzliche Validierungen und Metad
## `Path` importieren { #import-path } ## `Path` importieren { #import-path }
Importieren Sie zuerst `Path` von `fastapi`, und importieren Sie `Annotated`. Importieren Sie zuerst `Path` von `fastapi`, und importieren Sie `Annotated`:
{* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *} {* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *}
@ -32,7 +32,7 @@ Ein Pfad-Parameter ist immer erforderlich, da er Teil des Pfads sein muss. Selbs
/// ///
## Sortieren Sie die Parameter, wie Sie möchten { #order-the-parameters-as-you-need } ## Die Parameter sortieren, wie Sie möchten { #order-the-parameters-as-you-need }
/// tip | Tipp /// tip | Tipp
@ -70,7 +70,7 @@ Aber bedenken Sie, dass Sie dieses Problem nicht haben, wenn Sie `Annotated` ver
{* ../../docs_src/path_params_numeric_validations/tutorial002_an_py39.py *} {* ../../docs_src/path_params_numeric_validations/tutorial002_an_py39.py *}
## Sortieren Sie die Parameter wie Sie möchten: Tricks { #order-the-parameters-as-you-need-tricks } ## Die Parameter sortieren, wie Sie möchten: Tricks { #order-the-parameters-as-you-need-tricks }
/// tip | Tipp /// tip | Tipp
@ -105,7 +105,7 @@ Bedenken Sie, dass Sie, wenn Sie `Annotated` verwenden, da Sie keine Funktionspa
Mit `Query` und `Path` (und anderen, die Sie später sehen werden) können Sie Zahlenbeschränkungen deklarieren. Mit `Query` und `Path` (und anderen, die Sie später sehen werden) können Sie Zahlenbeschränkungen deklarieren.
Hier, mit `ge=1`, muss `item_id` eine ganze Zahl sein, die „`g`reater than or `e`qual to“ `1` ist (deutsch: größer oder gleich). Hier, mit `ge=1`, muss `item_id` eine ganze Zahl sein, die „`g`reater than or `e`qual to“ (größer oder gleich) `1` ist.
{* ../../docs_src/path_params_numeric_validations/tutorial004_an_py39.py hl[10] *} {* ../../docs_src/path_params_numeric_validations/tutorial004_an_py39.py hl[10] *}
@ -113,14 +113,14 @@ Hier, mit `ge=1`, muss `item_id` eine ganze Zahl sein, die „`g`reater than or
Das Gleiche gilt für: Das Gleiche gilt für:
* `gt`: `g`reater `t`han (deutsch: größer als) * `gt`: `g`reater `t`han (größer als)
* `le`: `l`ess than or `e`qual (deutsch: kleiner oder gleich) * `le`: `l`ess than or `e`qual (kleiner oder gleich)
{* ../../docs_src/path_params_numeric_validations/tutorial005_an_py39.py hl[10] *} {* ../../docs_src/path_params_numeric_validations/tutorial005_an_py39.py hl[10] *}
## Validierung von Zahlen: Floats, größer und kleiner { #number-validations-floats-greater-than-and-less-than } ## Validierung von Zahlen: Floats, größer und kleiner { #number-validations-floats-greater-than-and-less-than }
Zahlenvalidierung funktioniert auch für `float`-Werte (deutsch: Fließkommazahlen). Zahlenvalidierung funktioniert auch für <abbr title="Fließkommazahlen">`float`</abbr>-Werte.
Hier wird es wichtig, in der Lage zu sein, <abbr title="greater than"><code>gt</code></abbr> und nicht nur <abbr title="greater than or equal"><code>ge</code></abbr> zu deklarieren. Da Sie mit dieser Option erzwingen können, dass ein Wert größer als `0` sein muss, selbst wenn er kleiner als `1` ist. Hier wird es wichtig, in der Lage zu sein, <abbr title="greater than"><code>gt</code></abbr> und nicht nur <abbr title="greater than or equal"><code>ge</code></abbr> zu deklarieren. Da Sie mit dieser Option erzwingen können, dass ein Wert größer als `0` sein muss, selbst wenn er kleiner als `1` ist.
@ -136,10 +136,10 @@ Mit `Query`, `Path` (und anderen, die Sie noch nicht gesehen haben) können Sie
Und Sie können auch Zahlenvalidierungen deklarieren: Und Sie können auch Zahlenvalidierungen deklarieren:
* `gt`: `g`reater `t`han (deutsch: größer als) * `gt`: `g`reater `t`han (größer als)
* `ge`: `g`reater than or `e`qual (deutsch: größer oder gleich) * `ge`: `g`reater than or `e`qual (größer oder gleich)
* `lt`: `l`ess `t`han (deutsch: kleiner als) * `lt`: `l`ess `t`han (kleiner als)
* `le`: `l`ess than or `e`qual (deutsch: kleiner oder gleich) * `le`: `l`ess than or `e`qual (kleiner oder gleich)
/// info | Info /// info | Info

2
docs/de/docs/tutorial/query-params.md

@ -4,7 +4,7 @@ Wenn Sie in Ihrer Funktion andere Parameter deklarieren, die nicht Teil der Pfad
{* ../../docs_src/query_params/tutorial001.py hl[9] *} {* ../../docs_src/query_params/tutorial001.py hl[9] *}
Die Query (deutsch: Abfrage) ist die Menge von Schlüssel-Wert-Paaren, die nach dem `?` in einer URL folgen und durch `&`-Zeichen getrennt sind. Die <abbr title="Abfrage">Query</abbr> ist die Menge von Schlüssel-Wert-Paaren, die nach dem `?` in einer URL folgen und durch `&`-Zeichen getrennt sind.
Zum Beispiel sind in der URL: Zum Beispiel sind in der URL:

2
docs/de/docs/tutorial/request-files.md

@ -59,7 +59,7 @@ Definieren Sie einen Datei-Parameter mit dem Typ `UploadFile`:
`UploadFile` zu verwenden, hat mehrere Vorzüge gegenüber `bytes`: `UploadFile` zu verwenden, hat mehrere Vorzüge gegenüber `bytes`:
* Sie müssen `File()` nicht als Parameter-Defaultwert verwenden. * Sie müssen `File()` nicht als Parameter-Defaultwert verwenden.
* Es wird eine „gespoolte“ Datei (deutsch: warteschlangenartig) verwendet: * Es wird eine „<abbr title="warteschlangenartig">gespoolte</abbr>“ Datei verwendet:
* Eine Datei, die bis zu einem bestimmten Größen-Limit im Arbeitsspeicher behalten wird, und wenn das Limit überschritten wird, auf der Festplatte gespeichert wird. * Eine Datei, die bis zu einem bestimmten Größen-Limit im Arbeitsspeicher behalten wird, und wenn das Limit überschritten wird, auf der Festplatte gespeichert wird.
* Das bedeutet, es wird für große Dateien wie Bilder, Videos, große Binärdateien, usw. gut funktionieren, ohne den ganzen Arbeitsspeicher aufzubrauchen. * Das bedeutet, es wird für große Dateien wie Bilder, Videos, große Binärdateien, usw. gut funktionieren, ohne den ganzen Arbeitsspeicher aufzubrauchen.
* Sie können Metadaten aus der hochgeladenen Datei auslesen. * Sie können Metadaten aus der hochgeladenen Datei auslesen.

2
docs/de/docs/tutorial/request-forms.md

@ -52,7 +52,7 @@ HTML-Formulare (`<form></form>`) senden die Daten in einer „speziellen“ Kodi
/// note | Technische Details /// note | Technische Details
Daten aus Formularen werden normalerweise mit dem „media type“ (deutsch: Medientyp) `application/x-www-form-urlencoded` kodiert. Daten aus Formularen werden normalerweise mit dem „<abbr title="Medientyp">media type</abbr> `application/x-www-form-urlencoded` kodiert.
Wenn das Formular stattdessen Dateien enthält, werden diese mit `multipart/form-data` kodiert. Im nächsten Kapitel erfahren Sie mehr über die Handhabung von Dateien. Wenn das Formular stattdessen Dateien enthält, werden diese mit `multipart/form-data` kodiert. Im nächsten Kapitel erfahren Sie mehr über die Handhabung von Dateien.

2
docs/de/docs/tutorial/sql-databases.md

@ -91,7 +91,7 @@ Dann fügen wir eine Funktion hinzu, die `SQLModel.metadata.create_all(engine)`
### Eine Session-Abhängigkeit erstellen ### Eine Session-Abhängigkeit erstellen
Eine **`Session`** (deutsch: Sitzung) speichert die **Objekte im Speicher** und verfolgt alle Änderungen, die an den Daten vorgenommen werden müssen, dann **verwendet sie die `engine`**, um mit der Datenbank zu kommunizieren. Eine <abbr title="Sitzung">**`Session`**</abbr> speichert die **Objekte im Speicher** und verfolgt alle Änderungen, die an den Daten vorgenommen werden müssen, dann **verwendet sie die `engine`**, um mit der Datenbank zu kommunizieren.
Wir werden eine FastAPI **Abhängigkeit** mit `yield` erstellen, die eine neue `Session` für jede Anfrage bereitstellt. Das ist es, was sicherstellt, dass wir eine einzige Session pro Anfrage verwenden. 🤓 Wir werden eine FastAPI **Abhängigkeit** mit `yield` erstellen, die eine neue `Session` für jede Anfrage bereitstellt. Das ist es, was sicherstellt, dass wir eine einzige Session pro Anfrage verwenden. 🤓

30
docs/de/docs/virtual-environments.md

@ -1,6 +1,6 @@
# Virtuelle Umgebungen { #virtual-environments } # Virtuelle Umgebungen { #virtual-environments }
Wenn Sie an Python-Projekten arbeiten, sollten Sie wahrscheinlich eine **virtuelle Umgebung** (oder einen ähnlichen Mechanismus) verwenden, um die Packages (deutsch: Pakete), die Sie für jedes Projekt installieren, zu isolieren. Wenn Sie an Python-Projekten arbeiten, sollten Sie wahrscheinlich eine **virtuelle Umgebung** (oder einen ähnlichen Mechanismus) verwenden, um die <abbr title="Python Installationspakete">Packages</abbr>, die Sie für jedes Projekt installieren, zu isolieren.
/// info | Info /// info | Info
@ -37,15 +37,15 @@ Und darin erstelle ich ein Verzeichnis pro Projekt.
<div class="termy"> <div class="termy">
```console ```console
// Zum Home-Verzeichnis wechseln // Gehe zum Home-Verzeichnis
$ cd $ cd
// Ein Verzeichnis für alle Ihre Codeprojekte erstellen // Erstelle ein Verzeichnis für alle Ihre Code-Projekte
$ mkdir code $ mkdir code
// In dieses Codeverzeichnis gehen // Gehe in dieses Code-Verzeichnis
$ cd code $ cd code
// Ein Verzeichnis für dieses Projekt erstellen // Erstelle ein Verzeichnis für dieses Projekt
$ mkdir awesome-project $ mkdir awesome-project
// In dieses Projektverzeichnis gehen // Gehe in dieses Projektverzeichnis
$ cd awesome-project $ cd awesome-project
``` ```
@ -53,7 +53,7 @@ $ cd awesome-project
## Eine virtuelle Umgebung erstellen { #create-a-virtual-environment } ## Eine virtuelle Umgebung erstellen { #create-a-virtual-environment }
Wenn Sie zum **ersten Mal** an einem Python-Projekt arbeiten, erstellen Sie eine virtuelle Umgebung **<abbr title="Es gibt andere Optionen, dies ist eine einfache Richtlinie">innerhalb Ihres Projekts</abbr>**. Wenn Sie zum **ersten Mal** an einem Python-Projekt arbeiten, erstellen Sie eine virtuelle Umgebung **<abbr title="es gibt andere Optionen, dies ist eine einfache Richtlinie">innerhalb Ihres Projekts</abbr>**.
/// tip | Tipp /// tip | Tipp
@ -166,7 +166,7 @@ $ source .venv/Scripts/activate
Jedes Mal, wenn Sie ein **neues Paket** in dieser Umgebung installieren, aktivieren Sie die Umgebung erneut. Jedes Mal, wenn Sie ein **neues Paket** in dieser Umgebung installieren, aktivieren Sie die Umgebung erneut.
So stellen Sie sicher, dass, wenn Sie ein **Terminalprogramm (<abbr title="Command Line Interface">CLI</abbr>)** verwenden, das durch dieses Paket installiert wurde, Sie das aus Ihrer virtuellen Umgebung verwenden und nicht eines, das global installiert ist, wahrscheinlich mit einer anderen Version als der, die Sie benötigen. So stellen Sie sicher, dass, wenn Sie ein **Terminalprogramm (<abbr title="command line interface – Kommandozeileninterface">CLI</abbr>)** verwenden, das durch dieses Paket installiert wurde, Sie das aus Ihrer virtuellen Umgebung verwenden und nicht eines, das global installiert ist, wahrscheinlich mit einer anderen Version als der, die Sie benötigen.
/// ///
@ -480,7 +480,7 @@ flowchart LR
subgraph global[globale Umgebung] subgraph global[globale Umgebung]
harry-1[harry v1] harry-1[harry v1]
end end
subgraph stone-project[philosophers-stone Projekt] subgraph stone-project[philosophers-stone-Projekt]
stone(philosophers-stone) -->|benötigt| harry-1 stone(philosophers-stone) -->|benötigt| harry-1
end end
``` ```
@ -506,10 +506,10 @@ flowchart LR
style harry-1 fill:#ccc,stroke-dasharray: 5 5 style harry-1 fill:#ccc,stroke-dasharray: 5 5
harry-3[harry v3] harry-3[harry v3]
end end
subgraph stone-project[philosophers-stone Projekt] subgraph stone-project[philosophers-stone-Projekt]
stone(philosophers-stone) -.-x|⛔️| harry-1 stone(philosophers-stone) -.-x|⛔️| harry-1
end end
subgraph azkaban-project[prisoner-of-azkaban Projekt] subgraph azkaban-project[prisoner-of-azkaban-Projekt]
azkaban(prisoner-of-azkaban) --> |benötigt| harry-3 azkaban(prisoner-of-azkaban) --> |benötigt| harry-3
end end
``` ```
@ -560,13 +560,13 @@ Auf diese Weise hat jedes Projekt seine eigene virtuelle Umgebung (`.venv`-Verze
```mermaid ```mermaid
flowchart TB flowchart TB
subgraph stone-project[philosophers-stone Projekt] subgraph stone-project[philosophers-stone-Projekt]
stone(philosophers-stone) --->|benötigt| harry-1 stone(philosophers-stone) --->|benötigt| harry-1
subgraph venv1[.venv] subgraph venv1[.venv]
harry-1[harry v1] harry-1[harry v1]
end end
end end
subgraph azkaban-project[prisoner-of-azkaban Projekt] subgraph azkaban-project[prisoner-of-azkaban-Projekt]
azkaban(prisoner-of-azkaban) --->|benötigt| harry-3 azkaban(prisoner-of-azkaban) --->|benötigt| harry-3
subgraph venv2[.venv] subgraph venv2[.venv]
harry-3[harry v3] harry-3[harry v3]
@ -750,7 +750,7 @@ Sie verwenden `which` auf Linux und macOS und `Get-Command` in Windows PowerShel
So funktioniert dieser Befehl: Er wird in der `PATH`-Umgebungsvariable nachsehen und **jeden Pfad in der Reihenfolge durchgehen**, um das Programm namens `python` zu finden. Sobald er es findet, wird er Ihnen **den Pfad** zu diesem Programm anzeigen. So funktioniert dieser Befehl: Er wird in der `PATH`-Umgebungsvariable nachsehen und **jeden Pfad in der Reihenfolge durchgehen**, um das Programm namens `python` zu finden. Sobald er es findet, wird er Ihnen **den Pfad** zu diesem Programm anzeigen.
Der wichtigste Punkt ist, dass, wenn Sie `python` aufrufen, genau dieses "`python`" ausgeführt wird. Der wichtigste Punkt ist, dass, wenn Sie `python` aufrufen, genau dieses „`python`“ ausgeführt wird.
So können Sie überprüfen, ob Sie sich in der richtigen virtuellen Umgebung befinden. So können Sie überprüfen, ob Sie sich in der richtigen virtuellen Umgebung befinden.
@ -797,7 +797,7 @@ Traceback (most recent call last):
</div> </div>
Wenn Sie jedoch die virtuelle Umgebung deaktivieren und die neue für `prisoner-of-azkaban` aktivieren, wird beim Ausführen von `python` das Python aus der virtuellen Umgebung in `prisoner-of-azkaban` verwendet. Wenn Sie jedoch die virtuelle Umgebung deaktivieren und die neue für `prisoner-of-askaban` aktivieren, wird beim Ausführen von `python` das Python aus der virtuellen Umgebung in `prisoner-of-azkaban` verwendet.
<div class="termy"> <div class="termy">

142
docs/de/llm-prompt.md

@ -1,11 +1,12 @@
Translate to German (Deutsch). 1) Translate to German (Deutsch).
Language code: de. Language code: de.
Use the formal grammar (use "Sie" instead of "Du").
2) Use the formal grammar (use "Sie" instead of "Du").
Translate quotation marks ("") in the English text with typographic quotation marks („“) in the German translation.
3) Translate quotation marks ("") in the English source with typographic quotation marks („“) in the German translation.
Example: Example:
@ -17,38 +18,145 @@ Result (German):
„Wort“ „Wort“
But don't do that when the quotation marks are themselves surrounded by backticks (`). But do not do that when the quotation marks are surrounded by backticks (`), speak, when they are inside a code snippet, see earlier defined rule.
Example: Three Examples:
Source (English): Source (English) – These are three code snippets:
`"word"` `"word"`
`"me"`
`"items"`
Result (German) – You don't translate the word, and you don't change the quotation marks: Result (German) – You change nothing:
`"word"` `"word"`
`"me"`
`"items"`
Do not randomly add normal or typographic quotation marks into the German translation.
Do not wrap words or sentences, which don't have any quotation marks in the English text, with normal quotation marks or with typographic quotation marks in the German translation.
4) Translate HTML abbr elements as follows:
In sentences, keep translations in brackets. DO NOT REMOVE THEM. Translations in brackets start with the exact text `(deutsch: `, speak, an opening bracket (`(`), followed by the text `deutsch`, followed by a colon (`:`), followed by a space (` `). And they end with a closing bracket (`)`) For example, keep `(deutsch: Anfragekörper)`, keep `(deutsch: Arbeiter)`, keep `(deutsch: Bereitstellen der Anwendung)`. Keep them even if they are not in the English text. Keep them, even if you think they are bad translations. The only exception to this rule is when you remove the whole sentence from the translation, because the whole sentence was removed in the English text. In that case also remove that translation in brackets. The reasoning for this rule is that these are one-time translations for English words which the human editor has added to the translation, in order to explain that word to the human readers of the translation. So these additions should be kept, even though they are not part of the English text. 4.1) If the title attribute gives the full phrase for an abbrevation, then keep the phrase, append a long dash (`–`), followed by the translation of the phrase.
Examples:
Source (English):
In `abbr` HTML-elements, translate the content of the `title` attribute. <abbr title="Internet of Things">IoT</abbr>
<abbr title="Central Processing Unit">CPU</abbr>
<abbr title="too long; didn't read"><strong>TL;DR:</strong></abbr>
Example: Result (German):
<abbr title="Internet of Things – Internet der Dinge">IoT</abbr>
<abbr title="Central Processing Unit – Zentrale Verarbeitungseinheit">CPU</abbr>
<abbr title="too long; didn't read – zu lang; hab's nicht gelesen"><strong>TL;DR:</strong></abbr>
Conversion scheme title attribute:
Source (English):
{full phrase}
Result (German):
{full phrase} – {translation of full phrase}
If the phrase can not be translated or it is the same in the translation, then keep the title attribute as is.
Examples:
Source (English):
<abbr title="JSON Web Tokens">JWT</abbr>
<abbr title="Enumeration">`Enum`</abbr>
Result (German):
<abbr title="JSON Web Tokens">JWT</abbr>
<abbr title="Enumeration">`Enum`</abbr>
Conversion scheme title attribute:
Source (English):
{full phrase}
Result (German):
{full phrase}
4.2) If the title attribute explains something in its own words, then translate it, if possible.
Examples:
Source (English):
<abbr title="also known as: endpoints, routes">path</abbr>
<abbr title="A program that checks for code errors">linter</abbr>
<abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>
<abbr title="before 2023-03">0.95.0</abbr>
<abbr title="2023-08-26">at the time of writing this</abbr>
Result (German):
<abbr title="auch bekannt als: Endpunkte, Routen">Pfad</abbr>
<abbr title="Programm das auf Fehler im Code prüft">Linter</abbr>
<abbr title="Konvertieren des Strings eines HTTP-Requests in Python-Daten">„Parsing“</abbr>
<abbr title="vor 2023-03">0.95.0</abbr>
<abbr title="2023-08-26">zum Zeitpunkt als das hier geschrieben wurde</abbr>
Conversion scheme title attribute:
Source (English):
{explanation}
Result (German):
{translation of explanation}
4.3) If the title attribute gives the full phrase for an abbrevation, followed by a colon (`:`) or a comma (`,`), followed by an explanation, then keep the phrase, append a long dash (`–`), followed by the translation of the phrase, followed by a colon (`:`), followed by the translation of the explanation.
Examples:
Source (English):
<abbr title="Input/Output: disk reading or writing, network communication.">I/O</abbr>
<abbr title="Content Delivery Network: Service, that provides static files.">CDN</abbr>
<abbr title="Integrated Development Environment, similar to a code editor">IDE</abbr>
<abbr title="Object Relational Mapper, a fancy term for a library where some classes represent SQL tables and instances represent rows in those tables">"ORMs"</abbr>
Result (German):
<abbr title="Input/Output – Eingabe/Ausgabe: Lesen oder Schreiben auf der Festplatte, Netzwerkkommunikation.">I/O</abbr>
<abbr title="Content Delivery Network – Inhalte auslieferndes Netzwerk: Dienst, der statische Dateien bereitstellt.">CDN</abbr>
<abbr title="Integrated Development Environment – Integrierte Entwicklungsumgebung: Ähnlich einem Code-Editor">IDE</abbr>
<abbr title="Object Relational Mapper – Objektrelationaler Mapper: Ein Fachbegriff für eine Bibliothek, in der einige Klassen SQL-Tabellen und Instanzen Zeilen in diesen Tabellen darstellen">„ORMs“</abbr>
Conversion scheme title attribute:
Source (English):
{full phrase}: {explanation}
OR
Source (English): Source (English):
<abbr title="obsolete, recommended not to use it">deprecated</abbr> {full phrase}, {explanation}
Result (German): Result (German):
<abbr title="veraltet, von der Verwendung wird abgeraten">deprecated</abbr> {full phrase} – {translation of full phrase}: {translation of explanation}
4.4) If there is an HTML abbr element in a sentence in an existing translation, but that element does not exist in the related sentence in the English text, then keep that HTML abbr element in the translation, do not change or remove it. Except when you remove the whole sentence from the translation, because the whole sentence was removed from the English text. The reasoning for this rule is, that such abbr elements are manually added by the human editor of the translation, in order to translate or explain an English word to the human readers of the translation. They would not make sense in the English text but they do make sense in the translation. So keep them in the translation, even though they are not part of the English text. This rule only applies to HTML abbr elements.
Translate headings using the infinite form. 5) Translate headings using the infinite form.
Examples: Examples:
@ -89,14 +197,14 @@ Do NOT translate with (German):
### Führen Sie Ihr Programm aus { #run-your-program } ### Führen Sie Ihr Programm aus { #run-your-program }
Follow these German instructions: 6) Follow these German instructions:
In der Regel versuche ich so weit wie möglich Worte zusammenzuschreiben, also ohne Bindestrich, es sei denn, es ist Konkretesding-Klassevondingen, etwa `Pydantic-Modell` (aber: `Datenbankmodell`), `Python-Modul` (aber: `Standardmodul`). Ich setze auch einen Bindestrich, wenn er die gleichen Buchstaben verbindet, etwa `Enum-Member`, `Cloud-Dienst`, `Template-Engine`. Oder wenn das Wort sonst einfach zu lang wird, etwa, `Performance-Optimierung`. Oder um etwas visuell besser zu dokumentieren, etwa `Pfadoperation-Dekorator`, `Pfadoperation-Funktion`. In der Regel versuche ich so weit wie möglich Worte zusammenzuschreiben, also ohne Bindestrich, es sei denn, es ist Konkretesding-Klassevondingen, etwa `Pydantic-Modell` (aber: `Datenbankmodell`), `Python-Modul` (aber: `Standardmodul`). Ich setze auch einen Bindestrich, wenn er die gleichen Buchstaben verbindet, etwa `Enum-Member`, `Cloud-Dienst`, `Template-Engine`. Oder wenn das Wort sonst einfach zu lang wird, etwa, `Performance-Optimierung`. Oder um etwas visuell besser zu dokumentieren, etwa `Pfadoperation-Dekorator`, `Pfadoperation-Funktion`.
Ich versuche nicht, alles einzudeutschen. Das bezieht sich besonders auf Begriffe aus dem Bereich der Programmierung. Ich wandele zwar korrekt in Großschreibung um und setze Bindestriche, wo notwendig, aber ansonsten lasse ich solch ein Wort unverändert. Beispielsweise wird aus dem englischen Wort `string` in der deutschen Übersetzung `String`, aber nicht `Zeichenkette`. Oder aus dem englischen Wort `request body` wird in der deutschen Übersetzung `Requestbody`, aber nicht `Anfragekörper`. Oder aus dem englischen `response` wird im Deutschen `Response`, aber nicht `Antwort`. Ich versuche nicht, alles einzudeutschen. Das bezieht sich besonders auf Begriffe aus dem Bereich der Programmierung. Ich wandele zwar korrekt in Großschreibung um und setze Bindestriche, wo notwendig, aber ansonsten lasse ich solch ein Wort unverändert. Beispielsweise wird aus dem englischen Wort `string` in der deutschen Übersetzung `String`, aber nicht `Zeichenkette`. Oder aus dem englischen Wort `request body` wird in der deutschen Übersetzung `Requestbody`, aber nicht `Anfragekörper`. Oder aus dem englischen `response` wird im Deutschen `Response`, aber nicht `Antwort`.
Below is a list of English terms and their German translations, separated by a colon (`:`). Use these translations, do not use your own. Words inside brackets are explanations for you, they are not part of the term or the translation. If a list item starts with `NOT`, then that means: do NOT use this translation. Nouns, starting with the word `the`, have their German genus – `der`, `die`, `das` – included, to help you to grammatically decline them in the translation, and they are given in singular case unless they have `(plural case)` attached, which means they are given in plural case. Verbs are given in the full infinitive – starting with the word `to`. 7) Below is a list of English terms and their German translations, separated by a colon (`:`). Use these translations, do not use your own. Words inside brackets are explanations for you, they are not part of the term or the translation. If a list item starts with `NOT`, then that means: do NOT use this translation. Nouns, starting with the word `the`, have their German genus – `der`, `die`, `das` – included, to help you to grammatically decline them in the translation, and they are given in singular case unless they have `(plural case)` attached, which means they are given in plural case. Verbs are given in the full infinitive – starting with the word `to`.
* /// check: /// check | Testen * /// check: /// check | Testen
* /// danger: /// danger | Gefahr * /// danger: /// danger | Gefahr
@ -184,4 +292,4 @@ Below is a list of English terms and their German translations, separated by a c
* X is case-insensitive: Groß-/Klein­schrei­bung ist nicht relevant in X * X is case-insensitive: Groß-/Klein­schrei­bung ist nicht relevant in X
Preserve indentation. Keep emoticons. Encode in utf-8. Use Linux line breaks (LF) 8) Preserve indentation. Keep emoticons. Encode in utf-8. Use Linux line breaks (LF)

116
scripts/translate.py

@ -24,32 +24,32 @@ non_translated_sections = (
general_prompt = """ general_prompt = """
For technical terms in English that don't have a common translation term use the original term in English. For technical terms in English that don't have a common translation term, use the original term in English.
If you have instructions to translate specific terms or phrases in a specific way, please follow those instructions instead of keeping the old and outdated content.
For code snippets or fragments, surrounded by backticks (`), don't translate the content, keep the original in English. For example, `list`, `dict`, keep them as is. For code snippets or fragments, surrounded by backticks (`), don't translate the content, keep the original in English. For example, `list`, `dict`, keep them as is.
The content is written in markdown, write the translation in markdown as well. Don't add triple backticks (`) around the generated translation content. Speak, do not add "```markdown" at the very start of the translation and do not add "```" at the very end of the translation. The content is written in Markdown, write the translation in Markdown as well.
When there is a code block, surrounded by triple backticks, do not translate its content, except for comments in the language which the code block uses.
When there's an example of code, the console or a terminal, normally surrounded by triple backticks and a keyword like "console" or "bash" (e.g. ```console), do not translate the content, keep the original in English. Examples:
For example, if the original (English) content is: Source (English) The code block is a bash code example with one comment:
```bash ```bash
# Print greeting # Print greeting
echo "Hello, World!" echo "Hello, World!"
``` ```
It should be exacly the same in the output document: Result (German):
```bash ```bash
# Print greeting # Gruß ausgeben
echo "Hello, World!" echo "Hello, World!"
``` ```
If the original (English) content is: Source (English) The code block is a console example containing HTML tags. No comments, nothing to change here:
```console ```console
$ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid">main.py</u> $ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid">main.py</u>
@ -57,7 +57,7 @@ $ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid
Searching for package file structure Searching for package file structure
``` ```
It should be exacly the same in the output document: Result (German):
```console ```console
$ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid">main.py</u> $ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid">main.py</u>
@ -65,8 +65,80 @@ $ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid
Searching for package file structure Searching for package file structure
``` ```
Source (English) The code block is a console example containing 5 comments:
```console
// Go to the home directory
$ cd
// Create a directory for all your code projects
$ mkdir code
// Enter into that code directory
$ cd code
// Create a directory for this project
$ mkdir awesome-project
// Enter into that project directory
$ cd awesome-project
```
Result (German):
```console
// Gehe zum Home-Verzeichnis
$ cd
// Erstelle ein Verzeichnis für alle Ihre Code-Projekte
$ mkdir code
// Gehe in dieses Code-Verzeichnis
$ cd code
// Erstelle ein Verzeichnis für dieses Projekt
$ mkdir awesome-project
// Gehe in dieses Projektverzeichnis
$ cd awesome-project
```
If there is an existing translation and its Mermaid diagram is in sync with the Mermaid diagram in the English source, except a few translated words, then use the Mermaid diagram of the existing translation. The human editor of the translation translated these words in the Mermaid diagram. Keep these translations, do not revert them back to the English source.
Example:
Source (English):
```mermaid
flowchart LR
subgraph global[global env]
harry-1[harry v1]
end
subgraph stone-project[philosophers-stone project]
stone(philosophers-stone) -->|requires| harry-1
end
```
Existing translation (German) has three translations:
```mermaid
flowchart LR
subgraph global[globale Umgebung]
harry-1[harry v1]
end
subgraph stone-project[philosophers-stone-Projekt]
stone(philosophers-stone) -->|benötigt| harry-1
end
```
Result (German) You change nothing:
```mermaid
flowchart LR
subgraph global[globale Umgebung]
harry-1[harry v1]
end
subgraph stone-project[philosophers-stone-Projekt]
stone(philosophers-stone) -->|benötigt| harry-1
end
```
The original content will be surrounded by triple percentage signs (%) and you should translate it to the target language. Do not include the triple percentage signs in the translation. The original content will be surrounded by triple percentage signs (%) and you should translate it to the target language. Do not include the triple percentage signs in the translation.
There are special blocks of notes, tips and others that look like: There are special blocks of notes, tips and others that look like:
/// note /// note
@ -95,6 +167,24 @@ Result:
/// details | Vista previa /// details | Vista previa
Do not convert occurrences of four slashes in a row at the start of a line (`////`) to a level four Markdown heading (`####`). The four slashes are a special syntax, which, for example, declares some text to be part of a tab in the final rendered document.
Example:
Source (English):
//// tab | Linux, macOS, Windows Bash
Wrong Result (German):
#### tab | Linux, macOS, Windows Bash
Correct Result (German):
//// tab | Linux, macOS, Windows Bash
Every Markdown heading in the English text (all levels) ends with a part inside curly brackets. This part denotes the hash of this heading, which is used in links to this heading. In translations, translate the heading, but do not translate this hash part, so that links do not break. Every Markdown heading in the English text (all levels) ends with a part inside curly brackets. This part denotes the hash of this heading, which is used in links to this heading. In translations, translate the heading, but do not translate this hash part, so that links do not break.
Examples of how to translate a heading: Examples of how to translate a heading:
@ -166,7 +256,6 @@ Result (Spanish):
<a href="https://fastapi.tiangolo.com/img/something.jpg" class="external-link" target="_blank">Algo</a> <a href="https://fastapi.tiangolo.com/img/something.jpg" class="external-link" target="_blank">Algo</a>
4) For internal links, only translate link text. 4) For internal links, only translate link text.
Example: Example:
@ -213,6 +302,7 @@ Good translation (German) – URL stays like in the English source.
Erstelle eine [Virtuelle Umgebung](../virtual-environments.md){.internal-link target=_blank} Erstelle eine [Virtuelle Umgebung](../virtual-environments.md){.internal-link target=_blank}
""" """
app = typer.Typer() app = typer.Typer()
@ -269,7 +359,7 @@ def translate_page(
print(f"Found existing translation: {out_path}") print(f"Found existing translation: {out_path}")
old_translation = out_path.read_text(encoding="utf-8") old_translation = out_path.read_text(encoding="utf-8")
print(f"Translating {en_path} to {language} ({language_name})") print(f"Translating {en_path} to {language} ({language_name})")
agent = Agent("openai:gpt-4o") agent = Agent("openai:gpt-5")
prompt_segments = [ prompt_segments = [
general_prompt, general_prompt,
@ -302,7 +392,7 @@ def translate_page(
prompt = "\n\n".join(prompt_segments) prompt = "\n\n".join(prompt_segments)
print(f"Running agent for {out_path}") print(f"Running agent for {out_path}")
result = agent.run_sync(prompt) result = agent.run_sync(prompt)
out_content = f"{result.data.strip()}\n" out_content = f"{result.output.strip()}\n"
print(f"Saving translation to {out_path}") print(f"Saving translation to {out_path}")
out_path.write_text(out_content, encoding="utf-8", newline="\n") out_path.write_text(out_content, encoding="utf-8", newline="\n")

Loading…
Cancel
Save