Russian Qt Forum
Июня 10, 2025, 07:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Стандартные кнопки QDialogButtonBox::Ok, QDialogButtonBox::Cancel и тд.  (Прочитано 14334 раз)
vizir1989
Гость
« : Июня 04, 2012, 08:33 »

У меня есть диалоговые окна со стандартными кнопками QDialogButtonBox::Ok, QDialogButtonBox::Cancel и тд.
Мне нужно их перевести, для этого я подгрузил QT-шный файл перевода
Код:
    QTranslator qtTranslator;
    qtTranslator.load("qt_ru",QLibraryInfo::location(QLibraryInfo::TranslationsPath));
    app.installTranslator(&qtTranslator);

На моем компе перевод нормально подхватился, а вот на компе без QT перевода нет.
Как сделать так, чтобы на другом компе так же был перевод кнопок?
« Последнее редактирование: Июня 13, 2012, 10:51 от vizir1989 » Записан
maint
Гость
« Ответ #1 : Июня 04, 2012, 09:04 »

Код:
QTranslator *qtTranslator = new QTranslator(qApp);
    qtTranslator->load(":/translations/qt_ru.qm");
    qApp->installTranslator(qtTranslator);
в ресурс перевод запихать
Записан
vizir1989
Гость
« Ответ #2 : Июня 04, 2012, 10:12 »

Добавил qt_ru.qm в resources/translations
Изменил загрузку на
Код:
	QTranslator qtTranslator;
qtTranslator.load(":/translations/qt_ru.qm");
app.installTranslator(&qtTranslator);
перевод кнопок вообще перестал загружаться
Записан
interv
Гость
« Ответ #3 : Июня 04, 2012, 10:19 »

Код:
QTranslator qtTranslator;
qtTranslator.load(":/resources/translations/qt_ru.qm");
app.installTranslator(&qtTranslator);
Записан
sudo
Гость
« Ответ #4 : Июня 04, 2012, 10:29 »

Стандартные кнопки подхватывают системную локаль. Может поэтому не подхватывается?
Записан
vizir1989
Гость
« Ответ #5 : Июня 04, 2012, 10:31 »

Стандартные кнопки подхватывают системную локаль. Может поэтому не подхватывается?
Локаль смотрели, и там и там стоит русская локаль.
Записан
maint
Гость
« Ответ #6 : Июня 04, 2012, 10:32 »

Добавил qt_ru.qm в resources/translations
Изменил загрузку на
Код:
	QTranslator qtTranslator;
qtTranslator.load(":/translations/qt_ru.qm");
app.installTranslator(&qtTranslator);
перевод кнопок вообще перестал загружаться
само собой. Дальше товарищ уже показал чего надо. Внимательнее надо. Или объяснять, что комп делает только то что написал программер, а не подумал  Подмигивающий
Записан
vizir1989
Гость
« Ответ #7 : Июня 04, 2012, 10:39 »

Код:
QTranslator qtTranslator;
qtTranslator.load(":/resources/translations/qt_ru.qm");
app.installTranslator(&qtTranslator);

Не помогло Грустный
Записан
maint
Гость
« Ответ #8 : Июня 04, 2012, 10:47 »

Код:
QTranslator qtTranslator;
qtTranslator.load(":/resources/translations/qt_ru.qm");
app.installTranslator(&qtTranslator);

Не помогло Грустный
усли qrc не большой то можно сюда его высунуть, посмотреть
Записан
vizir1989
Гость
« Ответ #9 : Июня 04, 2012, 10:54 »

Код main.cpp
Код:
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QTranslator appTranslator;
appTranslator.load(":/translations/rus.qm");
app.installTranslator(&appTranslator);
QTranslator qtTranslator;
qtTranslator.load("qt_ru",QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&qtTranslator);
BPO::Client::InitTranslate();

boost::scoped_ptr<BPO::Client::Mediator> mediator;
try
{
mediator.reset(new BPO::Client::Mediator());
}
catch (const BPO::Client::MediatorError& /*error*/)
{
QMessageBox messageBox(QMessageBox::Critical,
QObject::tr("Fatal error"), QObject::tr("Can't open serial port"));
messageBox.exec();
return -1;
}

boost::scoped_ptr<BPO::Client::Storage> storage;
storage.reset(new BPO::Client::Storage());

boost::scoped_ptr<BPO::Client::BpoDialog> bpoDialog;
try
{
bpoDialog.reset(new BPO::Client::BpoDialog(*mediator, *storage));
if (bpoDialog->exec() == QDialog::Rejected)
{
return 0;
}
}
catch (const BPO::Client::BpoManagerError& error)
{
QMessageBox messageBox(
QMessageBox::Warning, QObject::tr("File error"), error.what());
messageBox.exec();
return -2;
}

try
{
storage->ChangeUuid(bpoDialog->GetUuid());
}
catch (const BPO::Storage::FileError& error)
{
QMessageBox messageBox(QMessageBox::Critical,
QObject::tr("File error"), error.what());
messageBox.exec();
return -3;
}

boost::scoped_ptr<BPO::Client::DataManager> dataManager;
dataManager.reset(new BPO::Client::DataManager(*mediator, *storage, bpoDialog->IsConnected()));

bpoDialog.reset();

BPO::Client::MainWindow window(*dataManager);
window.show();

return app.exec();
}
Записан
Serr500
Гость
« Ответ #10 : Июня 04, 2012, 11:04 »

Положите qt_ru.qm в каталог с бинарником программы. В main.cpp напишите следующее:
Код:
QTranslator Translator;
QStringList LangPaths;
LangPaths << QLibraryInfo::location(QLibraryInfo::TranslationsPath) << QCoreApplication::applicationDirPath();
for (int i = 0; i < LangPath.count(); i++ {
        if (Translator.load("qt_ru", LangPaths[i])) {
            QCoreApplication::installTranslator(&Translator);
            break;
        }
}
Записан
maint
Гость
« Ответ #11 : Июня 04, 2012, 11:12 »

Код main.cpp
Код:
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QTranslator appTranslator;
appTranslator.load(":/translations/rus.qm");
app.installTranslator(&appTranslator);
QTranslator qtTranslator;
qtTranslator.load("qt_ru",QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&qtTranslator);
BPO::Client::InitTranslate();

boost::scoped_ptr<BPO::Client::Mediator> mediator;
try
{
mediator.reset(new BPO::Client::Mediator());
}
catch (const BPO::Client::MediatorError& /*error*/)
{
QMessageBox messageBox(QMessageBox::Critical,
QObject::tr("Fatal error"), QObject::tr("Can't open serial port"));
messageBox.exec();
return -1;
}

boost::scoped_ptr<BPO::Client::Storage> storage;
storage.reset(new BPO::Client::Storage());

boost::scoped_ptr<BPO::Client::BpoDialog> bpoDialog;
try
{
bpoDialog.reset(new BPO::Client::BpoDialog(*mediator, *storage));
if (bpoDialog->exec() == QDialog::Rejected)
{
return 0;
}
}
catch (const BPO::Client::BpoManagerError& error)
{
QMessageBox messageBox(
QMessageBox::Warning, QObject::tr("File error"), error.what());
messageBox.exec();
return -2;
}

try
{
storage->ChangeUuid(bpoDialog->GetUuid());
}
catch (const BPO::Storage::FileError& error)
{
QMessageBox messageBox(QMessageBox::Critical,
QObject::tr("File error"), error.what());
messageBox.exec();
return -3;
}

boost::scoped_ptr<BPO::Client::DataManager> dataManager;
dataManager.reset(new BPO::Client::DataManager(*mediator, *storage, bpoDialog->IsConnected()));

bpoDialog.reset();

BPO::Client::MainWindow window(*dataManager);
window.show();

return app.exec();
}
да нет, файл имя_программы.qrс. У меня в одной и программ он где то так выглядит
Код:
<RCC>
    <qresource prefix="/">
        <file>icons/key_32.png</file>
    </qresource>
</RCC>

Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #12 : Июня 04, 2012, 11:58 »

если папку resources будешь распространять со своим приложением, то грузи перевод как qtTranslator.load("resources/translations/qt_ru.qm"); если нет, то этот файл надо добавить в .qrc (в данном примере - не на первый уровень, а под resources/translations/) и грузить как qtTranslator.load(":/resources/translations/qt_ru.qm");
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
vizir1989
Гость
« Ответ #13 : Июня 09, 2012, 09:37 »

Удалось подхватить перевод, если запихнуть в папку translation закинуть qt_ru.qm и в qrc указать этот файл.
Код:
<RCC>
    <qresource prefix="/">
        <file>translations/rus.qm</file>
        <file>translations/qt_ru.qm</file>
    </qresource>
</RCC>
Теперь возник такой вопрос. А как сделать че нить в стиле
Код:
<RCC>
    <qresource prefix="/">
        <file>translations/rus.qm</file>
    </qresource>
    <qresource prefix="$QTDIR/">
        <file>translations/qt_ru.qm</file>
    </qresource>
</RCC>

чтобы не пихать qt_ru.qm в ресурсы?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #14 : Июня 09, 2012, 12:12 »

так в qrc не сделаешь - разве что в коде читать значение переменной окружения QTDIR и строить путь. но такое прокатит, только если на всех целевых машинах 100% установлен Qt и эта переменная прописана.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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