std::string lggHunSpell_Wrapper::dictName2FullName(std::string dictName) { if (dictName.empty()) { return dictName; } std::string countryCode(""); std::string languageCode(""); //remove extension dictName = dictName.substr(0,dictName.find(".")); //break it up by - or _ S32 breakPoint = dictName.find("-"); if (breakPoint == std::string::npos) { breakPoint = dictName.find("_"); } if (breakPoint == std::string::npos) { //no country code given languageCode = dictName; } else { languageCode = dictName.substr(0,breakPoint); countryCode = dictName.substr(breakPoint+1); } //get long language code for (int i = 0; i<LANGUAGE_CODES_RAW_SIZE; i++) { if (0 == LLStringUtil::compareInsensitive(languageCode, std::string(languageCodesraw[i]))) { languageCode = languageCodesraw[i+1]; break; } } //get long country code if (!countryCode.empty()) { for (int i =0; i<COUNTRY_CODES_RAW_SIZE; i++) { //llinfos << i << llendl; if (0 == LLStringUtil::compareInsensitive(countryCode, std::string(countryCodesraw[i]))) { countryCode = countryCodesraw[i+1]; break; } } countryCode = " (" + countryCode + ")"; } return std::string(languageCode+countryCode); }
std::string lggHunSpell_Wrapper::fullName2DictName(std::string fullName) { std::string countryCode(""); std::string languageCode(""); S32 breakPoint = fullName.find(" ("); if (breakPoint == std::string::npos) { languageCode = fullName; } else { languageCode = fullName.substr(0, breakPoint); countryCode = fullName.substr(breakPoint+2, fullName.length()-3-breakPoint); } //get long language code for (int i = 1; i<LANGUAGE_CODES_RAW_SIZE; i+=2) { //llinfos << i << llendl; if (0 == LLStringUtil::compareInsensitive(languageCode, std::string(languageCodesraw[i]))) { languageCode = std::string(languageCodesraw[i-1]); break; } } //get long country code std::string toReturn = languageCode; if (!countryCode.empty()) { for (int i = 1; i<COUNTRY_CODES_RAW_SIZE; i+=2) { //llinfos << i << " comparing " <<countryCode<<" and "<<std::string(countryCodesraw[i]).c_str()<< llendl; if (0 == LLStringUtil::compareInsensitive(countryCode, std::string(countryCodesraw[i]))) { countryCode = std::string(countryCodesraw[i-1]); break; } } toReturn += "_" + countryCode; } LLStringUtil::toLower(toReturn); return toReturn; }
bool MetaTranslator::save( const QString& filename ) const { QFile f( filename ); if ( !f.open(QIODevice::WriteOnly) ) return false; QTextStream t( &f ); t.setCodec( QTextCodec::codecForName("ISO-8859-1") ); //### The xml prolog allows processors to easily detect the correct encoding t << "<?xml version=\"1.0\""; t << " encoding=\"utf-8\""; t << "?>\n<!DOCTYPE TS><TS version=\"1.1\""; if (!languageCode().isEmpty() && languageCode() != QLatin1String("C")) t << " language=\"" << languageCode() << "\""; t << ">\n"; if ( codecName != "ISO-8859-1" ) t << "<defaultcodec>" << codecName << "</defaultcodec>\n"; TMM::ConstIterator m = mm.begin(); while ( m != mm.end() ) { TMMInv inv; TMMInv::Iterator i; bool contextIsUtf8 = m.key().utf8(); QByteArray context = m.key().context(); QByteArray comment = ""; do { if (QByteArray(m.key().sourceText()) == ContextComment) { if ( m.key().type() != MetaTranslatorMessage::Obsolete ) { contextIsUtf8 = m.key().utf8(); comment = QByteArray(m.key().comment()); } } else { inv.insert( *m, m.key() ); } } while ( ++m != mm.end() && QByteArray(m.key().context()) == context ); if ( inv.isEmpty() ) continue; t << "<context"; if ( contextIsUtf8 ) t << " encoding=\"UTF-8\""; t << ">\n"; t << " <name>" << evilBytes( context, contextIsUtf8 ) << "</name>\n"; if ( !comment.isEmpty() ) t << " <comment>" << evilBytes( comment, contextIsUtf8 ) << "</comment>\n"; for ( i = inv.begin(); i != inv.end(); ++i ) { MetaTranslatorMessage msg = *i; // no need for such noise if ( msg.type() == MetaTranslatorMessage::Obsolete && msg.translation().isEmpty() ) continue; t << " <message"; if ( msg.utf8() ) t << " encoding=\"UTF-8\""; if ( msg.isPlural() ) t << " numerus=\"yes\""; t << ">\n"; if (!msg.fileName().isEmpty() && msg.lineNumber() >= 0) { QDir tsPath = QFileInfo(filename).absoluteDir(); QString fn = tsPath.relativeFilePath(msg.fileName()).replace('\\','/'); t << " <location filename=\"" << fn << "\" line=\"" << msg.lineNumber() << "\"/>\n"; } t << " <source>" << evilBytes( msg.sourceText(), msg.utf8() ) << "</source>\n"; if ( !QByteArray(msg.comment()).isEmpty() ) t << " <comment>" << evilBytes( msg.comment(), msg.utf8() ) << "</comment>\n"; if ( !QByteArray(msg.translatorComment()).isEmpty() ) t << " <translatorcomment>" << evilBytes( msg.translatorComment(), msg.utf8() ) << "</translatorcomment>\n"; t << " <translation"; if ( msg.type() == MetaTranslatorMessage::Unfinished ) t << " type=\"unfinished\""; else if ( msg.type() == MetaTranslatorMessage::Obsolete ) t << " type=\"obsolete\""; if (msg.isPlural()) { t << ">\n"; QLocale::Language l; QLocale::Country c; languageAndCountry(m_language, &l, &c); QStringList translns = normalizedTranslations(msg, l, c); for (int j = 0; j < qMax(1, translns.count()); ++j) { const QString &transln = translns.value(j); t << " <numerusform"; if ( transln.contains( VARIANT_DELIMITER ) ) saveLengthVariants( t, " ", transln ); else t << ">" << protect( transln.toUtf8() ) << "</numerusform>\n"; } t << " "; } else { if ( msg.translation().contains( VARIANT_DELIMITER ) ) saveLengthVariants( t, " ", msg.translation() ); else t << ">" << protect( msg.translation().toUtf8() ); } t << "</translation>\n"; t << " </message>\n"; } t << "</context>\n"; } t << "</TS>\n"; f.close(); return true; }
bool MetaTranslator::saveXLIFF( const QString& filename) const { QFile f( filename ); if ( !f.open(QIODevice::WriteOnly | QIODevice::Text) ) return false; int indent = 2; int currentindent = 0; QTextStream t( &f ); t.setCodec( QTextCodec::codecForName("ISO-8859-1") ); QMap<QString, TranslatorMessage> mtSortByFileName; TMM::ConstIterator m = mm.begin(); while ( m != mm.end() ) { TranslatorMessage msg = m.key(); QString location = msg.fileName() + QLatin1String(msg.context()) + QString::number(msg.lineNumber()); mtSortByFileName.insertMulti(location, msg); ++m; } t.setFieldAlignment(QTextStream::AlignRight); t << "<?xml version=\"1.0\""; t << " encoding=\"utf-8\"?>\n"; t << "<xliff version=\"1.1\" xmlns=\"" << XLIFF11namespaceURI << "\">\n"; currentindent += indent; QMap<QString, TranslatorMessage>::iterator mi = mtSortByFileName.begin(); TranslatorMessage msg; QByteArray ctx; QString fn; bool ctxdiffer = false; bool filediffer = false; while (mi != mtSortByFileName.end()) { msg = mi.value(); ctxdiffer = msg.context() != ctx; filediffer = msg.fileName() != fn; if (ctxdiffer || filediffer) { if (!ctx.isEmpty()) { writeIndent(&t, currentindent); t << "</group>\n"; currentindent -= indent; } } if (filediffer) { if (!fn.isEmpty()) { writeIndent(&t, currentindent); t << "</body></file>\n"; currentindent -= indent; } fn = msg.fileName(); writeIndent(&t, currentindent); t << "<file original=\"" << fn << "\"" << " datatype=\"" << dataType(msg) << "\"" << " source-language=\"" << "en" << "\"" //### << " target-language=\"" << languageCode() << "\"" << "><body>\n"; currentindent += indent; } if (ctxdiffer || filediffer) { ctx = msg.context(); writeIndent(&t, currentindent); t << "<group restype=\"" << restypeContext << "\"" << " resname=\"" << evilBytes(ctx, msg.utf8()) << "\"" << ">\n"; currentindent += indent; } writeMessage(&t, msg, currentindent, m_language); ++mi; } currentindent-=indent; writeIndent(&t, currentindent); t << "</group>\n"; currentindent-=indent; writeIndent(&t, currentindent); t << "</body></file>\n"; t << "</xliff>\n"; f.close(); return true; }