如果在带有 Q_OBJECT 宏的 class 之外,则无法在 Qt Linguist 中获取字符串
Not able to get strings in Qt Linguist if outside of a class with the Q_OBJECT macro
我的项目中有一个文件,其中一些函数不是任何 class 的成员。我有一些字符串要在那里翻译,因此,不在 class 从 Qt QObject 派生的任何 class 或类似 class 声明中的 Q_OBJECT 宏,我使用了以下语法:
#define CONTEXT_STRING "Context string here"
...
... QCoreApplication::translate(CONTEXT_STRING, "String to be translated") ...
而不是通常的:
... tr("String to be translated") ...
我正在使用基于 Qt 5.2.1(MSVC 2010,32 位)的 Qt Creator 3.0.1。
我有 运行 lupdate 但字符串仍然没有出现在 Qt Linguist 中。
一个完整的最小可重现示例是:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QMessageBox>
#define CONTEXT_STRING "Context string here"
void standalonefun()
{
QString msg;
msg = QCoreApplication::translate(CONTEXT_STRING, "String to be translated");
QMessageBox::information(0, "Message", msg);
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
standalonefun();
}
MainWindow::~MainWindow()
{
delete ui;
}
终于发现需要写:
... QCoreApplication::translate("Context string here", "String to be translated") ...
不能做:
#define CONTEXT_STRING "Context string here"
...
... QCoreApplication::translate(CONTEXT_STRING, "String to be translated") ...
因为 lupdate 没有使用 #define
预处理器指令检测第二种形式。
我的项目中有一个文件,其中一些函数不是任何 class 的成员。我有一些字符串要在那里翻译,因此,不在 class 从 Qt QObject 派生的任何 class 或类似 class 声明中的 Q_OBJECT 宏,我使用了以下语法:
#define CONTEXT_STRING "Context string here"
...
... QCoreApplication::translate(CONTEXT_STRING, "String to be translated") ...
而不是通常的:
... tr("String to be translated") ...
我正在使用基于 Qt 5.2.1(MSVC 2010,32 位)的 Qt Creator 3.0.1。
我有 运行 lupdate 但字符串仍然没有出现在 Qt Linguist 中。
一个完整的最小可重现示例是:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QMessageBox>
#define CONTEXT_STRING "Context string here"
void standalonefun()
{
QString msg;
msg = QCoreApplication::translate(CONTEXT_STRING, "String to be translated");
QMessageBox::information(0, "Message", msg);
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
standalonefun();
}
MainWindow::~MainWindow()
{
delete ui;
}
终于发现需要写:
... QCoreApplication::translate("Context string here", "String to be translated") ...
不能做:
#define CONTEXT_STRING "Context string here"
...
... QCoreApplication::translate(CONTEXT_STRING, "String to be translated") ...
因为 lupdate 没有使用 #define
预处理器指令检测第二种形式。