Название: QTranslator не переводит Отправлено: TrimS от Февраль 05, 2014, 12:40 Есть глобальная текстовая переменная. Пытаюсь её перевести на другой язык - не переводится ничего. :(
Минимальный тестовый пример: Код: QString aaa = QObject::tr(QT_TR_NOOP("Hello")); Не переводит! В чём может быть причина и как сделать, чтобы переводило? Название: Re: QTranslator не переводит Отправлено: GreatSnake от Февраль 05, 2014, 12:47 Дык, элементарно же - строка aaa, создаётся до translator.
И зачем там QT_TR_NOOP ??? Название: Re: QTranslator не переводит Отправлено: TrimS от Февраль 05, 2014, 13:01 Спасибо! Точно, проблема в том, что он создаётся до строки.
Но тогда получается, что невозможно использовать глобальные строковые константы - ибо если даже транслятор сделать глобальным - то это не даст гарантию, что он проинициализируется первым. Как обычно эта проблема решается в рамках Qt? Согдаётся отдельная функция, которая инициализирует глобальные переменные? Название: Re: QTranslator не переводит Отправлено: GreatSnake от Февраль 05, 2014, 13:05 Как обычно эта проблема решается в рамках Qt? А причём здесь Qt ???Название: Re: QTranslator не переводит Отправлено: TrimS от Февраль 05, 2014, 13:59 Как при чём Qt? При том, что обычные походы работы с глобальными переменными не работают. К примеру:
Код: QString aaa; Код: class DDDDD : public QObject При таком раскладе не переводится текст кнопки при клике. Хотя (!) транслятор создан до присвоения значения к aaa. Вопрос в том как работать с глобальными строковыми переменными, которые требуют перевода? Название: Re: QTranslator не переводит Отправлено: GreatSnake от Февраль 05, 2014, 14:05 Хм..., как всё запущено.
Т.е. то, что загрузка словаря делается после вызова транслятора значения совсем не имеет ??? И откуда взялась уверенность, что после загрузки все строки автоматом перегрузятся? Название: Re: QTranslator не переводит Отправлено: TrimS от Февраль 05, 2014, 15:11 Ну.....стараюсь разобраться.
Время загрузки словаря имеет значение? Хм, пока не видел об этом примечания в доке. Уверенность оттуда, что формально я выполнил все требования - обернул строку, создал транслятор, загрузил, установил - по идее должно перевести, по крайней мере я не нашёл информации, что что-то ещё надо сделать. А как же тогда делать перевод приложения при выборе в пункте меню языка? Если не ошибаюсь Qt позволяет сделать такой финт. Название: Re: QTranslator не переводит Отправлено: kambala от Февраль 05, 2014, 16:28 значения статических переменных вычисляются до входа в main(), а загрузить файл перевода статически невозможно
креатор подставляет новый перевод после перезапуска. но можно делать и динамически: для этого нужно загружать другой файл перевода и повторно присваивать строки Название: Re: QTranslator не переводит Отправлено: GreatSnake от Февраль 05, 2014, 16:55 Время загрузки словаря имеет значение? Хм, пока не видел об этом примечания в доке. С чего это должно, если транслятор был задействован после создания строки ???Уверенность оттуда, что формально я выполнил все требования - обернул строку, создал транслятор, загрузил, установил - по идее должно перевести, по крайней мере я не нашёл информации, что что-то ещё надо сделать. И что такое "обернул строку"? Цитировать А как же тогда делать перевод приложения при выборе в пункте меню языка? Если не ошибаюсь Qt позволяет сделать такой финт. Динамический перевод (http://www.doc.crossplatform.ru/qt/4.7.x/internationalization.html#dynamic-translation).значения статических переменных вычисляются до входа в main() Наверное, следует сказать, что это верно при объявлении переменной в главном скопе файла)Название: Re: QTranslator не переводит Отправлено: TrimS от Февраль 05, 2014, 21:46 Спасибо, понял.
Жаль, что кучу работы нужно делать руками - кроме переинициализации глобальных переменных ещё и переопределять все GUI классы с отловом QEvent::LanguageChange и переустановкой текста. Мне казалось, что Qt механизм в этом плане более продвинутый, а так он предоставляет только самые базовые примитивы транслятора. Название: Re: QTranslator не переводит Отправлено: GreatSnake от Февраль 06, 2014, 14:30 Чтобы иметь "такой продвинутый Qt механизм" нужно как минимум каким-то образом взаимно связать QString с QTranslator и не терять эту связь при копировании.
Такие сложности никому не нужны. К тому же на лету менять язык основной массе не нужно. |