Qtアプリケーションで翻訳対象とマークされていない文字列を検出する

このブログは「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アプリケーションでは、ユーザーが目にする文字列は通常、QPushButtonQLabelのようなQWidgetサブクラスのコンストラクタや、QMessageBox::information()のようなユーティリティ関数に渡されます。これを出発点として、Axivion Static AnalysisのQtセマンティクスの理解と組み合わせることで、tr()を呼ばずに文字列が使用されている箇所を特定できます: 

QtUnmarkedStrings-1

問題のある文字列が複数のレイヤーを経由して呼び出された場合でも警告が表示されます: 

QtUnmarkedStrings-2

このルールに加えて、Axivion静的コード解析は、QString::arg()の誤った使用を検出するQt-QStringArgや、ASCII以外の文字を含むQLatin1Stringの使用を検出するQt-QLatin1StringNonAsciiなど、Qtコードに役立つさまざまなチェックを提供しています。

静的コード解析は、安全性やセキュリティが重要なアプリケーションのためのツールと見なされがちですが、このようにデスクトップやモバイルアプリケーションのコード品質やユーザーエクスペリエンスを向上させるためにも利用できます。

Axivion 静的コード解析とAxivion アーキテクチャ検証の詳細については、Axivion のウェブサイトをご覧ください。

説明をご希望の方は、こちらまでご連絡ください。


Blog Topics:

Comments