Work in progress. Script that output some basic and incorrect .po files
[lhc/web/wiklou.git] / maintenance / lang2po.php
1 <?php
2 /**
3 * Convert Language files to .po files !
4 *
5 * Todo:
6 * - generate .po header
7 * - fix escaping of \
8 */
9
10 /** This is a command line script */
11 require_once('commandLine.inc');
12 require_once('languages.inc');
13
14 define('ALL_LANGUAGES', true);
15 define('XGETTEXT_BIN', 'xgettext');
16 define('XGETTEXT_OPTIONS', '-n --keyword=wfMsg');
17
18 define('LOCALE_OUTPUT_DIR', $IP.'/locale');
19
20
21 if( isset($options['help']) ) { usage(); die(); }
22 // default output is WikiText
23 if( !isset($options['lang']) ) { $options['lang'] = ALL_LANGUAGES; }
24
25 function usage() {
26 print <<<END
27 Usage: php lang2po.php [--help] [--lang=<langcode>] [--stdout]
28 --help: this message.
29 --lang: a lang code you want to generate a .po for (default: all languages).
30
31 END;
32 }
33
34
35 /**
36 * generate and write a file in .po format.
37 *
38 * @param string $langcode Code of a language it will process.
39 * @param array &$messages Array containing the various messages.
40 * @return string Filename where stuff got saved or false.
41 */
42 function generatePo($langcode, &$messages) {
43 $data = ''; // TODO a .po header ?
44
45 // Generate .po entries
46 foreach($messages as $identifier => $content) {
47 $data .= "msgid \"$identifier\"\n";
48
49 // Double quotes escaped for $content:
50 $tmp = 'msgstr "'.str_replace('"', '\"', $content)."\"";
51 // New line should end with "\n not \n
52 $data .= str_replace("\n", "\"\n\"", $tmp);
53 $data .= "\n\n";
54 }
55
56 // Write the content to a file in locale/XX/messages.po
57 $dir = LOCALE_OUTPUT_DIR.'/'.$langcode;
58 if( !is_dir($dir) ) { mkdir( $dir, 0770 ); }
59 $filename = $dir.'/fromlanguagefile.po';
60
61 $file = fopen( $filename , 'wb' );
62 if( fwrite( $file, $data ) ) {
63 fclose( $file );
64 return $filename;
65 } else {
66 fclose( $file );
67 return false;
68 }
69 }
70
71 $langTool = new languages();
72
73 // Do all languages
74 foreach ( $langTool->getList() as $langcode) {
75 echo "Loading messages for $langcode:\t";
76 require_once( 'languages/Language' . $langcode . '.php' );
77 $arr = 'wgAllMessages'.$langcode;
78 if(!@is_array($$arr)) {
79 echo "NONE FOUND\n";
80 } else {
81 echo "ok\n";
82 if( ! generatePo($langcode, $$arr) ) {
83 echo "ERROR: Failed to wrote file.\n";
84 }
85 }
86 }
87
88 // Generate a default .po based source tree
89 echo "Getting 'gettext' default messages from sources\n";
90 exec( XGETTEXT_BIN
91 .' '.XGETTEXT_OPTIONS
92 .' -o '.$IP.'/locale/wfMsg.po'
93 .' '.$IP.'/includes/*php'
94 );
95
96
97 ?>