<?php
-/** Finnish (Suomi)
+/**
+ * Finnish (Suomi) specific code.
*
- * @package MediaWiki
- * @subpackage Language
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
* @author Niklas Laxström
+ * @ingroup Language
+ */
+
+/**
+ * Finnish (Suomi)
+ *
+ * @ingroup Language
*/
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',
'monday' => 'maanantai',
'tuesday' => 'tiistai',
'wednesday' => 'keskiviikko',
- 'thursay' => 'torstai',
+ 'thursday' => 'torstai',
'friday' => 'perjantai',
'saturday' => 'lauantai',
'sunday' => 'sunnuntai',
);
$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;
}
$final .= ' ' . $item;
}
- return '<span class="blockexpiry" title="' . htmlspecialchars($str). '">”' . trim( $final ) . '”</span>';
- }
+ return htmlspecialchars( trim( $final ) );
+ }
}
-
-?>