00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <metatranslator.h>
00022 #include <proparser.h>
00023 #include <opie.h>
00024
00025 #include <qfile.h>
00026 #include <qregexp.h>
00027 #include <qstring.h>
00028 #include <qstringlist.h>
00029 #include <qtextstream.h>
00030
00031 #include <errno.h>
00032
00033 typedef QValueList<MetaTranslatorMessage> TML;
00034
00035 static void printUsage()
00036 {
00037 fprintf( stderr, "Usage:\n"
00038 "lrelease [options] project-file\n"
00039 "lrelease [options] ts-files\n"
00040 "Options:\n"
00041 "-opieOPIE dir overrides $OPIEDIR\n"
00042 "-helpDisplay this information and exit\n"
00043 "-verbose\n"
00044 " Explain what is being done\n"
00045 "-version\n"
00046 " Display the version of lrelease and exit\n" );
00047 }
00048 static void releaseQmFile( const QString& tsFileName, bool verbose )
00049 {
00050 MetaTranslator tor;
00051 QString qmFileName = tsFileName;
00052 qmFileName.replace( QRegExp("\\.ts$"), "" );
00053 qmFileName += ".qm";
00054
00055 if ( tor.load(tsFileName) ) {
00056 if ( verbose )
00057 fprintf( stderr, "Updating '%s'...\n", qmFileName.latin1() );
00058 if ( !tor.release(qmFileName, verbose) )
00059 fprintf( stderr,
00060 "lrelease warning: For some reason, I cannot save '%s'\n",
00061 qmFileName.latin1() );
00062 } else {
00063 fprintf( stderr,
00064 "lrelease warning: For some reason, I cannot load '%s'\n",
00065 tsFileName.latin1() );
00066 }
00067 }
00068
00069 static void metaQmFile( const QString &opiedir,
00070 const QStringList& lang,
00071 const QString& basename,
00072 bool isLib, bool verb ) {
00073 QString target = basename + ".ts";
00074
00075 if ( isLib ) target.prepend("lib");
00076
00077 for ( QStringList::ConstIterator it = lang.begin(); it != lang.end(); ++it )
00078 {
00079 QString fileName = opiedir + "/i18n/" + (*it) + "/" + target;
00080 qWarning("Target is %s", fileName.latin1() );
00081 releaseQmFile( fileName, verb );
00082 }
00083 }
00084
00085 int main( int argc, char **argv )
00086 {
00087 bool verbose = FALSE;
00088
00089 int numFiles = 0;
00090 QString opiedir;
00091 QStringList languageList = OPIE::self()->languageList( opiedir );
00092
00093 for ( int i = 1; i < argc; i++ )
00094 {
00095 if ( qstrcmp(argv[i], "-help") == 0 )
00096 {
00097 printUsage();
00098 return 0;
00099 }
00100 else if ( qstrcmp(argv[i], "-verbose") == 0 )
00101 {
00102 verbose = TRUE;
00103 continue;
00104 }
00105 else if ( qstrcmp(argv[i], "-version") == 0 )
00106 {
00107 fprintf( stderr, "lrelease version %s\n", QT_VERSION_STR );
00108 return 0;
00109 }
00110 else if ( qstrcmp(argv[i], "-opie") == 0 )
00111 {
00112 i++;
00113 if ( i < argc )
00114 {
00115 opiedir = argv[i];
00116 languageList = OPIE::self()->languageList(opiedir);
00117 continue;
00118 }
00119
00120
00121 fprintf( stderr, "lrelease error: -opie option need a parameter\n" );
00122 printUsage();
00123 return 1;
00124
00125 }
00126
00127 numFiles++;
00128 QFile f( argv[i] );
00129 if ( !f.open(IO_ReadOnly) )
00130 {
00131 fprintf( stderr,
00132 "lrelease error: Cannot open file '%s': %s\n",
00133 argv[i],
00134 strerror(errno) );
00135 return 1;
00136 }
00137
00138 QTextStream t( &f );
00139 QString fullText = t.read();
00140 f.close();
00141
00142 if ( fullText.find(QString("<!DOCTYPE TS>")) >= 0 )
00143 {
00144 releaseQmFile( argv[i], verbose );
00145 }
00146 else
00147 {
00148 QString target;
00149 bool isLib = FALSE;
00150 QMap<QString, QString> tagMap = proFileTagMap( fullText );
00151 QMap<QString, QString>::Iterator it;
00152
00153 for ( it = tagMap.begin(); it != tagMap.end(); ++it )
00154 {
00155 QStringList toks = QStringList::split( ' ', it.data() );
00156 QStringList::Iterator t;
00157
00158 for ( t = toks.begin(); t != toks.end(); ++t )
00159 {
00160 if ( it.key() == "TARGET" )
00161 {
00162 target = *t;
00163 qWarning("%s %s", it.key().latin1(), (*t).latin1() );
00164 }
00165 else if ( it.key() == "TEMPLATE" )
00166 {
00167 if ( (*t).stripWhiteSpace().lower() == "lib" )
00168 isLib = TRUE;
00169 }
00170 }
00171 }
00172 qWarning("%s", target.latin1() );
00173 metaQmFile( OPIE::self()->opieDir(opiedir),
00174 languageList,target, isLib, verbose );
00175 }
00176 }
00177
00178 if ( numFiles == 0 )
00179 {
00180 printUsage();
00181 return 1;
00182 }
00183 return 0;
00184 }