3

Qt言語学者を使用してuiファイルを翻訳しています。tsを使用してファイルを取得しlupdate、それらの単語やフレーズを翻訳しました。今度はそれをコードに追加したいのですが、そのチュートリアルから、tr()コード内のすべての単語とフレーズに追加する必要があるように思われることがわかりました。正しく理解できましたか?qm翻訳したファイルを一度ロードして翻訳を行うことはできますか?もしそうなら、どうすればこのuiファイルでそれを行うことができますか?

前もって感謝します。

アップデート

Jensが述べたようにプロパティを変更した後、私のuiヘッダーファイルに次のような文が表示されます。

buttonSetupData->setText(QApplication::translate("MainWindow", "Set Data", 0, QApplication::UnicodeUTF8));

Ajithの回答の後、コードを変更しました。ファイル内のretranslateUi関数はui_main.h次のようになります。

void retranslateUi ( QMainWindow *MainWindow )
{
    QTranslator translator;
    translator.load ( " ...\Test.ts " );
    QApplication::installTranslator ( &translator );

    MainWindow->setWindowTitle ( QApplication::translate ("MainWindow",  "The Sentioscope - Beta v2.0 for Soccer", 0, QApplication::UnicodeUTF8));

    ...
}

しかし、それでも機能しませんでした。

最新のアップデート

「.qm」ファイルを読み取るための現在の関数は次のとおりです。

void MainWindow::translate()
{
     QTranslator translator;
     translator.load ( "Test.qm", "D:\\" );
     qApp->installTranslator ( &translator );
     retranslateUi ( this );
 }

次に、この関数を次のように呼び出します。

MainWindow::MainWindow ( QWidget *parent ) : QMainWindow ( parent )
{
    setupUi(this);
    translate();
}

Ajithの最新の回答の後、次のフォームの警告/メッセージボックスの各文字列を変更しました(たとえば)。

QMessageBox::warning( this, QMessageBox::tr("ERROR"), QMessageBox::tr("Invalid IP adress") );

これらすべての文字列をlupdate読み取り、翻訳して、qmファイルに保存することができます。現在の問題は、これらの文字列をuiに変換できますが、実行後の警告/メッセージボックスには変換できないことです。

4

2 に答える 2

1

あなたが説明することはかなり正しい。QtDesigner / QtCreatorを使用すると、各ui-Elementで、テキストを翻訳するかどうかを選択できます(各ui-Elementのプロパティを参照してください)。翻訳が選択されている場合、tr()は生成されたui_xxx.hファイルに入れられ、そこから他の翻訳可能な単語と同じように表示されます。

于 2013-01-03T09:26:02.853 に答える
1

私はあなたが質問から何を達成したいのか完全にはわかりません。実行時にC++コードから「qm」ファイルをロードする方法を探していると思います。その場合、実行する必要があるのはQTranslatorクラスを使用することです。

QTranslator translator;
translator.load("file.qm", "dir");
qApp->installTranslator(&translator);

アップデート

これは私のために働いていました。

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    isChinese(false)
{
    ui->setupUi(this);
    msgbox = new QMessageBox(QMessageBox::NoIcon, "", "", QMessageBox::NoButton, this);
    pbtn = msgbox->addButton("Ok", QMessageBox::AcceptRole);

    doRetranslate();

    QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(doTranslate()));
    QObject::connect(ui->pushButton, SIGNAL(clicked()), msgbox, SLOT(show()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::doTranslate()
{
    QTranslator translator;
    if (!isChinese) {
        translator.load("test_zh_TW.qm", "../TestTranslator");
        qApp->installTranslator(&translator);
        isChinese = true;
    } else {
        translator.load("", ""); // Default is english
        qApp->installTranslator(&translator);
        isChinese = false;
    }
    ui->retranslateUi(this);
    doRetranslate();
}

void MainWindow::doRetranslate()
{
    msgbox->setWindowTitle(QObject::tr("ERROR"));
    msgbox->setText(QObject::tr("Invalid IP adress"));
    pbtn->setText(QObject::tr("Ok"));
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QPushButton>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void doRetranslate();
public slots:
    void doTranslate();

private:
    Ui::MainWindow *ui;
    bool isChinese;
    QMessageBox *msgbox;
    QPushButton *pbtn;
};

#endif // MAINWINDOW_H

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>100</x>
      <y>70</y>
      <width>181</width>
      <height>17</height>
     </rect>
    </property>
    <property name="text">
     <string>Hello World!</string>
    </property>
    <property name="alignment">
     <set>Qt::AlignCenter</set>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>140</x>
      <y>120</y>
      <width>93</width>
      <height>27</height>
     </rect>
    </property>
    <property name="text">
     <string>translate</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>400</width>
     <height>23</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections>
  <connection>
   <sender>pushButton</sender>
   <signal>clicked()</signal>
   <receiver>label</receiver>
   <slot>update()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>199</x>
     <y>165</y>
    </hint>
    <hint type="destinationlabel">
     <x>206</x>
     <y>114</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>
于 2013-01-03T09:51:15.143 に答える