Show a notice about unknown messages when rebuilding files.
[lhc/web/wiklou.git] / maintenance / language / rebuildLanguage.php
1 <?php
2 /**
3 * Rewrite the messages array in the files languages/messages/MessagesXX.php.
4 *
5 * @addtogroup Maintenance
6 */
7
8 require_once( dirname(__FILE__).'/../commandLine.inc' );
9 require_once( 'languages.inc' );
10 require_once( 'writeMessagesArray.inc' );
11
12 /**
13 * Rewrite a messages array.
14 *
15 * @param $code The language code.
16 * @param $write Write to the messages file?
17 */
18 function rebuildLanguage( $code, $write ) {
19 global $wgLanguages;
20
21 # Get messages
22 $messages = $wgLanguages->getMessages( $code );
23 $messages = $messages['all'];
24
25 # Rewrite messages array
26 $messages = writeMessagesArray( $messages, $code == 'en' );
27 $messagesText = $messages[0];
28 $sortedMessages = $messages[1];
29
30 # Write to the file
31 $filename = Language::getMessagesFileName( $code );
32 $contents = file_get_contents( $filename );
33 if ( strpos( $contents, '$messages' ) !== false ) {
34 $contents = explode( '$messages', $contents );
35 if ( $messagesText . "\n?>\n" == '$messages' . $contents[1] ) {
36 echo "Generated messages for language $code. Same to the current file.\n";
37 } else {
38 if ( $write ) {
39 $new = $contents[0];
40 $new .= $messagesText;
41 $new .= "\n?>\n";
42 file_put_contents( $filename, $new );
43 echo "Generated and wrote messages for language $code.\n";
44 } else {
45 echo "Generated messages for language $code. Please run the script again (without the parameter \"dry-run\") to write the array to the file.\n";
46 }
47 }
48 if ( isset( $sortedMessages['unknown'] ) && !empty( $sortedMessages['unknown'] ) ) {
49 echo "\nThere are " . count( $sortedMessages['unknown'] ) . " unknown messages, please check them:\n";
50 foreach ( $sortedMessages['unknown'] as $key => $value ) {
51 echo "* " . $key . "\n";
52 }
53 }
54 } else {
55 echo "Generated messages for language $code. There seems to be no messages array in the file.\n";
56 }
57 }
58
59 # Show help
60 if ( isset( $options['help'] ) ) {
61 echo <<<END
62 Run this script to rewrite the messages array in the files languages/messages/MessagesXX.php.
63 Parameters:
64 * lang: Language code (default: the installation default language). You can also specify "all" to check all the languages.
65 * help: Show this help.
66 Options:
67 * dry-run: Don't write the array to the file.
68
69 END;
70 exit();
71 }
72
73 # Get the language code
74 if ( isset( $options['lang'] ) ) {
75 $wgCode = $options['lang'];
76 } else {
77 $wgCode = $wgContLang->getCode();
78 }
79
80 # Get the write options
81 $wgWriteToFile = !isset( $options['dry-run'] );
82
83 # Get language objects
84 $wgLanguages = new languages();
85
86 # Write all the language
87 if ( $wgCode == 'all' ) {
88 foreach ( $wgLanguages->getLanguages() as $language ) {
89 rebuildLanguage( $language, $wgWriteToFile );
90 }
91 } else {
92 rebuildLanguage( $wgCode, $wgWriteToFile );
93 }
94
95 ?>