Fix.
[lhc/web/wiklou.git] / maintenance / language / checkLanguage.inc
1 <?php
2 /**
3 * Check a language.
4 *
5 * @param $languages The languages object.
6 * @param $code The language code (default content language of the wiki running the script on).
7 * @param: $links Show wiki links to messages (default false)?
8 * @param: $wikiLanguage Language of the wiki to show the output in, if showing links (default en).
9 * @param: $checks Checks to do (default all except for duplicates and plural).
10 * @return Number of errors found.
11 */
12 function checkLanguage( $languages, $code = null, $displayLevel = 2, $links = false, $wikiLanguage = 'en', $checks = null ) {
13 # Get messages
14 $messages = $languages->getMessages( $code );
15 $messagesNumber = count( $messages['translated'] );
16
17 # Skip the checks if told so
18 if ( $displayLevel == 0 ) {
19 return;
20 }
21
22 # Initialize counts
23 $problems = 0;
24
25 # Set default language code and checks
26 if ( !$code ) {
27 global $wgContLang;
28 $code = $wgContLang->getCode();
29 }
30 if ( !$checks ) {
31 $checks = array( 'untranslated', 'obsolete', 'variables', 'empty', 'whitespace', 'xhtml', 'chars' );
32 }
33
34 # Untranslated messages
35 if ( in_array( 'untranslated', $checks ) ) {
36 $generalMessages = $languages->getGeneralMessages();
37 $requiredMessagesNumber = count( $generalMessages['required'] );
38 $untranslatedMessages = $languages->getUntranslatedMessages( $code );
39 $untranslatedMessagesNumber = count( $untranslatedMessages );
40 $languages->outputMessagesList( $untranslatedMessages, $code, "\n$untranslatedMessagesNumber messages of $requiredMessagesNumber are not translated to $code, but exist in en:", $displayLevel, $links, $wikiLanguage );
41 $problems += $untranslatedMessagesNumber;
42 }
43
44 # Duplicate messages
45 if ( in_array( 'duplicate', $checks ) ) {
46 $duplicateMessages = $languages->getDuplicateMessages( $code );
47 $duplicateMessagesNumber = count( $duplicateMessages );
48 $languages->outputMessagesList( $duplicateMessages, $code, "\n$duplicateMessagesNumber messages of $messagesNumber are translated the same in en and $code:", $displayLevel, $links, $wikiLanguage );
49 $problems += $duplicateMessagesNumber;
50 }
51
52 # Obsolete messages
53 if ( in_array( 'obsolete', $checks ) ) {
54 $obsoleteMessages = $messages['obsolete'];
55 $obsoleteMessagesNumber = count( $obsoleteMessages );
56 $languages->outputMessagesList( $obsoleteMessages, $code, "\n$obsoleteMessagesNumber messages of $messagesNumber do not exist in en (or are in the ignored list), but still exist in $code:", $displayLevel, $links, $wikiLanguage );
57 $problems += $obsoleteMessagesNumber;
58 }
59
60 # Messages without variables
61 if ( in_array( 'variables', $checks ) ) {
62 $messagesWithoutVariables = $languages->getMessagesWithoutVariables( $code );
63 $messagesWithoutVariablesNumber = count( $messagesWithoutVariables );
64 $languages->outputMessagesList( $messagesWithoutVariables, $code, "\n$messagesWithoutVariablesNumber messages of $messagesNumber in $code don't use some variables while en uses them:", $displayLevel, $links, $wikiLanguage );
65 $problems += $messagesWithoutVariablesNumber;
66 }
67
68 # Messages without plural
69 if ( in_array( 'plural', $checks ) ) {
70 $messagesWithoutPlural = $languages->getMessagesWithoutPlural( $code );
71 $messagesWithoutPluralNumber = count( $messagesWithoutPlural );
72 $languages->outputMessagesList( $messagesWithoutPlural, $code, "\n$messagesWithoutPluralNumber messages of $messagesNumber in $code don't use {{plural}} while en uses it:", $displayLevel, $links, $wikiLanguage );
73 $problems += $messagesWithoutPluralNumber;
74 }
75
76 # Empty messages
77 if ( in_array( 'empty', $checks ) ) {
78 $emptyMessages = $languages->getEmptyMessages( $code );
79 $emptyMessagesNumber = count( $emptyMessages );
80 $languages->outputMessagesList( $emptyMessages, $code, "\n$emptyMessagesNumber messages of $messagesNumber in $code are empty or -:", $displayLevel, $links, $wikiLanguage );
81 $problems += $emptyMessagesNumber;
82 }
83
84 # Messages with whitespace
85 if ( in_array( 'whitespace', $checks ) ) {
86 $messagesWithWhitespace = $languages->getMessagesWithWhitespace( $code );
87 $messagesWithWhitespaceNumber = count( $messagesWithWhitespace );
88 $languages->outputMessagesList( $messagesWithWhitespace, $code, "\n$messagesWithWhitespaceNumber messages of $messagesNumber in $code have a trailing whitespace:", $displayLevel, $links, $wikiLanguage );
89 $problems += $messagesWithWhitespaceNumber;
90 }
91
92 # Non-XHTML messages
93 if ( in_array( 'xhtml', $checks ) ) {
94 $nonXHTMLMessages = $languages->getNonXHTMLMessages( $code );
95 $nonXHTMLMessagesNumber = count( $nonXHTMLMessages );
96 $languages->outputMessagesList( $nonXHTMLMessages, $code, "\n$nonXHTMLMessagesNumber messages of $messagesNumber in $code are not well-formed XHTML:", $displayLevel, $links, $wikiLanguage );
97 $problems += $nonXHTMLMessagesNumber;
98 }
99
100 # Messages with wrong characters
101 if ( in_array( 'chars', $checks ) ) {
102 $messagesWithWrongChars = $languages->getMessagesWithWrongChars( $code );
103 $messagesWithWrongCharsNumber = count( $messagesWithWrongChars );
104 $languages->outputMessagesList( $messagesWithWrongChars, $code, "\n$messagesWithWrongCharsNumber messages of $messagesNumber in $code include hidden chars which should not be used in the messages:", $displayLevel, $links, $wikiLanguage );
105 $problems += $messagesWithWrongCharsNumber;
106 }
107
108 return $problems;
109 }