crossplatform.ru

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

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


Студент
*

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

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




Репутация:   0  


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


Участник
**

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

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




Репутация:   11  


Цитата(good_game @ 6.2.2012, 11:12) Link
В разработанной программе используются стандартные диалоговые окна 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);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 13.2.2012, 0:47
Сообщение #3


Zombie Mod
*****

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

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




Репутация:   212  


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

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


Участник
**

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

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




Репутация:   11  


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

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


Zombie Mod
*****

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

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




Репутация:   212  


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


Участник
**

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

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




Репутация:   11  


Цитата(RazrFalcon @ 14.2.2012, 5:25) Link
Именно 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)
Link

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
Link

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

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})
Link

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

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

    TRANSLATE_APP;
    ...
}
Link

Так сложно потому, что используется во многих местах. Если пишешь одну программу, то можно вставить прямо в main.cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 9.2.2026, 22:49