From 5627ca6f612367ee7c36f81fef2b3f9383319ef0 Mon Sep 17 00:00:00 2001 From: Shadi Naif Date: Thu, 22 Feb 2024 11:08:02 +0300 Subject: [PATCH] feat!: remove Transifex calls for FC-0012 - OEP-58 --- .tx/config | 8 -------- recommender/recommender.py | 34 ++++++++++++++++++++-------------- recommender/utils.py | 24 ++++++++++++++++++++++++ translation_settings.py | 4 ++-- 4 files changed, 46 insertions(+), 24 deletions(-) delete mode 100644 .tx/config create mode 100644 recommender/utils.py diff --git a/.tx/config b/.tx/config deleted file mode 100644 index 7d389e0..0000000 --- a/.tx/config +++ /dev/null @@ -1,8 +0,0 @@ -[main] -host = https://www.transifex.com - -[o:open-edx:p:xblocks:r:recommender] -file_filter = recommender/translations//LC_MESSAGES/text.po -source_file = recommender/translations/en/LC_MESSAGES/text.po -source_lang = en -type = PO diff --git a/recommender/recommender.py b/recommender/recommender.py index f4ce74c..48821f8 100644 --- a/recommender/recommender.py +++ b/recommender/recommender.py @@ -27,6 +27,8 @@ from xblock.reference.plugins import Filesystem from xblockutils.resources import ResourceLoader +from recommender.utils import DummyTranslationService + # TODO: Should be updated once XBlocks and tracking logs have finalized APIs # and documentation. try: @@ -278,6 +280,8 @@ class RecommenderXBlock(HelperXBlock): 'url', 'title', 'description', 'descriptionText' ] + i18n_js_namespace = 'RecommenderXBlockI18N' + def _get_onetime_url(self, filename): """ Return one time url for uploaded screenshot @@ -948,21 +952,23 @@ def _construct_view_resource(self, resource): return result - @staticmethod - def _get_statici18n_js_url(): # pragma: no cover - """ - Returns the Javascript translation file for the currently selected language, if any found by `pkg_resources` - """ - lang_code = translation.get_language() - if not lang_code: - return None - text_js = 'public/js/translations/{lang_code}/text.js' - country_code = lang_code.split('-')[0] - for code in (translation.to_locale(lang_code), lang_code, country_code): - if pkg_resources.resource_exists(resource_loader.module_name, text_js.format(lang_code=code)): - return text_js.format(lang_code=code) + def _get_statici18n_js_url(self): + """Return the JavaScript translation file provided by the XBlockI18NService.""" + if url_getter_func := getattr(self.i18n_service, 'get_javascript_i18n_catalog_url', None): + if javascript_url := url_getter_func(self): + return javascript_url + return None + @property + def i18n_service(self): + """ Obtains translation service """ + i18n_service = self.runtime.service(self, "i18n") + if i18n_service: + return i18n_service + else: + return DummyTranslationService() + def student_view(self, _context=None): # pylint: disable=unused-argument """ The primary view of the RecommenderXBlock, shown to students @@ -1011,7 +1017,7 @@ def student_view(self, _context=None): # pylint: disable=unused-argument frag.add_javascript(self.resource_string("static/js/src/jquery.tooltipster.min.js")) statici18n_js_url = self._get_statici18n_js_url() if statici18n_js_url: - frag.add_javascript(self.resource_string(statici18n_js_url)) + frag.add_javascript(statici18n_js_url) frag.add_javascript(self.resource_string("static/js/src/cats.js")) frag.add_javascript(self.resource_string("static/js/src/recommender.js")) frag.initialize_js('RecommenderXBlock', self.get_client_configuration()) diff --git a/recommender/utils.py b/recommender/utils.py new file mode 100644 index 0000000..1309429 --- /dev/null +++ b/recommender/utils.py @@ -0,0 +1,24 @@ +"""Utils for the Recommender XBlock""" + + +def _(text): + """ + Make '_' a no-op so we can scrape strings + """ + return text + + +def ngettext_fallback(text_singular, text_plural, number): + """ Dummy `ngettext` replacement to make string extraction tools scrape strings marked for translation """ + if number == 1: + return text_singular + else: + return text_plural + + +class DummyTranslationService: + """ + Dummy drop-in replacement for i18n XBlock service + """ + gettext = _ + ngettext = ngettext_fallback diff --git a/translation_settings.py b/translation_settings.py index acc9d54..1a37f71 100644 --- a/translation_settings.py +++ b/translation_settings.py @@ -11,7 +11,7 @@ # Build paths inside the project like this: os.path.join(BASE_DIR, ...) from __future__ import absolute_import import os -BASE_DIR = os.path.dirname(os.path.dirname(__file__)) +BASE_DIR = os.path.dirname(__file__) # Quick-start development settings - unsuitable for production @@ -81,7 +81,7 @@ ('zh_CN', 'Chinese (China)'), ] -LOCALE_PATHS = [os.path.join(BASE_DIR, "locale")] +LOCALE_PATHS = [os.path.join(BASE_DIR, "recommender", "conf", "locale")] STATICI18N_DOMAIN = 'text' STATICI18N_NAMESPACE = 'RecommenderXBlockI18N'