83 UpdateOptions options, QString &err)
88 int similarTextHeuristicCount = 0;
91 outTor.setLanguageCode(tor.languageCode());
92 outTor.setSourceLanguageCode(tor.sourceLanguageCode());
96
97
98
99 for (TranslatorMessage m : tor.messages()) {
100 TranslatorMessage::Type newType = TranslatorMessage::Finished;
103 TranslatorMessage::ExtraData extras;
104 const TranslatorMessage *mv;
105 int mvi = virginTor.find(m);
107 if (!(options & HeuristicSimilarText)) {
110 case TranslatorMessage::Finished:
111 newType = TranslatorMessage::Vanished;
114 case TranslatorMessage::Unfinished:
115 newType = TranslatorMessage::Obsolete;
124 mvi = virginTor.find(m.context(), m.comment(), m.allReferences());
129 mv = &virginTor.constMessage(mvi);
134 if (getSimilarityScore(m.sourceText(), mv->sourceText()) < textSimilarityThreshold) {
140 extras = mv->extras();
144 newType = TranslatorMessage::Unfinished;
145 ++similarTextHeuristicCount;
150 mv = &virginTor.message(mvi);
151 extras = mv->extras();
152 if (!mv->id().isEmpty()
153 && (mv->context() != m.context()
154 || mv->sourceText() != m.sourceText()
155 || mv->comment() != m.comment())) {
157 newType = TranslatorMessage::Unfinished;
158 m.setContext(mv->context());
159 m.setComment(mv->comment());
160 if (mv->sourceText() != m.sourceText()) {
162 m.setOldSourceText(m.sourceText());
163 m.setSourceText(mv->sourceText());
164 const QString &oldpluralsource = m.extra(
"po-msgid_plural"_L1);
165 if (!oldpluralsource.isEmpty())
166 extras.insert(
"po-old_msgid_plural"_L1, oldpluralsource);
170 case TranslatorMessage::Finished:
172 if (m.isPlural() == mv->isPlural()) {
173 newType = TranslatorMessage::Finished;
175 newType = TranslatorMessage::Unfinished;
179 case TranslatorMessage::Unfinished:
180 newType = TranslatorMessage::Unfinished;
183 case TranslatorMessage::Vanished:
184 newType = TranslatorMessage::Finished;
187 case TranslatorMessage::Obsolete:
188 newType = TranslatorMessage::Unfinished;
199 m.setReferences(mv->allReferences());
200 m.setPlural(mv->isPlural());
202 m.setExtraComment(mv->extraComment());
204 m.setLabel(mv->label());
213
214
215
216 for (
const TranslatorMessage &mv : virginTor.messages()) {
218 if (tor.find(mv) >= 0)
220 if (options & HeuristicSimilarText) {
221 int mi = tor.find(mv.context(), mv.comment(), mv.allReferences());
225 if (virginTor.find(tor.constMessage(mi)) < 0) {
226 if (getSimilarityScore(tor.constMessage(mi).sourceText(), mv.sourceText())
227 >= textSimilarityThreshold)
233 outTor.appendSorted(mv);
238
239
240 for (
const Translator &alf : aliens) {
241 for (TranslatorMessage mv : alf.messages()) {
242 if (mv.sourceText().isEmpty() || !mv.isTranslated())
244 int mvi = outTor.find(mv);
246 TranslatorMessage &tm = outTor.message(mvi);
247 if (tm.type() != TranslatorMessage::Finished && !tm.isTranslated()) {
248 tm.setTranslations(mv.translations());
254
255
256
258
259
260
261 mv.clearReferences();
262 mv.setType(mv.type() == TranslatorMessage::Finished
263 ? TranslatorMessage::Vanished : TranslatorMessage::Obsolete);
264 outTor.appendSorted(mv);
272
273
274
278 int totalFound = neww + known;
279 err += QStringLiteral(
" Found %1 source text(s) (%2 new and %3 already existing)\n")
280 .arg(totalFound).arg(neww).arg(known);
284 err += QStringLiteral(
" Removed %1 obsolete entries\n").arg(obsoleted);
286 err += QStringLiteral(
" Kept %1 obsolete entries\n").arg(obsoleted);
290 if (sameTextHeuristicCount)
291 err += QStringLiteral(
" Same-text heuristic provided %1 translation(s)\n")
292 .arg(sameTextHeuristicCount);
293 if (similarTextHeuristicCount)
294 err += QStringLiteral(
" Similar-text heuristic provided %1 translation(s)\n")
295 .arg(similarTextHeuristicCount);