Название: Перевод интерфейса на другие языки Отправлено: SABROG от Март 27, 2007, 12:21 Такой вопрос, есть файлик в Qt с переводом на русский разных отладочных сообщений и т.п. Как в программе определить текущую локаль в XP и заставить интерфейс показывать переведенные сообщения ? Читал секцию Internationalization with Qt но так и не понял куда чего надо прописать.
Название: Перевод интерфейса на другие языки Отправлено: evilguard от Март 27, 2007, 13:15 если ты имеешь в виду мессадж боксы, то
Код:
Файлик qt_ru.qm кладешь в папку с проектом. Название: Перевод интерфейса на другие языки Отправлено: SABROG от Март 27, 2007, 13:18 Это ведь насильный перевод на русский или он будет показываться в зависимости от локали ?
Название: Перевод интерфейса на другие языки Отправлено: noosooth от Март 27, 2007, 13:26 Вероятно вот так:
Код:
Название: Перевод интерфейса на другие языки Отправлено: SABROG от Март 27, 2007, 14:08 Интересно, а в ресурсы впихнуть нельзя эти файлы трансляции.
добавлено спустя 23 минуты: Я собираю программу с ключем CONFIG += console чтобы видеть отладочные сообщения, когда я сам пытаюсь впихнуть отладочную информацию, то получаю текст в неверной кодировке, почему ? Код:
(http://img100.imageshack.us/img100/2651/qdebugob6.jpg) Как заставить tr() не обрамлять текст кавычками ? Название: Перевод интерфейса на другие языки Отправлено: alexis от Март 27, 2007, 14:30 Это не tr() обрамляет, а оператор << на qDebug
Название: Перевод интерфейса на другие языки Отправлено: Mixolap от Март 27, 2007, 15:01 В ресурсы впихнуть можно, тогда файл ресурсов будет выглядеть следующим образом:
<qresource prefix="/translations" > <file>translations/repdesigner_ru.qm</file> </qresource> А загрузка: QTranslator translator; QString translationFile = ":/translations/translations/repdesigner_"+QLocale::system().name().left(2)+".qm"; translator.load( translationFile ); app.installTranslator( &translator ); Название: Перевод интерфейса на другие языки Отправлено: SABROG от Март 27, 2007, 16:15 Mixolap, спасибо, теперь я познал технологию использования файловой системы ресурсов :)
noosooth: в чем разница между app_ и qt_ префиксами ? Не знаете почему кириллица в консоли козябрами выводится ? Название: Перевод интерфейса на другие языки Отправлено: noosooth от Март 27, 2007, 17:54 Цитата: "SABROG" noosooth: в чем разница между app_ и qt_ префиксами ? Ммм... видимо в буквах? ;) Я попытался привести пример, где: app_xx.qm - translation files для нашего (Вашего) приложения. qt_xx.qm - translation files собственно самого Qt'а. Название: Перевод интерфейса на другие языки Отправлено: Sergey B. от Март 27, 2007, 18:39 Цитата: "SABROG" Mixolap, спасибо, теперь я познал технологию использования файловой системы ресурсов :) noosooth: в чем разница между app_ и qt_ префиксами ? Не знаете почему кириллица в консоли козябрами выводится ? CP866 Название: Перевод интерфейса на другие языки Отправлено: SABROG от Март 27, 2007, 19:48 "IBM 866" ?
Я пробывал вариант Код:
Но похоже я чего-то не догоняю. Исходники хранятся в utf8, надо вывести русский текст utf8 в отладочную консоль в cp866 ? добавлено спустя 1 час 6 минут: И потом все-таки Qt кросплатформ и я хочу чтобы так оно и оставалось для моей программы, т.е. я хочу автоопределение локали и вывод текста в соответствующей кодировке, в linuxe обычно никто не ставит cp866... Название: Перевод интерфейса на другие языки Отправлено: Вудруф от Март 28, 2007, 08:59 Нет, CP866 - это DOS-кодировка.
Название: Перевод интерфейса на другие языки Отправлено: SABROG от Март 28, 2007, 12:29 Да я знаю что это досовская кодировка для русского языка.
Но в консоли *nixaх используется что угодно, но не cp866, поэтому перекодировать вывод только для винды глупо. Вот я и хочу узнать как в зависимости от локали консоли сделать верную кодировку. Название: Перевод интерфейса на другие языки Отправлено: Вудруф от Март 28, 2007, 13:20 Не мудри и используй tr. Или setCodecForCStrings - где указывать надо кодек для исходных файлов. Вывод-то всё равно в Unicode идёт. Или для qDebug это не работает?
Название: Перевод интерфейса на другие языки Отправлено: SABROG от Март 28, 2007, 15:58 tr нужен только если программа может перевести переданную фразу в язык текущей локали, при этом она ничего не знает о кодировке. Я перенаправил вывод qDebug в файл и хоть в него текст передается в кодировке utf8 в файле он в неизвестной мне кодировке:
Цитировать [28.39.07 14] [D] I?eaao ie? Здесь "I?eaao ie?" - "Привет мир" добавлено спустя 2 часа 19 минут: В общем пока вот чего я добился: - исходники сохраняю в формате "KOI8-R" (в винде) - вставляю QTextCodec::setCodecForCStrings( QTextCodec::codecForName("KOI8-R") ); - получаю на выходе русский текст в кодировке utf8 O.o Название: Перевод интерфейса на другие языки Отправлено: Вудруф от Март 29, 2007, 10:27 О том речь и шла: вместо мифического IBM 866 нужно было указать Windows-1251 и не надо было бы менять кодировку исходников.
codecForCString указывает кодировку исходных строк, из которых потом преобразовываются в UNICODE, а при выводе они уже сами как надо конвертятся. А tr нужен и для того, чтобы вообще ничего кроме латиницы в тексте программы не использовать. В таком случае проблем с кодировкой возникать не будет. Название: Перевод интерфейса на другие языки Отправлено: SABROG от Март 29, 2007, 10:45 Не работает указывание "Windows-1251", как ни старался, а в UTF-8 исходники компилятор не принимает. Но я уже решил свою проблему через
QString::fromLocal8Bit(msg) Название: Перевод интерфейса на другие языки Отправлено: WW от Апрель 09, 2007, 18:21 У меня так заработало:
Код: QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); |