Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: alex12 от Январь 29, 2007, 16:28



Название: Русские названия стандартных кнопок
Отправлено: alex12 от Январь 29, 2007, 16:28
Всем привет!

Никак не могу найти, как сделать чтобы в названии стандартных кнопок были русские названия (Да, Нет, Отмена и.т.д)?

[Qt 4.2.2 MinGW]

Код:

int ret = QMessageBox::question(this, "Название",
                   "Вопрос ?",
                   QMessageBox::Yes | QMessageBox::No,
                   QMessageBox::No);


Название: Русские названия стандартных кнопок
Отправлено: Dendy от Январь 29, 2007, 16:33
Добавь в проект транслятор из: qtdir/translations/qt_ru.qm


Название: Русские названия стандартных кнопок
Отправлено: alex12 от Январь 29, 2007, 18:36
Вроде я выкрутился так:
Код:

QMessageBox mb(   app_header, tr("Утвердить?"),
                     QMessageBox::Warning,
                     QMessageBox::Yes,
                     QMessageBox::No | QMessageBox::Default | QMessageBox::Escape ,
                     QMessageBox::NoButton  );
    mb.setButtonText(QMessageBox::Yes, tr("Да"));
    mb.setButtonText(QMessageBox::No, tr("Отмена"));
    if( mb.exec() == QMessageBox::Yes )



Цитировать

Добавь в проект транслятор из: qtdir/translations/qt_ru.qm


Странно, но не работает. Подозреваю, что нужно  перекомпелировать qt4gui.dll. Ведь сами русские слова явно лежат не в моем проекте а в там.


Название: Русские названия стандартных кнопок
Отправлено: Dendy от Январь 29, 2007, 19:37
Ничего не нужно перекомпилировать. ВьІ просто не до конца разобрались как работает система трансляций Qt. Все переводьІ подгружаются на лету. Можно хоть через год перевести свою программу на китайский при етом ничего не перекомпилируя.

Русские слова лежат не "там" (кстати, где "там"?), а в файле qt_ru.qm. Добавить перевод самой Qt на русский и динамически его менять на любой другой не перезапуская программу - через QTranslator.

Код:
QTranslator * qt_translator = new QTranslator;
if ( !qt_translator->load( "qt_ru.qm" ) )
{
  delete qt_translator;
  return false;
}

qApp->installTranslator( qt_translator );

..
// install additional translators for your application
..
return true;


Название: Русские названия стандартных кнопок
Отправлено: alex12 от Январь 30, 2007, 12:35
Да. Наверно я не прав. Завтра поразбираюсь.

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

 У меня получилось так:

В файле ресурсов добавил qt_ru.qm:
Код:

<RCC>
    <qresource prefix="/icons" >
        <file>icons/preferences.png</file>
        <file>icons/printer.png</file>
    </qresource>
    <qresource prefix="/tr" >
        <file>qt_ru.qm</file>
    </qresource>
</RCC>


А в main():
Код:

    QTranslator *qt_translator = new QTranslator;
    if ( qt_translator->load( ":tr/qt_ru.qm" ) )
    { application->installTranslator( qt_translator );
    }


Остался только вопрос: можно ли qt_ru.qm подцеплять из QTDIR, а не из каталога проекта?


Название: Русские названия стандартных кнопок
Отправлено: Dendy от Январь 30, 2007, 18:13
В дебаге подцепляй откуда хош. Только вот на результирующей машине QTDIR может и не бьІть.


Название: Русские названия стандартных кнопок
Отправлено: alex12 от Январь 31, 2007, 11:28
Цитировать
В дебаге подцепляй откуда хош. Только вот на результирующей машине QTDIR может и не бьІть.

Я немного не про это.

В релизе qt_ru.qm загружается из ресурса. Я имел в виду при компиляции как прописать брать файл из QTDIR чтобы запихнуть его в ресурсы. Кстати может он как ресурс уже есть в qt-шных dll-ках?


Название: Русские названия стандартных кнопок
Отправлено: Dendy от Январь 31, 2007, 13:31
Как ресурс в DLL его нет. Потому что количество переводов неограничено, прибивать гвоздями в DLL гибкое решение никто не будет. Если надо - берите трансляцию на нужньІе язьІки, пихайте в исполняемьІй файл, файловую систему, архив, хоть по сети подгружайте нужньІй язьІк - никто не ограничивает в вариантах.

Мой совет - просто скопируйте файл себе в проект как ресурс. Под линуксом - поставьте символическую ссьІлку.


Название: Русские названия стандартных кнопок
Отправлено: alex12 от Январь 31, 2007, 13:34
Ок. Спасибо.