PyQt: переводить строки модуля во время выполненияPython

Программы на Python
Ответить
Anonymous
 PyQt: переводить строки модуля во время выполнения

Сообщение Anonymous »

Строки в QObject переводятся во время выполнения. Если переводчик меняется, все эти строки обновляются. Однако строки, объявленные на уровне модуля, или даже статические атрибуты класса переводятся во время импорта.

Я вижу три способа разрешить перевод строк модуля, ни один из которых не кажется мне полностью удовлетворительным:
  • Импортируйте модуль после установки переводчика (см. здесь (параграф Установить переводчик раньше)). Это может быть неудобно, но осуществимо, если не нужно менять язык во время выполнения.
  • Создайте атрибуты экземпляра класса strings. Ну... да, очевидно. Но это нарушает дизайн.
  • Сохраняйте строки на уровне модуля. Используйте QtCore.QCoreApplication.translate(), чтобы позволить pylupdate подобрать их. Затем переведите их (снова) во время выполнения, вызвав для них self.tr() или QtCore.QCoreApplication.translate(). Пример:

    Код: Выделить всё

    translate = QtCore.QCoreApplication.translate
    strings = [translate('foo'), translate('bar')]
    
    class my_class(QObject):
    
    def __init__(self):
    for s in strings:
    print(self.tr(s))
    
    При этом необходимо убедиться, что перед импортом модуля не будет установлен транслятор, в противном случае строки модуля будут переведены во время импорта (translate() в объявлении) и повторно переведены во время выполнения (self.tr() в экземпляре класса). В общем случае этого не будет видно: self.tr() попытается перевести уже переведенную строку, которая вряд ли существует в исходном языковом наборе строк, и автоматически вернет саму строку.

    Но если, например, английская строка переводится во французскую строку, которая равна другой английской строке, встречающейся в том же классе, то вместо этого будет отображаться французский перевод этой строки.
Есть ли чистый способ сделать это?>

Подробнее здесь: https://stackoverflow.com/questions/290 ... at-runtime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»