Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » pyQT4: как правильно локализовать приложение? [RSS Feed]

#1 Ноя. 14, 2008 21:58:04

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4: как правильно локализовать приложение?

Подскажите пожалуйста статью, где было бы описано, как правильно спроектировать приложение на pyQT4 так, чтобы его можно было без проблем локализовать (чтобы оно поддерживало произвольное количество языков).



Отредактировано (Ноя. 14, 2008 21:58:26)

Офлайн

#2 Ноя. 15, 2008 00:48:51

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

pyQT4: как правильно локализовать приложение?

Хм… В Qt есть замечательная система локализации, которая очень легко вписывается в любую архитектуру. Я даже занимался как-то переделкой программы, чтобы она поддерживала смену языка – всё очень элементарно.



Офлайн

#3 Ноя. 15, 2008 06:36:16

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4: как правильно локализовать приложение?

The gray Cardinal
Подскажите пожалуйста статью, где было бы описано, как правильно спроектировать приложение на pyQT4 так, чтобы его можно было без проблем локализовать (чтобы оно поддерживало произвольное количество языков).
Можно посмотреть: “Rapid GUI Programming with Python and Qt” Mark Summerfield стр. 512
Правда, где скачивал, я уже не помню. :/

Можно здесь:http://www.prog.org.ru/topic_8030_0.html. Думаю перевести С++ в Python для вас будет несложно :)


C уважением gmorgunov.



Офлайн

#4 Ноя. 15, 2008 10:28:40

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4: как правильно локализовать приложение?

ZZZ
В Qt есть замечательная система локализации…
Мне этого заявления мало :). Нужно ткнуть носом в небольшой конкретный туториал, наверное. Просто понять общие принципы.
Ну, скажем, писать в коде
label = QtGui.QLabel(u'Текст метки по-русски')
глупо, видимо, так?
Т.е., например, я хочу иметь более-менее стандартные файлы локализации, в которых будут храниться все названия моих меток.
Что конкретно почитать, чтобы врубиться во всё это?



Офлайн

#5 Ноя. 15, 2008 10:51:35

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4: как правильно локализовать приложение?

gmorgunov
Там конкретный вопрос про вывод на консоль Windows русских строк. Это не совсем то, о чём я спрашиваю.



Офлайн

#6 Ноя. 15, 2008 20:12:36

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4: как правильно локализовать приложение?

The gray Cardinal
gmorgunov
Там конкретный вопрос про вывод на консоль Windows русских строк. Это не совсем то, о чём я спрашиваю.
Вообще-то метод tr() применим ко всем объектам, содержащим текст(Qt4 - Windows,Linux)

В PyQt4 это выглядит вот так экзотически:
#!/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_())
Выводы делайте сами :)



Офлайн

#7 Ноя. 15, 2008 20:53:30

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4: как правильно локализовать приложение?

gmorgunov
Спасибо, хорошо. Но мало :).
Метод translate() опрашивает файлы перевода. Что это за файлы (формат), где должны лежать? Сводится ли весь процесс локализации только к изготовлению таких файлов и использованию функции translate()?



Офлайн

#8 Ноя. 15, 2008 22:12:44

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4: как правильно локализовать приложение?

Троли сами пишут здесь:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#internationa

The PyQt behaviour is unsatisfactory and may be changed in the future
плохо мол сделали … Я на это забил и пользую уникод. :)



Офлайн

#9 Ноя. 16, 2008 00:13:24

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4: как правильно локализовать приложение?

Тогда конкретный вопрос. Допустим, есть такой 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 возвращает пустую строку, если перевод не удался (а я хочу получить в этом случае исходную строку).
Это допустимый метод работы?
Что здесь неправильно / плохо?



Офлайн

#10 Ноя. 16, 2008 05:28:15

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4: как правильно локализовать приложение?

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()
Выдает:
Привет, мир!
Hello, World!
Hello, World
Hello, World

И где восклицательные знаки?

А так, конечно, надо эту методу запомнить(сохранить у себя- пригодится) :)

P.S. Проверил, с koi8-r не работает(метода нет)



Отредактировано (Ноя. 16, 2008 05:29:02)

Офлайн

  • Начало
  • » GUI
  • » pyQT4: как правильно локализовать приложение?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version