Форум сайта python.su
Подскажите пожалуйста статью, где было бы описано, как правильно спроектировать приложение на pyQT4 так, чтобы его можно было без проблем локализовать (чтобы оно поддерживало произвольное количество языков).
Отредактировано (Ноя. 14, 2008 21:58:26)
Офлайн
Хм… В Qt есть замечательная система локализации, которая очень легко вписывается в любую архитектуру. Я даже занимался как-то переделкой программы, чтобы она поддерживала смену языка – всё очень элементарно.
Офлайн
The gray CardinalМожно посмотреть: “Rapid GUI Programming with Python and Qt” Mark Summerfield стр. 512
Подскажите пожалуйста статью, где было бы описано, как правильно спроектировать приложение на pyQT4 так, чтобы его можно было без проблем локализовать (чтобы оно поддерживало произвольное количество языков).
Офлайн
ZZZМне этого заявления мало :). Нужно ткнуть носом в небольшой конкретный туториал, наверное. Просто понять общие принципы.
В Qt есть замечательная система локализации…
label = QtGui.QLabel(u'Текст метки по-русски')
Офлайн
gmorgunov
Там конкретный вопрос про вывод на консоль Windows русских строк. Это не совсем то, о чём я спрашиваю.
Офлайн
The gray CardinalВообще-то метод tr() применим ко всем объектам, содержащим текст(Qt4 - Windows,Linux)
gmorgunov
Там конкретный вопрос про вывод на консоль Windows русских строк. Это не совсем то, о чём я спрашиваю.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore,QtGui
if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
QtCore.QTextCodec.setCodecForTr(QtCore.QTextCodec.codecForName("UTF-8"))
label = QtGui.QLabel()
label.setText(QtCore.QCoreApplication.translate(""," Зыы "))
label.show()
sys.exit(app.exec_())
Офлайн
gmorgunov
Спасибо, хорошо. Но мало :).
Метод translate() опрашивает файлы перевода. Что это за файлы (формат), где должны лежать? Сводится ли весь процесс локализации только к изготовлению таких файлов и использованию функции translate()?
Офлайн
Троли сами пишут здесь:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#internationa
The PyQt behaviour is unsatisfactory and may be changed in the futureплохо мол сделали … Я на это забил и пользую уникод. :)
Офлайн
Тогда конкретный вопрос. Допустим, есть такой 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>
#!/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()
Офлайн
The gray Cardinal
Проверил. Вроде все нормально, работает.
Но. Почему она транслирует только в первый раз?
Т.е. на:
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()
tr1 = MyTranslator()
tr1.load('testApp_ru_RU.qm')
print tr1.translate('testApp', 'Hello, World').toUtf8()
Отредактировано (Ноя. 16, 2008 05:29:02)
Офлайн