Philipp Hörist pushed to branch master at gajim / gajim
Commits: 23c302ca by Philipp Hörist at 2018-06-23T17:07:43+02:00 Fix translation on Windows
Fixes #8658
- - - - -
3 changed files:
- gajim/application.py - gajim/common/i18n.py - gajim/gtkgui_helpers.py
Changes:
===================================== gajim/application.py ===================================== --- a/gajim/application.py +++ b/gajim/application.py @@ -144,10 +144,8 @@ class GajimApplication(Gtk.Application):
# Set Application Menu app.app = self - path = os.path.join(configpaths.get('GUI'), 'application_menu.ui') - builder = Gtk.Builder() - builder.set_translation_domain(i18n.DOMAIN) - builder.add_from_file(path) + from gajim import gtkgui_helpers + builder = gtkgui_helpers.get_gtk_builder('application_menu.ui') menubar = builder.get_object("menubar") appmenu = builder.get_object("appmenu") if app.prefers_app_menu():
===================================== gajim/common/i18n.py ===================================== --- a/gajim/common/i18n.py +++ b/gajim/common/i18n.py @@ -40,7 +40,6 @@ def initialize(): except locale.Error as error: print(error)
- # initialize_win_translation() broken initialize_lang() set_i18n_env()
@@ -75,8 +74,7 @@ def initialize_lang():
def get_locale_dir(): if os.name == 'nt': - return "../po" - + return None # try to find domain in localedir path = gettext.find(DOMAIN) if path: @@ -96,44 +94,6 @@ def get_locale_dir(): return localedir
-def initialize_win_translation(): - # broken for now - return - - if os.name != 'nt': - return - - # needed for docutils - # sys.path.append('.') - APP = 'gajim' - DIR = '../po' - lang = locale.getdefaultlocale()[0] - os.environ['LANG'] = lang - gettext.bindtextdomain(APP, DIR) - gettext.textdomain(APP) - gettext.install(APP, DIR) - - # This is for Windows translation which is currently not - # working on GTK 3.18.9 - # locale.setlocale(locale.LC_ALL, '') - # import ctypes - # import ctypes.util - # libintl_path = ctypes.util.find_library('intl') - # if libintl_path == None: - # local_intl = os.path.join('gtk', 'bin', 'intl.dll') - # if os.path.exists(local_intl): - # libintl_path = local_intl - # if libintl_path == None: - # raise ImportError('intl.dll library not found') - # libintl = ctypes.cdll.LoadLibrary(libintl_path) - # libintl.bindtextdomain(APP, DIR) - # libintl.bind_textdomain_codeset(APP, 'UTF-8') - # plugins_locale_dir = os.path.join(common.configpaths[ - # 'PLUGINS_USER'], 'locale').encode(locale.getpreferredencoding()) - # libintl.bindtextdomain('gajim_plugins', plugins_locale_dir) - # libintl.bind_textdomain_codeset('gajim_plugins', 'UTF-8') - - def initialize_direction_mark(): from gi.repository import Gtk
===================================== gajim/gtkgui_helpers.py ===================================== --- a/gajim/gtkgui_helpers.py +++ b/gajim/gtkgui_helpers.py @@ -38,6 +38,7 @@ import cairo import os import sys import math +import xml.etree.ElementTree as ET try: from PIL import Image except: @@ -125,14 +126,30 @@ def get_image_button(icon_name, tooltip, toggle=False):
def get_gtk_builder(file_name, widget=None): file_path = os.path.join(configpaths.get('GUI'), file_name) - builder = Gtk.Builder() + builder = _translate(file_path, widget) builder.set_translation_domain(i18n.DOMAIN) - if widget: - builder.add_objects_from_file(file_path, [widget]) - else: - builder.add_from_file(file_path) return builder
+def _translate(gui_file, widget): + """ + This is a workaround for non working translation on Windows + """ + if sys.platform == "win32": + tree = ET.parse(gui_file) + for node in tree.iter(): + if 'translatable' in node.attrib: + node.text = _(node.text) + xml_text = ET.tostring(tree.getroot(), + encoding='unicode', + method='xml') + return Gtk.Builder.new_from_string(xml_text, -1) + else: + if widget is not None: + builder = Gtk.Builder() + builder.add_objects_from_file(gui_file, [widget]) + return builder + return Gtk.Builder.new_from_file(gui_file) + def get_completion_liststore(entry): """ Create a completion model for entry widget completion list consists of
View it on GitLab: https://dev.gajim.org/gajim/gajim/commit/23c302ca70ee572fa533f4f5f517acdaa4b...
--- View it on GitLab: https://dev.gajim.org/gajim/gajim/commit/23c302ca70ee572fa533f4f5f517acdaa4b... You're receiving this email because of your account on dev.gajim.org.