crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Русификация стандартных окон
good_game
  опции профиля:
сообщение 6.2.2012, 10:12
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 43
Регистрация: 18.8.2011
Пользователь №: 2815

Спасибо сказали: 1 раз(а)




Репутация:   0  


В разработанной программе используются стандартные диалоговые окна QFontDialog, QPrintDialog и тому подобные.
Подскажите, как их русифицировать? В них все подписи английские.
Тот же вопрос относится и к контекстному меню элементов работы с текстом: чтобы было не "Cut/Copy/Paste", а "Вырезать/Скопировать/Вставить". Можно, конечно, создавать своё меню из QAcion и прикреплять к виджету, но хотелось бы использовать уже готовые классы, а не изобретать велосипед.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 6.2.2012, 10:40
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Смотри в сторону void QCoreApplication::installTranslator ( QTranslator * translationFile ) и нужной тебе локализации.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 6.2.2012, 11:37
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(good_game @ 6.2.2012, 11:12) *
В разработанной программе используются стандартные диалоговые окна QFontDialog, QPrintDialog и тому подобные.
Подскажите, как их русифицировать? В них все подписи английские.
Тот же вопрос относится и к контекстному меню элементов работы с текстом: чтобы было не "Cut/Copy/Paste", а "Вырезать/Скопировать/Вставить". Можно, конечно, создавать своё меню из QAcion и прикреплять к виджету, но хотелось бы использовать уже готовые классы, а не изобретать велосипед.

Мы используем такой код:
QString locale = QLocale::system().name();

QTranslator *qtTranslator = new QTranslator(qApp);
qtTranslator->load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
qApp->installTranslator(qtTranslator);

QTranslator *appTranslator = new QTranslator(qApp);
appTranslator->load(QString("${TRANSLATIONS_DIR}/${PROJECT_NAME}_%1.qm").arg(locale));
qApp->installTranslator(appTranslator);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
good_game
  опции профиля:
сообщение 6.2.2012, 12:19
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 43
Регистрация: 18.8.2011
Пользователь №: 2815

Спасибо сказали: 1 раз(а)




Репутация:   0  


Как переводить приложение на другие языки, я знаю. Сгенерированы нужные ts-файлы, обработаны в QLinguist, созданы qm-файлы. В меню теперь можно выбирать язык и надписи в интерфейсе меняютс как надо... за исключением стандартных диалоговых окон и контекстного меню. Вот их то мне и осталось русифицировать.

Оу, прошу прощения. Пока писал своё сообщение, не заметил предыдущее. Сейчас попробую ваше решение.

Цитата(Sokoloff @ 6.2.2012, 11:37) *
Цитата(good_game @ 6.2.2012, 11:12) *
В разработанной программе используются стандартные диалоговые окна QFontDialog, QPrintDialog и тому подобные.
Подскажите, как их русифицировать? В них все подписи английские.
Тот же вопрос относится и к контекстному меню элементов работы с текстом: чтобы было не "Cut/Copy/Paste", а "Вырезать/Скопировать/Вставить". Можно, конечно, создавать своё меню из QAcion и прикреплять к виджету, но хотелось бы использовать уже готовые классы, а не изобретать велосипед.

Мы используем такой код:
QString locale = QLocale::system().name();

QTranslator *qtTranslator = new QTranslator(qApp);
qtTranslator->load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
qApp->installTranslator(qtTranslator);

QTranslator *appTranslator = new QTranslator(qApp);
appTranslator->load(QString("${TRANSLATIONS_DIR}/${PROJECT_NAME}_%1.qm").arg(locale));
qApp->installTranslator(appTranslator);



Низкий поклон. Задача решена. Всё работает так, как хотелось.

Нет, поторопился. Оказалось, что не всё решено. Файл перевода берётся из директории, где установлен Qt.
Теперь стоит вопрос: а как его переносить на другую машину?
Попробовал запихать файл перевода (нужен qt_ru.qm) в ресурсы и указать так:
QTranslator *qtTranslator = new QTranslator(qApp);
    qtTranslator->load(":/translations/qt_tu.qm");
    qApp->installTranslator(qtTranslator);


Не получилось.

Затем попробовал его скопировать в директорию с приложением.
QTranslator *qtTranslator = new QTranslator(qApp);
    qtTranslator->load("qt_tu.qm", qApp->applicationDirPath());
    qApp->installTranslator(qtTranslator);


Тоже не получается. Что не так делаю?

Мда, невнимательно печатаю. Добавил в ресурсы. В коде:
QTranslator *qtTranslator = new QTranslator(qApp);
    qtTranslator->load(":/translations/qt_ru.qm"); // Было написано ":/translations/qt_tu.qm"
    qApp->installTranslator(qtTranslator);


Всё работает на любой машине. Всем спасибо за помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 13.2.2012, 0:47
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


А TRANSLATIONS_DIR и PROJECT_NAME откуда берутся, из .pro?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 13.2.2012, 11:53
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(RazrFalcon @ 13.2.2012, 1:47) *
А TRANSLATIONS_DIR и PROJECT_NAME откуда берутся, из .pro?

Из cmake, но эта часть не относится к "русификации стандартных окон", это перевод для конкретного приложения. Я ее оставил что бы показать, что надо использовать 2 QTranslator.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 14.2.2012, 4:25
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Именно cmake, или qmake?
Просто интересно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 14.2.2012, 19:48
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(RazrFalcon @ 14.2.2012, 5:25) *
Именно cmake, или qmake?
Просто интересно.

Именно cmake

cmake/RazorTranslate.cmake
MACRO(razor_translate_to _QM_FILES _TRANSLATIONS_DIR)
    file(GLOB TS_FILES
        translations/*.ts
    )

    set(TRANSLATIONS_DIR ${_TRANSLATIONS_DIR})
    add_definitions(-DTRANSLATIONS_DIR=\"${TRANSLATIONS_DIR}\")
    qt4_add_translation(${_QM_FILES} ${TS_FILES})


    install(FILES ${${_QM_FILES}} DESTINATION ${TRANSLATIONS_DIR})

    configure_file(${CMAKE_MODULE_PATH}/razortranslate.h.in razortranslate.h)
    include_directories(${CMAKE_CURRENT_BINARY_DIR})
ENDMACRO(razor_translate_to)


MACRO(razor_translate _QM_FILES)
     razor_translate_to(${_QM_FILES} ${CMAKE_INSTALL_PREFIX}/share/razor/${PROJECT_NAME})
ENDMACRO(razor_translate)
https://github.com/Razor-qt/razor-qt/blob/m...Translate.cmake

cmake/razortranslate.h.in
#ifndef RAZOR_TRANSLATE_H

#include <QtCore/QLocale>
#include <QtCore/QTranslator>
#include <QtCore/QLibraryInfo>

class RazorTranslator {
public:
    static void translate()
    {
        QString locale = QLocale::system().name();

        QTranslator *qtTranslator = new QTranslator(qApp);
        qtTranslator->load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
        qApp->installTranslator(qtTranslator);

        QTranslator *appTranslator = new QTranslator(qApp);
        appTranslator->load(QString("${TRANSLATIONS_DIR}/${PROJECT_NAME}_%1.qm").arg(locale));
        qApp->installTranslator(appTranslator);
    }
};

#define TRANSLATE_APP  RazorTranslator::translate();
#endif // RAZOR_TRANSLATE_H
https://github.com/Razor-qt/razor-qt/blob/m...rtranslate.h.in

Дергается так:

razorqt-runner/CMakeLists.txt
set(PROJECT razor-runner)
project(${PROJECT})
...
include_directories(
    ...
    ${CMAKE_CURRENT_BINARY_DIR}
)
...
# Translations **********************************
include(RazorTranslate)
razor_translate(QM_FILES)
#************************************************
...
add_executable(${PROJECT} ... ${QM_FILES})
https://github.com/Razor-qt/razor-qt/blob/m.../CMakeLists.txt

И в коде:
razorqt-runner/main.cpp
#include "razortranslate.h"

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

    TRANSLATE_APP;
    ...
}
https://github.com/Razor-qt/razor-qt/blob/m...runner/main.cpp

Так сложно потому, что используется во многих местах. Если пишешь одну программу, то можно вставить прямо в main.cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Anton_*
сообщение 14.12.2012, 11:29
Сообщение #9





Гости








    


Подскажите, как в библиотеках включить перевод? Там же нет main.cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Anton_*
сообщение 14.12.2012, 15:03
Сообщение #10





Гости








    


Цитата(Anton @ 14.12.2012, 11:29) *
Подскажите, как в библиотеках включить перевод? Там же нет main.cpp


Разобрался. Надо для библиотеки создать собственный файл TS, скомпиллировать его в qm.
В вызывающем приложении подцепить все qm-ы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 4:11