From 2ba2ac6d37c1e825761e787684b04bb9fd02b775 Mon Sep 17 00:00:00 2001 From: absurdo Date: Sun, 17 Dec 2023 22:16:09 +0100 Subject: [PATCH] Fixes for use gettext in paramecio, deprecating old language system --- paramecio2/libraries/i18n.py | 11 ++++++++++ paramecio2/libraries/mtemplates.py | 22 +++++++++++++++++-- paramecio2/modules/admin/app.py | 9 +++++--- .../modules/admin/templates/dashboard.phtml | 2 +- paramecio2/modules/admin/templates/home.phtml | 4 ++-- paramecio2/modules/admin/templates/index.html | 4 ++-- .../modules/admin/templates/login.phtml | 20 ++++++++--------- .../modules/admin/templates/need_auth.phtml | 16 +++++++------- .../modules/admin/templates/register.phtml | 6 ++--- .../modules/admin/templates/users.phtml | 4 ++-- .../modules/welcome/templates/welcome.phtml | 2 +- 11 files changed, 66 insertions(+), 34 deletions(-) diff --git a/paramecio2/libraries/i18n.py b/paramecio2/libraries/i18n.py index 8045232..da7dfa0 100644 --- a/paramecio2/libraries/i18n.py +++ b/paramecio2/libraries/i18n.py @@ -1,9 +1,11 @@ #!/usr/bin/env python3 from importlib import import_module +import gettext #from paramecio.citoplasma.sessions import get_session import json from flask import session, has_request_context +import os yes_session=False @@ -28,6 +30,15 @@ def load_lang(*args): # here load the language +def pgettext(module_file): + + module=os.path.dirname(os.path.realpath(module_file)) + + base_name=os.path.dirname(os.path.realpath(module)) + + l=gettext.translation(os.path.basename(base_name), module+'/languages/', languages=I18n.dict_i18n, fallback=True) + + return l.gettext class I18n: """Class for i18n tasks diff --git a/paramecio2/libraries/mtemplates.py b/paramecio2/libraries/mtemplates.py index 6b24ef6..47a1672 100644 --- a/paramecio2/libraries/mtemplates.py +++ b/paramecio2/libraries/mtemplates.py @@ -18,9 +18,11 @@ from paramecio2.libraries.i18n import I18n from paramecio2.libraries.urls import make_url, make_media_url, add_get_parameters from paramecio2.libraries.formsutils import csrf_token +""" def _(text): return gettext.gettext(text) +""" def env_theme(module, cache_enabled=True, cache_impl='', cache_args={}, module_directory="./tmp/modules"): """Function for create an environment for mako templates @@ -46,6 +48,8 @@ def env_theme(module, cache_enabled=True, cache_impl='', cache_args={}, module_d module=path.dirname(module) standard_templates=path.dirname(__file__)+'/templates' + + standard_languages=path.dirname(__file__)+'/languages' module_directory+='/'+module @@ -94,8 +98,6 @@ class PTemplate: self.add_filter(I18n.lang) - self.add_filter(_) - #self.add_filter(make_url) self.add_filter(make_media_url) @@ -109,6 +111,22 @@ class PTemplate: self.add_filter(self.add_js) self.add_filter(self.load_js) + + # Loading language domain for gettext in templates + + base_name=path.dirname(path.realpath(__file__)) + + module_env=self.env.directories[1].replace('/templates', '') + + #print(path.basename(module_env)+' '+base_name+'/languages/') + + self.l=gettext.translation(path.basename(module_env), base_name+'/languages/', languages=I18n.dict_i18n, fallback=True) + + self.add_filter(self._) + + def _(self, text): + + return self.l.gettext(text) def add_js(self, js, module=''): """Function for add js to self.js attribute diff --git a/paramecio2/modules/admin/app.py b/paramecio2/modules/admin/app.py index ff030aa..8ba36c9 100644 --- a/paramecio2/modules/admin/app.py +++ b/paramecio2/modules/admin/app.py @@ -1,6 +1,6 @@ from flask import Blueprint, redirect, session, url_for, request, g, make_response, abort from settings import config -from paramecio2.libraries.i18n import I18n +from paramecio2.libraries.i18n import I18n, pgettext from paramecio2.libraries.datetime import now, format_local_strtime, timestamp_to_datetime, obtain_timestamp from paramecio2.libraries.formsutils import show_form, generate_csrf, set_extra_forms_user, pass_values_to_form from paramecio2.libraries.db.webmodel import WebModel @@ -15,6 +15,9 @@ from os import path from paramecio2.modules.admin import admin_app, t from paramecio2.libraries.sendmail import SendMail from paramecio2.libraries.formsutils import check_csrf +#import gettext + +_=pgettext(__file__) yes_recovery_login=False email_address='localhost' @@ -116,7 +119,7 @@ for app_load in config_admin: @admin_app.route('/admin/') def admin(): - return t.load_template('home.phtml', title=I18n.lang('admin', 'admin', 'Admin')) + return t.load_template('home.phtml', title=_('Admin')) """ @admin_app.route('/admin/') @@ -250,7 +253,7 @@ def login(): # def send(self, from_address, to_address: list, subject, message, content_type='plain', attachments=[]): - sendmail.send(config.portal_email, [arr_user['email']], I18n.lang('admin', 'code_for_complete_login', 'Code for complete login'), I18n.lang('admin', 'code_for_complete_login_explain', 'We send to you a code for activate your account using double authentication:')+"\n"+token_auth, content_type='plain', attachments=[]) + sendmail.send(config.portal_email, [arr_user['email']], _('Code for complete login'), _('We send to you a code for activate your account using double authentication:')+"\n"+token_auth, content_type='plain', attachments=[]) if arr_user['dark_theme']: session['theme']='1' diff --git a/paramecio2/modules/admin/templates/dashboard.phtml b/paramecio2/modules/admin/templates/dashboard.phtml index cfc1d11..bedaefd 100644 --- a/paramecio2/modules/admin/templates/dashboard.phtml +++ b/paramecio2/modules/admin/templates/dashboard.phtml @@ -63,7 +63,7 @@ ${load_js()|n}