Qt には、ローカリゼーション呼び出し用の特別な機能があります。qsTr()
、tr()
、QT_TR_NOOP()
、qsTranslate()
などの関数。
上記の関数の呼び出しパラメーターの内容を解析する必要があります。
たとえば、qsTr()
次のとおりです。
qsTr(string source, string disambiguation, int n)
その関数の可能な呼び出しは 3 つだけです
qsTr("source")
qsTr("source", "disambiguation")
qsTr("source", "disambiguation", count) // count - some int value for source
// if it contains plurals - %n
ソース Qt または QML で次の行を見つけたとします。
qsTr("source string")
そのような場合のために、私は Java 正規表現を書きました:
(?<=qsTr\\()(\\s*(\\".*?(?<\\\\)\\")?)(?=\\s*\\))
上記の正規表現は「ソース文字列」と正確に一致し、それは正しいです。
しかし、単一行だけでなく、DOTALL 正規表現が必要です。
考えられる問題の 1 つは、正しくない次の呼び出しを見つけることができ、それを無視する必要があることです。
qsTr("source", count)
上記の正規表現は、貪欲な量指定子のために失敗します。"\\s*)"
テキスト全体の次を探します。それを修正する方法はありますか?