Skip to content

docs: refresh translations for recent English changes - #3379

Merged
maxisbey merged 1 commit into
mainfrom
docs/refresh-translations
Aug 24, 2026
Merged

docs: refresh translations for recent English changes#3379
maxisbey merged 1 commit into
mainfrom
docs/refresh-translations

Conversation

@maxisbey

Copy link
Copy Markdown
Contributor

Re-runs scripts/docs/translations.py translate for all twelve languages to catch up with English changes since the translations were first published in #3280.

Motivation and Context

Eighteen pages per language had sections whose English source changed (error handling, prompts, structured output, media, deprecated helpers, transports, troubleshooting, and a handful of one-line edits elsewhere), so translated sites were showing the "translation behind the English page" notice on those. The tool retranslated only the changed sections; everything else in each page is carried over byte for byte, which is why the diff is section-scoped despite touching 216 files.

Nothing under docs/, i18n/*/instructions.md, i18n/*/glossary.json or the tool itself changed.

How Has This Been Tested?

  • translations.py status reports 0 missing / 0 outdated / 51 current for every language.
  • scripts/docs/build.sh builds the English site strictly and all twelve language sites with 0 warnings (no dead links or anchors).
  • An offline pass over every generated page checked that it is a fixed point under the tool's own structure re-imposition and validation, that sections with unchanged English are identical to what's on main, and that no section came back untranslated, in the wrong script, truncated, or with prompt text leaked into it.
  • Each language's diff was read against the English source for missing or garbled content.

Breaking Changes

None.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

Generated pages are never hand-edited; if a reviewer spots a wording problem, the fix goes into that language's instructions.md/glossary.json and the page is re-run.

AI Disclaimer

Re-run scripts/docs/translations.py for all twelve languages. Eighteen
pages per language had sections whose English changed since the initial
run; only those sections were retranslated, everything else is carried
over byte for byte. `status` now reports every page current, and each
language site builds with no warnings.
@maxisbey
maxisbey marked this pull request as ready for review August 24, 2026 18:15
@github-actions

Copy link
Copy Markdown
Contributor

📚 Documentation preview

Preview https://pr-3379.mcp-python-docs.pages.dev
Deployment https://d36f5cf9.mcp-python-docs.pages.dev
Commit 76241ed
Triggered by @maxisbey
Updated 2026-08-24 18:16:41 UTC

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

11 issues found across 216 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="i18n/ko/pages/get-started/testing.md">

<violation number="1" location="i18n/ko/pages/get-started/testing.md:87">
P2: This translation reverses who authored the `ToolError` message: it says the model wrote it. State that the tool's written message is what the model reads.</violation>
</file>

<file name="i18n/zh/pages/servers/tools.md">

<violation number="1" location="i18n/zh/pages/servers/tools.md:42">
P3: The added sentence is awkward Chinese because `到 ... 上手写` combines two incompatible location constructions. Rewrite this clause so it clearly says that no choice is needed until the reader moves to the low-level Server and hand-writes a schema.</violation>
</file>

<file name="i18n/de/pages/servers/media.md">

<violation number="1" location="i18n/de/pages/servers/media.md:105">
P2: Here `den` says that `resources/read` reads the pointer itself, but it reads the resource identified by the pointer's URI. Say that the client reads the resource through the link, then regenerate the generated page.</violation>
</file>

<file name="i18n/de/pages/client/transports.md">

<violation number="1" location="i18n/de/pages/client/transports.md:98">
P3: This new sentence ends with `in deiner` without a noun, so it reads as incomplete German and obscures where the child's stderr goes. Render this as `landet bei dir` or explicitly name `stderr` in `i18n/de/instructions.md`, then regenerate the page.</violation>
</file>

<file name="i18n/hi/pages/servers/prompts.md">

<violation number="1" location="i18n/hi/pages/servers/prompts.md:142">
P3: The info callout uses an unnatural Hindi rendering for “everything up to this point.” Replace `यहाँ तक की हर बात` with `अब तक की हर बात`.</violation>
</file>

<file name="i18n/de/pages/servers/prompts.md">

<violation number="1" location="i18n/de/pages/servers/prompts.md:157">
P3: Here `die` makes the style guide the subject of `behandelt`, so the sentence does not explain that the linked Resources page covers this topic. Make the linked page the subject, for example with `Näheres steht unter …`.</violation>

<violation number="2" location="i18n/de/pages/servers/prompts.md:189">
P2: When `pre-2026` is translated as `älter als 2026`, it describes client age rather than protocol era and obscures when the legacy notification path applies. State that the client uses a protocol version before 2026.</violation>
</file>

<file name="i18n/de/pages/handlers/logging.md">

<violation number="1" location="i18n/de/pages/handlers/logging.md:58">
P2: `MCPError` is not logged by the SDK: tool and resource handlers pass it through as a JSON-RPC error. Qualify this claim so readers do not expect protocol errors to appear in the server log; update the English source and regenerate this page.

(Based on your team's feedback about MCPError pass-through and resource error logging.)</violation>
</file>

<file name="i18n/es/pages/client/index.md">

<violation number="1" location="i18n/es/pages/client/index.md:131">
P2: When a tool's return value fails `output_schema` conversion, the SDK also returns this bare message, not only when the tool body raises another exception. Update the Spanish translation to describe unexpected failures and that the exception text is withheld from the client, then regenerate it from `instructions.md`.</violation>
</file>

<file name="i18n/zh/pages/advanced/low-level-server.md">

<violation number="1" location="i18n/zh/pages/advanced/low-level-server.md:121">
P2: On legacy protocol connections, this unqualified statement overstates the schema contract: `2026-07-28` allows the full 2020-12 vocabulary, but earlier versions only define `type`, `properties`, and `required`. Qualify the default and keyword-availability claims with `2026-07-28` so users do not send unsupported schemas to older peers.</violation>
</file>

<file name="i18n/es/pages/servers/structured-output.md">

<violation number="1" location="i18n/es/pages/servers/structured-output.md:192">
P3: This generated sentence renders `weather` as `un tiempo`, which reads as a time period rather than weather and makes the example unclear. Add a natural rendering such as `datos meteorológicos que faltan` to the Spanish translation guidance and regenerate this page.</violation>
</file>

Note: This PR contains a large number of files. cubic selects up to 200 of the highest-priority eligible files for this review, so some files may not have been reviewed.

Re-trigger cubic

되고, 모델이 메시지를 읽습니다. `raise_exceptions`는 이 점을 바꾸지 않습니다. 플래그가 있든
없든 `call_tool`은 똑같은 `is_error=True` 결과를 반환합니다. 이 주제를 통째로 다루는 페이지가
따로 있습니다. **[오류 처리](../servers/handling-errors.md)**를 참고하세요.
됩니다(`ToolError`였다면 모델이 작성한 메시지를 읽습니다). `raise_exceptions`는 이 점을 바꾸지

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: This translation reverses who authored the ToolError message: it says the model wrote it. State that the tool's written message is what the model reads.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At i18n/ko/pages/get-started/testing.md, line 87:

<comment>This translation reverses who authored the `ToolError` message: it says the model wrote it. State that the tool's written message is what the model reads.</comment>

<file context>
@@ -84,9 +84,9 @@ async def test_call_add_tool(client: Client):
-되고, 모델이 그 메시지를 읽습니다. `raise_exceptions`는 이 점을 바꾸지 않습니다. 플래그가 있든
-없든 `call_tool`은 똑같은 `is_error=True` 결과를 반환합니다. 이 주제를 통째로 다루는 페이지가
-따로 있습니다. **[오류 처리](../servers/handling-errors.md)**를 참고하세요.
+됩니다(`ToolError`였다면 모델이 작성한 메시지를 읽습니다). `raise_exceptions`는 이 점을 바꾸지
+않습니다. 플래그가 있든 없든 `call_tool`은 똑같은 `is_error=True` 결과를 반환합니다. 이 주제를
+통째로 다루는 페이지가 따로 있습니다. **[오류 처리](../servers/handling-errors.md)**를 참고하세요.
</file context>
Suggested change
됩니다(`ToolError`였다면 모델이 작성한 메시지를 읽습니다). `raise_exceptions`는 이 점을 바꾸지
됩니다(`ToolError`였다면 도구가 작성한 메시지를 모델이 읽습니다). `raise_exceptions`는 이 점을 바꾸지

result.content # [EmbeddedResource(type="resource", resource=TextResourceContents(uri="brand://guidelines", mime_type="text/markdown", text="# Brand guidelines\n\n..."))]
```

Für binären Inhalt nimm statt `TextResourceContents` ein `BlobResourceContents(uri=..., mime_type=..., blob=...)`, mit den Bytes base64-kodiert in `blob`. Willst du nur einen Zeiger senden, den der Client später per `resources/read` lesen kann, gib stattdessen einen `ResourceLink(name=..., uri=...)` zurück; auch das ist ein Content-Block.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: Here den says that resources/read reads the pointer itself, but it reads the resource identified by the pointer's URI. Say that the client reads the resource through the link, then regenerate the generated page.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At i18n/de/pages/servers/media.md, line 105:

<comment>Here `den` says that `resources/read` reads the pointer itself, but it reads the resource identified by the pointer's URI. Say that the client reads the resource through the link, then regenerate the generated page.</comment>

<file context>
@@ -86,6 +86,24 @@ Eine Endung, die nicht erkannt wird, fällt auf `application/octet-stream` zurü
+result.content  # [EmbeddedResource(type="resource", resource=TextResourceContents(uri="brand://guidelines", mime_type="text/markdown", text="# Brand guidelines\n\n..."))]
+```
+
+Für binären Inhalt nimm statt `TextResourceContents` ein `BlobResourceContents(uri=..., mime_type=..., blob=...)`, mit den Bytes base64-kodiert in `blob`. Willst du nur einen Zeiger senden, den der Client später per `resources/read` lesen kann, gib stattdessen einen `ResourceLink(name=..., uri=...)` zurück; auch das ist ein Content-Block.
+
 ## Icons {#icons}
</file context>

```

* `mcp.add_prompt(Prompt.from_function(fn, name=..., description=...))` registriert eine Funktion genau so, wie `@mcp.prompt()` es täte, und `mcp.remove_prompt(name)` ist die Umkehrung. `add_prompt` behält einen vorhandenen Eintrag gleichen Namens, statt ihn zu überschreiben; deshalb entfernt das Tool zuerst einen etwaigen alten, damit Speichern ein Ersetzen ist. `prompts/list` spiegelt die Änderung sofort wider.
* `await ctx.notify_prompts_changed()` sendet `notifications/prompts/list_changed` an jeden `2026-07-28`-Client, der auf einem `subscriptions/listen`-Stream lauscht (**[Abonnements](../handlers/subscriptions.md)**). `await ctx.session.send_prompt_list_changed()` sendet sie an den aufrufenden Client, wenn dieser älter als 2026 ist (**[Legacy-Clients unterstützen](../run/legacy-clients.md)**). Rufe beide auf; jede tut nichts, wenn es niemanden zu benachrichtigen gibt.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: When pre-2026 is translated as älter als 2026, it describes client age rather than protocol era and obscures when the legacy notification path applies. State that the client uses a protocol version before 2026.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At i18n/de/pages/servers/prompts.md, line 189:

<comment>When `pre-2026` is translated as `älter als 2026`, it describes client age rather than protocol era and obscures when the legacy notification path applies. State that the client uses a protocol version before 2026.</comment>

<file context>
@@ -140,10 +140,55 @@ Der `prompts/list`-Eintrag enthält jetzt alles, was ein Client braucht, um ein
+```
+
+* `mcp.add_prompt(Prompt.from_function(fn, name=..., description=...))` registriert eine Funktion genau so, wie `@mcp.prompt()` es täte, und `mcp.remove_prompt(name)` ist die Umkehrung. `add_prompt` behält einen vorhandenen Eintrag gleichen Namens, statt ihn zu überschreiben; deshalb entfernt das Tool zuerst einen etwaigen alten, damit Speichern ein Ersetzen ist. `prompts/list` spiegelt die Änderung sofort wider.
+* `await ctx.notify_prompts_changed()` sendet `notifications/prompts/list_changed` an jeden `2026-07-28`-Client, der auf einem `subscriptions/listen`-Stream lauscht (**[Abonnements](../handlers/subscriptions.md)**). `await ctx.session.send_prompt_list_changed()` sendet sie an den aufrufenden Client, wenn dieser älter als 2026 ist (**[Legacy-Clients unterstützen](../run/legacy-clients.md)**). Rufe beide auf; jede tut nichts, wenn es niemanden zu benachrichtigen gibt.
+* Ein Client, der die Benachrichtigung erhält, ruft `prompts/list` erneut auf. Im Python-`Client` ist das `async with client.listen(prompts_list_changed=True) as sub:`, was ein `PromptsListChanged`-Event liefert.
+
</file context>
Suggested change
* `await ctx.notify_prompts_changed()` sendet `notifications/prompts/list_changed` an jeden `2026-07-28`-Client, der auf einem `subscriptions/listen`-Stream lauscht (**[Abonnements](../handlers/subscriptions.md)**). `await ctx.session.send_prompt_list_changed()` sendet sie an den aufrufenden Client, wenn dieser älter als 2026 ist (**[Legacy-Clients unterstützen](../run/legacy-clients.md)**). Rufe beide auf; jede tut nichts, wenn es niemanden zu benachrichtigen gibt.
* `await ctx.notify_prompts_changed()` sendet `notifications/prompts/list_changed` an jeden `2026-07-28`-Client, der auf einem `subscriptions/listen`-Stream lauscht (**[Abonnements](../handlers/subscriptions.md)**). `await ctx.session.send_prompt_list_changed()` sendet sie an den aufrufenden Client, wenn dieser eine Protokollversion vor 2026 verwendet (**[Legacy-Clients unterstützen](../run/legacy-clients.md)**). Rufe beide auf; jede tut nichts, wenn es niemanden zu benachrichtigen gibt.


`logging.basicConfig()` ersetzt nie Handler, die bereits existieren. Wenn du das Logging selbst konfigurierst, bevor du den Server erzeugst, gewinnt deine Konfiguration.

Du brauchst auch kein `try`/`except` in jedem Handler, nur um Fehlschläge festzuhalten. Wenn eine Tool- oder Ressourcen-Funktion eine Exception auslöst, loggt das SDK sie für dich. **[Fehler behandeln](../servers/handling-errors.md#any-other-exception)** erklärt, was geloggt wird und auf welchem Level.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: MCPError is not logged by the SDK: tool and resource handlers pass it through as a JSON-RPC error. Qualify this claim so readers do not expect protocol errors to appear in the server log; update the English source and regenerate this page.

(Based on your team's feedback about MCPError pass-through and resource error logging.)

View Feedback

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At i18n/de/pages/handlers/logging.md, line 58:

<comment>`MCPError` is not logged by the SDK: tool and resource handlers pass it through as a JSON-RPC error. Qualify this claim so readers do not expect protocol errors to appear in the server log; update the English source and regenerate this page.

(Based on your team's feedback about MCPError pass-through and resource error logging.) </comment>

<file context>
@@ -55,6 +55,8 @@ Der Standardwert ist `"INFO"`.
 
 `logging.basicConfig()` ersetzt nie Handler, die bereits existieren. Wenn du das Logging selbst konfigurierst, bevor du den Server erzeugst, gewinnt deine Konfiguration.
 
+Du brauchst auch kein `try`/`except` in jedem Handler, nur um Fehlschläge festzuhalten. Wenn eine Tool- oder Ressourcen-Funktion eine Exception auslöst, loggt das SDK sie für dich. **[Fehler behandeln](../servers/handling-errors.md#any-other-exception)** erklärt, was geloggt wird und auf welchem Level.
+
 ## Ausprobieren {#try-it}
</file context>

antes de confiar en `structured_content`.
El mensaje del `ToolError` acabó en `content`, donde el **modelo** puede leerlo y volver a intentarlo. Es
deliberado: un error de herramienta es parte de la conversación, no un fallo fatal. (Si la herramienta hubiera
fallado con alguna otra excepción, `content` diría solo `Error executing tool lookup_book`.) Mira siempre

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: When a tool's return value fails output_schema conversion, the SDK also returns this bare message, not only when the tool body raises another exception. Update the Spanish translation to describe unexpected failures and that the exception text is withheld from the client, then regenerate it from instructions.md.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At i18n/es/pages/client/index.md, line 131:

<comment>When a tool's return value fails `output_schema` conversion, the SDK also returns this bare message, not only when the tool body raises another exception. Update the Spanish translation to describe unexpected failures and that the exception text is withheld from the client, then regenerate it from `instructions.md`.</comment>

<file context>
@@ -117,17 +118,18 @@ Una herramienta que lanza una excepción **no** la lanza en tu cliente. Vuelve c
-    antes de confiar en `structured_content`.
+    El mensaje del `ToolError` acabó en `content`, donde el **modelo** puede leerlo y volver a intentarlo. Es
+    deliberado: un error de herramienta es parte de la conversación, no un fallo fatal. (Si la herramienta hubiera
+    fallado con alguna otra excepción, `content` diría solo `Error executing tool lookup_book`.) Mira siempre
+    `is_error` antes de confiar en `structured_content`.
 
</file context>


两个参数都在 `required` 里,因为都没有默认值。这一点马上就会改。(`title` 键是 Pydantic 附带生成的;属性、属性的类型和 `required` 才是契约。)

也没有 `$schema` 键:不带这个键的模式,MCP 一律按 **JSON Schema 2020-12** 处理,而 Pydantic 生成的正是它,所以在你到 **[底层 Server](../advanced/low-level-server.md#the-dialect-is-json-schema-2020-12)** 上手写模式之前,没有什么需要选择的。

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P3: The added sentence is awkward Chinese because 到 ... 上手写 combines two incompatible location constructions. Rewrite this clause so it clearly says that no choice is needed until the reader moves to the low-level Server and hand-writes a schema.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At i18n/zh/pages/servers/tools.md, line 42:

<comment>The added sentence is awkward Chinese because `到 ... 上手写` combines two incompatible location constructions. Rewrite this clause so it clearly says that no choice is needed until the reader moves to the low-level Server and hand-writes a schema.</comment>

<file context>
@@ -39,6 +39,8 @@ SDK 根据这些类型提示生成一份 JSON Schema,并在 `tools/list` 时
 
 两个参数都在 `required` 里,因为都没有默认值。这一点马上就会改。(`title` 键是 Pydantic 附带生成的;属性、属性的类型和 `required` 才是契约。)
 
+也没有 `$schema` 键:不带这个键的模式,MCP 一律按 **JSON Schema 2020-12** 处理,而 Pydantic 生成的正是它,所以在你到 **[底层 Server](../advanced/low-level-server.md#the-dialect-is-json-schema-2020-12)** 上手写模式之前,没有什么需要选择的。
+
 !!! tip
</file context>
Suggested change
也没有 `$schema` 键:不带这个键的模式,MCP 一律按 **JSON Schema 2020-12** 处理,而 Pydantic 生成的正是它,所以在你到 **[底层 Server](../advanced/low-level-server.md#the-dialect-is-json-schema-2020-12)** 上手写模式之前,没有什么需要选择的
也没有 `$schema` 键:不带这个键的模式,MCP 一律按 **JSON Schema 2020-12** 处理,而 Pydantic 生成的正是它,所以在你转到 **[底层 Server](../advanced/low-level-server.md#the-dialect-is-json-schema-2020-12)**、亲手编写模式之前,无需选择

Beim Eintreten in den Block wird der Prozess gestartet. Beim Verlassen wird der Subprozess beendet: stdin schließen, warten, abschießen, falls er hängen bleibt. Du räumst ihn nie selbst auf.

Beim Verlassen des `async with`-Blocks wird auch der Subprozess beendet: stdin schließen, warten, abschießen, falls er hängen bleibt. Du räumst ihn nie selbst auf.
Die stderr des Kindprozesses landet in deiner. Um sie woandershin zu leiten, baust du den Transport selbst mit `stdio_client` (aus `mcp`) und übergibst stattdessen diesen: `Client(stdio_client(server, errlog=log_file))`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P3: This new sentence ends with in deiner without a noun, so it reads as incomplete German and obscures where the child's stderr goes. Render this as landet bei dir or explicitly name stderr in i18n/de/instructions.md, then regenerate the page.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At i18n/de/pages/client/transports.md, line 98:

<comment>This new sentence ends with `in deiner` without a noun, so it reads as incomplete German and obscures where the child's stderr goes. Render this as `landet bei dir` or explicitly name `stderr` in `i18n/de/instructions.md`, then regenerate the page.</comment>

<file context>
@@ -87,15 +87,15 @@ oder übergibst deinem `httpx2.AsyncClient` ein explizites `verify=ssl_context`
+Beim Eintreten in den Block wird der Prozess gestartet. Beim Verlassen wird der Subprozess beendet: stdin schließen, warten, abschießen, falls er hängen bleibt. Du räumst ihn nie selbst auf.
 
-Beim Verlassen des `async with`-Blocks wird auch der Subprozess beendet: stdin schließen, warten, abschießen, falls er hängen bleibt. Du räumst ihn nie selbst auf.
+Die stderr des Kindprozesses landet in deiner. Um sie woandershin zu leiten, baust du den Transport selbst mit `stdio_client` (aus `mcp`) und übergibst stattdessen diesen: `Client(stdio_client(server, errlog=log_file))`.
 
 !!! warning
</file context>


!!! info
अगर आपने **[Tools](tools.md)** पढ़ लिया है, तो इस page की हर बात आप पहले से जानते हैं। वही decorator, वही
अगर आपने **[Tools](tools.md)** पढ़ लिया है, तो यहाँ तक की हर बात आप पहले से जानते हैं। वही decorator, वही

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P3: The info callout uses an unnatural Hindi rendering for “everything up to this point.” Replace यहाँ तक की हर बात with अब तक की हर बात.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At i18n/hi/pages/servers/prompts.md, line 142:

<comment>The info callout uses an unnatural Hindi rendering for “everything up to this point.” Replace `यहाँ तक की हर बात` with `अब तक की हर बात`.</comment>

<file context>
@@ -139,17 +139,64 @@ Code review एक message है। Debugging session एक बातचीत
 
 !!! info
-    अगर आपने **[Tools](tools.md)** पढ़ लिया है, तो इस page की हर बात आप पहले से जानते हैं। वही decorator, वही
+    अगर आपने **[Tools](tools.md)** पढ़ लिया है, तो यहाँ तक की हर बात आप पहले से जानते हैं। वही decorator, वही
     docstring-as-description, वही `Annotated`/`Field`। बदलता सिर्फ़ इतना है कि इसे
     trigger कौन करता है (user) और result कहाँ जाता है (बातचीत में)।
</file context>
Suggested change
अगर आपने **[Tools](tools.md)** पढ़ लिया है, तो यहाँ तक की हर बात आप पहले से जानते हैं। वही decorator, वही
अगर आपने **[Tools](tools.md)** पढ़ लिया है, तो अब तक की हर बात आप पहले से जानते हैं। वही decorator, वही

--8<-- "docs_src/prompts/tutorial004.py"
```

* Der Styleguide ist eine Ressource unter `style://python` (die behandelt **[Ressourcen](resources.md)**), gelesen aus einer `style-guide.md` neben `server.py`. Lege dort eine beliebige Markdown-Datei ab.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P3: Here die makes the style guide the subject of behandelt, so the sentence does not explain that the linked Resources page covers this topic. Make the linked page the subject, for example with Näheres steht unter ….

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At i18n/de/pages/servers/prompts.md, line 157:

<comment>Here `die` makes the style guide the subject of `behandelt`, so the sentence does not explain that the linked Resources page covers this topic. Make the linked page the subject, for example with `Näheres steht unter …`.</comment>

<file context>
@@ -140,10 +140,55 @@ Der `prompts/list`-Eintrag enthält jetzt alles, was ein Client braucht, um ein
+--8<-- "docs_src/prompts/tutorial004.py"
+```
+
+* Der Styleguide ist eine Ressource unter `style://python` (die behandelt **[Ressourcen](resources.md)**), gelesen aus einer `style-guide.md` neben `server.py`. Lege dort eine beliebige Markdown-Datei ab.
+* `EmbeddedResource(resource=TextResourceContents(...))`, beide aus `mcp.types`, trägt die Datei samt URI und MIME-Typ als erste Nachricht; die Anweisung, die sich darauf bezieht, folgt als reiner Text.
+* Einbetten, statt den Guide in den f-String einzufügen, erlaubt dem Client, ihn als Anhang zu zeigen und `style://python` später erneut zu öffnen, und das Modell erhält die Datei unverändert. Für eine Binärdatei nimm `BlobResourceContents` mit einem base64-kodierten `blob`.
</file context>
Suggested change
* Der Styleguide ist eine Ressource unter `style://python` (die behandelt **[Ressourcen](resources.md)**), gelesen aus einer `style-guide.md` neben `server.py`. Lege dort eine beliebige Markdown-Datei ab.
* Der Styleguide ist eine Ressource unter `style://python` (Näheres steht unter **[Ressourcen](resources.md)**), gelesen aus einer `style-guide.md` neben `server.py`. Lege dort eine beliebige Markdown-Datei ab.

y las primeras líneas del error nombran el campo:
Llama a `get_weather` y no le entrega al cliente en silencio un objeto medio vacío. La llamada falla:
el cliente recibe `is_error=True` con `Error executing tool get_weather`, así que el modelo sabe que la
llamada falló en lugar de leer con toda confianza un tiempo que no existe. El nombre del campo es para ti,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P3: This generated sentence renders weather as un tiempo, which reads as a time period rather than weather and makes the example unclear. Add a natural rendering such as datos meteorológicos que faltan to the Spanish translation guidance and regenerate this page.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At i18n/es/pages/servers/structured-output.md, line 192:

<comment>This generated sentence renders `weather` as `un tiempo`, which reads as a time period rather than weather and makes the example unclear. Add a natural rendering such as `datos meteorológicos que faltan` to the Spanish translation guidance and regenerate this page.</comment>

<file context>
@@ -187,18 +187,19 @@ No lo notas mientras construyes el valor a mano: Pydantic ya se aseguró de que
-    y las primeras líneas del error nombran el campo:
+    Llama a `get_weather` y no le entrega al cliente en silencio un objeto medio vacío. La llamada falla:
+    el cliente recibe `is_error=True` con `Error executing tool get_weather`, así que el modelo sabe que la
+    llamada falló en lugar de leer con toda confianza un tiempo que no existe. El nombre del campo es para ti,
+    en el log del servidor con nivel `ERROR`:
 
</file context>

@maxisbey
maxisbey merged commit c5d7d0b into main Aug 24, 2026
51 checks passed
@maxisbey
maxisbey deleted the docs/refresh-translations branch August 24, 2026 18:29

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM — mechanical, tool-generated translation refresh with no code or English-docs changes.

What was reviewed:

  • Confirmed the diff is confined to i18n//pages/.md — no source, tests, tool scripts, instructions.md, or glossary.json touched.
  • Checked frontmatter translation.sections hashes: identical across all 12 locales per page, and hash counts match the English pages' section counts (e.g. deprecated.md 8, tools.md 8, transports.md 7, whats-new.md 4).
  • Spot-checked new sections (ping-on-legacy, roots notifications, deprecated SDK helpers, $schema note) in de/ja/hi/zh-hant against the English source — code blocks are byte-identical, explicit {#...} anchors preserve English slugs, and link targets like client/callbacks.md and #the-dialect-is-json-schema-2020-12 resolve.
  • Scanned added URLs — only modelcontextprotocol.io, the spec repo on GitHub, and localhost examples.
Extended reasoning...

Overview

This PR is a single commit touching 216 files, all under i18n/*/pages/ — the same 18 documentation pages replicated across 12 locales. It is the output of re-running scripts/docs/translations.py translate to catch translations up with English docs changes: new sections in deprecated.md (ping on legacy sessions, roots change notifications, deprecated SDK helpers), a new $schema/JSON Schema 2020-12 note in servers/tools.md, and smaller section-scoped edits elsewhere. Each page's translation.sections frontmatter hash list was updated to the current English section hashes. No Python source, tests, English docs, translation tool code, per-language instructions.md, or glossary.json files changed.

Security risks

Essentially none. The diff is Markdown-only documentation content. I specifically scanned all URLs added by the diff for suspicious or attacker-controlled domains — the only links are to modelcontextprotocol.io, the modelcontextprotocol/modelcontextprotocol GitHub repo (SEP PRs), and http://localhost:8000/mcp inside code examples. No instruction files (CLAUDE.md/AGENTS.md), workflows, or scripts are touched, so there is no vector for configuration or CI tampering. Code blocks inside translations are byte-identical to the English samples, so no altered example code could mislead readers into unsafe patterns.

Level of scrutiny

Appropriate scrutiny here is structural verification plus spot-checking, not line-by-line reading of ~3100 changed lines across 12 languages. I verified: (1) the diff contains only i18n page files; (2) all 12 locales carry identical sections hash lists per page, and the hash count equals intro + ## section count of the corresponding English page for several sampled pages; (3) the new German, Japanese, Hindi, and Traditional Chinese sections faithfully mirror the English docs/deprecated.md and docs/servers/tools.md content, with code blocks unchanged and explicit {#...} anchors preserving the English auto-slugs (e.g. #the-dialect-is-json-schema-2020-12, which matches the English heading "The dialect is JSON Schema 2020-12"); (4) relative link targets referenced by the new content exist in each locale tree. This matches the repo's own review guidance in i18n/README.md-style workflow: generated pages are never hand-edited, and wording fixes flow through instructions/glossary re-runs anyway.

Other factors

The bug-hunting run exited with dry_streak and zero findings, there are no prior reviews or outstanding objections on the PR, and there is no CODEOWNERS/ANTOWNERS file gating these paths. The change is mechanical output of the repo's own translation tool, the frontmatter bookkeeping is internally consistent, and any residual translation-wording nit would be fixed via a glossary/instructions re-run rather than blocking this sync. That combination — docs-only, generated, structurally verified, spot-checked for fidelity — puts this comfortably in the "simple/mechanical, human need not look" category.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant