我有這樣的事情:可選的Qt字符串翻譯
void FooWidget:showSomeDialog(bool is_translatable)
{
QMessageBox mbox(this);
if (is_translatable)
{
mbox.setWindowsTitle(tr("Title"));
mbox.setText(tr("Text"));
mbox.setInformativeText(tr("InformativeText"));
mbox.addButton(tr("Button1"), QMessageBox::YesRole);
mbox.addButton(tr("Button2"), QMessageBox::NoRole);
...
} else {
mbox.setWindowsTitle(QLatin1String("Title"));
mbox.setText(QLatin1String("Text"));
mbox.setInformativeText(QLatin1String("InformativeText"));
mbox.addButton(QLatin1String("Button1"), QMessageBox::YesRole);
mbox.addButton(QLatin1String("Button2"), QMessageBox::NoRole);
...
}
mbox.exec();
}
什麼是更好的方式來避免重複?
我試着使用lambda函數是這樣的:
auto func = is_translatable
? [](const char *str) -> QString { return tr(str); }
: [](const char *str) -> QString { return QLatin1String(str); };
但它不工作。而且它看起來不太好。
如何使用is_translatable參數並返回字符串的函數?這樣你就可以擺脫代碼重複,if條件(只在「翻譯功能」中使用它,而在其他情況下可以使用相同的功能) – Anon
我認爲你濫用翻譯系統,在翻譯的應用程序中, UI字符串應該總是通過'tr()'選擇所需的語言以使它們顯示爲「未翻譯」。 –