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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Перевод стандартных кнопок  (Прочитано 20410 раз)
Danila_Bagrofff
Гость
« : Июль 28, 2014, 09:01 »

Друзья, подскажите, как в QMessageBox локализовать перевод кнопок вида QMessageBox::Yes, No, Cancel и т.д.
НА русский хотелось бы)))

Записан
VanDerSam
Гость
« Ответ #1 : Июль 28, 2014, 09:10 »

Для этого нужно подгружать файлы переводов самой библиотеки Qt. В дистрибутиве библиотеки есть каталог translations, оттуда нужно взять файл qt_ru.qm и его в программе загружать. Как это сделать, описано в документации.
Записан
Danila_Bagrofff
Гость
« Ответ #2 : Июль 28, 2014, 09:14 »

Спасибо. Искал как через лингвист. По посику qt_ru.qm нашел сразу уже готовые темки.

Благодарю!!!
Записан
Danila_Bagrofff
Гость
« Ответ #3 : Июль 31, 2014, 09:11 »

А подскажите, почему из стандартного месторасположения подгружается, а из места размещения приложения - нет.
Программа переносится на другие компы и там Qt нет...

Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTranslator Translator;
    QStringList LangPaths;
    LangPaths << QLibraryInfo::location(QLibraryInfo::TranslationsPath) << a.applicationDirPath();

    for (int i = 0; i < LangPaths.count(); i++) {
            if (Translator.load("qt_ru", LangPaths[i])) {
                QCoreApplication::installTranslator(&Translator);
                break;
            }
    }
}

Загрузка перевода идет только из системного размещения, если его убираю - и оставляю только LangPaths << a.applicationDirPath();  то ничего не подгружается. что может быть не так?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Июль 31, 2014, 09:34 »

А подскажите, почему из стандартного месторасположения подгружается, а из места размещения приложения - нет.

Потому что
Код:
QLibraryInfo::location(QLibraryInfo::TranslationsPath)
путь к стандартному месторасположению переводов.

Проверьте что в LangPaths есть файл перевода.
PS. На каждый файл перевода нужно создавать новый QTranslator
Записан

OKTA
Гость
« Ответ #5 : Июль 31, 2014, 09:56 »

А еще переводы в ресурсы можно засунуть  Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Июль 31, 2014, 10:04 »

А еще переводы в ресурсы можно засунуть  Улыбающийся
У меня был случай - людям очень нужно было английский интерфейс заиметь на русской винде. Настраивать винду нельзя было, а переводы грузились по локали. Решение было простейшим - мы удалили файлы перевода. Улыбающийся С ресурсами так бы не получилось.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Danila_Bagrofff
Гость
« Ответ #7 : Июль 31, 2014, 10:13 »

не, это понятно, что он находит в первом ресурсе и все отлично.

Но если я прямо напишу вот так:

Код:
if (Translator.load("qt_ru", "c:/")) 
                QCoreApplication::installTranslator(&Translator);

и расположу его там, то он тоже не загрузится.

Но вот из QLibraryInfo::location(QLibraryInfo::TranslationsPath) он загружается.

Из ресурса тоже не цепляет...

Код:
    QTranslator Translator;
    QStringList LangPaths;
    if (Translator.load(":tr/qt_ru.qm"))
       QCoreApplication::installTranslator(&Translator);

В ресурсе prefix /tr файл qt_ru.qm

Уже ввсю голову сломал..

Почему не грузит...
« Последнее редактирование: Июль 31, 2014, 10:16 от Danila_Bagrofff » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Июль 31, 2014, 10:20 »

А если указывать полный путь к файлу перевода?
Translator.load(LangPaths + "/qt_ru.qm")
Записан

Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Июль 31, 2014, 10:21 »

1. А разве не ":tr/qt_ru.qm"?
2. Translator.load возвращает false? В консоль не ругается?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Danila_Bagrofff
Гость
« Ответ #10 : Июль 31, 2014, 10:52 »

Чо-то нифика...

Сделал уж отдельный простенький проект:
Код:
#include <QtGui>
#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTranslator Translator;
    QString path;

    path = ":/tr/qt_ru.qm";
    if (Translator.load(path))
    {
       QCoreApplication::installTranslator(&Translator);
       QMessageBox::information(0, "Translator", path, QMessageBox::Yes, QMessageBox::No);
    }

    path = ":tr/";
    if (Translator.load("qt_ru", path))
    {
       QCoreApplication::installTranslator(&Translator);
       QMessageBox::information(0, "Translator", path, QMessageBox::Yes, QMessageBox::No);
    }

    path = "c:/qt_ru";
    if (Translator.load("qt_ru", path))
    {
        QCoreApplication::installTranslator(&Translator);
        QMessageBox::information(0, "Translator", path, QMessageBox::Yes, QMessageBox::No);
    }

    path = "c:/qt_ru.qm";
    if (Translator.load(path))
    {
        QCoreApplication::installTranslator(&Translator);
        QMessageBox::information(0, "Translator", path, QMessageBox::Yes, QMessageBox::No);
    }
}

И везде false((

Да чтож за бяда)))

Вот только такой возвращает true и все... да что ж такое..
Код:
    path = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
    QMessageBox::information(0, "Path", path, QMessageBox::Apply);
    if (Translator.load("qt_ru", path))
    {
        QCoreApplication::installTranslator(&Translator);
        QMessageBox::information(0, "Translator", path, QMessageBox::Yes, QMessageBox::No);
    }
« Последнее редактирование: Июль 31, 2014, 10:59 от Danila_Bagrofff » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Июль 31, 2014, 11:02 »

Бгггг. Ща будешь ржать, но у тебя qm пустая. )))
Возьми из вложения.
« Последнее редактирование: Июль 31, 2014, 11:04 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #12 : Июль 31, 2014, 12:33 »

А еще переводы в ресурсы можно засунуть  Улыбающийся
У меня был случай - людям очень нужно было английский интерфейс заиметь на русской винде. Настраивать винду нельзя было, а переводы грузились по локали. Решение было простейшим - мы удалили файлы перевода. Улыбающийся С ресурсами так бы не получилось.

Ну, согласен, если нужна смена перевода, то лучше конечно не кидать в ресурсы, а если один раз перевести и забыть, то неплохо бы и спрятать)
Записан
Danila_Bagrofff
Гость
« Ответ #13 : Июль 31, 2014, 12:55 »

Чудяса.... Что же он тогда у меня скопировал из той папки?..

я же сам... даже проверял перекопировал... да и как бы не совсем пустой...

трындэц.... )))

СПАСИБО! Сработало... В общем, "нипанятна", как так у меня вышло)))
Записан
Danila_Bagrofff
Гость
« Ответ #14 : Сентябрь 30, 2014, 10:09 »

а с помощью какого ресурса можно изменять и дополнять qt_ru.qm?

Обнаружил, что в моем (который мне дали выше) нет перевода для контекстного меню QTextEdit.
« Последнее редактирование: Сентябрь 30, 2014, 10:48 от Danila_Bagrofff » Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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