* (bug 5195) rebuildrecentchanges.php works again; Database::insertSelect now has...
[lhc/web/wiklou.git] / maintenance / lang2po.php
index a693b6d..af6bcee 100644 (file)
@@ -13,12 +13,16 @@ require_once('languages.inc');
 
 define('ALL_LANGUAGES',    true);
 define('XGETTEXT_BIN',     'xgettext');
-define('XGETTEXT_OPTIONS', '-n --keyword=wfMsg');
+define('MSGMERGE_BIN',     'msgmerge');
+
+// used to generate the .pot
+define('XGETTEXT_OPTIONS', '-n --keyword=wfMsg --keyword=wfMsgForContent --keyword=wfMsgHtml --keyword=wfMsgWikiHtml ');
+define('MSGMERGE_OPTIONS', ' -v ');
 
 define('LOCALE_OUTPUT_DIR', $IP.'/locale');
 
 
-if( isset($options['help']) ) { usage(); die(); }
+if( isset($options['help']) ) { usage(); wfDie(); }
 // default output is WikiText
 if( !isset($options['lang']) ) { $options['lang'] = ALL_LANGUAGES; }
 
@@ -32,6 +36,32 @@ END;
 }
 
 
+/**
+ * Return a dummy header for later edition.
+ * @return string A dummy header
+ */
+function poHeader() {
+return
+'# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2005 MediaWiki
+# This file is distributed under the same license as the MediaWiki package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: bugzilllaaaaa\n"
+"POT-Creation-Date: 2005-08-16 20:13+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: VARIOUS <nobody>\n"
+"Language-Team: LANGUAGE <nobody>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+';
+}
+
 /**
  * generate and write a file in .po format.
  *
@@ -40,17 +70,20 @@ END;
  * @return string Filename where stuff got saved or false.
  */
 function generatePo($langcode, &$messages) {
-       $data = ''; // TODO a .po header ?
+       $data = poHeader();
 
        // Generate .po entries
        foreach($messages as $identifier => $content) {
                $data .= "msgid \"$identifier\"\n";
 
-               // Double quotes escaped for $content:
-               $tmp = 'msgstr "'.str_replace('"', '\"', $content)."\"";
-               // New line should end with "\n not \n
-               $data .= str_replace("\n", "\"\n\"", $tmp);
-               $data .= "\n\n";
+               // Escape backslashes
+               $tmp = str_replace('\\', '\\\\', $content);
+               // Escape doublelquotes
+               $tmp = preg_replace( "/(?<!\\\\)\"/", '\"', $tmp);
+               // Rewrite multilines to gettext format
+               $tmp = str_replace("\n", "\"\n\"", $tmp);
+
+               $data .= 'msgstr "'. $tmp . "\"\n\n";
        }
 
        // Write the content to a file in locale/XX/messages.po
@@ -68,6 +101,37 @@ function generatePo($langcode, &$messages) {
        }
 }
 
+function generatePot() {
+       global $IP;
+       $curdir = getcwd();
+       chdir($IP);
+       exec( XGETTEXT_BIN
+         .' '.XGETTEXT_OPTIONS
+         .' -o '.LOCALE_OUTPUT_DIR.'/wfMsg.pot'
+         .' includes/*php'
+         );
+       chdir($curdir);
+}
+
+function applyPot($langcode) {
+       $langdir = LOCALE_OUTPUT_DIR.'/'.$langcode;
+
+       $from = $langdir.'/fromlanguagefile.po';
+       $pot = LOCALE_OUTPUT_DIR.'/wfMsg.pot';
+       $dest = $langdir.'/messages.po';
+
+       // Merge template and generate file to get final .po
+       exec(MSGMERGE_BIN.MSGMERGE_OPTIONS." $from $pot -o $dest ");
+       // delete no more needed file
+//     unlink($from);
+}
+
+// Generate a template .pot based on source tree
+echo "Getting 'gettext' default messages from sources:";
+generatePot();
+echo "done.\n";
+
+
 $langTool = new languages();
 
 // Do all languages
@@ -81,17 +145,10 @@ foreach ( $langTool->getList() as $langcode) {
                echo "ok\n";
                if( ! generatePo($langcode, $$arr) ) {
                        echo "ERROR: Failed to wrote file.\n";
+               } else {
+                       echo "Applying template:";
+                       applyPot($langcode);
                }
        }
 }
-
-// Generate a default .po based source tree
-echo "Getting 'gettext' default messages from sources\n";
-exec( XGETTEXT_BIN
-  .' '.XGETTEXT_OPTIONS
-  .' -o '.$IP.'/locale/wfMsg.po'
-  .' '.$IP.'/includes/*php'
-  );
-
-
 ?>