本文整理汇总了C++中TranslatorMessage类的典型用法代码示例。如果您正苦于以下问题:C++ TranslatorMessage类的具体用法?C++ TranslatorMessage怎么用?C++ TranslatorMessage使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TranslatorMessage类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: writeComment
static void writeComment(QTextStream *t, const TranslatorMessage &msg, int indent)
{
if (!msg.comment().isEmpty()) {
writeIndent(t, indent);
(*t) << "<note>" << evilBytes(msg.comment(), msg.utf8()) << "</note>\n";
}
}
示例2: makeMsgId
static QString makeMsgId(const TranslatorMessage &msg)
{
QString id = msg.context() + QLatin1String("//") + elidedId(msg.sourceText(), 100);
if (!msg.comment().isEmpty())
id += QLatin1String("//") + elidedId(msg.comment(), 30);
return id;
}
示例3: writeLineNumber
static void writeLineNumber(QTextStream *t, const TranslatorMessage &msg, int indent)
{
if (msg.lineNumber() != -1) {
writeIndent(t, indent);
(*t) << "<context-group name=\"" << contextNameLocation << "\" purpose=\"location\"><context context-type=\"linenumber\">"
<< msg.lineNumber() << "</context></context-group>\n";
}
}
示例4: addIndex
void Translator::addIndex(int idx, const TranslatorMessage &msg) const
{
if (msg.sourceText().isEmpty() && msg.id().isEmpty()) {
m_ctxCmtIdx[msg.context()] = idx;
} else {
m_msgIdx[TMMKey(msg)] = idx;
if (!msg.id().isEmpty())
m_idMsgIdx[msg.id()] = idx;
}
}
示例5: writeComment
static void writeComment(QTextStream &ts, const TranslatorMessage &msg, const QRegExp &drops, int indent)
{
if (!msg.comment().isEmpty()) {
writeIndent(ts, indent);
ts << "<context-group><context context-type=\"" << contextMsgctxt << "\">"
<< protect(msg.comment(), false)
<< "</context></context-group>\n";
}
if (!msg.oldComment().isEmpty()) {
writeIndent(ts, indent);
ts << "<context-group><context context-type=\"" << contextOldMsgctxt << "\">"
<< protect(msg.oldComment(), false)
<< "</context></context-group>\n";
}
writeExtras(ts, indent, msg.extras(), drops);
if (!msg.extraComment().isEmpty()) {
writeIndent(ts, indent);
ts << "<note annotates=\"source\" from=\"developer\">"
<< protect(msg.extraComment()) << "</note>\n";
}
if (!msg.translatorComment().isEmpty()) {
writeIndent(ts, indent);
ts << "<note from=\"translator\">"
<< protect(msg.translatorComment()) << "</note>\n";
}
}
示例6: writeMessage
static void writeMessage(QTextStream *t, const TranslatorMessage &msg, int indent,
const QString &languageCode)
{
static int msgid = 1;
if (msg.isPlural()) {
writeIndent(t, indent);
(*t) << "<group restype=\"" << restypePlurals << "\">\n";
indent+=2;
writeLineNumber(t, msg, indent);
writeComment(t, msg, indent);
QLocale::Language l;
QLocale::Country c;
MetaTranslator::languageAndCountry(languageCode, &l, &c);
QStringList translns = MetaTranslator::normalizedTranslations(msg, l, c);
for (int j = 0; j < qMax(1, translns.count()); ++j) {
writeTransUnit(t, msg, msgid, indent, translns.at(j));
}
indent-=2;
writeIndent(t, indent);
(*t) << "</group>\n";
} else {
writeTransUnit(t, msg, msgid, indent);
}
++msgid;
}
示例7: writeLineNumber
static void writeLineNumber(QTextStream &ts, const TranslatorMessage &msg, int indent)
{
if (msg.lineNumber() == -1)
return;
writeIndent(ts, indent);
ts << "<context-group purpose=\"location\"><context context-type=\"linenumber\">"
<< msg.lineNumber() << "</context></context-group>\n";
foreach (const TranslatorMessage::Reference &ref, msg.extraReferences()) {
writeIndent(ts, indent);
ts << "<context-group purpose=\"location\">";
if (ref.fileName() != msg.fileName())
ts << "<context context-type=\"sourcefile\">" << ref.fileName() << "</context>";
ts << "<context context-type=\"linenumber\">" << ref.lineNumber()
<< "</context></context-group>\n";
}
}
示例8: dataType
static QString dataType(const TranslatorMessage &m)
{
QByteArray fileName = m.fileName().toAscii();
unsigned int extHash = 0;
int pos = fileName.count() - 1;
for (int pass = 0; pass < 4 && pos >=0; ++pass, --pos) {
if (fileName.at(pos) == '.')
break;
extHash |= ((int)fileName.at(pos) << (8*pass));
}
switch (extHash) {
case COMBINE4CHARS(0,'c','p','p'):
case COMBINE4CHARS(0,'c','x','x'):
case COMBINE4CHARS(0,'c','+','+'):
case COMBINE4CHARS(0,'h','p','p'):
case COMBINE4CHARS(0,'h','x','x'):
case COMBINE4CHARS(0,'h','+','+'):
return QLatin1String("cpp");
case COMBINE4CHARS(0, 0 , 0 ,'c'):
case COMBINE4CHARS(0, 0 , 0 ,'h'):
case COMBINE4CHARS(0, 0 ,'c','c'):
case COMBINE4CHARS(0, 0 ,'c','h'):
case COMBINE4CHARS(0, 0 ,'h','h'):
return QLatin1String("c");
case COMBINE4CHARS(0, 0 ,'u','i'):
return QLatin1String(dataTypeUIFile); //### form?
default:
return QLatin1String("plaintext"); // we give up
}
}
示例9: append
void Translator::appendSorted(const TranslatorMessage &msg)
{
int msgLine = msg.lineNumber();
if (msgLine < 0) {
append(msg);
return;
}
int bestIdx = 0; // Best insertion point found so far
int bestScore = 0; // Its category: 0 = no hit, 1 = pre or post, 2 = middle
int bestSize = 0; // The length of the region. Longer is better within one category.
// The insertion point to use should this region turn out to be the best one so far
int thisIdx = 0;
int thisScore = 0;
int thisSize = 0;
// Working vars
int prevLine = 0;
int curIdx = 0;
foreach (const TranslatorMessage &mit, m_messages) {
bool sameFile = mit.fileName() == msg.fileName() && mit.context() == msg.context();
int curLine;
if (sameFile && (curLine = mit.lineNumber()) >= prevLine) {
if (msgLine >= prevLine && msgLine < curLine) {
thisIdx = curIdx;
thisScore = thisSize ? 2 : 1;
}
++thisSize;
prevLine = curLine;
} else {
if (thisSize) {
if (!thisScore) {
thisIdx = curIdx;
thisScore = 1;
}
if (thisScore > bestScore || (thisScore == bestScore && thisSize > bestSize)) {
bestIdx = thisIdx;
bestScore = thisScore;
bestSize = thisSize;
}
thisScore = 0;
thisSize = sameFile ? 1 : 0;
prevLine = 0;
}
}
++curIdx;
}
示例10: while
bool QPHReader::read(Translator &translator)
{
m_currentField = NoField;
QString result;
while (!atEnd()) {
readNext();
if (isStartElement()) {
if (name() == QLatin1String("source")) {
m_currentField = SourceField;
} else if (name() == QLatin1String("target")) {
m_currentField = TargetField;
} else if (name() == QLatin1String("definition")) {
m_currentField = DefinitionField;
} else {
m_currentField = NoField;
if (name() == QLatin1String("QPH")) {
QXmlStreamAttributes atts = attributes();
translator.setLanguageCode(atts.value(QLatin1String("language")).toString());
translator.setSourceLanguageCode(atts.value(QLatin1String("sourcelanguage")).toString());
}
}
} else if (isWhiteSpace()) {
// ignore these
} else if (isCharacters()) {
if (m_currentField == SourceField)
m_currentSource += text();
else if (m_currentField == TargetField)
m_currentTarget += text();
else if (m_currentField == DefinitionField)
m_currentDefinition += text();
} else if (isEndElement() && name() == QLatin1String("phrase")) {
m_currentTarget.replace(QChar(Translator::TextVariantSeparator),
QChar(Translator::BinaryVariantSeparator));
TranslatorMessage msg;
msg.setSourceText(m_currentSource);
msg.setTranslation(m_currentTarget);
msg.setComment(m_currentDefinition);
translator.append(msg);
m_currentSource.clear();
m_currentTarget.clear();
m_currentDefinition.clear();
}
}
return true;
}
示例11: find
void Translator::extend(const TranslatorMessage &msg)
{
int index = find(msg);
if (index == -1) {
append(msg);
} else {
TranslatorMessage &emsg = m_messages[index];
emsg.addReferenceUniq(msg.fileName(), msg.lineNumber());
if (!msg.extraComment().isEmpty()) {
QString cmt = emsg.extraComment();
if (!cmt.isEmpty())
cmt.append(QLatin1String("\n----------\n"));
cmt.append(msg.extraComment());
emsg.setExtraComment(cmt);
}
if (msg.isUtf8() != emsg.isUtf8()) {
emsg.setUtf8(true);
emsg.setNonUtf8(true);
}
}
}
示例12: writeMessage
static void writeMessage(QTextStream &ts, const TranslatorMessage &msg, const QRegExp &drops, int indent)
{
if (msg.isPlural()) {
writeIndent(ts, indent);
ts << "<group restype=\"" << restypePlurals << "\"";
if (!msg.id().isEmpty())
ts << " id=\"" << msg.id() << "\"";
if (msg.type() == TranslatorMessage::Obsolete)
ts << " translate=\"no\"";
ts << ">\n";
++indent;
writeLineNumber(ts, msg, indent);
writeComment(ts, msg, drops, indent);
writeTransUnits(ts, msg, drops, indent);
--indent;
writeIndent(ts, indent);
ts << "</group>\n";
} else {
writeTransUnits(ts, msg, drops, indent);
}
}
示例13: writeTransUnit
static void writeTransUnit(QTextStream *t, const TranslatorMessage &msg, int msgid,
int indent, const QString &translation = QString())
{
static int plural = 0;
static int prevMsgId = -1;
writeIndent(t, indent);
(*t) << "<trans-unit id=\"msg";
QString strid;
QByteArray transl;
if (msg.isPlural()) {
if (prevMsgId != msgid)
plural = 0;
strid = QString::fromAscii("%1[%2]").arg(msgid).arg(plural);
++plural;
transl = translation.toUtf8();
} else {
strid = QString::fromAscii("%1").arg(msgid);
plural = 0;
transl = msg.translation().toUtf8();
}
prevMsgId = msgid;
(*t) << strid << "\"";
QString state;
indent+=2;
if (msg.type() == TranslatorMessage::Obsolete) {
(*t) << " translate=\"no\"";
} else {
state = msg.type() == TranslatorMessage::Finished
? QLatin1String("final") : QLatin1String("new");
state = QString::fromAscii(" state=\"%1\"").arg(state);
}
(*t) << ">\n";
writeIndent(t, indent);
(*t) << "<source xml:space=\"preserve\">" << evilBytes(msg.sourceText(), msg.utf8()) << "</source>\n";
writeIndent(t, indent);
(*t) << "<target xml:space=\"preserve\"" << state << ">" << evilBytes2(transl, msg.utf8()) << "</target>\n";
// ### In XLIFF 1.1, name is marked as required, and it must be unique
// This is questionable behaviour, and was brought up at the xliff-comments mailinglist.
if (!msg.isPlural()) {
writeLineNumber(t, msg, indent);
writeComment(t, msg, indent);
}
indent-=2;
writeIndent(t, indent);
(*t) << "</trans-unit>\n";
}
示例14: while
bool QPHReader::read(Translator &translator)
{
m_currentField = NoField;
QString result;
while (!atEnd()) {
readNext();
if (isStartElement()) {
if (name() == QLatin1String("source"))
m_currentField = SourceField;
else if (name() == QLatin1String("target"))
m_currentField = TargetField;
else if (name() == QLatin1String("definition"))
m_currentField = DefinitionField;
else
m_currentField = NoField;
} else if (isWhiteSpace()) {
// ignore these
} else if (isCharacters()) {
if (m_currentField == SourceField)
m_currentSource += text();
else if (m_currentField == TargetField)
m_currentTarget += text();
else if (m_currentField == DefinitionField)
m_currentDefinition += text();
} else if (isEndElement() && name() == QLatin1String("phrase")) {
TranslatorMessage msg;
msg.setSourceText(m_currentSource);
msg.setTranslation(m_currentTarget);
msg.setTranslatorComment(m_currentDefinition);
translator.append(msg);
m_currentSource.clear();
m_currentTarget.clear();
m_currentDefinition.clear();
}
}
return true;
}
示例15: STRING
bool TSReader::read(Translator &translator)
{
STRING(both);
STRING(byte);
STRING(comment);
STRING(context);
STRING(defaultcodec);
STRING(encoding);
STRING(extracomment);
STRING(filename);
STRING(id);
STRING(language);
STRING(line);
STRING(location);
STRING(message);
STRING(name);
STRING(numerus);
STRING(numerusform);
STRING(obsolete);
STRING(oldcomment);
STRING(oldsource);
STRING(source);
STRING(sourcelanguage);
STRING(translation);
STRING(translatorcomment);
STRING(true);
STRING(TS);
STRING(type);
STRING(unfinished);
STRING(userdata);
STRING(utf8);
STRING(value);
//STRING(version);
STRING(yes);
static const QString strextrans(QLatin1String("extra-"));
static const QString strUtf8(QLatin1String("UTF-8"));
while (!atEnd()) {
readNext();
if (isStartDocument()) {
// <!DOCTYPE TS>
//qDebug() << attributes();
} else if (isEndDocument()) {
// <!DOCTYPE TS>
//qDebug() << attributes();
} else if (isDTD()) {
// <!DOCTYPE TS>
//qDebug() << tokenString();
} else if (elementStarts(strTS)) {
// <TS>
//qDebug() << "TS " << attributes();
QHash<QString, int> currentLine;
QString currentFile;
QXmlStreamAttributes atts = attributes();
//QString version = atts.value(strversion).toString();
translator.setLanguageCode(atts.value(strlanguage).toString());
translator.setSourceLanguageCode(atts.value(strsourcelanguage).toString());
while (!atEnd()) {
readNext();
if (isEndElement()) {
// </TS> found, finish local loop
break;
} else if (isWhiteSpace()) {
// ignore these, just whitespace
} else if (elementStarts(strdefaultcodec)) {
// <defaultcodec>
const QString &codec = readElementText();
if (!codec.isEmpty())
translator.setCodecName(codec.toLatin1());
// </defaultcodec>
} else if (isStartElement()
&& name().toString().startsWith(strextrans)) {
// <extra-...>
QString tag = name().toString();
translator.setExtra(tag.mid(6), readContents());
// </extra-...>
} else if (elementStarts(strcontext)) {
// <context>
QString context;
while (!atEnd()) {
readNext();
if (isEndElement()) {
// </context> found, finish local loop
break;
} else if (isWhiteSpace()) {
// ignore these, just whitespace
} else if (elementStarts(strname)) {
// <name>
context = readElementText();
// </name>
} else if (elementStarts(strmessage)) {
// <message>
TranslatorMessage::References refs;
QString currentMsgFile = currentFile;
TranslatorMessage msg;
msg.setId(attributes().value(strid).toString());
msg.setContext(context);
//.........这里部分代码省略.........