我正在翻译我们的Qt GUI项目。
*。ts文件生成成功。
我使用Qt Linguist填充* .ts文件并翻译。
但是在运行时,使用命名空间和静态成员进行转换不起作用。
其他翻译(当在类中调用tr()方法时,从QObject继承)可以正常工作。
我有以下代码(翻译不起作用):
名称空间的示例:
// example with namespaces
// declaration in header
namespace Error
{
namespace RadionetworkInput
{
QString alreadyInUse = QT_TR_NOOP("already in use");
char requestFailed[] = QT_TR_NOOP("request failed");
}
}
cpp中的用法:
// usage in cpp code0
QString error0 = Error::RadionetworkInput::alreadyInUse;
QString error1 = tr(Error::RadionetworkInput::requestFailed);
静态成员示例:
// example with static members
// declaration in header
namespace Error
{
class RadionetworkInput
{
public:
static const QString alreadyInUse;
static const char requestFailed[];
}
QString Error::RadionetworkInput::alreadyInUse = QT_TR_NOOP("already in use");
char Error::RadionetworkInput::requestFailed[] = QT_TR_NOOP("request failed");
}
cpp代码中的用法
// usage in cpp code
QString error0 = Error::RadionetworkInput::alreadyInUse;
QString error1 = tr(Error::RadionetworkInput::requestFailed);
示例,有工作翻译:
class ViewNetwork : public QObject
{
Q_OBJECT
public:
explicit ViewNetwork(QString name = tr("New Radionetwork"));
};
代码中的用法:
ViewNetwork::ViewNetwork(QString name)
{
QString dummy = name;
}
使用QObject::tr()
代替QT_TR_NOOP()
宏无济于事。
答案 0 :(得分:1)
问题是你理解它是如何工作的。使用静态成员变量,它们会在main
函数启动之前初始化
这意味着两件事:
你应该怎么做?只需将静态变量更改为函数:
// example with namespaces
// declaration in header
namespace Error
{
namespace RadionetworkInput
{
QString alreadyInUse() { return QT_TR_NOOP("already in use"); }
QString requestFailed() { return QT_TR_NOOP("request failed"); }
}
}
和
// example with static members
// declaration in header
namespace Error
{
class RadionetworkInput
{
public:
static QString alreadyInUse();
static QString requestFailed();
}
QString Error::RadionetworkInput::alreadyInUse() { return QT_TR_NOOP("already in use"); }
QString Error::RadionetworkInput::requestFailed() { return QT_TR_NOOP("request failed"); }
}
作为char []返回翻译是没有意义的,我也纠正了(我不知道你为什么这么做)。