diff --git a/src/linguist/lconvert/main.cpp b/src/linguist/lconvert/main.cpp index 4e26adbbbfa85cc221328420759280d7221ebdd5..2dc07db514d91eaa94758783b127de1031703c42 100644 --- a/src/linguist/lconvert/main.cpp +++ b/src/linguist/lconvert/main.cpp @@ -94,6 +94,8 @@ static int usage(const QStringList &args) " Drop obsolete messages.\n\n" " -no-finished\n" " Drop finished messages.\n\n" + " -no-untranslated\n" + " Drop untranslated messages.\n\n" " -sort-contexts\n" " Sort contexts in output TS file alphabetically.\n\n" " -locations {absolute|relative|none}\n" @@ -145,6 +147,7 @@ int main(int argc, char *argv[]) bool dropTranslations = false; bool noObsolete = false; bool noFinished = false; + bool noUntranslated = false; bool verbose = false; bool noUiLines = false; Translator::LocationsType locations = Translator::DefaultLocations; @@ -199,6 +202,8 @@ int main(int argc, char *argv[]) noObsolete = true; } else if (args[i] == QLatin1String("-no-finished")) { noFinished = true; + } else if (args[i] == QLatin1String("-no-untranslated")) { + noUntranslated = true; } else if (args[i] == QLatin1String("-sort-contexts")) { cd.m_sortContexts = true; } else if (args[i] == QLatin1String("-locations")) { @@ -256,6 +261,8 @@ int main(int argc, char *argv[]) tr.stripObsoleteMessages(); if (noFinished) tr.stripFinishedMessages(); + if (noUntranslated) + tr.stripUntranslatedMessages(); if (dropTranslations) tr.dropTranslations(); if (noUiLines) diff --git a/src/linguist/shared/translator.cpp b/src/linguist/shared/translator.cpp index 9ef7174261cbdc5a8fe54a5c2364918c9fd9db40..5b0538d4e19e7a0b8f50cddbcb726dcc39a5418e 100644 --- a/src/linguist/shared/translator.cpp +++ b/src/linguist/shared/translator.cpp @@ -420,6 +420,16 @@ void Translator::stripFinishedMessages() m_indexOk = false; } +void Translator::stripUntranslatedMessages() +{ + for (TMM::Iterator it = m_messages.begin(); it != m_messages.end(); ) + if (!it->isTranslated()) + it = m_messages.erase(it); + else + ++it; + m_indexOk = false; +} + void Translator::stripEmptyContexts() { for (TMM::Iterator it = m_messages.begin(); it != m_messages.end();) diff --git a/src/linguist/shared/translator.h b/src/linguist/shared/translator.h index 57a154008ad5978a98bf42bdad618be8434d8462..8919a13df7fbaebb3036760503e21159b15c3c50 100644 --- a/src/linguist/shared/translator.h +++ b/src/linguist/shared/translator.h @@ -128,6 +128,7 @@ public: void stripObsoleteMessages(); void stripFinishedMessages(); + void stripUntranslatedMessages(); void stripEmptyContexts(); void stripNonPluralForms(); void stripIdenticalSourceTranslations(); diff --git a/tests/auto/linguist/lconvert/data/untranslated.ts b/tests/auto/linguist/lconvert/data/untranslated.ts new file mode 100644 index 0000000000000000000000000000000000000000..89007df26ebb239e83a7e011b5206ed4bdcee67b --- /dev/null +++ b/tests/auto/linguist/lconvert/data/untranslated.ts @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="de_DE"> +<context> + <name>a</name> + <message> + <location filename="a.cpp" line="93"/> + <source>One string</source> + <translation>Ein Gesimsband</translation> + </message> + <message> + <location filename="a.cpp" line="380"/> + <source>Untranslated String</source> + <translation></translation> + </message> + <message numerus="yes"> + <location filename="a.cpp" line="456"/> + <source>%n things</source> + <translation> + <numerusform></numerusform> + <numerusform>%n Dinger</numerusform> + </translation> + </message> +</context> +</TS> diff --git a/tests/auto/linguist/lconvert/data/untranslated.ts.out b/tests/auto/linguist/lconvert/data/untranslated.ts.out new file mode 100644 index 0000000000000000000000000000000000000000..6244f9db8672d64b0ac2077db878cc01a325fb78 --- /dev/null +++ b/tests/auto/linguist/lconvert/data/untranslated.ts.out @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="de_DE"> +<context> + <name>a</name> + <message> + <location filename="a.cpp" line="93"/> + <source>One string</source> + <translation>Ein Gesimsband</translation> + </message> + <message numerus="yes"> + <location filename="a.cpp" line="456"/> + <source>%n things</source> + <translation> + <numerusform></numerusform> + <numerusform>%n Dinger</numerusform> + </translation> + </message> +</context> +</TS> diff --git a/tests/auto/linguist/lconvert/tst_lconvert.cpp b/tests/auto/linguist/lconvert/tst_lconvert.cpp index bf4ca95109d25ea500361dde96a4bc90b26d40ec..2ff8ea508a0d2e33790e6538982fe9131d898338 100644 --- a/tests/auto/linguist/lconvert/tst_lconvert.cpp +++ b/tests/auto/linguist/lconvert/tst_lconvert.cpp @@ -46,10 +46,8 @@ private slots: void converts(); void roundtrips_data(); void roundtrips(); -#if 0 void chains_data(); void chains(); -#endif void merge(); private: @@ -247,7 +245,6 @@ void tst_lconvert::converts() Q_DECLARE_METATYPE(QList<QStringList>); -#if 0 void tst_lconvert::chains_data() { QTest::addColumn<QString>("inFileName"); @@ -255,6 +252,9 @@ void tst_lconvert::chains_data() QTest::addColumn<QStringList>("stations"); QTest::addColumn<QList<QStringList> >("args"); + QTest::newRow("no-untranslated") << "untranslated.ts" << "untranslated.ts.out" + << QStringList({"ts", "ts"}) + << QList<QStringList>({QStringList("-no-untranslated")}); } void tst_lconvert::chains() @@ -266,7 +266,6 @@ void tst_lconvert::chains() convertChain(inFileName, outFileName, stations, args); } -#endif void tst_lconvert::roundtrips_data() {