(bug 10413) DISPLAYTITLE doesn't escape HTML entities, causing the displayed title...
[mediawiki.git] / maintenance / language / checkLanguage.inc
blobe859e39cc5e063ef22186d1d39146ff68014f541
1 <?php
2 /**
3  * Check a language.
4  *
5  * @todo Stop with globals.
6  * @param $code The language code.
7  * @return Number of errors found.
8  */
9 function checkLanguage( $wgLanguages, $code ) {
10         global $wgRequiredMessagesNumber, $wgDisplayLevel, $wgLinks, $wgWikiLanguage, $wgChecks;
12         # Get messages
13         $messages = $wgLanguages->getMessages( $code );
14         $messagesNumber = count( $messages['translated'] );
16         # Skip the checks if specified
17         if ( $wgDisplayLevel == 0 ) {
18                 return;
19         }
21         // Initialize counts
22         $untranslatedMessagesNumber = $duplicateMessagesNumber = $obsoleteMessagesNumber
23         = $messagesWithoutVariablesNumber = $messagesWithoutPluralNumber = $emptyMessagesNumber
24         = $messagesWithWhitespaceNumber = $nonXHTMLMessagesNumber = $messagesWithWrongCharsNumber
25         = 0;
27         # Untranslated messages
28         if ( in_array( 'untranslated', $wgChecks ) ) {
29                 $untranslatedMessages = $wgLanguages->getUntranslatedMessages( $code );
30                 $untranslatedMessagesNumber = count( $untranslatedMessages );
31                 $wgLanguages->outputMessagesList( $untranslatedMessages, $code, "\n$untranslatedMessagesNumber messages of $wgRequiredMessagesNumber are not translated to $code, but exist in en:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
32         }
34         # Duplicate messages
35         if ( in_array( 'duplicate', $wgChecks ) ) {
36                 $duplicateMessages = $wgLanguages->getDuplicateMessages( $code );
37                 $duplicateMessagesNumber = count( $duplicateMessages );
38                 $wgLanguages->outputMessagesList( $duplicateMessages, $code, "\n$duplicateMessagesNumber messages of $messagesNumber are translated the same in en and $code:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
39         }
41         # Obsolete messages
42         if ( in_array( 'obsolete', $wgChecks ) ) {
43                 $obsoleteMessages = $messages['obsolete'];
44                 $obsoleteMessagesNumber = count( $obsoleteMessages );
45                 $wgLanguages->outputMessagesList( $obsoleteMessages, $code, "\n$obsoleteMessagesNumber messages of $messagesNumber are not exist in en (or are in the ignored list), but still exist in $code:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
46         }
48         # Messages without variables
49         if ( in_array( 'variables', $wgChecks ) ) {
50                 $messagesWithoutVariables = $wgLanguages->getMessagesWithoutVariables( $code );
51                 $messagesWithoutVariablesNumber = count( $messagesWithoutVariables );
52                 $wgLanguages->outputMessagesList( $messagesWithoutVariables, $code, "\n$messagesWithoutVariablesNumber messages of $messagesNumber in $code don't use some variables while en uses them:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
53         }
55         # Messages without plural
56         if ( in_array( 'plural', $wgChecks ) ) {
57                 $messagesWithoutPlural = $wgLanguages->getMessagesWithoutPlural( $code );
58                 $messagesWithoutPluralNumber = count( $messagesWithoutPlural );
59                 $wgLanguages->outputMessagesList( $messagesWithoutPlural, $code, "\n$messagesWithoutPluralNumber messages of $messagesNumber in $code don't use {{plural}} while en uses it:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
60         }
62         # Empty messages
63         if ( in_array( 'empty', $wgChecks ) ) {
64                 $emptyMessages = $wgLanguages->getEmptyMessages( $code );
65                 $emptyMessagesNumber = count( $emptyMessages );
66                 $wgLanguages->outputMessagesList( $emptyMessages, $code, "\n$emptyMessagesNumber messages of $messagesNumber in $code are empty or -:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
67         }
69         # Messages with whitespace
70         if ( in_array( 'whitespace', $wgChecks ) ) {
71                 $messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
72                 $messagesWithWhitespaceNumber = count( $messagesWithWhitespace );
73                 $wgLanguages->outputMessagesList( $messagesWithWhitespace, $code, "\n$messagesWithWhitespaceNumber messages of $messagesNumber in $code have a trailing whitespace:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
74         }
76         # Non-XHTML messages
77         if ( in_array( 'xhtml', $wgChecks ) ) {
78                 $nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
79                 $nonXHTMLMessagesNumber = count( $nonXHTMLMessages );
80                 $wgLanguages->outputMessagesList( $nonXHTMLMessages, $code, "\n$nonXHTMLMessagesNumber messages of $messagesNumber in $code are not well-formed XHTML:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
81         }
83         # Messages with wrong characters
84         if ( in_array( 'chars', $wgChecks ) ) {
85                 $messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
86                 $messagesWithWrongCharsNumber = count( $messagesWithWrongChars );
87                 $wgLanguages->outputMessagesList( $messagesWithWrongChars, $code, "\n$messagesWithWrongCharsNumber messages of $messagesNumber in $code include hidden chars which should not be used in the messages:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
88         }
90         return ($untranslatedMessagesNumber + $duplicateMessagesNumber + $obsoleteMessagesNumber + $messagesWithoutVariablesNumber + $messagesWithoutPluralNumber + $emptyMessagesNumber + $messagesWithWhitespaceNumber + $nonXHTMLMessagesNumber + $messagesWithWrongCharsNumber);