Тогда конкретный вопрос. Допустим, есть такой ts-файл (пример пригоден для работы в Qt Linguist):
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1" language="ru_RU">
<defaultcodec></defaultcodec>
<context>
<name>testApp</name>
<message>
<source>Hello, World!</source>
<translation>Привет, мир!</translation>
</message>
</context>
</TS>
С помощью утилиты
lrelease превращаю его в файл
testApp_ru_RU.qm. Далее пишу такой код (пример пригоден для запуска):
#!/usr/bin/python
# -*- coding: utf-8 -*-
from PyQt4 import QtCore
class MyTranslator(QtCore.QTranslator):
def __init__(self, parent=None):
QtCore.QTranslator.__init__(self, parent)
def translate(self, context, sourceText):
res = QtCore.QTranslator.translate(self, context, sourceText)
if len(res) == 0:
res = QtCore.QString(sourceText)
return res
tr = MyTranslator()
tr.load('testApp_ru_RU.qm')
print tr.translate('testApp', 'Hello, World!').toUtf8()
print tr.translate('testApp1', 'Hello, World!').toUtf8()
print tr.translate('testApp', 'Hello, World').toUtf8()
Класс
MyTranslator мне понадобился для того, чтобы сделать наивную проверку “if len(res) == 0”, т.к. метод translate() класса QtCore.QTranslator возвращает пустую строку, если перевод не удался (а я хочу получить в этом случае исходную строку).
Это допустимый метод работы?
Что здесь неправильно / плохо?