84 UpdateOptions options, QString &err)
89 int similarTextHeuristicCount = 0;
92 outTor.setLanguageCode(tor.languageCode());
93 outTor.setSourceLanguageCode(tor.sourceLanguageCode());
97
98
99
100 for (TranslatorMessage m : tor.messages()) {
101 TranslatorMessage::Type newType = TranslatorMessage::Finished;
104 TranslatorMessage::ExtraData extras;
105 const TranslatorMessage *mv;
106 int mvi = virginTor.find(m);
108 if (!(options & HeuristicSimilarText)) {
111 case TranslatorMessage::Finished:
112 newType = TranslatorMessage::Vanished;
115 case TranslatorMessage::Unfinished:
116 newType = TranslatorMessage::Obsolete;
125 mvi = virginTor.find(m.context(), m.comment(), m.allReferences());
130 mv = &virginTor.constMessage(mvi);
135 if (getSimilarityScore(m.sourceText(), mv->sourceText()) < textSimilarityThreshold) {
141 extras = mv->extras();
145 newType = TranslatorMessage::Unfinished;
146 ++similarTextHeuristicCount;
151 mv = &virginTor.message(mvi);
152 extras = mv->extras();
153 if (!mv->id().isEmpty()
154 && (mv->context() != m.context()
155 || mv->sourceText() != m.sourceText()
156 || mv->comment() != m.comment())) {
158 newType = TranslatorMessage::Unfinished;
159 m.setContext(mv->context());
160 m.setComment(mv->comment());
161 if (mv->sourceText() != m.sourceText()) {
163 m.setOldSourceText(m.sourceText());
164 m.setSourceText(mv->sourceText());
165 const QString &oldpluralsource = m.extra(
"po-msgid_plural"_L1);
166 if (!oldpluralsource.isEmpty())
167 extras.insert(
"po-old_msgid_plural"_L1, oldpluralsource);
171 case TranslatorMessage::Finished:
173 if (m.isPlural() == mv->isPlural()) {
174 newType = TranslatorMessage::Finished;
176 newType = TranslatorMessage::Unfinished;
180 case TranslatorMessage::Unfinished:
181 newType = TranslatorMessage::Unfinished;
184 case TranslatorMessage::Vanished:
185 newType = TranslatorMessage::Finished;
188 case TranslatorMessage::Obsolete:
189 newType = TranslatorMessage::Unfinished;
200 m.setReferences(mv->allReferences());
201 m.setPlural(mv->isPlural());
203 m.setExtraComment(mv->extraComment());
205 m.setLabel(mv->label());
214
215
216
217 for (
const TranslatorMessage &mv : virginTor.messages()) {
219 if (tor.find(mv) >= 0)
221 if (options & HeuristicSimilarText) {
222 int mi = tor.find(mv.context(), mv.comment(), mv.allReferences());
226 if (virginTor.find(tor.constMessage(mi)) < 0) {
227 if (getSimilarityScore(tor.constMessage(mi).sourceText(), mv.sourceText())
228 >= textSimilarityThreshold)
234 outTor.appendSorted(mv);
239
240
241 for (
const Translator &alf : aliens) {
242 for (TranslatorMessage mv : alf.messages()) {
243 if (mv.sourceText().isEmpty() || !mv.isTranslated())
245 int mvi = outTor.find(mv);
247 TranslatorMessage &tm = outTor.message(mvi);
248 if (tm.type() != TranslatorMessage::Finished && !tm.isTranslated()) {
249 tm.setTranslations(mv.translations());
255
256
257
259
260
261
262 mv.clearReferences();
263 mv.setType(mv.type() == TranslatorMessage::Finished
264 ? TranslatorMessage::Vanished : TranslatorMessage::Obsolete);
265 outTor.appendSorted(mv);
273
274
275
279 int totalFound = neww + known;
280 err += QStringLiteral(
" Found %1 source text(s) (%2 new and %3 already existing)\n")
281 .arg(totalFound).arg(neww).arg(known);
285 err += QStringLiteral(
" Removed %1 obsolete entries\n").arg(obsoleted);
287 err += QStringLiteral(
" Kept %1 obsolete entries\n").arg(obsoleted);
291 if (sameTextHeuristicCount)
292 err += QStringLiteral(
" Same-text heuristic provided %1 translation(s)\n")
293 .arg(sameTextHeuristicCount);
294 if (similarTextHeuristicCount)
295 err += QStringLiteral(
" Similar-text heuristic provided %1 translation(s)\n")
296 .arg(similarTextHeuristicCount);