static bool saveQPH(const Translator &translator, QIODevice &dev, ConversionData &) { QTextStream t(&dev); t.setCodec(QTextCodec::codecForName("UTF-8")); t << "<!DOCTYPE QPH>\n<QPH"; QString languageCode = translator.languageCode(); if (!languageCode.isEmpty() && languageCode != QLatin1String("C")) t << " language=\"" << languageCode << "\""; languageCode = translator.sourceLanguageCode(); if (!languageCode.isEmpty() && languageCode != QLatin1String("C")) t << " sourcelanguage=\"" << languageCode << "\""; t << ">\n"; foreach (const TranslatorMessage &msg, translator.messages()) { t << "<phrase>\n"; t << " <source>" << protect(msg.sourceText()) << "</source>\n"; QString str = msg.translations().join(QLatin1String("@")); str.replace(QChar(Translator::BinaryVariantSeparator), QChar(Translator::TextVariantSeparator)); t << " <target>" << protect(str) << "</target>\n"; if (!msg.comment().isEmpty()) t << " <definition>" << protect(msg.comment()) << "</definition>\n"; t << "</phrase>\n"; } t << "</QPH>\n"; return true; }
static bool saveQPH(const Translator &translator, QIODevice &dev, ConversionData &) { QTextStream t(&dev); t.setCodec(QTextCodec::codecForName("UTF-8")); t << "<!DOCTYPE QPH>\n<QPH>\n"; foreach (const TranslatorMessage &msg, translator.messages()) { t << "<phrase>\n"; t << " <source>" << protect(msg.sourceText()) << "</source>\n"; t << " <target>" << protect(msg.translations().join(QLatin1String("@"))) << "</target>\n"; if (!msg.context().isEmpty() || !msg.comment().isEmpty()) t << " <definition>" << msg.context() << msg.comment() << "</definition>\n"; t << "</phrase>\n"; } t << "</QPH>\n"; return true; }
bool saveXLIFF(const Translator &translator, QIODevice &dev, ConversionData &cd) { bool ok = true; int indent = 0; QTextStream ts(&dev); ts.setCodec(QTextCodec::codecForName("UTF-8")); QStringList dtgs = cd.dropTags(); dtgs << QLatin1String("po-(old_)?msgid_plural"); QRegExp drops(dtgs.join(QLatin1String("|"))); QHash<QString, QHash<QString, QList<TranslatorMessage> > > messageOrder; QHash<QString, QList<QString> > contextOrder; QList<QString> fileOrder; foreach (const TranslatorMessage &msg, translator.messages()) { QString fn = msg.fileName(); if (fn.isEmpty() && msg.type() == TranslatorMessage::Obsolete) fn = QLatin1String(MAGIC_OBSOLETE_REFERENCE); QHash<QString, QList<TranslatorMessage> > &file = messageOrder[fn]; if (file.isEmpty()) fileOrder.append(fn); QList<TranslatorMessage> &context = file[msg.context()]; if (context.isEmpty()) contextOrder[fn].append(msg.context()); context.append(msg); } ts.setFieldAlignment(QTextStream::AlignRight); ts << "<?xml version=\"1.0\""; ts << " encoding=\"utf-8\"?>\n"; ts << "<xliff version=\"1.2\" xmlns=\"" << XLIFF12namespaceURI << "\" xmlns:trolltech=\"" << TrollTsNamespaceURI << "\">\n"; ++indent; writeExtras(ts, indent, translator.extras(), drops); QString sourceLanguageCode = translator.sourceLanguageCode(); if (sourceLanguageCode.isEmpty() || sourceLanguageCode == QLatin1String("C")) sourceLanguageCode = QLatin1String("en"); else sourceLanguageCode.replace(QLatin1Char('_'), QLatin1Char('-')); QString languageCode = translator.languageCode(); languageCode.replace(QLatin1Char('_'), QLatin1Char('-')); foreach (const QString &fn, fileOrder) { writeIndent(ts, indent); ts << "<file original=\"" << fn << "\"" << " datatype=\"" << dataType(messageOrder[fn].begin()->first()) << "\"" << " source-language=\"" << sourceLanguageCode.toLatin1() << "\"" << " target-language=\"" << languageCode.toLatin1() << "\"" << "><body>\n"; ++indent; foreach (const QString &ctx, contextOrder[fn]) { if (!ctx.isEmpty()) { writeIndent(ts, indent); ts << "<group restype=\"" << restypeContext << "\"" << " resname=\"" << protect(ctx) << "\">\n"; ++indent; } foreach (const TranslatorMessage &msg, messageOrder[fn][ctx]) writeMessage(ts, msg, drops, indent); if (!ctx.isEmpty()) { --indent; writeIndent(ts, indent); ts << "</group>\n"; } } --indent; writeIndent(ts, indent); ts << "</body></file>\n"; }