diff --git a/docs/de/docs/advanced/behind-a-proxy.md b/docs/de/docs/advanced/behind-a-proxy.md index c70dac72c..884cc75fd 100644 --- a/docs/de/docs/advanced/behind-a-proxy.md +++ b/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 diesen Fällen können Sie `root_path` verwenden, um Ihre Anwendung zu konfigurieren. +In diesen Fällen können Sie `root_path` 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. @@ -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 } diff --git a/docs/de/docs/advanced/events.md b/docs/de/docs/advanced/events.md index 37746c6a0..d45de8409 100644 --- a/docs/de/docs/advanced/events.md +++ b/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. -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-**Lifespan** 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. @@ -38,7 +38,7 @@ Und dann, direkt nach dem `yield`, entladen wir das Modell. Dieser Code wird aus /// 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. 🤷 diff --git a/docs/de/docs/advanced/security/http-basic-auth.md b/docs/de/docs/advanced/security/http-basic-auth.md index 13839ab7d..cb16ffaa9 100644 --- a/docs/de/docs/advanced/security/http-basic-auth.md +++ b/docs/de/docs/advanced/security/http-basic-auth.md @@ -1,6 +1,6 @@ # 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 HTTP Basic Auth verwenden. Bei HTTP Basic Auth erwartet die Anwendung einen Header, der einen Benutzernamen und ein Passwort enthält. diff --git a/docs/de/docs/advanced/security/oauth2-scopes.md b/docs/de/docs/advanced/security/oauth2-scopes.md index 5d62c07f3..f85325074 100644 --- a/docs/de/docs/advanced/security/oauth2-scopes.md +++ b/docs/de/docs/advanced/security/oauth2-scopes.md @@ -1,6 +1,6 @@ # OAuth2-Scopes { #oauth2-scopes } -Sie können OAuth2-Scopes (deutsch: Geltungsbereiche) direkt in **FastAPI** verwenden, sie sind nahtlos integriert. +Sie können OAuth2-Scopes 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. diff --git a/docs/de/docs/alternatives.md b/docs/de/docs/alternatives.md index 2761b081a..11cb8b525 100644 --- a/docs/de/docs/alternatives.md +++ b/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 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 IoT-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 IoT-Geräten) verwendet werden, um mit ihm zu kommunizieren. ### Django REST Framework { #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. -Aber sie wurde erstellt, bevor Typhinweise in Python existierten. Um also ein Schema 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 Schema zu definieren, müssen Sie bestimmte Werkzeuge und Klassen verwenden, die von Marshmallow bereitgestellt werden. /// check | Inspirierte **FastAPI** @@ -474,7 +474,7 @@ Es ist der empfohlene Server für Starlette und **FastAPI**. 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}. diff --git a/docs/de/docs/deployment/concepts.md b/docs/de/docs/deployment/concepts.md index 4d3cabb2b..7fb2e8426 100644 --- a/docs/de/docs/deployment/concepts.md +++ b/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 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 **Worker** bezeichnet. ### Workerprozesse und Ports { #worker-processes-and-ports } diff --git a/docs/de/docs/deployment/docker.md b/docs/de/docs/deployment/docker.md index 537314b9c..27c1b02a5 100644 --- a/docs/de/docs/deployment/docker.md +++ b/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**. -Und es gibt einen öffentlichen Docker Hub (deutsch: Umschlagplatz) mit vorgefertigten **offiziellen Containerimages** für viele Tools, Umgebungen, Datenbanken und Anwendungen. +Und es gibt einen öffentlichen Docker Hub mit vorgefertigten **offiziellen Containerimages** für viele Tools, Umgebungen, Datenbanken und Anwendungen. Beispielsweise gibt es ein offizielles Python-Image. diff --git a/docs/de/docs/deployment/index.md b/docs/de/docs/deployment/index.md index 0d5cc0215..7c1929781 100644 --- a/docs/de/docs/deployment/index.md +++ b/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 } -**Deployment** (deutsch: Bereitstellen der Anwendung) bedeutet, die notwendigen Schritte durchzuführen, um die Anwendung **für die Endbenutzer verfügbar** zu machen. +**Deployment** 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. diff --git a/docs/de/docs/environment-variables.md b/docs/de/docs/environment-variables.md index 751e8f8ae..74bec87cf 100644 --- a/docs/de/docs/environment-variables.md +++ b/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. -## 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: @@ -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. -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:
```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 // 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}. -## `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. @@ -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**. -### 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. @@ -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`. -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: @@ -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`. -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 C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin diff --git a/docs/de/docs/index.md b/docs/de/docs/index.md index e829c1536..8b8042e32 100644 --- a/docs/de/docs/index.md +++ b/docs/de/docs/index.md @@ -5,7 +5,7 @@

- FastAPI + FastAPI

FastAPI-Framework, hochperformant, leicht zu erlernen, schnell zu programmieren, einsatzbereit @@ -27,7 +27,7 @@ --- -**Dokumentation**: https://fastapi.tiangolo.com +**Dokumentation**: https://fastapi.tiangolo.com/de **Quellcode**: https://github.com/fastapi/fastapi @@ -63,7 +63,7 @@ Seine Schlüssel-Merkmale sind: -Andere Sponsoren +Andere Sponsoren ## Meinungen { #opinions } @@ -128,7 +128,7 @@ FastAPI steht auf den Schultern von Giganten: ## Installation { #installation } -Erstellen und aktivieren Sie eine virtuelle Umgebung und installieren Sie dann FastAPI: +Erstellen und aktivieren Sie eine virtuelle Umgebung und installieren Sie dann FastAPI:

@@ -191,7 +191,7 @@ async def read_item(item_id: int, q: Union[str, None] = None): **Hinweis**: -Wenn Sie das nicht kennen, schauen Sie sich den Abschnitt _„In Eile?“_ über `async` und `await` in der Dokumentation an. +Wenn Sie das nicht kennen, schauen Sie sich den Abschnitt _„In Eile?“_ über `async` und `await` in der Dokumentation an. @@ -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. -Sie können mehr darüber in der FastAPI CLI-Dokumentation lesen. +Sie können mehr darüber in der FastAPI CLI-Dokumentation lesen. @@ -251,8 +251,8 @@ Sie haben bereits eine API erstellt, welche: * HTTP-Anfragen auf den _Pfaden_ `/` und `/items/{item_id}` entgegennimmt. * Beide _Pfade_ erhalten `GET` Operationen (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 optionalen `str` _Query Parameter_ `q`. +* 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`. ### Interaktive API-Dokumentation { #interactive-api-docs } @@ -365,7 +365,7 @@ item: Item * Konvertierung von Eingabedaten: Aus dem Netzwerk kommend, zu Python-Daten und -Typen. Lesen von: * JSON. * Pfad-Parametern. - * Abfrage-Parametern. + * Query-Parametern. * Cookies. * Header-Feldern. * Formularen. @@ -427,7 +427,7 @@ Versuchen Sie, diese Zeile zu ändern: ![Editor Unterstützung](https://fastapi.tiangolo.com/img/vscode-completion.png) -Für ein vollständigeres Beispiel, mit weiteren Funktionen, siehe das Tutorial – Benutzerhandbuch. +Für ein vollständigeres Beispiel, mit weiteren Funktionen, siehe das Tutorial – Benutzerhandbuch. **Spoiler-Alarm**: Das Tutorial – Benutzerhandbuch enthält: @@ -448,7 +448,7 @@ Für ein vollständigeres Beispiel, mit weiteren Funktionen, siehe das eines der schnellsten verfügbaren Python-Frameworks, nur hinter Starlette und Uvicorn selbst (intern von FastAPI verwendet). (*) -Um mehr darüber zu erfahren, siehe den Abschnitt Benchmarks. +Um mehr darüber zu erfahren, siehe den Abschnitt Benchmarks. ## Abhängigkeiten { #dependencies } diff --git a/docs/de/docs/tutorial/background-tasks.md b/docs/de/docs/tutorial/background-tasks.md index 5bbe9da79..facd4f6f8 100644 --- a/docs/de/docs/tutorial/background-tasks.md +++ b/docs/de/docs/tutorial/background-tasks.md @@ -1,6 +1,6 @@ # 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 Hintergrundtasks 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. @@ -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. -Weitere Details finden Sie in der offiziellen Starlette-Dokumentation für Hintergrundtasks. +Weitere Details finden Sie in Starlettes offizieller Dokumentation für Hintergrundtasks. ## 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. -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 } diff --git a/docs/de/docs/tutorial/body.md b/docs/de/docs/tutorial/body.md index 537ebcdbb..403ed3842 100644 --- a/docs/de/docs/tutorial/body.md +++ b/docs/de/docs/tutorial/body.md @@ -1,8 +1,8 @@ # Requestbody { #request-body } -Wenn Sie Daten von einem Client (sagen wir, einem Browser) zu Ihrer API senden müssen, senden Sie sie als **Requestbody** (deutsch: Anfragekörper). +Wenn Sie Daten von einem Client (sagen wir, einem Browser) zu Ihrer API senden müssen, senden Sie sie als **Requestbody**. -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 **Response**body 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. diff --git a/docs/de/docs/tutorial/cors.md b/docs/de/docs/tutorial/cors.md index eee790cbd..e7a771260 100644 --- a/docs/de/docs/tutorial/cors.md +++ b/docs/de/docs/tutorial/cors.md @@ -1,10 +1,10 @@ # CORS (Cross-Origin Resource Sharing) { #cors-cross-origin-resource-sharing } -CORS oder „Cross-Origin Resource Sharing“ (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. +CORS oder „Cross-Origin Resource Sharing 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 } -Ein Origin (deutsch: Ursprung) ist die Kombination aus Protokoll (`http`, `https`), Domain (`myapp.com`, `localhost`, `localhost.tiangolo.com`) und Port (`80`, `443`, `8080`). +Ein Origin 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: diff --git a/docs/de/docs/tutorial/path-operation-configuration.md b/docs/de/docs/tutorial/path-operation-configuration.md index 6ef2ab3dd..158abe57f 100644 --- a/docs/de/docs/tutorial/path-operation-configuration.md +++ b/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 } -Sie können eine `summary` (deutsch: Zusammenfassung) und eine `description` (deutsch: Beschreibung) hinzufügen: +Sie können eine `summary` und eine `description` hinzufügen: {* ../../docs_src/path_operation_configuration/tutorial003_py310.py hl[18:19] *} diff --git a/docs/de/docs/tutorial/path-params-numeric-validations.md b/docs/de/docs/tutorial/path-params-numeric-validations.md index 75a1e548b..664a95fc1 100644 --- a/docs/de/docs/tutorial/path-params-numeric-validations.md +++ b/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 } -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] *} @@ -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 @@ -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 *} -## 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 @@ -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. -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] *} @@ -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: -* `gt`: `g`reater `t`han (deutsch: größer als) -* `le`: `l`ess than or `e`qual (deutsch: kleiner oder gleich) +* `gt`: `g`reater `t`han (größer als) +* `le`: `l`ess than or `e`qual (kleiner oder gleich) {* ../../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 } -Zahlenvalidierung funktioniert auch für `float`-Werte (deutsch: Fließkommazahlen). +Zahlenvalidierung funktioniert auch für `float`-Werte. Hier wird es wichtig, in der Lage zu sein, gt und nicht nur ge 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: -* `gt`: `g`reater `t`han (deutsch: größer als) -* `ge`: `g`reater than or `e`qual (deutsch: größer oder gleich) -* `lt`: `l`ess `t`han (deutsch: kleiner als) -* `le`: `l`ess than or `e`qual (deutsch: kleiner oder gleich) +* `gt`: `g`reater `t`han (größer als) +* `ge`: `g`reater than or `e`qual (größer oder gleich) +* `lt`: `l`ess `t`han (kleiner als) +* `le`: `l`ess than or `e`qual (kleiner oder gleich) /// info | Info diff --git a/docs/de/docs/tutorial/query-params.md b/docs/de/docs/tutorial/query-params.md index bec682b65..ae5d92603 100644 --- a/docs/de/docs/tutorial/query-params.md +++ b/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] *} -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 Query 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: diff --git a/docs/de/docs/tutorial/request-files.md b/docs/de/docs/tutorial/request-files.md index 6d128a6ac..e22bcb235 100644 --- a/docs/de/docs/tutorial/request-files.md +++ b/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`: * Sie müssen `File()` nicht als Parameter-Defaultwert verwenden. -* Es wird eine „gespoolte“ Datei (deutsch: warteschlangenartig) verwendet: +* Es wird eine „gespoolte“ 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. * 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. diff --git a/docs/de/docs/tutorial/request-forms.md b/docs/de/docs/tutorial/request-forms.md index da83caa5a..1d7a7c235 100644 --- a/docs/de/docs/tutorial/request-forms.md +++ b/docs/de/docs/tutorial/request-forms.md @@ -52,7 +52,7 @@ HTML-Formulare (`
`) senden die Daten in einer „speziellen“ Kodi /// 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 „media type“ `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. diff --git a/docs/de/docs/tutorial/sql-databases.md b/docs/de/docs/tutorial/sql-databases.md index 124962d2d..ab93b029c 100644 --- a/docs/de/docs/tutorial/sql-databases.md +++ b/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`** (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 **`Session`** 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. 🤓 diff --git a/docs/de/docs/virtual-environments.md b/docs/de/docs/virtual-environments.md index 3424adece..6ce687dfc 100644 --- a/docs/de/docs/virtual-environments.md +++ b/docs/de/docs/virtual-environments.md @@ -1,6 +1,6 @@ # 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 Packages, die Sie für jedes Projekt installieren, zu isolieren. /// info | Info @@ -37,15 +37,15 @@ Und darin erstelle ich ein Verzeichnis pro Projekt.
```console -// Zum Home-Verzeichnis wechseln +// Gehe zum Home-Verzeichnis $ cd -// Ein Verzeichnis für alle Ihre Codeprojekte erstellen +// Erstelle ein Verzeichnis für alle Ihre Code-Projekte $ mkdir code -// In dieses Codeverzeichnis gehen +// Gehe in dieses Code-Verzeichnis $ cd code -// Ein Verzeichnis für dieses Projekt erstellen +// Erstelle ein Verzeichnis für dieses Projekt $ mkdir awesome-project -// In dieses Projektverzeichnis gehen +// Gehe in dieses Projektverzeichnis $ cd awesome-project ``` @@ -53,7 +53,7 @@ $ cd awesome-project ## Eine virtuelle Umgebung erstellen { #create-a-virtual-environment } -Wenn Sie zum **ersten Mal** an einem Python-Projekt arbeiten, erstellen Sie eine virtuelle Umgebung **innerhalb Ihres Projekts**. +Wenn Sie zum **ersten Mal** an einem Python-Projekt arbeiten, erstellen Sie eine virtuelle Umgebung **innerhalb Ihres Projekts**. /// 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. -So stellen Sie sicher, dass, wenn Sie ein **Terminalprogramm (CLI)** 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 (CLI)** 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] harry-1[harry v1] end - subgraph stone-project[philosophers-stone Projekt] + subgraph stone-project[philosophers-stone-Projekt] stone(philosophers-stone) -->|benötigt| harry-1 end ``` @@ -506,10 +506,10 @@ flowchart LR style harry-1 fill:#ccc,stroke-dasharray: 5 5 harry-3[harry v3] end - subgraph stone-project[philosophers-stone Projekt] + subgraph stone-project[philosophers-stone-Projekt] stone(philosophers-stone) -.-x|⛔️| harry-1 end - subgraph azkaban-project[prisoner-of-azkaban Projekt] + subgraph azkaban-project[prisoner-of-azkaban-Projekt] azkaban(prisoner-of-azkaban) --> |benötigt| harry-3 end ``` @@ -560,13 +560,13 @@ Auf diese Weise hat jedes Projekt seine eigene virtuelle Umgebung (`.venv`-Verze ```mermaid flowchart TB - subgraph stone-project[philosophers-stone Projekt] + subgraph stone-project[philosophers-stone-Projekt] stone(philosophers-stone) --->|benötigt| harry-1 subgraph venv1[.venv] harry-1[harry v1] end end - subgraph azkaban-project[prisoner-of-azkaban Projekt] + subgraph azkaban-project[prisoner-of-azkaban-Projekt] azkaban(prisoner-of-azkaban) --->|benötigt| harry-3 subgraph venv2[.venv] 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. -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. @@ -797,7 +797,7 @@ Traceback (most recent call last):
-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.
diff --git a/docs/de/llm-prompt.md b/docs/de/llm-prompt.md index 25c95ccb2..548fe6f37 100644 --- a/docs/de/llm-prompt.md +++ b/docs/de/llm-prompt.md @@ -1,11 +1,12 @@ -Translate to German (Deutsch). +1) Translate to German (Deutsch). 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: @@ -17,38 +18,145 @@ Result (German): „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"` +`"me"` +`"items"` -Result (German) – You don't translate the word, and you don't change the quotation marks: +Result (German) – You change nothing: `"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. +IoT +CPU +TL;DR: -Example: +Result (German): + +IoT +CPU +TL;DR: + +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): + +JWT +`Enum` + +Result (German): + +JWT +`Enum` + +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): + +path +linter +"parsing" +0.95.0 +at the time of writing this + +Result (German): + +Pfad +Linter +„Parsing“ +0.95.0 +zum Zeitpunkt als das hier geschrieben wurde + +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): + +I/O +CDN +IDE +"ORMs" + +Result (German): + +I/O +CDN +IDE +„ORMs“ + +Conversion scheme title attribute: + +Source (English): + +{full phrase}: {explanation} + +OR Source (English): -deprecated +{full phrase}, {explanation} Result (German): -deprecated +{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: @@ -89,14 +197,14 @@ Do NOT translate with (German): ### 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`. 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 * /// 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 -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) diff --git a/scripts/translate.py b/scripts/translate.py index ad8de6591..d1fc1b288 100644 --- a/scripts/translate.py +++ b/scripts/translate.py @@ -24,32 +24,32 @@ non_translated_sections = ( general_prompt = """ -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 technical terms in English that don't have a common translation term, use the original term in English. 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 # Print greeting echo "Hello, World!" ``` -It should be exacly the same in the output document: +Result (German): ```bash -# Print greeting +# Gruß ausgeben 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 $ fastapi run main.py @@ -57,7 +57,7 @@ $ fastapi run fastapi run main.py @@ -65,8 +65,80 @@ $ fastapi run Algo - 4) For internal links, only translate link text. 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} + """ app = typer.Typer() @@ -269,7 +359,7 @@ def translate_page( print(f"Found existing translation: {out_path}") old_translation = out_path.read_text(encoding="utf-8") print(f"Translating {en_path} to {language} ({language_name})") - agent = Agent("openai:gpt-4o") + agent = Agent("openai:gpt-5") prompt_segments = [ general_prompt, @@ -302,7 +392,7 @@ def translate_page( prompt = "\n\n".join(prompt_segments) print(f"Running agent for {out_path}") 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}") out_path.write_text(out_content, encoding="utf-8", newline="\n")