From 0d6eec7a33e66380a310ceb562b6570ddc8265d4 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sat, 17 Apr 2021 18:57:20 +0100 Subject: [i18n] Refactor loading libintl library Handle different names for libintl library on MacOS and Windows with fallback. --- deluge/i18n/util.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/deluge/i18n/util.py b/deluge/i18n/util.py index d33acaadf..81530c2ee 100644 --- a/deluge/i18n/util.py +++ b/deluge/i18n/util.py @@ -116,22 +116,30 @@ def setup_translation(): gettext.install(I18N_DOMAIN, translations_path, names=['ngettext'], **kwargs) builtins.__dict__['_n'] = builtins.__dict__['ngettext'] - libintl = None - if deluge.common.windows_check(): - for intl in ('libintl-8.dll', 'intl.dll'): + def load_libintl(libintls): + errors = [] + for library in libintls: try: - libintl = ctypes.cdll.LoadLibrary(intl) + libintl = ctypes.cdll.LoadLibrary(library) except OSError as ex: - exception = ex + errors.append(ex) else: break - finally: - if not libintl: - log.error('Unable to initialize gettext/locale!') - log.error(exception) - setup_mock_translation() + + if not libintl: + log.debug( + 'Unable to initialize gettext/locale:\n %s', '\n '.join(errors) + ) + setup_mock_translation() + return + + return libintl + + libintl = None + if deluge.common.windows_check(): + libintl = load_libintl(['libintl-8.dll', 'intl.dll']) elif deluge.common.osx_check(): - libintl = ctypes.cdll.LoadLibrary('libintl.dylib') + libintl = load_libintl(['libintl.8.dylib', 'libintl.dylib']) if libintl: libintl.bindtextdomain( -- cgit