0

这个小应用程序提出了一些问题:

int main(int argc, char *argv[])
{
  QTranslator* translator = new QTranslator();
  QString langCode = "en_GB";
  translator->load(QString("Core_%1.qm").arg(langCode));
  QCoreApplication::installTranslator(translator);

  auto now = QDateTime::currentDateTime();
  qDebug() << now.toString(tr("Timeformat"));

  return 0
}

对于每种语言,我都会创建一个单独的Core.qm,其中包含 Timeformat 的翻译。这是针对“en_GB”的

<message>
  <source>Timeformat</source>
  <translation>hh:mm ap</translation>
  <comment/>
</message>

这是针对“de_DE”的

<message>
  <source>Timeformat</source>
  <translation>hh.mm</translation>
  <comment/>
</message>

系统语言设置可以与加载的语言文件不同。如果软件在 13:57 加载Core_de_DE.qm在英文笔记本电脑上运行,则显示13.57。并且加载 了 Core_en_GB.qm它显示01:57 pm

但是当软件在加载Core_en_GB.qm的法国笔记本电脑上运行时(因为我的软件没有法语翻译)。软件显示01:57(缺少下午)。为什么?

4

1 回答 1

0

我已经通过对每个toString调用而不是系统调用使用 UK Local 来解决这个问题:

//instead of
qDebug() << now.toString(tr("Timeformat"));
// I use now
qDebug() << QLocale("en_GB").toString(now, tr("Timeformat"));
于 2019-06-21T06:33:02.620 回答