Skip to content

Conversation

@0x4Dark
Copy link
Contributor

@0x4Dark 0x4Dark commented Apr 6, 2021

Hello,

I have started to translate the documentation into german (to be honest, I was a bit surprised that nothing existed here yet).
Currently I have translated the following chapters.

  • index
  • features
  • fastapi-people
  • python-types

I thought to translate them piece by piece just following the order of the mkdocs nav.
Since I have never worked with MkDocs, I hope the "setup" for the german section is correct.

P.S.: Please don't be surprised about the short time intervals of the commits. No, I am not so fast in translating - It took me a while. I only had a bad setup near the end and had to reset everything. .

@0x4Dark 0x4Dark changed the title Start german translation 🌐 Start german translation Apr 6, 2021
@codecov
Copy link

codecov bot commented Apr 6, 2021

Codecov Report

Patch and project coverage have no change.

Comparison is base (cf73051) 100.00% compared to head (4e4d125) 100.00%.

❗ Current head 4e4d125 differs from pull request most recent head dd3d8a5. Consider uploading reports for the commit dd3d8a5 to get more accurate results

Additional details and impacted files
@@             Coverage Diff             @@
##            master     #3048     +/-   ##
===========================================
  Coverage   100.00%   100.00%             
===========================================
  Files          540       243    -297     
  Lines        13969      7419   -6550     
===========================================
- Hits         13969      7419   -6550     

see 349 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Do you have feedback about the report comment? Let us know in this issue.

@github-actions
Copy link
Contributor

github-actions bot commented Apr 6, 2021

📝 Docs preview for commit 4e4d125 at: https://606ca4d47cb0730fc85a8b40--fastapi.netlify.app

Copy link

@AaronDewes AaronDewes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your translation! This isn't a full review, but a few suggestions, I'll do more later.


Das sind die Personen, die:

* [Anderen bei Problemen (Fragen) in GitHub helfen](help-fastapi.md#help-others-with-issues-in-github){.internal-link target=_blank}.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* [Anderen bei Problemen (Fragen) in GitHub helfen](help-fastapi.md#help-others-with-issues-in-github){.internal-link target=_blank}.
* [Anderen bei Problemen (Fragen) auf GitHub helfen](help-fastapi.md#help-others-with-issues-in-github){.internal-link target=_blank}.

Auf sound better to me, and you're using it below too.

<div class="user-list user-list-center">
{% for user in people.last_month_active %}

<div class="user"><a href="{{ user.url }}" target="_blank"><div class="avatar-wrapper"><img src="{{ user.avatarUrl }}"/></div><div class="title">@{{ user.login }}</div></a> <div class="count">Issues replied: {{ user.count }}</div></div>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<div class="user"><a href="{{ user.url }}" target="_blank"><div class="avatar-wrapper"><img src="{{ user.avatarUrl }}"/></div><div class="title">@{{ user.login }}</div></a> <div class="count">Issues replied: {{ user.count }}</div></div>
<div class="user"><a href="{{ user.url }}" target="_blank"><div class="avatar-wrapper"><img src="{{ user.avatarUrl }}"/></div><div class="title">@{{ user.login }}</div></a> <div class="count">Antworten: {{ user.count }}</div></div>

This can be translated.

<div class="user-list user-list-center">
{% for user in people.experts %}

<div class="user"><a href="{{ user.url }}" target="_blank"><div class="avatar-wrapper"><img src="{{ user.avatarUrl }}"/></div><div class="title">@{{ user.login }}</div></a> <div class="count">Issues replied: {{ user.count }}</div></div>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<div class="user"><a href="{{ user.url }}" target="_blank"><div class="avatar-wrapper"><img src="{{ user.avatarUrl }}"/></div><div class="title">@{{ user.login }}</div></a> <div class="count">Issues replied: {{ user.count }}</div></div>
<div class="user"><a href="{{ user.url }}" target="_blank"><div class="avatar-wrapper"><img src="{{ user.avatarUrl }}"/></div><div class="title">@{{ user.login }}</div></a> <div class="count">Antworten: {{ user.count }}</div></div>

Same here

Comment on lines +69 to +71
## Top Mitwirkende

Hier sind die **Top Mitwirkenden**. 👷

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Top Mitwirkende
Hier sind die **Top Mitwirkenden**. 👷
## Top-Mitwirkende
Hier sind die **Top-Mitwirkenden**. 👷

I think this is gramatically correct.

<div class="user-list user-list-center">
{% for user in people.top_contributors %}

<div class="user"><a href="{{ user.url }}" target="_blank"><div class="avatar-wrapper"><img src="{{ user.avatarUrl }}"/></div><div class="title">@{{ user.login }}</div></a> <div class="count">Pull Requests: {{ user.count }}</div></div>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<div class="user"><a href="{{ user.url }}" target="_blank"><div class="avatar-wrapper"><img src="{{ user.avatarUrl }}"/></div><div class="title">@{{ user.login }}</div></a> <div class="count">Pull Requests: {{ user.count }}</div></div>
<div class="user"><a href="{{ user.url }}" target="_blank"><div class="avatar-wrapper"><img src="{{ user.avatarUrl }}"/></div><div class="title">@{{ user.login }}</div></a> <div class="count">Pull-Requests: {{ user.count }}</div></div>

Same here

{% endfor %}
{% endif %}

### Silver Sponsoren

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### Silver Sponsoren
### Silbersponsoren

Grammar, translate "Silver"

{% if people %}
{% if people.sponsors_50 %}

### Bronze Sponsoren

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### Bronze Sponsoren
### Bronzesponsoren

Grammar


## Über die Daten - technische Details

Die Hauptintention dieser Seite ist es, die Bemühungen der Gemeinschaft hervorzuheben, anderen zu helfen.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Die Hauptintention dieser Seite ist es, die Bemühungen der Gemeinschaft hervorzuheben, anderen zu helfen.
Das Hauptziel dieser Seite ist es, die Bemühungen der Gemeinschaft hervorzuheben, anderen zu helfen.

Ziel is more common and seems a bit better here.


### Einfach modernes Python

Es basiert alles auf Standard **Python 3.6 Typ**-Deklarationen (dank Pydantic). Sie müssen keine neue Syntax lernen. Nur modernes Standard-Python.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Es basiert alles auf Standard **Python 3.6 Typ**-Deklarationen (dank Pydantic). Sie müssen keine neue Syntax lernen. Nur modernes Standard-Python.
Es basiert alles auf standardkonformen **Python 3.6 Typ**-Deklarationen (dank Pydantic). Sie müssen keine neue Syntax lernen. Nur modernes Standard-Python.

Grammar


Es hat sinnvolle **Standardwerte** für alles, mit optionalen Konfigurationen überall. Alle Parameter können fein abgestimmt werden, um das zu tun, was Sie brauchen, und um die API zu definieren, die Sie brauchen.

Aber standardmäßig funktioniert das alles **"einfach so "**.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Aber standardmäßig funktioniert das alles **"einfach so "**.
Aber standardmäßig funktioniert das alles **"einfach so"**.

@tiangolo
Copy link
Member

tiangolo commented Jul 3, 2021

This is awesome @0x4Dark! 🚀 You have done a lot of work! 🙇 👏

I have to wait for a couple of reviews before merging it. And as it has translations for several files, it will probably be difficult for someone to translate them all at the same time.


Let me suggest, could you split it into several PRs?

Edit 2023-06-26: this part of the comment is no longer necessary, just one PR per file, that's it! 🎉

One would be just the basic setup, without any translation, just the result of:

$ python ./scripts/docs.py new-lang de

And then a new PR for each file translated. That way, even if there are some changes for some of them, maybe one of them is already perfect and can be approved and merged faster.

@tiangolo tiangolo added awaiting-review lang-all Translations lang-de German translations labels Jul 3, 2021
Copy link

@AaronDewes AaronDewes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just saw this PR again, had a few comments I forgot to submit still here


* **Schnell**: Sehr hohe Leistung, auf dem Niveau von **NodeJS** und **Go** (Dank an Starlette und Pydantic) [Eines der schnellsten verfügbaren Python-Frameworks](#performance).

* **Schnell zu programmieren**: Erhöhen Sie die Geschwindigkeit bei der Entwicklung von Funktionen um etwa 200 % bis 300 %. *

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* **Schnell zu programmieren**: Erhöhen Sie die Geschwindigkeit bei der Entwicklung von Funktionen um etwa 200 % bis 300 %. *
* **Schnell zu programmieren**: Erhöhen Sie die Geschwindigkeit bei der Entwicklung von Funktionen um etwa 200% bis 300%. *

* **Schnell**: Sehr hohe Leistung, auf dem Niveau von **NodeJS** und **Go** (Dank an Starlette und Pydantic) [Eines der schnellsten verfügbaren Python-Frameworks](#performance).

* **Schnell zu programmieren**: Erhöhen Sie die Geschwindigkeit bei der Entwicklung von Funktionen um etwa 200 % bis 300 %. *
* **Weniger Bugs**: Reduzieren Sie etwa 40 % der von Menschen (Entwicklern) verursachten Fehler. *

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* **Weniger Bugs**: Reduzieren Sie etwa 40 % der von Menschen (Entwicklern) verursachten Fehler. *
* **Weniger Bugs**: Reduzieren Sie etwa 40% der von Menschen (Entwicklern) verursachten Fehler. *

@0x4Dark
Copy link
Contributor Author

0x4Dark commented Jul 4, 2021

Hi all,
Unfortunately, had the last few months no time to continue working on it and then forgot. Too many projects (of course with FastAPI).

Thanks for the feedback @AaronDewes.

@tiangolo I can do that, no problem. I'll work the changes from AaronDewes and create the pull requests asap.

- link: /
name: en - English
- link: /de/
name: de

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

name: de - Deutsch

Copy link

@rogerbrinkmann rogerbrinkmann left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few suggestions. Unfortunately the englisch original already adopted changes in Python 3.9 and 3.10, which are not contained in this translation.


Dies ist nur eine **schnelle Anleitung / Auffrischung** über Pythons Typ-Hinweise. Es deckt nur das Minimum ab, das nötig ist, um sie mit **FastAPI** zu verwenden... was eigentlich sehr wenig ist.

**FastAPI** basiert komplett auf diesen Typ-Hinweisen, sie geben der Anwendung viele Vorteile und Möglichkeiten.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Anwendung is not part of the original sentence. maybe better:
**FastAPI** basiert komplett auf diesen Typ-Hinweisen, sie bieten viele Vorteile und Möglichkeiten.


* Nimmt einen `first_name` und `last_name`.
* Konvertiert den ersten Buchstaben von jedem in Großbuchstaben mit `title()`.
* <abbr title="Fügt sie zusammen, als eins. Mit dem Inhalt des einen nach dem anderen.">Verkettet sie mit einem Leerzeichen in der Mitte</abbr>.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fügt sie zusammen, als eins. Mit dem Inhalt des einen nach dem anderen.
Maybe better:
Fügt die einzelnen Komponenten zusammen


* Nimmt einen `first_name` und `last_name`.
* Konvertiert den ersten Buchstaben von jedem in Großbuchstaben mit `title()`.
* <abbr title="Fügt sie zusammen, als eins. Mit dem Inhalt des einen nach dem anderen.">Verkettet sie mit einem Leerzeichen in der Mitte</abbr>.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dont' think an abbr - tag is needed in the German translation, since Verkettet is a common word and doesn't need any further explanation.


Aber dann müssen Sie "die Methode aufrufen, die den ersten Buchstaben in Großbuchstaben umwandelt".

Was es `upper`? Was es `uppercase`? `first_uppercase`? `capitalize`?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not Was but War


Sie geben den ersten Parameter der Funktion ein, `first_name`, dann einen Punkt (`.`) und drücken dann `Strg+Leertaste`, um die Vervollständigung auszulösen.

Aber leider erhalten Sie nichts Nützliches:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe better:
Aber leider erhalten Sie keinen nützlichen Hinweis:


Das bedeutet:

* Die Variable `items_t` ist ein `Tupel` mit 3 Elementen, einem `int`, einem weiteren `int` und einem `str`.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Event though the imported type is a capitalized Tuple, the actual python datatype is a lower case tuple. Just like in the next sentence with set, tuple should be lower case as well.

* Die Variable `prices` ist ein `dict`:
* Die Schlüssel dieses `dict` sind vom Typ `str` (z.B. die Namen der einzelnen Artikel).
* Die Werte dieses `dict` sind vom Typ `float` (z.B. der Preis jedes Artikels).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The section about Unionis missing.
Suggestion:

Union

You can declare that a variable can be any of several types, for example, an int or a str.

In Python 3.6 and above (including Python 3.10) you can use the Union type from typing and put inside the square brackets the possible types to accept.

In Python 3.10 there's also an alternative syntax were you can put the possible types separated by a vertical bar (|).

=== "Python 3.6 and above"

```Python hl_lines="1  4"
{!> ../../../docs_src/python_types/tutorial008b.py!}
```

=== "Python 3.10 and above"

```Python hl_lines="1"
{!> ../../../docs_src/python_types/tutorial008b_py310.py!}
```

In beiden Fällen bedeutet dies, dass item ein int oder ein str sein kann.

* Die Werte dieses `dict` sind vom Typ `float` (z.B. der Preis jedes Artikels).

#### `Optional`

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section changed quite a bit in the original:
Suggestion:

Man kann deklarieren, dass ein Wert einen Typ haben kann, wie str, aber auch, dass er None sein kann.

In Python 3.6 und höher (einschließlich Python 3.10) können Sie dies deklarieren, indem Sie Optional aus dem typing Modul importieren und verwenden.

{!../../../docs_src/python_types/tutorial009.py!}

Durch die Verwendung von Optional[str] anstelle von str kann der Editor Ihnen helfen, Fehler zu erkennen, bei denen Sie davon ausgehen, dass ein Wert immer str ist, obwohl er eigentlich auch None sein könnte.

Optional[Irgendwas] ist eigentlich eine Abkürzung für Union[Irgendwas, None], sie sind gleichwertig.

Das bedeutet auch, dass Sie in Python 3.10 Irgendwas | None verwenden können:

=== "Python 3.6 und höher"

```Python hl_lines="1 4"
{!> ../../../docs_src/python_types/tutorial009.py!}
```

=== "Python 3.6 und höher - alternativ"

```Python hl_lines="1 4"
{!> ../../../docs_src/python_types/tutorial009b.py!}
```

=== "Python 3.10 und höher"

```Python hl_lines="1"
{!> ../../../docs_src/python_types/tutorial009_py310.py!}
```


Wenn Sie `Optional[str]` statt nur `str` verwenden, kann der Editor Ihnen helfen, Fehler zu erkennen, bei denen Sie davon ausgehen, dass ein Wert immer ein `str` ist, obwohl er eigentlich auch `None` sein könnte.

#### Generische Typen

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section also changed very much in the original


<img src="/img/python-types/image06.png">

## Pydantic models

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section differs from the original as well

@tiangolo tiangolo changed the title 🌐 Start german translation 🌐 Add German translation for docs/de/docs/index.md, docs/de/docs/fastapi-people.md, and docs/de/docs/python-types.md Jun 26, 2023
@tiangolo
Copy link
Member

I updated it with recent changes, there's no longer need to use and synchronize complex mkdocs.yml files. I also removed the files that were already translated in other PRs and resolved the conflicts.

Nevertheless, it would probably be easier and better to have these 3 files in 3 different PRs so that it's easier to review them, and once one of the files is fine and approved (even if the other two are not), I could merge that if it was in an isolated PR.

As I know you're busy, maybe others might want to copy some of the work done here in one of these files and make a new PR only for that one, and continue from there. 🤓

@tiangolo
Copy link
Member

📝 Docs preview for commit dd3d8a5 at: https://649a06e4d1bbbc073560fbdb--fastapi.netlify.app

nilslindemann pushed a commit to nilslindemann/fastapi that referenced this pull request Sep 20, 2023
* Full translation
* Based on fastapi#3048
* In sync with current en/docs/fastapi-people.md
* Hand-translated (Google translate rarely used)
* Checked for errors using LanguageTool
* Manually checked
nilslindemann pushed a commit to nilslindemann/fastapi that referenced this pull request Sep 20, 2023
* Full translation
* Based on fastapi#3048
* In sync with current en/docs/python-types.md
* Hand-translated (Google translate rarely used)
* Checked for errors using LanguageTool
* Manually checked
@tiangolo
Copy link
Member

As this is now being handled in 3 independent PRs at #9502, #10287, #10285, I'm gonna close this one. Thanks everyone! 🚀

@tiangolo tiangolo closed this Jan 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-review lang-all Translations lang-de German translations

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants