「tr() cannot be called」の対処法

lupdateを使ってアプリケーション中の文字列を翻訳するときはtr関数を使います。

lupdate -pro MyApp.pro -ts myapp_ja.ts

このコマンドを実行するとプロジェクト中から翻訳したい文字列を含んだmyapp_ja.tsが出来上がります。

しかしその過程でtr関数で囲んだはずの文字列がいくつかlupdateに拾われないで抜け落ちることがあります。

実際そういうときはlupdateで次のような警告が表示されます。

C:/Users/xxx/MyApp/MyApp/MyDialog.cpp:46: tr() cannot be called without context
C:/Users/xxx/MyApp/MyApp/MyDialog.cpp:48: tr() cannot be called without context
C:/Users/xxx/MyApp/MyApp/MyDialog.cpp:50: tr() cannot be called without context

このメッセージが表示された場合は次のようにQObjectを継承したクラスから直接trを呼び出していることが多いです。

MyDialog::MyDialog(QWidget * parent)
	: QDialog(parent)
{
    setWindowTitle(tr("dialog"));
}

この場合、trを呼び出しているクラス名を明示すればOKです。

MyDialog::MyDialog(QWidget * parent)
    : QDialog(parent)
{
    setWindowTitle(MyDialog::tr("dialog"));
}
関連項目
プライバシーポリシー