Название: Перевод при помощи tr() [РЕШЕНО] Отправлено: UndeadDragon от Ноябрь 02, 2012, 19:49 Всем привет. Пытаюсь сделать в приложении динамическую смену языков. Сделал все в соответствии с мануалом, перевел все тексты при помощи Qt Linguist, скомпилировал в .qm, добавил в ресурсы.
Попробовал протестировать и перевод не заработал. Сменились тексты только в тех местах, за которые отвечает функция retranslateUi() сгенерированная uic'ом. Код: ApproximateView::ApproximateView(QWidget *parent, Qt::WFlags flags) Код: void ApproximateView::changeLang(){ Название: Re: Перевод при помощи tr() Отправлено: Serr500 от Ноябрь 02, 2012, 20:00 retranslateUi повторно вызывает все setText(tr(...)). Если Вы вызвали tr(...) внутри кода, то она вернёт переведённую строку, которую Вы можете использовать в дальнейшем. Но эта строка сама уже не изменится. Чтобы получить её перевод на другой язык, необходимо вновь вызвать tr(...) после installTranslator. В данном случае можно создать метод, который присваивает элементам строки, требующие перевода и выполнять его в двух местах - в конструкторе и в обработчике changeEvent, в котором ловим событие QEvent::LanguageChange.
Название: Re: Перевод при помощи tr() Отправлено: Bepec от Ноябрь 02, 2012, 20:03 Версию Qt укажите. Какой IDE используете? (Qt creator/VS/eclipse)
И вопрос - в лингвисте русский язык нормально отображался - исходные строки? Выложите проект. PS возможно что http://www.prog.org.ru/topic_20210_0.html, но тут уже нужно больше информации о вашей проблеме. Название: Re: Перевод при помощи tr() Отправлено: UndeadDragon от Ноябрь 02, 2012, 20:16 retranslateUi повторно вызывает все setText(tr(...)). Если Вы вызвали tr(...) внутри кода, то она вернёт переведённую строку, которую Вы можете использовать в дальнейшем. Но эта строка сама уже не изменится. Чтобы получить её перевод на другой язык, необходимо вновь вызвать tr(...) после installTranslator. В данном случае можно создать метод, который присваивает элементам строки, требующие перевода и выполнять его в двух местах - в конструкторе и в обработчике changeEvent, в котором ловим событие QEvent::LanguageChange. Вы цитируете мануал? Я внимательно читал его.Как вы можете увидеть в коде выше, я вызываю QAction::setText(tr(...)); после QTranslator::load();, но ничего не меняется, как я описал. installTranslator выполняется в самом начале конструктора. Версию Qt укажите. Какой IDE используете? (Qt creator/VS/eclipse) VS, действительно используется Windows-1251. Я, правда, сразу догадался указать явно эту кодировку и лингвист ее понял и вроде бы нормально скомпилировал .qm. Но перевод не выполняется, точнее только через retranslateUi, и хотя я пытался тупо повторить теже действия, что в retranslateUi, ничего не вышло (или иероглифы от использования UTF8 или ничего не меняется). А у меня много еще мест, где надо вручную переводить, и вот тут никак.И вопрос - в лингвисте русский язык нормально отображался - исходные строки? Выложите проект. PS возможно что http://www.prog.org.ru/topic_20210_0.html, но тут уже нужно больше информации о вашей проблеме. С файлом проекта лучше не стоит, мы с вами уже встречались на эту тему, с тех пор проект дорос до 3к+ строк и имеет кучу зависимостей от моего компьютера (да-да, я зря так сделал и криволапка вообще :( ). P.S. Qt 4.8.1 P.P.S Вот так до компиляции: http://s51.radikal.ru/i133/1211/55/a1aa11334d23.png После компиляции если открыть .qm файл, то уже сбита будет кодировка и вопросики. Название: Re: Перевод при помощи tr() Отправлено: Bepec от Ноябрь 02, 2012, 21:10 Вы лапками попробуйте набить lrelease для своего ts файла. Если он ругнётся на 1251 кодек, то проблема в либке лингвиста и кодировке 1251.
К сожалению не помню нашей встречи :) Никто не требует у вас полный проект. Берёте создаёте новый проект, втуляете туда надпись, tr("") в коде, делаете файл перевода, компилируете и проект и перевод, смотрите результат. Если результат такой же - пересылаете этот маленький проект и тут уже я смогу вам помочь :) А если результат нормальный - то вы сами перепишите свой проект правильно :) 3к+ это малый проект. Вы счастливы, если для вас это большой :D PS мой самый маленький проект - 7к строк :) Название: Re: Перевод при помощи tr() Отправлено: UndeadDragon от Ноябрь 02, 2012, 22:08 Вы лапками попробуйте набить lrelease для своего ts файла. Если он ругнётся на 1251 кодек, то проблема в либке лингвиста и кодировке 1251. Ну, я же не работаю пока :) Для курсового проекта вполне приличный размер, на мой взгляд.К сожалению не помню нашей встречи :) Никто не требует у вас полный проект. Берёте создаёте новый проект, втуляете туда надпись, tr("") в коде, делаете файл перевода, компилируете и проект и перевод, смотрите результат. Если результат такой же - пересылаете этот маленький проект и тут уже я смогу вам помочь :) А если результат нормальный - то вы сами перепишите свой проект правильно :) 3к+ это малый проект. Вы счастливы, если для вас это большой :D PS мой самый маленький проект - 7к строк :) Смотрите, я попробовал lrelease, что-то вылезло про то, что он не может использовать 1251 и заменяет ее Latin1. Цитировать D:\Projects\OS\ApproximateView\ApproximateView>D:\qt\bin\lrelease approximatevie Чего делать тепереча? Кажется у вас было так же, но вы так и не поделились там в топе рабочей версией лингвиста)w.pro Неверно задано имя папки. Could not find qmake configuration fileUsing OS scope before setting MAKEFILE_GE NERATORProject MESSAGE: You are running qmake on a generated .pro file. This may not work!D:/Projects/OS/ApproximateView/ApproximateView/qwt.pri(18): Using OS s cope before setting MAKEFILE_GENERATORD:/Projects/OS/ApproximateView/Approximate View/qwt.pri(24): Using OS scope before setting MAKEFILE_GENERATORNo QTextCodec for windows-1251 available. Using Latin1. Updating 'D:/Projects/OS/ApproximateView/ApproximateView/EN.qm'... Generated 133 translation(s) (133 finished and 0 unfinished) No QTextCodec for windows-1251 available. Using Latin1. Updating 'D:/Projects/OS/ApproximateView/ApproximateView/RU.qm'... Generated 0 translation(s) (0 finished and 0 unfinished) Ignored 133 untranslated source text(s) No QTextCodec for windows-1251 available. Using Latin1. Updating 'D:/Projects/OS/ApproximateView/ApproximateView/RU_GOP.qm'... Generated 0 translation(s) (0 finished and 0 unfinished) Ignored 133 untranslated source text(s) D:\Projects\OS\ApproximateView\ApproximateView> Название: Re: Перевод при помощи tr() Отправлено: lit-uriy от Ноябрь 02, 2012, 22:48 я не припомню такой проблемы, может потому, что у меня исходники в UTF-8 и использую в основном trUtf8()
Название: Re: Перевод при помощи tr() Отправлено: Bepec от Ноябрь 02, 2012, 23:03 Угу. Это проблема исключительно W разрабов с требованиями русского языка в коде программы (как исходных данных для перевода).
to UndeadDragon Отчего же, поделился я тогда, тема была закрыта :) Однако из-за одного инцидента пришлось удалить прикреплённый архив. Ловите файлик, но не могу сказать, как будет работать с Qt 4.8.1, ибо скомпилен и проверен только на 4.7.1. PS сервер не даёт залить коре, потому даю ссылку, надеюсь Пантер меня не вшпилит за это :) скобочки и пробелы убрать :D http ://files. mail[точка}ru /7JHCA1 Название: Re: Перевод при помощи tr() Отправлено: UndeadDragon от Ноябрь 02, 2012, 23:14 Угу. Это проблема исключительно W разрабов с требованиями русского языка в коде программы (как исходных данных для перевода). Эээм О.оto UndeadDragon Отчего же, поделился я тогда, тема была закрыта :) Однако из-за одного инцидента пришлось удалить прикреплённый архив. Ловите файлик, но не могу сказать, как будет работать с Qt 4.8.1, ибо скомпилен и проверен только на 4.7.1. PS сервер не даёт залить коре, потому даю ссылку, надеюсь Пантер меня не вшпилит за это :) скобочки и пробелы убрать :D http ://files. mail[точка}ru /7JHCA1 http://gyazo.com/ff1521be06e47b27830890fb00c5d683 Название: Re: Перевод при помощи tr() Отправлено: Bepec от Ноябрь 02, 2012, 23:25 Логично. У вас в системе пути прописаны к 4.8.1 дллкам.
А 4.8.1 != 4.7.2. Название: Re: Перевод при помощи tr() Отправлено: UndeadDragon от Ноябрь 02, 2012, 23:28 Логично. У вас в системе пути прописаны к 4.8.1 дллкам. Дык, просто дайте .dll своей версии)А 4.8.1 != 4.7.2. Хотя в общем и целом могу поковыряться и сделать дефолтный язык англ., вроде бы это решит проблему. Название: Re: Перевод при помощи tr() Отправлено: Bepec от Ноябрь 02, 2012, 23:30 Эмм... Конечно понять то, что dll, которые я скинул вам являются теми, с которыми я его собирал, вам не дано? :)
Повторю - у вас цепляет ВАШИ dll-ки по ВАШИМ путям. Мои дллки соответственно не при делах получаются. PS ибо у меня без прописанных путей всё путём работает. Название: Re: Перевод при помощи tr() Отправлено: UndeadDragon от Ноябрь 03, 2012, 00:04 Эмм... Конечно понять то, что dll, которые я скинул вам являются теми, с которыми я его собирал, вам не дано? :) Как грубо =\Повторю - у вас цепляет ВАШИ dll-ки по ВАШИМ путям. Мои дллки соответственно не при делах получаются. PS ибо у меня без прописанных путей всё путём работает. Так не бывает. Поиск .dll всегда начинается с директории программы. Поэтому если цепляет чужое - значит своего нет. Я просто пропустил XML файл в прикрепленных к вашим сообщениям, теперь запустилось. Название: Re: Перевод при помощи tr() Отправлено: Bepec от Ноябрь 03, 2012, 00:54 Нууу... Просто когда люди в 11 вечера в пятницу смотрят форум, разгребают тему полу-годовой давности, ищут этот древний файл, скачивают depends чтобы увидеть зависимости, добавляют к нему библиотеки. Потом скачивают UPX, сжимают библиотеки. Потом распихивают всё это по разным архивам, прикрепляют 2 архива к сообщению. Третий архив заливают на mail.ru. А потом ему говорят - не катит, а далее ещё и
Цитировать Как грубо =\ . А он ведь лишь хотел помочь...Название: Re: Перевод при помощи tr() Отправлено: UndeadDragon от Ноябрь 03, 2012, 19:04 Нууу... Просто когда люди в 11 вечера в пятницу смотрят форум, разгребают тему полу-годовой давности, ищут этот древний файл, скачивают depends чтобы увидеть зависимости, добавляют к нему библиотеки. Потом скачивают UPX, сжимают библиотеки. Потом распихивают всё это по разным архивам, прикрепляют 2 архива к сообщению. Третий архив заливают на mail.ru. А потом ему говорят - не катит, а далее ещё и Все нормально, спасибо большое)Цитировать Как грубо =\ . А он ведь лишь хотел помочь... |