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

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

Страниц: 1 2 [3] 4 5 6   Вниз
  Печать  
Автор Тема: Проблема с переключением языка  (Прочитано 42171 раз)
Den2009
Гость
« Ответ #30 : Декабрь 19, 2009, 22:17 »

че-то я не понял, как его использовать... в справке к КуТэ только это:
Код:
void QCoreApplication::removeTranslator ( QTranslator * translationFile )   [static]
Removes the translation file translationFile from the list of translation files used by this application. (It does not delete the translation file from the file system.)

See also installTranslator(), translate(), and QObject::tr().
в интернете тоже самое везде
Записан
Dendy
Гость
« Ответ #31 : Декабрь 20, 2009, 01:15 »

Подставляете туда указатель на транслятор, который ранее передали в QCoreApplication::installTranslator().
Записан
Den2009
Гость
« Ответ #32 : Декабрь 20, 2009, 10:24 »

сделал так:
Код:
void MainWindow::triggeredRussian()
{

    QTranslator* translator = new QTranslator;
    QCoreApplication::removeTranslator(translator);
    m_rus = true;
    qDebug() << m_rus;
    kn_eng->setChecked(false);
    translator->load("./pr1_ru.qm",".");
    qDebug() << translator->load("./pr1_ru.qm",".");
    qApp->installTranslator(translator);
   
}

void MainWindow::triggeredEnglish()
{
//removeTranslator(translator);
//    QCoreApplication::removeTranslator(translator);
//    QTranslator* translator = new QTranslator;
    m_rus = false;
    kn_rus->setChecked(false);
//    translator->load("./pr1_en.qm",".");
//    qDebug() << translator->load("./pr1_en.qm",".");
//    qApp->installTranslator(translator);
}

bool MainWindow::event(QEvent* e)
{
    if (e->type() == QEvent::LanguageChange)
    {
        retranslateUi(this);
        return true;
    }
    return QMainWindow::event(e);
}
все равно не работает
Записан
Dendy
Гость
« Ответ #33 : Декабрь 20, 2009, 17:31 »

Подставляете туда указатель на транслятор, который РАНЕЕ передали в QCoreApplication::installTranslator().

А вы что подставили?
Записан
Den2009
Гость
« Ответ #34 : Декабрь 21, 2009, 21:27 »

дак вот же указатель translator, переданный installTranslator()
Код:
qApp->installTranslator(translator);
блин, как сделать?? нифига документации нету...
у меня есть идея такая:
сначала удалить перевод, а потом создавать, ну примерно так:
Код:
void MainWindow::triggeredRussian()
{
    QCoreApplication::removeTranslator(translator);
    m_rus = true;
    qDebug() << m_rus;
    kn_eng->setChecked(false);
    translator->load("./pr1_ru.qm",".");
    qDebug() << translator->load("./pr1_ru.qm",".");
    qApp->installTranslator(translator);
   
}

void MainWindow::triggeredEnglish()
{
    QCoreApplication::removeTranslator(&translator);
    m_rus = false;
    kn_rus->setChecked(false);
    translator->load("./pr1_en.qm",".");
    qDebug() << translator->load("./pr1_en.qm",".");
    qApp->installTranslator(translator);
}

bool MainWindow::event(QEvent* e)
{
    if (e->type() == QEvent::LanguageChange)
    {
        retranslateUi(this);
        return true;
    }
    return QMainWindow::event(e);
}

но тогда translator надо объявлять глобально
правильно ли я мыслю?
Записан
Dendy
Гость
« Ответ #35 : Декабрь 21, 2009, 22:00 »

translator будет переменной-членом вашего класса, выделяете память под него при старте. А дальше - как у вас и написано, должно работать.
Записан
Den2009
Гость
« Ответ #36 : Декабрь 22, 2009, 12:32 »

я, конечно, понимаю, что мои знания С++ оставляют желать лучшего, но учить особо некогда - сессия Улыбающийся поэтому приходится учить и писать одновременно
Цитировать
translator будет переменной-членом вашего класса, выделяете память под него при старте.
как это реализовать?
Записан
Dendy
Гость
« Ответ #37 : Декабрь 22, 2009, 16:29 »

Код
C++ (Qt)
class MainWindow
{
...
   QTranslator * translator;
...
}
 
MainWindow::MainWindow()
{
...
   translator = new QTranslator( this );
...
}
 

А дальше - как у вас.
Записан
Den2009
Гость
« Ответ #38 : Декабрь 22, 2009, 20:52 »

спс, работает... только эта строка не переводится:
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
textEdit->setText(tr("The entered number of seconds ")+QString::number(iS)  + tr(" corresponds ") + QString::number(oH) + tr(" hours, " ) + QString::number(oM) + tr(" minutes, ") + QString::number(oS) + tr(" seconds"));
я, кстати, почти так же объявлял, только это не указывал, и поэтому не работало:
Код:
MainWindow::MainWindow()
{
...
    translator = new QTranslator( this );
...
}
Записан
Dendy
Гость
« Ответ #39 : Декабрь 22, 2009, 21:10 »

Во-первых, удалите вызов QTextCodec::setCodecForTr().
Во-вторых, лучше делать так:

Код
C++ (Qt)
textEdit->setText(tr("The entered number of seconds %1 corresponds %2 hours, %3 minutes, %4 seconds").arg(iS).arg(oH).arg(oM).arg(oS));
 

И проверьте, что эта строка переведена в ts-файле.
Записан
Den2009
Гость
« Ответ #40 : Декабрь 22, 2009, 23:45 »

все равно не переводит.... строка в ts-файле переведена
Записан
Dendy
Гость
« Ответ #41 : Декабрь 22, 2009, 23:50 »

Это строка конечно же должна быть в обработчике QEvent::LanguageChanged. Лучше всего её вынести в отдельный метод.
Записан
Den2009
Гость
« Ответ #42 : Декабрь 23, 2009, 10:04 »

а как это реализовать?
Записан
Dendy
Гость
« Ответ #43 : Декабрь 23, 2009, 10:15 »

Метод без параметров:

Код
C++ (Qt)
void MainWindow::retranslateTextEdit()
{
   textEdit->setText( tr("The entered number of seconds %1 corresponds %2 hours, %3 minutes, %4 seconds")
       .arg( iS_ )
       .arg( oH_ )
       .arg( oM_ )
       .arg( oS_ ) );
 

Где переменнные с подчерками в конце - члены класса MainWindow.
Записан
Den2009
Гость
« Ответ #44 : Декабрь 24, 2009, 01:04 »

сделал так:
proga1.h
Код:
class MainWindow : public QMainWindow, Ui::MainWindow
{
    Q_OBJECT
public:
    bool m_rus;
    bool event(QEvent* e);
    int iS, oS, oM, oH;
    QTranslator* translator;
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        translator = new QTranslator(this);

        m_rus = true;
        setupUi(this);
............
proga1.cpp
Код:
.................
void MainWindow::retranslateTextEdit()
{
    textEdit->setText( tr("The entered number of seconds %1 corresponds %2 hours, %3 minutes, %4 seconds")
        .arg( iS )
        .arg( oH )
        .arg( oM )
        .arg( oS ) );
}
...........
все равно не переводит...
есть, конечно, 100% рабочий вариант, но он не очень грамотный:
Код:
if русский 
{
    пишем по-русски
}
if английский

    пишем по-английски
}
забыл:
файл перевода:
Код:
<message>
        <location filename="proga1.cpp" line="32"/>
        <source>The entered number of seconds %1 corresponds %2 hours, %3 minutes, %4 seconds</source>
        <translation>Введенное количество секунд %1 соответствует %2 часам, %3 минутам, %4 секундам</translation>
    </message>
« Последнее редактирование: Декабрь 24, 2009, 01:06 от Den2009 » Записан
Страниц: 1 2 [3] 4 5 6   Вверх
  Печать  
 
Перейти в:  


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