Russian Qt Forum
Ноябрь 23, 2024, 06:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Перевод интерфейса на другие языки  (Прочитано 15227 раз)
SABROG
Гость
« : Март 27, 2007, 12:21 »

Такой вопрос, есть файлик в Qt с переводом на русский разных отладочных сообщений и т.п. Как в программе определить текущую локаль в XP и заставить интерфейс показывать переведенные сообщения ? Читал секцию Internationalization with Qt но так и не понял куда чего надо прописать.
Записан
evilguard
Гость
« Ответ #1 : Март 27, 2007, 13:15 »

если ты имеешь в виду мессадж боксы, то
Код:

QApplication a(argc, argv);

QTranslator * qt_translator = new QTranslator;
if ( !qt_translator->load( "qt_ru.qm" ) )
{
delete qt_translator;
return false;
}
a.installTranslator( qt_translator );

Файлик qt_ru.qm кладешь в папку с проектом.
Записан
SABROG
Гость
« Ответ #2 : Март 27, 2007, 13:18 »

Это ведь насильный перевод на русский или он будет показываться в зависимости от локали ?
Записан
noosooth
Гость
« Ответ #3 : Март 27, 2007, 13:26 »

Вероятно вот так:
Код:

   ...
   QApplication app(argc, argv);
   QString app_locale = QLocale::system().name();

   QTranslator app_translator, qt_translator;
   QString dir = "путь к файлам трансляции"  

   if( app_translator.load("app_" + app_locale,  dir))
      app.installTranslator(&app_translator);

   if( qt_translator.load("qt_" + app_locale, dir));
      app.installTranslator(&qt_translator);
   
Записан
SABROG
Гость
« Ответ #4 : Март 27, 2007, 14:08 »

Интересно, а в ресурсы впихнуть нельзя эти файлы трансляции.

добавлено спустя 23 минуты:

 Я собираю программу с ключем CONFIG += console чтобы видеть отладочные сообщения, когда я сам пытаюсь впихнуть отладочную информацию, то получаю текст в неверной кодировке, почему ?

Код:

//выводим текущую дату и время
qDebug() << qApp->tr(QDateTime::currentDateTime().toString().toAscii())




Как заставить tr() не обрамлять текст кавычками ?
Записан
alexis
Гость
« Ответ #5 : Март 27, 2007, 14:30 »

Это не tr() обрамляет, а оператор << на qDebug
Записан
Mixolap
Гость
« Ответ #6 : Март 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
Гость
« Ответ #7 : Март 27, 2007, 16:15 »

Mixolap, спасибо, теперь я познал технологию использования файловой системы ресурсов Улыбающийся

noosooth: в чем разница между app_ и qt_ префиксами ?

Не знаете почему кириллица в консоли козябрами выводится ?
Записан
noosooth
Гость
« Ответ #8 : Март 27, 2007, 17:54 »

Цитата: "SABROG"
noosooth: в чем разница между app_ и qt_ префиксами ?

Ммм... видимо в буквах? Подмигивающий

Я попытался привести пример, где:
app_xx.qm - translation files для нашего (Вашего) приложения.
qt_xx.qm - translation files собственно самого Qt'а.
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #9 : Март 27, 2007, 18:39 »

Цитата: "SABROG"
Mixolap, спасибо, теперь я познал технологию использования файловой системы ресурсов Улыбающийся

noosooth: в чем разница между app_ и qt_ префиксами ?

Не знаете почему кириллица в консоли козябрами выводится ?


CP866
Записан
SABROG
Гость
« Ответ #10 : Март 27, 2007, 19:48 »

"IBM 866" ?

Я пробывал вариант

Код:

QTextCodec::setCodecForCStrings( QTextCodec::codecForName("IBM 866") );


Но похоже я чего-то не догоняю. Исходники хранятся в utf8, надо вывести русский текст utf8 в отладочную консоль в cp866 ?

добавлено спустя 1 час 6 минут:

 И потом все-таки Qt кросплатформ и я хочу чтобы так оно и оставалось для моей программы, т.е. я хочу автоопределение локали и вывод текста в соответствующей кодировке, в linuxe обычно никто не ставит cp866...
Записан
Вудруф
Гость
« Ответ #11 : Март 28, 2007, 08:59 »

Нет, CP866 - это DOS-кодировка.
Записан
SABROG
Гость
« Ответ #12 : Март 28, 2007, 12:29 »

Да я знаю что это досовская кодировка для русского языка.
Но в консоли *nixaх используется что угодно, но не cp866, поэтому перекодировать вывод только для винды глупо. Вот я и хочу узнать как в зависимости от локали консоли сделать верную кодировку.
Записан
Вудруф
Гость
« Ответ #13 : Март 28, 2007, 13:20 »

Не мудри и используй tr. Или setCodecForCStrings - где указывать надо кодек для исходных файлов. Вывод-то всё равно в Unicode идёт. Или для qDebug это не работает?
Записан
SABROG
Гость
« Ответ #14 : Март 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
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.093 секунд. Запросов: 23.