Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Danila_Bagrofff от Июль 28, 2014, 09:01



Название: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Июль 28, 2014, 09:01
Друзья, подскажите, как в QMessageBox локализовать перевод кнопок вида QMessageBox::Yes, No, Cancel и т.д.
НА русский хотелось бы)))



Название: Re: Перевод стандартных кнопок
Отправлено: VanDerSam от Июль 28, 2014, 09:10
Для этого нужно подгружать файлы переводов самой библиотеки Qt. В дистрибутиве библиотеки есть каталог translations, оттуда нужно взять файл qt_ru.qm и его в программе загружать. Как это сделать, описано в документации.


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Июль 28, 2014, 09:14
Спасибо. Искал как через лингвист. По посику qt_ru.qm нашел сразу уже готовые темки.

Благодарю!!!


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Июль 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();  то ничего не подгружается. что может быть не так?


Название: Re: Перевод стандартных кнопок
Отправлено: gil9red от Июль 31, 2014, 09:34
А подскажите, почему из стандартного месторасположения подгружается, а из места размещения приложения - нет.

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

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


Название: Re: Перевод стандартных кнопок
Отправлено: OKTA от Июль 31, 2014, 09:56
А еще переводы в ресурсы можно засунуть  :)


Название: Re: Перевод стандартных кнопок
Отправлено: Пантер от Июль 31, 2014, 10:04
А еще переводы в ресурсы можно засунуть  :)
У меня был случай - людям очень нужно было английский интерфейс заиметь на русской винде. Настраивать винду нельзя было, а переводы грузились по локали. Решение было простейшим - мы удалили файлы перевода. :) С ресурсами так бы не получилось.


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Июль 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

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

Почему не грузит...


Название: Re: Перевод стандартных кнопок
Отправлено: gil9red от Июль 31, 2014, 10:20
А если указывать полный путь к файлу перевода?
Translator.load(LangPaths + "/qt_ru.qm")


Название: Re: Перевод стандартных кнопок
Отправлено: Пантер от Июль 31, 2014, 10:21
1. А разве не ":tr/qt_ru.qm"?
2. Translator.load возвращает false? В консоль не ругается?


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Июль 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);
    }


Название: Re: Перевод стандартных кнопок
Отправлено: Пантер от Июль 31, 2014, 11:02
Бгггг. Ща будешь ржать, но у тебя qm пустая. )))
Возьми из вложения.


Название: Re: Перевод стандартных кнопок
Отправлено: OKTA от Июль 31, 2014, 12:33
А еще переводы в ресурсы можно засунуть  :)
У меня был случай - людям очень нужно было английский интерфейс заиметь на русской винде. Настраивать винду нельзя было, а переводы грузились по локали. Решение было простейшим - мы удалили файлы перевода. :) С ресурсами так бы не получилось.

Ну, согласен, если нужна смена перевода, то лучше конечно не кидать в ресурсы, а если один раз перевести и забыть, то неплохо бы и спрятать)


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Июль 31, 2014, 12:55
Чудяса.... Что же он тогда у меня скопировал из той папки?..

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

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

СПАСИБО! Сработало... В общем, "нипанятна", как так у меня вышло)))


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Сентябрь 30, 2014, 10:09
а с помощью какого ресурса можно изменять и дополнять qt_ru.qm?

Обнаружил, что в моем (который мне дали выше) нет перевода для контекстного меню QTextEdit.


Название: Re: Перевод стандартных кнопок
Отправлено: gil9red от Сентябрь 30, 2014, 10:50
а с помощью какого ресурса можно изменять и дополнять qt_ru.qm?

Обнаружил, что в моем (который мне дали выше) нет перевода для контекстного меню QTextEdit.

Linguist, который есть в составе с Qt.


Название: Re: Перевод стандартных кнопок
Отправлено: kambala от Сентябрь 30, 2014, 14:18
только редактируемые файлы — это *.ts (а не *.qm), которые поставляются вместе с исходниками Qt


Название: Re: Перевод стандартных кнопок
Отправлено: panAlexey от Сентябрь 30, 2014, 22:21
только редактируемые файлы — это *.ts (а не *.qm), которые поставляются вместе с исходниками Qt
Я в кингсофт офисе qm-мы редактировал.
Но естественно в разрабатываемом приложении нужно ts редактировать.


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Октябрь 01, 2014, 12:21
то есть сохранив qm как ts -я смогу внести в него перевод для новых классов..

не понял при чем тут кингсофт офис... он парсит этот формат файлов?


Название: Re: Перевод стандартных кнопок
Отправлено: OKTA от Октябрь 01, 2014, 12:41
Все там должно быть. Ты просто что-то не так делаешь видимо.


Название: Re: Перевод стандартных кнопок
Отправлено: kambala от Октябрь 01, 2014, 12:42
в крайнем случае можно .ts файл в блокноте открыть и добавить недостающее


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Октябрь 01, 2014, 12:44
сохранил как ts, ручками скопировал правила перевода от QLineEdit в QTextEdit. Через xml-редактор.

Скопилил в qm, но в проге так и не появился перевод.. что надо сделать еще...

ts только пустоватая... привязок к функциям особо нет...

Все-таки как-то надо корректнее работать с ts.. Тупого копирования в xml редакторе не достаточно?)



Название: Re: Перевод стандартных кнопок
Отправлено: OKTA от Октябрь 01, 2014, 13:02
Перевод для контекстного меню QTextEdit берется из QTextControl в файле переводов.
И даже файлы qm переводятся через linguist. Не понимаю, откуда у вас такие проблемы?  ???


Название: Re: Перевод стандартных кнопок
Отправлено: kambala от Октябрь 01, 2014, 13:31
И даже файлы qm переводятся через linguist
ого, не знал. странно что этот формат не указан в списке поддерживаемых в диалоге открытия файла лингвиста.


Название: Re: Перевод стандартных кнопок
Отправлено: OKTA от Октябрь 01, 2014, 13:39
меня это тоже смутило, но попробовал и приятно удивился)


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Октябрь 02, 2014, 09:05
TextControl там есть перевод, но в диалоге не переводится...

Может, попробуете у себя имеющиеся файлы?

Или мне пришлете ваш???



Название: Re: Перевод стандартных кнопок
Отправлено: OKTA от Октябрь 02, 2014, 09:29
Беру ваш самый первый файл в архиве, который исходный, подставляю и вуаля - все переводится. Изменяю его в лингвисте и вуаля - все переводится.
Может что-то в коде не то?


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Октябрь 02, 2014, 11:05
что именно переводится?

У QTextEdit переводится контекстное меню??

Остальное у меня все переводится... только с текстэдитом проблема...

ПС. У меня QT 5.1.0 minGW


Название: Re: Перевод стандартных кнопок
Отправлено: OKTA от Октябрь 02, 2014, 11:34
Да, контекстное меню переводится. Я на 4.7.4.
Может тебе стоит взять файл переводов для 5-й версии? Или его ты и брал?


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Октябрь 02, 2014, 14:30
неа, брал не из поставки Qt5
у меня в комплекте с моей поставкой нету
мне этот мой кинули в этой же темке...

надо, наверно поискать, где он тут могет быть, в 5ке

сырцы надо качать?...  или в какой поставке может быть?


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Октябрь 02, 2014, 15:29
Во блин облом...

Qt5

Файлик весит 30обайт))

А тут README четко написано...
The French, German, and Simplified Chinese translation files are
supported by Qt. All other translations are contributed by
third parties. These are provided without guarantees and may
disappear from future Qt releases.


Название: Re: Перевод стандартных кнопок
Отправлено: OKTA от Октябрь 02, 2014, 15:31
у меня лежит для 5-й версии в C:\Qt\Qt5.3.0\5.3\mingw482_32\translations, хотя там в русских переводах я не нашел ни слова с QTextControl, что странно..
Даже не знаю, что посоветовать..  :-[
Вероятно, в 5-й версии переводы зашиты где-то еще, а не как в 4-ке в QTextControl.

Он весит мало т.к. в нем просто прописаны другие файлики qm, которые надо подтянуть - попробуй их ради опыта.


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Октябрь 02, 2014, 16:10
спер 5.3 - там пробую найти)))

ссылки тоже нашел...
вот нашел рядом qtbase_ru.qm, на который есть ссылка - соберу ща - скажу)


Название: Re: Перевод стандартных кнопок
Отправлено: Danila_Bagrofff от Октябрь 02, 2014, 16:19
Виват!
Да, заработало)))

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

Сам код использования:
   
Код:
Translator = new QTranslator();
    QString path = ":/tr/ru/qtbase_ru.qm"; //Путь в файл ресурсов .qrc QT-проекта .pro
    if (Translator->load(path))
    {
       QCoreApplication::installTranslator(Translator);
    }
    else
    {
        QMessageBox::warning(0, "Error", QObject::tr("Ошибка загрузки языка!"), QMessageBox::Ok);
    }

Для qt5+ сам файлик перевода qtbase_ru.qm во вложении...


Название: Re: Перевод стандартных кнопок
Отправлено: OKTA от Октябрь 02, 2014, 16:23
Мои поздравления  ;)