Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: serega-5508 от Март 23, 2011, 22:41



Название: проблема с переводом приложения
Отправлено: 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. В чём беда?


Название: Re: проблема с переводом приложения
Отправлено: alexman от Март 24, 2011, 00:12
Что то с путями!


Название: Re: проблема с переводом приложения
Отправлено: serg_hd от Март 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:")); //название класса, перевод
//...
}
 


Название: Re: проблема с переводом приложения
Отправлено: lit-uriy от Март 24, 2011, 09:53
>>/translations
такого каталога на видовозе быть не может, а в лине врятли есть


Название: Re: проблема с переводом приложения
Отправлено: Пантер от Март 24, 2011, 09:59
Для динамического перевода интерфейса нужно сделать как сказал serg_hd.
И, да, ты, наверное, забыл перед /translations добавить точку или двоеточие.


Название: Re: проблема с переводом приложения
Отправлено: serega-5508 от Март 24, 2011, 21:18
пробовал добавить точку и двоеточие, ничего!!!!

Код:
this->actionsLabel1.setText(QApplication::translate("Gui", "ACTION:"));
здесь нет ошибки?????
может так надо?
Код:
this->actions(Label1.setText(QApplication::translate("Gui", "ACTION:")));
и что такое "ACTION:", что мне надо вместо его прописать и что значат "..."???


Название: Re: проблема с переводом приложения
Отправлено: Пантер от Март 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"));
//...
}
 
И не забудь в конструкторе эту функцию вызвать.


Название: Re: проблема с переводом приложения
Отправлено: serg_hd от Март 24, 2011, 21:49
капец. this->actionsLabel1 - это обычный QLabel. Вместо "ACTION:" пишешь свой текст в англ. варианте, который должен отображать этот QLabel.
"..." значит, что остальные виджеты переведёшь по такому же принципу.


Название: Re: проблема с переводом приложения
Отправлено: serg_hd от Март 24, 2011, 21:49
serg_hd что-то нехорошее написал.
я не написал, а скопировал кусок с проекта, что в этом коде непонятного?


Название: Re: проблема с переводом приложения
Отправлено: Пантер от Март 24, 2011, 21:54
Ну, tr ("blja-blja-blja") приятнее выглядит.


Название: Re: проблема с переводом приложения
Отправлено: serega-5508 от Март 25, 2011, 01:06
не забыть вызвать какую функцию?????


Название: Re: проблема с переводом приложения
Отправлено: ритт от Март 25, 2011, 05:03
вторую :P


Название: Re: проблема с переводом приложения
Отправлено: serega-5508 от Март 25, 2011, 16:35
не переводит!  :'( оно должно автоматически перевести или как???


Название: Re: проблема с переводом приложения
Отправлено: Пантер от Март 25, 2011, 16:36
Давай сюда компилябельный пример, чтобы впустую не гадать.


Название: Re: проблема с переводом приложения
Отправлено: serega-5508 от Март 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"));
    ...
}


вот как выглядит прога:
(http://qr)

что не так?


Название: Re: проблема с переводом приложения
Отправлено: serega-5508 от Март 27, 2011, 14:34
вариантов ни у кого нет???


Название: Re: проблема с переводом приложения
Отправлено: alexman от Март 27, 2011, 15:34
Так откуда перевод то берете?
Код:
void paint2d::changeEvent( QEvent* event )
{
QMainWindow::changeEvent( event );

if ( event->type() == QEvent::LanguageChange ) {
fileMenu->setText( QCoreApplication::translate( "paint2d", "File" ) );
        }
}
+ еще надо перевод загружать.


Название: Re: проблема с переводом приложения
Отправлено: serega-5508 от Март 28, 2011, 11:55
нет такого метода у fileMenu, как setText. можете скинуть нормальный кусок кода с коментами?


Название: Re: проблема с переводом приложения
Отправлено: alexman от Март 28, 2011, 12:00
Ну это я как пример привел (просто доки под рукой не было)! Надо setTitle. Сделай по примеру!


Название: Re: проблема с переводом приложения
Отправлено: serega-5508 от Март 28, 2011, 12:18
а как у меня будет вызываться changeEvent, это же событие. и что здесь означает LanguageChange? file - это путь к .ts файлу.


Название: Re: проблема с переводом приложения
Отправлено: alexman от Март 28, 2011, 13:07
а как у меня будет вызываться changeEvent, это же событие.
Это виртуальная функция, которую ты переопределяешь: void QWidget::changeEvent ( QEvent * event ) [virtual protected]. Тебе явно это вызывать не нужно.

и что здесь означает LanguageChange?
Из Qt Assistant:
Код:
QEvent::LanguageChange - The application translation changed.

file - это путь к .ts файлу.
Про это QCoreApplication::translate( "paint2d", "File" )? Это и есть получение перевода для слова "File". Из Qt Assistant:
Код:
QString QCoreApplication::translate ( const char * context, const char * sourceText, const char * disambiguation, Encoding encoding, int n ) [static]
Returns the translation text for sourceText, by querying the installed translation files. The translation files are searched from the most recently installed file back to the first installed file.