From 0d0e610d4a45184f0ac7b7e874be93d464ccf720 Mon Sep 17 00:00:00 2001 From: Alberto Coscia Date: Fri, 6 Oct 2017 19:23:11 +0200 Subject: [PATCH 1/3] Re-extracted i18n messages from source --- i18n/botogram.pot | 39 ++++++++++++++++++++------------------- i18n/langs/en.po | 33 +++++++++++++++++---------------- i18n/langs/it.po | 42 +++++++++++++++++++++++------------------- 3 files changed, 60 insertions(+), 54 deletions(-) diff --git a/i18n/botogram.pot b/i18n/botogram.pot index da6f71e..265b272 100644 --- a/i18n/botogram.pot +++ b/i18n/botogram.pot @@ -1,70 +1,71 @@ # Translations template for botogram. -# Copyright (C) 2016 Pietro Albini +# Copyright (C) 2017 Pietro Albini # This file is distributed under the same license as the botogram project. -# FIRST AUTHOR , 2016. +# FIRST AUTHOR , 2017. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: botogram 1.0.dev0\n" "Report-Msgid-Bugs-To: https://github.com/pietroalbini/botogram/issues\n" -"POT-Creation-Date: 2016-03-30 22:31+0200\n" +"POT-Creation-Date: 2017-10-06 19:21+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.1.1\n" +"Generated-By: Babel 2.3.4\n" -#: botogram/defaults.py:32 +#: botogram/defaults.py:46 msgid "Use /help to get a list of all the commands." msgstr "" -#: botogram/defaults.py:39 +#: botogram/defaults.py:53 msgid "Start using the bot." msgstr "" -#: botogram/defaults.py:40 +#: botogram/defaults.py:54 msgid "This shows a greeting message." msgstr "" -#: botogram/defaults.py:48 +#: botogram/defaults.py:62 msgid "Error! The /help command allows up to one argument." msgstr "" -#: botogram/defaults.py:54 botogram/defaults.py:153 +#: botogram/defaults.py:68 botogram/defaults.py:167 #, python-format msgid "Unknown command: /%(name)s" msgstr "" -#: botogram/defaults.py:57 botogram/defaults.py:155 +#: botogram/defaults.py:71 botogram/defaults.py:169 msgid "Use /help to get a list of the commands." msgstr "" -#: botogram/defaults.py:78 +#: botogram/defaults.py:93 msgid "This bot supports those commands:" msgstr "" -#: botogram/defaults.py:89 botogram/defaults.py:130 +#: botogram/defaults.py:97 botogram/defaults.py:127 +msgid "No description available." +msgstr "" + +#: botogram/defaults.py:101 botogram/defaults.py:144 msgid "" "You can also use /help <command> to get help about a " "specific command." msgstr "" -#: botogram/defaults.py:93 +#: botogram/defaults.py:105 msgid "This bot has no commands." msgstr "" -#: botogram/defaults.py:102 botogram/defaults.py:119 +#: botogram/defaults.py:114 botogram/defaults.py:133 #, python-format msgid "Please contact %(owner)s if you have problems with this bot." msgstr "" -#: botogram/defaults.py:129 +#: botogram/defaults.py:143 msgid "Show this help message." msgstr "" -#: botogram/utils.py:144 -msgid "No description available." -msgstr "" - diff --git a/i18n/langs/en.po b/i18n/langs/en.po index 5d722a5..62368dd 100644 --- a/i18n/langs/en.po +++ b/i18n/langs/en.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: botogram 1.0.dev0\n" "Report-Msgid-Bugs-To: https://github.com/pietroalbini/botogram/issues\n" -"POT-Creation-Date: 2016-03-30 22:31+0200\n" +"POT-Creation-Date: 2017-10-06 19:21+0200\n" "PO-Revision-Date: 2015-08-01 17:20+0200\n" "Last-Translator: Pietro Albini \n" "Language: en\n" @@ -16,56 +16,57 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.1.1\n" +"Generated-By: Babel 2.3.4\n" -#: botogram/defaults.py:32 +#: botogram/defaults.py:46 msgid "Use /help to get a list of all the commands." msgstr "" -#: botogram/defaults.py:39 +#: botogram/defaults.py:53 msgid "Start using the bot." msgstr "" -#: botogram/defaults.py:40 +#: botogram/defaults.py:54 msgid "This shows a greeting message." msgstr "" -#: botogram/defaults.py:48 +#: botogram/defaults.py:62 msgid "Error! The /help command allows up to one argument." msgstr "" -#: botogram/defaults.py:54 botogram/defaults.py:153 +#: botogram/defaults.py:68 botogram/defaults.py:167 #, python-format msgid "Unknown command: /%(name)s" msgstr "" -#: botogram/defaults.py:57 botogram/defaults.py:155 +#: botogram/defaults.py:71 botogram/defaults.py:169 msgid "Use /help to get a list of the commands." msgstr "" -#: botogram/defaults.py:78 +#: botogram/defaults.py:93 msgid "This bot supports those commands:" msgstr "" -#: botogram/defaults.py:89 botogram/defaults.py:130 +#: botogram/defaults.py:97 botogram/defaults.py:127 +msgid "No description available." +msgstr "" + +#: botogram/defaults.py:101 botogram/defaults.py:144 msgid "" "You can also use /help <command> to get help about a " "specific command." msgstr "" -#: botogram/defaults.py:93 +#: botogram/defaults.py:105 msgid "This bot has no commands." msgstr "" -#: botogram/defaults.py:102 botogram/defaults.py:119 +#: botogram/defaults.py:114 botogram/defaults.py:133 #, python-format msgid "Please contact %(owner)s if you have problems with this bot." msgstr "" -#: botogram/defaults.py:129 +#: botogram/defaults.py:143 msgid "Show this help message." msgstr "" -#: botogram/utils.py:144 -msgid "No description available." -msgstr "" diff --git a/i18n/langs/it.po b/i18n/langs/it.po index 8f1b3f5..5d730cd 100644 --- a/i18n/langs/it.po +++ b/i18n/langs/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: botogram 1.0.dev0\n" "Report-Msgid-Bugs-To: https://github.com/pietroalbini/botogram/issues\n" -"POT-Creation-Date: 2016-03-30 22:31+0200\n" +"POT-Creation-Date: 2017-10-06 19:21+0200\n" "PO-Revision-Date: 2015-08-01 17:06+0200\n" "Last-Translator: Pietro Albini \n" "Language: it\n" @@ -16,57 +16,61 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.1.1\n" +"Generated-By: Babel 2.3.4\n" -#: botogram/defaults.py:32 +#: botogram/defaults.py:46 msgid "Use /help to get a list of all the commands." msgstr "Utilizza /help per ottenere la lista di tutti i comandi." -#: botogram/defaults.py:39 +#: botogram/defaults.py:53 msgid "Start using the bot." msgstr "Inizia ad usare il bot." -#: botogram/defaults.py:40 +#: botogram/defaults.py:54 msgid "This shows a greeting message." msgstr "Questo comando visualizza un messaggio di benvenuto." -#: botogram/defaults.py:48 +#: botogram/defaults.py:62 msgid "Error! The /help command allows up to one argument." -msgstr "Errore! Il comando /help non accetta più di un argomento." +msgstr "" +"Errore! Il comando /help non accetta più di un " +"argomento." -#: botogram/defaults.py:54 botogram/defaults.py:153 +#: botogram/defaults.py:68 botogram/defaults.py:167 #, python-format msgid "Unknown command: /%(name)s" msgstr "Comando sconosciuto: /%(name)s" -#: botogram/defaults.py:57 botogram/defaults.py:155 +#: botogram/defaults.py:71 botogram/defaults.py:169 msgid "Use /help to get a list of the commands." msgstr "Utilizza /help per ottenere la lista dei comandi." -#: botogram/defaults.py:78 +#: botogram/defaults.py:93 msgid "This bot supports those commands:" msgstr "Questo bot supporta i seguenti comandi:" -#: botogram/defaults.py:89 botogram/defaults.py:130 +#: botogram/defaults.py:97 botogram/defaults.py:127 +msgid "No description available." +msgstr "Nessuna descrizione disponibile." + +#: botogram/defaults.py:101 botogram/defaults.py:144 msgid "" "You can also use /help <command> to get help about a " "specific command." -msgstr "Puoi anche usare /help <comando> per ottenere aiuto su un comando." +msgstr "" +"Puoi anche usare /help <comando> per ottenere aiuto su" +" un comando." -#: botogram/defaults.py:93 +#: botogram/defaults.py:105 msgid "This bot has no commands." msgstr "Questo bot non ha comandi." -#: botogram/defaults.py:102 botogram/defaults.py:119 +#: botogram/defaults.py:114 botogram/defaults.py:133 #, python-format msgid "Please contact %(owner)s if you have problems with this bot." msgstr "Contatta %(owner)s se hai problemi con questo bot." -#: botogram/defaults.py:129 +#: botogram/defaults.py:143 msgid "Show this help message." msgstr "Visualizza questo messaggio di aiuto." -#: botogram/utils.py:144 -msgid "No description available." -msgstr "Nessuna descrizione disponibile." - From b01a0e7bf11e852a7897ccd1801dabde9586a63a Mon Sep 17 00:00:00 2001 From: Alberto Coscia Date: Fri, 6 Oct 2017 19:43:36 +0200 Subject: [PATCH 2/3] Add i18n_override, which enables users to override default i18n messages --- botogram/bot.py | 3 ++- botogram/frozenbot.py | 12 +++++++++--- tests/test_bot.py | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/botogram/bot.py b/botogram/bot.py index d4445c5..74e8f03 100644 --- a/botogram/bot.py +++ b/botogram/bot.py @@ -59,6 +59,7 @@ def __init__(self, api_connection): self._lang = "" self._lang_inst = None + self.override_i18n = {} # Support for the old, deprecated bot.hide_commands self._hide_commands = [] @@ -273,7 +274,7 @@ def freeze(self): self._commands, chains, self._scheduler, self._main_component._component_id, self._bot_id, self._shared_memory, - self._update_processors) + self._update_processors, self.override_i18n) @property def lang(self): diff --git a/botogram/frozenbot.py b/botogram/frozenbot.py index d9d5303..bfd09f5 100644 --- a/botogram/frozenbot.py +++ b/botogram/frozenbot.py @@ -36,7 +36,7 @@ def __init__(self, api, about, owner, hide_commands, before_help, after_help, link_preview_in_help, validate_callback_signatures, process_backlog, lang, itself, commands_re, commands, chains, scheduler, main_component_id, - bot_id, shared_memory, update_processors): + bot_id, shared_memory, update_processors, override_i18n): # This attribute should be added with the default setattr, because is # needed by the custom setattr object.__setattr__(self, "_frozen", False) @@ -61,6 +61,7 @@ def __init__(self, api, about, owner, hide_commands, before_help, self._update_processors = update_processors self._commands = {name: command.for_bot(self) for name, command in commands.items()} + self.override_i18n = override_i18n # Setup the logger self.logger = logbook.Logger('botogram bot') @@ -82,7 +83,7 @@ def __reduce__(self): self.validate_callback_signatures, self.process_backlog, self.lang, self.itself, self._commands_re, self._commands, self._chains, self._scheduler, self._main_component_id, self._bot_id, - self._shared_memory, self._update_processors, + self._shared_memory, self._update_processors, self.override_i18n ) return restore, args @@ -240,7 +241,12 @@ def register_update_processor(self, kind, processor): def _(self, message, **args): """Translate a string""" - return self._lang_inst.gettext(message) % args + # Check if the message has been overridden + if message in self.override_i18n: + return self.override_i18n[message] % args + # Otherwise try to return the original message + else: + return self._lang_inst.gettext(message) % args # And some internal methods used by botogram diff --git a/tests/test_bot.py b/tests/test_bot.py index 4a32895..6a51c8d 100644 --- a/tests/test_bot.py +++ b/tests/test_bot.py @@ -22,6 +22,7 @@ import botogram.bot import botogram.components +import botogram.utils import conftest @@ -76,3 +77,17 @@ def test_bot_freeze(bot): frozen = bot.freeze() assert bot == frozen + +def test_i18n_override(bot): + default_message = botogram.utils.get_language("en").gettext("Use /help to get a list of all the commands.") + override_message = "git gud" + + bot.override_i18n = { + default_message: override_message + } + + assert bot._("Use /help to get a list of all the commands.") == "git gud" + + bot.override_i18n = {} + + assert bot._("Use /help to get a list of all the commands.") == default_message From 6bbc17e789fc3d6902067541e67cbd102ea90308 Mon Sep 17 00:00:00 2001 From: Alberto Coscia Date: Mon, 9 Oct 2017 17:30:06 +0200 Subject: [PATCH 3/3] Document feature and fix code style --- botogram/frozenbot.py | 2 +- docs/api/bot.rst | 7 +++++++ docs/changelog/0.4.rst | 7 +++++++ tests/test_bot.py | 12 ++++++++---- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/botogram/frozenbot.py b/botogram/frozenbot.py index bfd09f5..6afe8df 100644 --- a/botogram/frozenbot.py +++ b/botogram/frozenbot.py @@ -83,7 +83,7 @@ def __reduce__(self): self.validate_callback_signatures, self.process_backlog, self.lang, self.itself, self._commands_re, self._commands, self._chains, self._scheduler, self._main_component_id, self._bot_id, - self._shared_memory, self._update_processors, self.override_i18n + self._shared_memory, self._update_processors, self.override_i18n, ) return restore, args diff --git a/docs/api/bot.rst b/docs/api/bot.rst index 53abb1b..27a7dcb 100644 --- a/docs/api/bot.rst +++ b/docs/api/bot.rst @@ -83,6 +83,13 @@ components. The :py:class:`botogram.User` representation of the bot's user account. From this you can access its id, username and more. + .. py:attribute:: override_i18n + + A dictionary that allows to override default i18n messages by associating + the default ``msgid`` string of a message with its alternative. + + .. versionadded:: 0.4.1 + .. py:decoratormethod:: before_processing Functions decorated with this decorator will be called before an update diff --git a/docs/changelog/0.4.rst b/docs/changelog/0.4.rst index d8ae8dd..7b6452b 100644 --- a/docs/changelog/0.4.rst +++ b/docs/changelog/0.4.rst @@ -16,6 +16,13 @@ botogram 0.4.1 Release description not yet written. +New features +------------ + +* Added ability to override default i18n messages + + * New attribute :py:attr:`botogram.Bot.override_i18n` + Bug fixes --------- diff --git a/tests/test_bot.py b/tests/test_bot.py index 6a51c8d..eb0887f 100644 --- a/tests/test_bot.py +++ b/tests/test_bot.py @@ -31,7 +31,7 @@ def test_bot_creation(api, mock_req): # Mock the getMe request mock_req({ "getMe": {"ok": True, "result": {"id": 1, "first_name": "test", - "username": "test_bot"}}, + "username": "test_bot"}}, }) bot1 = botogram.bot.create(conftest.API_KEY) @@ -78,16 +78,20 @@ def test_bot_freeze(bot): assert bot == frozen + def test_i18n_override(bot): - default_message = botogram.utils.get_language("en").gettext("Use /help to get a list of all the commands.") + default_message = botogram.utils.get_language("en") \ + .gettext("Use /help to get a list of all the commands.") override_message = "git gud" bot.override_i18n = { default_message: override_message } - assert bot._("Use /help to get a list of all the commands.") == "git gud" + assert bot._("Use /help to get a list of all the commands.") \ + == override_message bot.override_i18n = {} - assert bot._("Use /help to get a list of all the commands.") == default_message + assert bot._("Use /help to get a list of all the commands.") \ + == default_message