Название: [Решено] Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: xintrea от Декабря 17, 2010, 01:44 Здравствуйте!
Начал я делать перевод программы MyTetra (http://webhamster.ru/site/page/index/articles/projectcode/105). И что-то у меня не работают механизмы перевода как надо. 1. Глючит QtLinguist Все исходники у меня в кодировке UTF8. Системная локаль тоже UTF8. После формирования ts-файла с помощью lupdate, при открытии его в QtLinguist, вместо комментариев к переводу отображаются кракозябры. Так же, в окошке исходников вместо русского текста кракозябры. Выглядит это так: (http://rghost.ru/3638596/thumb.png) http://rghost.ru/3638596/image.png (http://rghost.ru/3638596/image.png) Вот кусок ts-файла. Обратите внимание, что вместо комментариев к переводу lupdate сформировал кракозябры: Код: <?xml version="1.0" encoding="utf-8"?> Я пробовал и QtLinguist 4.5.0, и 4.5.3 - картина та же самая. Но это не самая большая проблема. Хуже всего другое. 2. В интерфейсе программы переводится только ~треть строк То есть, в QtLinguist я сделал перевод. Сформировал qm-файл. Запускаю программу, и вижу, что из этого qm-файла используются не все переведенные строки, а где-то треть переведенных строк. В qm-файле видно, что строки переведены, но они всеравно отображаются на английском языке. Причем, такое впечатление, что доходит до какой-то фразы, после которой переведенные фразы не видны. На вышеприведенном скриншоте есть класс Editor. Вот всё что сверху него - перевод в программе происходит. Всё, что находится в Editor и ниже - перевода в запущенной программе не видно. То есть, в данном случае, сделан перевод настроек программы - он виден. Сделан перевод интерфейса редактора и панели поиска по базе (которая внизу экрана MyTetra) - перевод не виден. Вот исходники со всеми файлами, необходимыми для старта программы: http://rghost.ru/3638976 (http://rghost.ru/3638976) (175 Кб). Кто может помочь разобраться что не так, почему не работает перевод? Название: Re: Перевод программы. Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: xintrea от Декабря 17, 2010, 02:12 Еще, я только что попробовал добавить в pro-файл опцию:
CODECFORTR = utf8 В результате _некоторые_ комментарии в ts-файле стали отображаться правильно: Код: <message> Это походу явный глюк, ежели комментарии берутся из одного и того же файла исходника. Я перегенерировал ts и qm файлы, но результат остался тот же - там где перевод не был виден, так же и осталось на английском. UPD: Учитывая, что ts перегенерируется не полностью, а только изменения, я вручную поудалял в нем элементы <comment>...</comment> и перегнерирвал ts-файл. Все комментарии к переводу стали правильными. Однако, в QtLinguist в окне исходников всё так же кракозябры. И в программе тоже ничего не поменялось (qm конечно же тоже перегенерирвал) - там где перевод не был виден, так же и осталось на английском. То есть, предположение о том, что перевод отрубается с какой-то строки из-за кривого символа, не подтверждается. Дело в чем-то другом. Название: Re: Перевод программы. Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: Barmaglodd от Декабря 17, 2010, 08:52 Linguist вообще странный :)
В строках на английском нет символов не из latin1? Если есть, то ты попал :) Название: Re: Перевод программы. Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: xintrea от Декабря 17, 2010, 13:29 Linguist вообще странный :) В строках на английском нет символов не из latin1? Если есть, то ты попал :) Нет, в английских строках только ASCII символы. Название: Re: Перевод программы. Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: Barmaglodd от Декабря 17, 2010, 19:18 Тогда пробуй 4.7.1 и пиши в багтрекер с минимальным примером. :)
Название: Re: Перевод программы. Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: BRE от Декабря 17, 2010, 21:56 Смотрю исходники linguist.
Файл sourcecodeview.cpp, метод SourceCodeView::showSourceCode. Чтение файла с исходниками выполняется через: Код В других местах думаю также считается, что кодировка Latin1. Отсюда и все проблемы с декодированием русских строк. Почему сделали так? Наверное, что бы не мудрить с определением кодировки исходных файлов. Думаю можно было бы сделать это настраиваемой опцией. Название: Re: Перевод программы. Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: xintrea от Декабря 18, 2010, 02:23 Тогда пробуй 4.7.1 и пиши в багтрекер с минимальным примером. :) Попробовал 4.7.1. Та же байда. Я даже поудалял все комментарии переводчику в вызовах tr(). То есть, остались только tr() с английскими строками, в которых есть только ASCII символы. Перегенерирвал ts и qm файлы. И всеравно, используется не весь перевод, а только до какого-то места. Но появилось одно отличие. При запуске QtLinguist 4.7.1 ругается вот так: Код: В '/mytetra/bin/resource/translations/mytetra_ru.ts' обнаружены повторяющиеся сообщения: С чего бы это title и text стали одинаковыми словами - непонятно. Да и переводы у этих строк разные. Название: Re: Перевод программы. Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: xintrea от Декабря 19, 2010, 01:51 Всё, разобрался.
Дело было не в кодировке и не в русских символах. Кстати, проверил - комментарии к переводу в коде можно писать по-русски, ничего не глючит. Так что требование использовать в коде только латиницу - бред, нафига тогда UTF создавали, спрашивается? Скажу больше - можно даже в коде писать фразы интерфейса на русском яыке, а потом подключать перевод на английский - и это работает, даже в Qt 4.5. Проблема была в том, что я думал, что транслятор надо подключать до запуска основного цикла программы. И у меня была последовательность действий такая: 1. Создается объект QApplication 2. Создается объект главного окна 3. Подключается транслятор 4. Запускается основной цикл программы app.exec() Однако, при таком подключении, все строки, которые отображаются в главном окне, были непереведенными. Чтобы заработал перевод в главном окне, надо поменять пункты 2 и 3 местами: 1. Создается объект QApplication 2. Подключается транслятор 3. Создается объект главного окна 4. Запускается основной цикл программы app.exec() Название: Re: [Решено] Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: lit-uriy от Декабря 19, 2010, 10:08 >>что транслятор надо подключать до запуска основного цикла программы.
не основного цикла программы!!! основной цикл программы - qApp->exec(). Твоё дальнейшее пояснение оговорит о другом: Транслятор желательно устанавливать до создания графического интерфейса Название: Re: [Решено] Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: xintrea от Декабря 19, 2010, 21:25 не основного цикла программы!!! основной цикл программы - qApp->exec(). Твоё дальнейшее пояснение оговорит о другом: Транслятор желательно устанавливать до создания графического интерфейса Ну, я так и говорю. Я _думал_, что надо подключать до основного цикла программы, т.е. 3 - подключение транслятора, 4 - основной цикл. А оказалось, что надо подключать до создания объекта основного окна (читай - графического интерфейса). Название: Re: Перевод программы. Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: Barmaglodd от Декабря 20, 2010, 07:55 Так что требование использовать в коде только латиницу - бред, нафига тогда UTF создавали, спрашивается? К сожалению, это работает не всегда :(http://bugreports.qt.nokia.com/browse/QTBUG-12931 Название: Re: Перевод программы. Глючит QtLinguist, и видна только треть переведенных строк. Отправлено: AlekseyK от Декабря 21, 2011, 03:42 Всё, разобрался. Чтобы заработал перевод в главном окне, надо поменять пункты 2 и 3 местами: 1. Создается объект QApplication 2. Подключается транслятор 3. Создается объект главного окна 4. Запускается основной цикл программы app.exec() Да, ты прав! Такой порядок работает. |