From 20ab8012a6dde871de78d8c2ea615d544cc23465 Mon Sep 17 00:00:00 2001
From: Adam Turner <9087854+aa-turner@users.noreply.github.com>
Date: Sun, 6 Aug 2023 04:58:37 +0100
Subject: [PATCH 1/2] Support translation for Limited/Unstable API & Stable ABI

---
 Doc/tools/extensions/c_annotations.py | 20 ++++++++++----------
 Doc/tools/templates/dummy.html        | 10 ++++++++++
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/Doc/tools/extensions/c_annotations.py b/Doc/tools/extensions/c_annotations.py
index 3551bfa4c0f133..233f6cc5c0bed9 100644
--- a/Doc/tools/extensions/c_annotations.py
+++ b/Doc/tools/extensions/c_annotations.py
@@ -126,7 +126,7 @@ def add_annotations(self, app, doctree):
                         f"Object type mismatch in limited API annotation "
                         f"for {name}: {record['role']!r} != {objtype!r}")
                 stable_added = record['added']
-                message = ' Part of the '
+                message = sphinx_gettext(' Part of the ')
                 emph_node = nodes.emphasis(message, message,
                                            classes=['stableabi'])
                 ref_node = addnodes.pending_xref(
@@ -134,40 +134,40 @@ def add_annotations(self, app, doctree):
                     reftype='ref', refexplicit="False")
                 struct_abi_kind = record['struct_abi_kind']
                 if struct_abi_kind in {'opaque', 'members'}:
-                    ref_node += nodes.Text('Limited API')
+                    ref_node += nodes.Text(sphinx_gettext('Limited API'))
                 else:
-                    ref_node += nodes.Text('Stable ABI')
+                    ref_node += nodes.Text(sphinx_gettext('Stable ABI'))
                 emph_node += ref_node
                 if struct_abi_kind == 'opaque':
-                    emph_node += nodes.Text(' (as an opaque struct)')
+                    emph_node += nodes.Text(sphinx_gettext(' (as an opaque struct)'))
                 elif struct_abi_kind == 'full-abi':
-                    emph_node += nodes.Text(' (including all members)')
+                    emph_node += nodes.Text(sphinx_gettext(' (including all members)'))
                 if record['ifdef_note']:
                     emph_node += nodes.Text(' ' + record['ifdef_note'])
                 if stable_added == '3.2':
                     # Stable ABI was introduced in 3.2.
                     pass
                 else:
-                    emph_node += nodes.Text(f' since version {stable_added}')
+                    emph_node += nodes.Text(sphinx_gettext(f' since version %s') % stable_added)
                 emph_node += nodes.Text('.')
                 if struct_abi_kind == 'members':
                     emph_node += nodes.Text(
-                        ' (Only some members are part of the stable ABI.)')
+                        sphinx_gettext(' (Only some members are part of the stable ABI.)'))
                 node.insert(0, emph_node)
 
             # Unstable API annotation.
             if name.startswith('PyUnstable'):
                 warn_node = nodes.admonition(
                     classes=['unstable-c-api', 'warning'])
-                message = 'This is '
+                message = sphinx_gettext('This is ')
                 emph_node = nodes.emphasis(message, message)
                 ref_node = addnodes.pending_xref(
                     'Unstable API', refdomain="std",
                     reftarget='unstable-c-api',
                     reftype='ref', refexplicit="False")
-                ref_node += nodes.Text('Unstable API')
+                ref_node += nodes.Text(sphinx_gettext('Unstable API'))
                 emph_node += ref_node
-                emph_node += nodes.Text('. It may change without warning in minor releases.')
+                emph_node += nodes.Text(sphinx_gettext('. It may change without warning in minor releases.'))
                 warn_node += emph_node
                 node.insert(0, warn_node)
 
diff --git a/Doc/tools/templates/dummy.html b/Doc/tools/templates/dummy.html
index bab4aaeb4604b8..3a0acab8836b11 100644
--- a/Doc/tools/templates/dummy.html
+++ b/Doc/tools/templates/dummy.html
@@ -9,6 +9,16 @@
 
 In extensions/c_annotations.py:
 
+{% trans %} Part of the {% endtrans %}
+{% trans %}Limited API{% endtrans %}
+{% trans %}Stable ABI{% endtrans %}
+{% trans %} (as an opaque struct){% endtrans %}
+{% trans %} (including all members){% endtrans %}
+{% trans %} since version %s{% endtrans %}
+{% trans %} (Only some members are part of the stable ABI.){% endtrans %}
+{% trans %}This is {% endtrans %}
+{% trans %}Unstable API{% endtrans %}
+{% trans %}. It may change without warning in minor releases.{% endtrans %}
 {% trans %}Return value: Always NULL.{% endtrans %}
 {% trans %}Return value: New reference.{% endtrans %}
 {% trans %}Return value: Borrowed reference.{% endtrans %}

From 839ac93737ba00642fab7a2a47d04c9e7ebcb4ca Mon Sep 17 00:00:00 2001
From: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Date: Wed, 16 Aug 2023 10:55:59 +0100
Subject: [PATCH 2/2] Update Doc/tools/extensions/c_annotations.py

Co-authored-by: Ezio Melotti <ezio.melotti@gmail.com>
---
 Doc/tools/extensions/c_annotations.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Doc/tools/extensions/c_annotations.py b/Doc/tools/extensions/c_annotations.py
index 233f6cc5c0bed9..42c2f10e0be260 100644
--- a/Doc/tools/extensions/c_annotations.py
+++ b/Doc/tools/extensions/c_annotations.py
@@ -148,7 +148,7 @@ def add_annotations(self, app, doctree):
                     # Stable ABI was introduced in 3.2.
                     pass
                 else:
-                    emph_node += nodes.Text(sphinx_gettext(f' since version %s') % stable_added)
+                    emph_node += nodes.Text(sphinx_gettext(' since version %s') % stable_added)
                 emph_node += nodes.Text('.')
                 if struct_abi_kind == 'members':
                     emph_node += nodes.Text(