bool evaluateProFile(const QString &fileName, bool verbose, QHash<QByteArray, QStringList> *varMap) { QFileInfo fi(fileName); if (!fi.exists()) return false; ProFile pro(fi.absoluteFilePath()); ProFileEvaluator visitor; visitor.setVerbose(verbose); if (!visitor.queryProFile(&pro)) return false; if (!visitor.accept(&pro)) return false; evaluateProFile(visitor, varMap, fi.absolutePath()); return true; }
int main(int argc, char **argv) { QCoreApplication app(argc, argv); QStringList args = app.arguments(); QTranslator translator; if (translator.load(QLatin1String("lrelease_") + QLocale::system().name())) app.installTranslator(&translator); bool verbose = true; // the default is true starting with Qt 4.2 bool ignoreUnfinished = false; // the default mode is SaveEverything starting with Qt 4.2 TranslatorSaveMode mode = SaveEverything; bool removeIdentical = false; Translator tor; QString outputFile; int numFiles = 0; for (int i = 1; i < argc; ++i) { if (args[i] == QLatin1String("-compress")) { mode = SaveStripped; continue; } else if (args[i] == QLatin1String("-nocompress")) { mode = SaveEverything; continue; } else if (args[i] == QLatin1String("-removeidentical")) { removeIdentical = true; continue; } else if (args[i] == QLatin1String("-nounfinished")) { ignoreUnfinished = true; continue; } else if (args[i] == QLatin1String("-silent")) { verbose = false; continue; } else if (args[i] == QLatin1String("-verbose")) { verbose = true; continue; } else if (args[i] == QLatin1String("-version")) { printOut(QCoreApplication::tr( "lrelease version %1\n").arg(QLatin1String(QT_VERSION_STR)) ); return 0; } else if (args[i] == QLatin1String("-qm")) { if (i == argc - 1) { printUsage(); return 1; } i++; outputFile = args[i]; } else if (args[i] == QLatin1String("-help")) { printUsage(); return 0; } else if (args[i][0] == QLatin1Char('-')) { printUsage(); return 1; } else { numFiles++; } } if (numFiles == 0) { printUsage(); return 1; } for (int i = 1; i < argc; ++i) { if (args[i][0] == QLatin1Char('-') || args[i] == outputFile) continue; if (args[i].endsWith(QLatin1String(".pro"), Qt::CaseInsensitive) || args[i].endsWith(QLatin1String(".pri"), Qt::CaseInsensitive)) { QHash<QByteArray, QStringList> varMap; bool ok = evaluateProFile(args[i], verbose, &varMap ); if (ok) { QStringList translations = varMap.value("TRANSLATIONS"); if (translations.isEmpty()) { qWarning("lrelease warning: Met no 'TRANSLATIONS' entry in" " project file '%s'\n", qPrintable(args[i])); } else { foreach (const QString &trans, translations) if (!releaseTsFile(trans, verbose, ignoreUnfinished, removeIdentical, mode)) return 1; } } else { qWarning("error: lrelease encountered project file functionality that is currently not supported.\n" "You might want to consider using .ts files as input instead of a project file.\n" "Try the following syntax:\n" " lrelease [options] ts-files [-qm qm-file]\n"); } } else {
int LupdateApplication::start() { QStringList argv = arguments(); int argc = argv.count(); QString defaultContext; // This was QLatin1String("@default") before. MetaTranslator fetchedTor; QByteArray codecForTr; QByteArray codecForSource; QStringList tsFileNames; QStringList proFiles; QStringList sourceFiles; bool verbose = true; // verbose is on by default starting with Qt 4.2 bool noObsolete = false; bool onlyPlural = false; int numFiles = 0; bool standardSyntax = true; bool metTsFlag = false; QString extensions = m_defaultExtensions; QStringList extensionsNameFilters; int i; for ( i = 1; i < argc; i++ ) { if ( argv.at(i) == QLatin1String("-ts") ) standardSyntax = false; } for ( i = 1; i < argc; i++ ) { QString arg = argv.at(i); if ( arg == QLatin1String("-help") || arg == QLatin1String("--help") || arg == QLatin1String("-h")) { printUsage(); return 0; } else if ( arg == QLatin1String("-pluralonly") ) { onlyPlural = true; continue; } else if ( arg == QLatin1String("-noobsolete") ) { noObsolete = true; continue; } else if ( arg == QLatin1String("-silent") ) { verbose = false; continue; } else if ( arg == QLatin1String("-verbose") ) { verbose = true; continue; } else if ( arg == QLatin1String("-version") ) { Console::out(tr("lupdate version %1\n").arg(QLatin1String(QT_VERSION_STR)) ); return 0; } else if ( arg == QLatin1String("-ts") ) { metTsFlag = true; continue; } else if ( arg == QLatin1String("-extensions") ) { ++i; if (i == argc) { qWarning("The -extensions option should be followed by an extension list."); return 1; } extensions = argv.at(i); continue; } numFiles++; QString fullText; if ( standardSyntax && !metTsFlag ) { QFile f( arg ); if ( !f.open(QIODevice::ReadOnly) ) { #if defined(_MSC_VER) && _MSC_VER >= 1400 char buf[100]; strerror_s(buf, sizeof(buf), errno); qWarning("lupdate error: Cannot open file '%s': %s\n", qPrintable(arg), buf ); #else qWarning("lupdate error: Cannot open file '%s': %s\n", qPrintable(arg), strerror(errno) ); #endif return 1; } f.close(); } codecForTr.clear(); codecForSource.clear(); if (metTsFlag) { if ( arg.endsWith(QLatin1String(".ts"), Qt::CaseInsensitive) || arg.endsWith(QLatin1String(".xlf"), Qt::CaseInsensitive)) { QFileInfo fi( arg ); if ( !fi.exists() || fi.isWritable() ) { tsFileNames.append( QFileInfo(arg).absoluteFilePath() ); } else { qWarning("lupdate warning: For some reason, I cannot save '%s'\n", qPrintable(arg) ); } } else { qWarning("lupdate error: File '%s' lacks .ts or .xlf extension\n", qPrintable(arg) ); } } else if (arg.endsWith(QLatin1String(".pro"), Qt::CaseInsensitive)) { proFiles << arg; } else { QFileInfo fi(arg); if (fi.isDir()) { if ( verbose ) Console::out(tr("Scanning directory '%1'...\n").arg(arg)); QDir dir = QDir(fi.filePath()); if (extensionsNameFilters.isEmpty()) { extensions = extensions.trimmed(); // Remove the potential dot in front of each extension if (extensions.startsWith(QLatin1Char('.'))) extensions.remove(0,1); extensions.replace(QLatin1String(",."), QLatin1String(",")); extensions.insert(0, QLatin1String("*.")); extensions.replace(QLatin1Char(','), QLatin1String(",*.")); extensionsNameFilters = extensions.split(QLatin1Char(',')); } QDir::Filters filters = QDir::Files | QDir::NoSymLinks; QFileInfoList fileinfolist; recursiveFileInfoList(dir, extensionsNameFilters, filters, true, &fileinfolist); QFileInfoList::iterator ii; QString fn; for (ii = fileinfolist.begin(); ii != fileinfolist.end(); ++ii) { // Make sure the path separator is stored with '/' in the ts file fn = ii->canonicalFilePath().replace(QLatin1Char('\\'),QLatin1Char('/')); #ifdef LINGUIST_DEBUG qDebug() << fn; #endif sourceFiles << fn; } }else{ sourceFiles << fi.canonicalFilePath().replace(QLatin1Char('\\'),QLatin1Char('/')); } } } //for if ( proFiles.count() > 0 ) { proFiles = getListOfProfiles(proFiles, verbose); } bool firstPass = true; for (int pi = 0; firstPass || pi < proFiles.count(); ++pi) { QStringList tsFiles = tsFileNames; if (proFiles.count() > 0) { QString pf = proFiles.at(pi); QMap<QByteArray, QStringList> variables; if(!evaluateProFile(pf, verbose, &variables)) return 2; sourceFiles = variables.value("SOURCES"); QStringList tmp = variables.value("CODECFORTR"); if (!tmp.isEmpty()) { codecForTr = tmp.first().toAscii(); fetchedTor.setCodecForTr(codecForTr.constData()); } tmp = variables.value("CODECFORSRC"); if (!tmp.isEmpty()) { codecForSource = tmp.first().toAscii(); } tsFiles += variables.value("TRANSLATIONS"); } for (QStringList::iterator it = sourceFiles.begin(); it != sourceFiles.end(); ++it) { #ifdef LINGUIST_DEBUG qDebug() << " " << (*it); #endif if ( (*it).endsWith(QLatin1String(".java"), Qt::CaseInsensitive) ) { fetchtr_java( *it, &fetchedTor, defaultContext, true, codecForSource ); } else if ( (*it).endsWith(QLatin1String(".ui"), Qt::CaseInsensitive) ) { #ifdef LINGUIST_DEBUG qDebug() << " " << (*it) + ".h"; #endif fetchtr_ui( *it, &fetchedTor, defaultContext, true ); fetchtr_cpp( *it + QLatin1String(".h"), &fetchedTor, defaultContext, false, codecForSource ); } else { fetchtr_cpp( *it, &fetchedTor, defaultContext, true, codecForSource ); } } removeDuplicates(&tsFiles, false); if ( tsFiles.count() > 0) { updateTsFiles( fetchedTor, tsFiles, QString::fromLatin1(codecForTr.constData()), noObsolete, onlyPlural, verbose ); } firstPass = false; } if ( numFiles == 0 ) { printUsage(); return 1; } return 0; }