summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/linguist/lconvert/main.cpp7
-rw-r--r--src/linguist/shared/translator.cpp10
-rw-r--r--src/linguist/shared/translator.h1
-rw-r--r--tests/auto/linguist/lconvert/data/untranslated.ts25
-rw-r--r--tests/auto/linguist/lconvert/data/untranslated.ts.out20
-rw-r--r--tests/auto/linguist/lconvert/tst_lconvert.cpp7
6 files changed, 66 insertions, 4 deletions
diff --git a/src/linguist/lconvert/main.cpp b/src/linguist/lconvert/main.cpp
index 4e26adbbb..2dc07db51 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 9ef717426..5b0538d4e 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 57a154008..8919a13df 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 000000000..89007df26
--- /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 000000000..6244f9db8
--- /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 bf4ca9510..2ff8ea508 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()
{