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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: проблема с переводом приложения  (Прочитано 10586 раз)
serega-5508
Гость
« : Март 23, 2011, 22:41 »

я создаю панельку с Файл...Правка...Язык....Помощь...:

созданю Action для выбора языка интерфейса:
Код:
void progect::createActions()
{
rusAction = new QAction(tr("Russian"),this);
connect(rusAction,SIGNAL(triggered()),SLOT(rusLang()));
}

прописываю слот:

Код:
void progect::rusLang()
{
    QTranslator *translator =new QTranslator(0);
    translator->load("/translations/paint2d_rus.qm");
    qApp->installTranslator(translator);
}

запускаю прогу, компилиться! но когда выбираю Язык -> Русский, то ничего не происходит и не переводит моё приложение! в чём дело? интерфейс изначально на английском естественно! Файл paint2d_rus.qm находится в проекте в папке translations. В чём беда?
Записан
alexman
Гость
« Ответ #1 : Март 24, 2011, 00:12 »

Что то с путями!
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #2 : Март 24, 2011, 00:38 »

попробуй добавить что-то вроде:
Код
C++ (Qt)
void Gui::changeEvent(QEvent* event)
{
if (event->type() == QEvent::LanguageChange)
 this->retranslateUi();
QWidget::changeEvent(event);
}
 
void Gui::retranslateUi()
{
this->actionsLabel1.setText(QApplication::translate("Gui", "ACTION:")); //название класса, перевод
//...
}
 
Записан

kubuntu/Win7/x64/NetBeans
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Март 24, 2011, 09:53 »

>>/translations
такого каталога на видовозе быть не может, а в лине врятли есть
Записан

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

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #4 : Март 24, 2011, 09:59 »

Для динамического перевода интерфейса нужно сделать как сказал serg_hd.
И, да, ты, наверное, забыл перед /translations добавить точку или двоеточие.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
serega-5508
Гость
« Ответ #5 : Март 24, 2011, 21:18 »

пробовал добавить точку и двоеточие, ничего!!!!

Код:
this->actionsLabel1.setText(QApplication::translate("Gui", "ACTION:"));
здесь нет ошибки?Непонимающий?
может так надо?
Код:
this->actions(Label1.setText(QApplication::translate("Gui", "ACTION:")));
и что такое "ACTION:", что мне надо вместо его прописать и что значат "..."Непонимающий
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #6 : Март 24, 2011, 21:47 »

serg_hd что-то нехорошее написал.
Просто собери все в одну кучу. Т.е.
Код
C++ (Qt)
void Gui::changeEvent(QEvent* event)
{
if (event->type() == QEvent::LanguageChange)
 retranslate ();
QWidget::changeEvent(event);
}
 
void Gui::retranslate()
{
actionsLabel1.setText(tr("Action name"));
actionsLabel2.setText(tr("Action 2 name"));
//...
}
 
И не забудь в конструкторе эту функцию вызвать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #7 : Март 24, 2011, 21:49 »

капец. this->actionsLabel1 - это обычный QLabel. Вместо "ACTION:" пишешь свой текст в англ. варианте, который должен отображать этот QLabel.
"..." значит, что остальные виджеты переведёшь по такому же принципу.
Записан

kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #8 : Март 24, 2011, 21:49 »

serg_hd что-то нехорошее написал.
я не написал, а скопировал кусок с проекта, что в этом коде непонятного?
Записан

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

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #9 : Март 24, 2011, 21:54 »

Ну, tr ("blja-blja-blja") приятнее выглядит.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
serega-5508
Гость
« Ответ #10 : Март 25, 2011, 01:06 »

не забыть вызвать какую функцию?Непонимающий?
Записан
ритт
Гость
« Ответ #11 : Март 25, 2011, 05:03 »

вторую Показает язык
Записан
serega-5508
Гость
« Ответ #12 : Март 25, 2011, 16:35 »

не переводит!  Плачущий оно должно автоматически перевести или как???
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #13 : Март 25, 2011, 16:36 »

Давай сюда компилябельный пример, чтобы впустую не гадать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
serega-5508
Гость
« Ответ #14 : Март 26, 2011, 01:21 »

вот код:
Код:
paint2d::paint2d()
{
    createActions();
    createMenus();
    createToolBars();
    setWindowIcon(QIcon(":/images/help-about-logo.png"));
    retranslateUi();

}

void paint2d::changeEvent(QEvent* event)
{
    if (event->type() == QEvent::LanguageChange)
            retranslateUi ();
    QWidget::changeEvent(event);
}

void paint2d::createMenus()
{

    fileMenu = new QMenu(this);
    menuBar()->addMenu(fileMenu);
    fileMenu->addAction(newAction);
    fileMenu->addAction(openAction);
    fileMenu->addAction(saveAction);
    ...
}


void paint2d::createActions()
{
    newAction = new QAction(this);
    newAction->setIcon(QIcon(":/images/new.png"));
    newAction->setShortcut(QKeySequence::New);
    connect(newAction, SIGNAL(triggered()), this, SLOT(newFile()));

 ...
}

void paint2d::createToolBars()
{

    fileToolBar = new QToolBar;
    addToolBar(fileToolBar);
    fileToolBar->addAction(newAction);
    fileToolBar->addAction(openAction);
    ...
}

void paint2d::retranslateUi()
{
    fileMenu->setTitle(tr("File"));
    editMenu->setTitle(tr("Edit"));
    languageMenu->setTitle(tr("Language"));
    ...
}


вот как выглядит прога:


что не так?
« Последнее редактирование: Март 26, 2011, 01:22 от serega-5508 » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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