Skip to content

Commit b01a0e7

Browse files
committed
Add i18n_override, which enables users to override default i18n messages
1 parent 0d0e610 commit b01a0e7

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

botogram/bot.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ def __init__(self, api_connection):
5959

6060
self._lang = ""
6161
self._lang_inst = None
62+
self.override_i18n = {}
6263

6364
# Support for the old, deprecated bot.hide_commands
6465
self._hide_commands = []
@@ -273,7 +274,7 @@ def freeze(self):
273274
self._commands, chains, self._scheduler,
274275
self._main_component._component_id,
275276
self._bot_id, self._shared_memory,
276-
self._update_processors)
277+
self._update_processors, self.override_i18n)
277278

278279
@property
279280
def lang(self):

botogram/frozenbot.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def __init__(self, api, about, owner, hide_commands, before_help,
3636
after_help, link_preview_in_help,
3737
validate_callback_signatures, process_backlog, lang, itself,
3838
commands_re, commands, chains, scheduler, main_component_id,
39-
bot_id, shared_memory, update_processors):
39+
bot_id, shared_memory, update_processors, override_i18n):
4040
# This attribute should be added with the default setattr, because is
4141
# needed by the custom setattr
4242
object.__setattr__(self, "_frozen", False)
@@ -61,6 +61,7 @@ def __init__(self, api, about, owner, hide_commands, before_help,
6161
self._update_processors = update_processors
6262
self._commands = {name: command.for_bot(self)
6363
for name, command in commands.items()}
64+
self.override_i18n = override_i18n
6465

6566
# Setup the logger
6667
self.logger = logbook.Logger('botogram bot')
@@ -82,7 +83,7 @@ def __reduce__(self):
8283
self.validate_callback_signatures, self.process_backlog, self.lang,
8384
self.itself, self._commands_re, self._commands, self._chains,
8485
self._scheduler, self._main_component_id, self._bot_id,
85-
self._shared_memory, self._update_processors,
86+
self._shared_memory, self._update_processors, self.override_i18n
8687
)
8788
return restore, args
8889

@@ -240,7 +241,12 @@ def register_update_processor(self, kind, processor):
240241

241242
def _(self, message, **args):
242243
"""Translate a string"""
243-
return self._lang_inst.gettext(message) % args
244+
# Check if the message has been overridden
245+
if message in self.override_i18n:
246+
return self.override_i18n[message] % args
247+
# Otherwise try to return the original message
248+
else:
249+
return self._lang_inst.gettext(message) % args
244250

245251
# And some internal methods used by botogram
246252

tests/test_bot.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import botogram.bot
2424
import botogram.components
25+
import botogram.utils
2526

2627
import conftest
2728

@@ -76,3 +77,17 @@ def test_bot_freeze(bot):
7677
frozen = bot.freeze()
7778

7879
assert bot == frozen
80+
81+
def test_i18n_override(bot):
82+
default_message = botogram.utils.get_language("en").gettext("Use /help to get a list of all the commands.")
83+
override_message = "git gud"
84+
85+
bot.override_i18n = {
86+
default_message: override_message
87+
}
88+
89+
assert bot._("Use /help to get a list of all the commands.") == "git gud"
90+
91+
bot.override_i18n = {}
92+
93+
assert bot._("Use /help to get a list of all the commands.") == default_message

0 commit comments

Comments
 (0)