Skip to content

Commit 6be7cc5

Browse files
committed
gh-141865: Allow 'deprecated-removed' message to be translated
1 parent e73fbba commit 6be7cc5

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

Doc/tools/extensions/changes.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,31 @@ def run(self) -> list[Node]:
3333
return super().run()
3434

3535

36+
class TerribleHashableDictHack:
37+
def __init__(self, deprecated, removed):
38+
self.deprecated = deprecated
39+
self.removed = removed
40+
41+
def __hash__(self):
42+
return hash((self.deprecated, self.removed))
43+
44+
def __getitem__(self, name):
45+
return getattr(self, name)
46+
47+
48+
class FormatToPctTranslator:
49+
def __getitem__(self, name):
50+
return f'%({name})s'
51+
52+
3653
class DeprecatedRemoved(VersionChange):
3754
required_arguments = 2
3855

3956
_deprecated_label = sphinx_gettext(
40-
"Deprecated since version %s, will be removed in version %s"
57+
"Deprecated since version {deprecated}, will be removed in version {removed}"
4158
)
4259
_removed_label = sphinx_gettext(
43-
"Deprecated since version %s, removed in version %s"
60+
"Deprecated since version {deprecated}, removed in version {removed}"
4461
)
4562

4663
def run(self) -> list[Node]:
@@ -54,16 +71,23 @@ def run(self) -> list[Node]:
5471
raise ValueError(
5572
"deprecated-removed:: second argument cannot be `next`"
5673
)
57-
self.arguments[0] = version_deprecated, version_removed
74+
self.arguments[0] = TerribleHashableDictHack(
75+
deprecated=version_deprecated,
76+
removed=version_removed,
77+
)
5878

5979
# Set the label based on if we have reached the removal version
6080
current_version = tuple(map(int, self.config.version.split(".")))
6181
removed_version = tuple(map(int, version_removed.split(".")))
6282
if current_version < removed_version:
63-
versionlabels[self.name] = self._deprecated_label
83+
versionlabels[self.name] = self._deprecated_label.format_map(
84+
FormatToPctTranslator()
85+
)
6486
versionlabel_classes[self.name] = "deprecated"
6587
else:
66-
versionlabels[self.name] = self._removed_label
88+
versionlabels[self.name] = self._removed_label.format_map(
89+
FormatToPctTranslator()
90+
)
6791
versionlabel_classes[self.name] = "removed"
6892
try:
6993
return super().run()

0 commit comments

Comments
 (0)