crossplatform.ru

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


  Ответ в Русификация стандартных окон
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


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


Разобрался. Надо для библиотеки создать собственный файл TS, скомпиллировать его в qm.
В вызывающем приложении подцепить все qm-ы.
Anton Дата 14.12.2012, 11:29
  Подскажите, как в библиотеках включить перевод? Там же нет main.cpp
Sokoloff Дата 14.2.2012, 19:48
 
Цитата(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
RazrFalcon Дата 14.2.2012, 4:25
  Именно cmake, или qmake?
Просто интересно.
Sokoloff Дата 13.2.2012, 11:53
 
Цитата(RazrFalcon @ 13.2.2012, 1:47) *
А TRANSLATIONS_DIR и PROJECT_NAME откуда берутся, из .pro?

Из cmake, но эта часть не относится к "русификации стандартных окон", это перевод для конкретного приложения. Я ее оставил что бы показать, что надо использовать 2 QTranslator.
RazrFalcon Дата 13.2.2012, 0:47
  А TRANSLATIONS_DIR и PROJECT_NAME откуда берутся, из .pro?

good_game Дата 6.2.2012, 12:19
  Как переводить приложение на другие языки, я знаю. Сгенерированы нужные 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);


Всё работает на любой машине. Всем спасибо за помощь.
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);
wiz29 Дата 6.2.2012, 10:40
  Смотри в сторону void QCoreApplication::installTranslator ( QTranslator * translationFile ) и нужной тебе локализации.
good_game Дата 6.2.2012, 10:12
  В разработанной программе используются стандартные диалоговые окна QFontDialog, QPrintDialog и тому подобные.
Подскажите, как их русифицировать? В них все подписи английские.
Тот же вопрос относится и к контекстному меню элементов работы с текстом: чтобы было не "Cut/Copy/Paste", а "Вырезать/Скопировать/Вставить". Можно, конечно, создавать своё меню из QAcion и прикреплять к виджету, но хотелось бы использовать уже готовые классы, а не изобретать велосипед.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 18:20