このブログは「Detecting Un-marked Strings for Translation in Qt Applications」を翻訳・一部加筆したものです。
国際化とローカライゼーションは、ユーザー向けアプリケーションのUI/UX設計において重要な要素です。Qtは、ソースコードを国際化するための統一された高性能なAPIと、翻訳の設定や展開を簡単に行えるツールを提供しています。(詳しくは「Internationalization with Qt」をご覧ください)
C++コードでは、文字列を翻訳用にマークする方法がいくつかあります。
QT_TR_NOOP
マクロQObject
サブクラス外でのQCoreApplication::translate()
関数QObject
サブクラス内でのtr()
関数このうち、QCoreApplication::translate()
とtr()
の2つの関数は、適切な翻訳を返すためにランタイムルックアップも行います。(詳細については Writing Source Code for Translation をお読みください。)
多くのウィンドウ、ダイアログ、ウィジェットを含む大規模なアプリケーションでは、ユーザーが目にするすべての文字列が翻訳用に正しくマークされていることを確認するのは難しい場合があります。このため、Axivion静的コード解析では、翻訳用にマークされていない文字列を検出するQt-Generic-MissingTrCall
という静的解析ルールを提供しています。
Qtアプリケーションでは、ユーザーが目にする文字列は通常、QPushButton
やQLabel
のようなQWidget
サブクラスのコンストラクタや、QMessageBox::information()
のようなユーティリティ関数に渡されます。これを出発点として、Axivion Static AnalysisのQtセマンティクスの理解と組み合わせることで、tr()
を呼ばずに文字列が使用されている箇所を特定できます:
問題のある文字列が複数のレイヤーを経由して呼び出された場合でも警告が表示されます:
このルールに加えて、Axivion静的コード解析は、QString::arg()
の誤った使用を検出するQt-QStringArg
や、ASCII以外の文字を含むQLatin1String
の使用を検出するQt-QLatin1StringNonAscii
など、Qtコードに役立つさまざまなチェックを提供しています。
静的コード解析は、安全性やセキュリティが重要なアプリケーションのためのツールと見なされがちですが、このようにデスクトップやモバイルアプリケーションのコード品質やユーザーエクスペリエンスを向上させるためにも利用できます。
Axivion 静的コード解析とAxivion アーキテクチャ検証の詳細については、Axivion のウェブサイトをご覧ください。
説明をご希望の方は、こちらまでご連絡ください。