00001 <?php
00002
00009 class LanguageRu extends Language {
00010 # Convert from the nominative form of a noun to some other case
00011 # Invoked with {{grammar:case|word}}
00012 function convertGrammar( $word, $case ) {
00013 global $wgGrammarForms;
00014 if ( isset($wgGrammarForms['ru'][$case][$word]) ) {
00015 return $wgGrammarForms['ru'][$case][$word];
00016 }
00017
00018 # These rules are not perfect, but they are currently only used for site names so it doesn't
00019 # matter if they are wrong sometimes. Just add a special case for your site name if necessary.
00020
00021 #join and array_slice instead mb_substr
00022 $ar = array();
00023 preg_match_all( '/./us', $word, $ar );
00024 if (!preg_match("/[a-zA-Z_]/us", $word))
00025 switch ( $case ) {
00026 case 'genitive': #родительный падеж
00027 if ((join('',array_slice($ar[0],-4))=='вики') || (join('',array_slice($ar[0],-4))=='Вики'))
00028 {}
00029 elseif (join('',array_slice($ar[0],-1))=='ь')
00030 $word = join('',array_slice($ar[0],0,-1)).'я';
00031 elseif (join('',array_slice($ar[0],-2))=='ия')
00032 $word=join('',array_slice($ar[0],0,-2)).'ии';
00033 elseif (join('',array_slice($ar[0],-2))=='ка')
00034 $word=join('',array_slice($ar[0],0,-2)).'ки';
00035 elseif (join('',array_slice($ar[0],-2))=='ти')
00036 $word=join('',array_slice($ar[0],0,-2)).'тей';
00037 elseif (join('',array_slice($ar[0],-2))=='ды')
00038 $word=join('',array_slice($ar[0],0,-2)).'дов';
00039 elseif (join('',array_slice($ar[0],-3))=='ник')
00040 $word=join('',array_slice($ar[0],0,-3)).'ника';
00041 break;
00042 case 'dative': #дательный падеж
00043 #stub
00044 break;
00045 case 'accusative': #винительный падеж
00046 #stub
00047 break;
00048 case 'instrumental': #творительный падеж
00049 #stub
00050 break;
00051 case 'prepositional': #предложный падеж
00052 #stub
00053 break;
00054 }
00055 return $word;
00056 }
00057
00073 function convertPlural( $count, $forms ) {
00074 if ( !count($forms) ) { return ''; }
00075
00076
00077 if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
00078
00079 $forms = $this->preConvertPlural( $forms, 3 );
00080
00081 if ($count > 10 && floor(($count % 100) / 10) == 1) {
00082 return $forms[2];
00083 } else {
00084 switch ($count % 10) {
00085 case 1: return $forms[0];
00086 case 2:
00087 case 3:
00088 case 4: return $forms[1];
00089 default: return $forms[2];
00090 }
00091 }
00092 }
00093
00094
00095
00096
00097
00098
00099 function commafy($_) {
00100 if (preg_match('/^-?\d{1,4}(\.\d*)?$/',$_)) {
00101 return $_;
00102 } else {
00103 return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
00104 }
00105 }
00106 }