Minor whitespace fix
[lhc/web/wiklou.git] / languages / classes / LanguageFi.php
index 47dd0e6..7156b65 100644 (file)
@@ -1,89 +1,72 @@
 <?php
+
 /** Finnish (Suomi)
  *
- * @package MediaWiki
- * @subpackage Language
+ * @ingroup Language
  *
  * @author Niklas Laxström
  */
 class LanguageFi extends Language {
+
        /**
-        * Avoid grouping whole numbers between 0 to 9999
+        * Convert from the nominative form of a noun to some other case
+        * Invoked with {{grammar:case|word}}
+        *
+        * @param $word string
+        * @param $case string
+        * @return string
         */
-       function commafy($_) {
-               if (!preg_match('/^\d{1,4}$/',$_)) {
-                       return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
-               } else {
-                       return $_;
-               }
-       }
-
-       # Convert from the nominative form of a noun to some other case
-       # Invoked with {{GRAMMAR:case|word}}
        function convertGrammar( $word, $case ) {
                global $wgGrammarForms;
-               if ( isset($wgGrammarForms['fi'][$case][$word]) ) {
+               if ( isset( $wgGrammarForms['fi'][$case][$word] ) ) {
                        return $wgGrammarForms['fi'][$case][$word];
                }
 
                # These rules are not perfect, but they are currently only used for site names so it doesn't
                # matter if they are wrong sometimes. Just add a special case for your site name if necessary.
+
+               # wovel harmony flag
+               $aou = preg_match( '/[aou][^äöy]*$/i', $word );
+
+               # The flag should be false for compounds where the last word has only neutral vowels (e/i).
+               # The general case cannot be handled without a dictionary, but there's at least one notable
+               # special case we should check for:
+
+               if ( preg_match( '/wiki$/i', $word ) )
+                       $aou = false;
+
+               # append i after final consonant
+               if ( preg_match( '/[bcdfghjklmnpqrstvwxz]$/i', $word ) )
+                       $word .= 'i';
+
                switch ( $case ) {
                        case 'genitive':
-                               if ( $word == 'Wikisitaatit' ) {
-                                       $word = 'Wikisitaattien';
-                               } else {
-                                       $word .= 'n';
-                               }
-                       break;
+                               $word .= 'n';
+                               break;
                        case 'elative':
-                               if ( $word == 'Wikisitaatit' ) {
-                                       $word = 'Wikisitaateista';
-                               } else {
-                                       if ( mb_substr($word, -1) == 'y' ) {
-                                               $word .= 'stä';
-                                       } else {
-                                               $word .= 'sta';
-                                       }
-                               }
+                               $word .= ( $aou ? 'sta' : 'stä' );
                                break;
                        case 'partitive':
-                               if ( $word == 'Wikisitaatit' ) {
-                                       $word = 'Wikisitaatteja';
-                               } else {
-                                       if ( mb_substr($word, -1) == 'y' ) {
-                                               $word .= 'ä';
-                                       } else {
-                                               $word .= 'a';
-                                       }
-                               }
+                               $word .= ( $aou ? 'a' : 'ä' );
                                break;
                        case 'illative':
                                # Double the last letter and add 'n'
                                # mb_substr has a compatibility function in GlobalFunctions.php
-                               if ( $word == 'Wikisitaatit' ) {
-                                       $word = 'Wikisitaatteihin';
-                               } else {
-                                       $word = $word . mb_substr($word,-1) . 'n';
-                               }
+                               $word = $word . mb_substr( $word, -1 ) . 'n';
                                break;
                        case 'inessive':
-                               if ( $word == 'Wikisitaatit' ) {
-                                       $word = 'Wikisitaateissa';
-                               } else {
-                                       if ( mb_substr($word, -1) == 'y' ) {
-                                               $word .= 'ssä';
-                                       } else {
-                                               $word .= 'ssa';
-                                       }
-                               }
+                               $word .= ( $aou ? 'ssa' : 'ssä' );
                                break;
-
                }
                return $word;
        }
 
-       function translateBlockExpiry( $str ) {
+       /**
+        * @param $str string
+        * @param $forContent bool
+        * @return string
+        */
+       function translateBlockExpiry( $str, $forContent = false ) {
                /*
                        'ago', 'now', 'today', 'this', 'next',
                        'first', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth', 'tenth', 'eleventh', 'twelfth',
@@ -141,15 +124,15 @@ class LanguageFi extends Language {
                );
 
                $final = '';
-               $tokens = explode ( ' ', $str);
-               foreach( $tokens as $item ) {
-                       if ( !is_numeric($item) ) {
-                               if ( count ( explode( '-', $item ) ) == 3 && strlen($item) == 10 ) {
+               $tokens = explode ( ' ', $str );
+               foreach ( $tokens as $item ) {
+                       if ( !is_numeric( $item ) ) {
+                               if ( count ( explode( '-', $item ) ) == 3 && strlen( $item ) == 10 ) {
                                        list( $yyyy, $mm, $dd ) = explode( '-', $item );
-                                       $final .= ' ' . $this->date( "{$yyyy}{$mm}{$dd}00000000");
+                                       $final .= ' ' . $this->date( "{$yyyy}{$mm}{$dd}000000);
                                        continue;
                                }
-                               if( isset( $weekds[$item] ) ) {
+                               if ( isset( $weekds[$item] ) ) {
                                        $final .= ' ' . $weekds[$item];
                                        continue;
                                }
@@ -157,9 +140,7 @@ class LanguageFi extends Language {
 
                        $final .= ' ' . $item;
                }
-               return '<span class="blockexpiry" title="' . htmlspecialchars($str). '">”' . trim( $final ) . '”</span>';
-       }
 
+               return htmlspecialchars( trim( $final ) );
+       }
 }
-
-?>