From 8f2d094e0c14bbe4f7bf18e4eff412866732b47d Mon Sep 17 00:00:00 2001 From: Laurent Peuch Date: Mon, 6 Aug 2018 02:31:22 +0200 Subject: [PATCH 1/4] [fix] don't crash when failed to format a translatable string --- moulinette/core.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/moulinette/core.py b/moulinette/core.py index fc147c01..4e1b20f4 100644 --- a/moulinette/core.py +++ b/moulinette/core.py @@ -89,13 +89,20 @@ class Translator(object): """ if key in self._translations.get(self.locale, {}): - return self._translations[self.locale][key].encode('utf-8').format(*args, **kwargs) + try: + return self._translations[self.locale][key].encode('utf-8').format(*args, **kwargs) + except KeyError as e: + logger.warning("Failed to format translated string '%s' with error: %s" % (key, e)) if self.default_locale != self.locale and key in self._translations.get(self.default_locale, {}): logger.info("untranslated key '%s' for locale '%s'", key, self.locale) - return self._translations[self.default_locale][key].encode('utf-8').format(*args, **kwargs) + try: + return self._translations[self.default_locale][key].encode('utf-8').format(*args, **kwargs) + except KeyError as e: + logger.warning("Failed to format translatable string '%s' with error: %s" % (key, e)) + return key logger.exception("unable to retrieve key '%s' for default locale '%s'", key, self.default_locale) From abc20856317da69910f44768b0729749eed609c0 Mon Sep 17 00:00:00 2001 From: Laurent Peuch Date: Mon, 6 Aug 2018 02:37:38 +0200 Subject: [PATCH 2/4] [mod] stronger warning messages --- moulinette/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/moulinette/core.py b/moulinette/core.py index 4e1b20f4..7c372886 100644 --- a/moulinette/core.py +++ b/moulinette/core.py @@ -92,7 +92,7 @@ class Translator(object): try: return self._translations[self.locale][key].encode('utf-8').format(*args, **kwargs) except KeyError as e: - logger.warning("Failed to format translated string '%s' with error: %s" % (key, e)) + logger.exception("Failed to format translated string '%s' with error: %s" % (key, e)) if self.default_locale != self.locale and key in self._translations.get(self.default_locale, {}): logger.info("untranslated key '%s' for locale '%s'", @@ -101,7 +101,7 @@ class Translator(object): try: return self._translations[self.default_locale][key].encode('utf-8').format(*args, **kwargs) except KeyError as e: - logger.warning("Failed to format translatable string '%s' with error: %s" % (key, e)) + logger.exception("Failed to format translatable string '%s' with error: %s" % (key, e)) return key logger.exception("unable to retrieve key '%s' for default locale '%s'", From a26258e4185fc13c46fc5ec7251e3491c3e432ad Mon Sep 17 00:00:00 2001 From: Laurent Peuch Date: Mon, 6 Aug 2018 02:38:07 +0200 Subject: [PATCH 3/4] [mod] fallback on english on failure --- moulinette/core.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/moulinette/core.py b/moulinette/core.py index 7c372886..8bf53d89 100644 --- a/moulinette/core.py +++ b/moulinette/core.py @@ -88,13 +88,15 @@ class Translator(object): - key -- The key to translate """ + failed_to_format = False if key in self._translations.get(self.locale, {}): try: return self._translations[self.locale][key].encode('utf-8').format(*args, **kwargs) except KeyError as e: logger.exception("Failed to format translated string '%s' with error: %s" % (key, e)) + failed_to_format = True - if self.default_locale != self.locale and key in self._translations.get(self.default_locale, {}): + if failed_to_format or (self.default_locale != self.locale and key in self._translations.get(self.default_locale, {})): logger.info("untranslated key '%s' for locale '%s'", key, self.locale) From c3f4f8e58bbb40f0df2cfe5c225a6d1be656559b Mon Sep 17 00:00:00 2001 From: Laurent Peuch Date: Mon, 6 Aug 2018 02:38:24 +0200 Subject: [PATCH 4/4] [mod] return the informated string, it's give more information to the user --- moulinette/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moulinette/core.py b/moulinette/core.py index 8bf53d89..c6e367f7 100644 --- a/moulinette/core.py +++ b/moulinette/core.py @@ -104,7 +104,7 @@ class Translator(object): return self._translations[self.default_locale][key].encode('utf-8').format(*args, **kwargs) except KeyError as e: logger.exception("Failed to format translatable string '%s' with error: %s" % (key, e)) - return key + return self._translations[self.locale][key].encode('utf-8') logger.exception("unable to retrieve key '%s' for default locale '%s'", key, self.default_locale)