43 if ( isset( $wgGrammarForms[
'ru'][$case][$word] ) ) {
44 return $wgGrammarForms[
'ru'][$case][$word];
47 # These rules are not perfect, but they are currently only used for Wikimedia
48 # site names so it doesn't matter if they are wrong sometimes.
49 # Just add a special case for your site name if necessary.
51 # substr doesn't support Unicode and mb_substr has issues,
52 # so break it to characters using preg_match_all and then use array_slice and join
54 preg_match_all(
'/./us', $word, $chars );
55 if ( !preg_match(
"/[a-zA-Z_]/us", $word ) ) {
57 case 'genitive': # родительный падеж
58 if ( join(
'', array_slice( $chars[0], -1 ) ) ===
'ь' ) {
59 $word = join(
'', array_slice( $chars[0], 0, -1 ) ) .
'я';
60 } elseif ( join(
'', array_slice( $chars[0], -2 ) ) ===
'ия' ) {
61 $word = join(
'', array_slice( $chars[0], 0, -2 ) ) .
'ии';
62 } elseif ( join(
'', array_slice( $chars[0], -2 ) ) ===
'ка' ) {
63 $word = join(
'', array_slice( $chars[0], 0, -2 ) ) .
'ки';
64 } elseif ( join(
'', array_slice( $chars[0], -2 ) ) ===
'ти' ) {
65 $word = join(
'', array_slice( $chars[0], 0, -2 ) ) .
'тей';
66 } elseif ( join(
'', array_slice( $chars[0], -2 ) ) ===
'ды' ) {
67 $word = join(
'', array_slice( $chars[0], 0, -2 ) ) .
'дов';
68 } elseif ( join(
'', array_slice( $chars[0], -3 ) ) ===
'ник' ) {
69 $word = join(
'', array_slice( $chars[0], 0, -3 ) ) .
'ника';
70 } elseif ( join(
'', array_slice( $chars[0], -3 ) ) ===
'ные' ) {
71 $word = join(
'', array_slice( $chars[0], 0, -3 ) ) .
'ных';
74 case 'dative': # дательный падеж
77 case 'accusative': # винительный падеж
80 case 'instrumental': # творительный падеж
83 case 'prepositional': # предложный падеж
84 if ( join(
'', array_slice( $chars[0], -1 ) ) ===
'ь' ) {
85 $word = join(
'', array_slice( $chars[0], 0, -1 ) ) .
'е';
86 } elseif ( join(
'', array_slice( $chars[0], -2 ) ) ===
'ия' ) {
87 $word = join(
'', array_slice( $chars[0], 0, -2 ) ) .
'ии';
88 } elseif ( join(
'', array_slice( $chars[0], -2 ) ) ===
'ка' ) {
89 $word = join(
'', array_slice( $chars[0], 0, -2 ) ) .
'ке';
90 } elseif ( join(
'', array_slice( $chars[0], -2 ) ) ===
'ти' ) {
91 $word = join(
'', array_slice( $chars[0], 0, -2 ) ) .
'тях';
92 } elseif ( join(
'', array_slice( $chars[0], -2 ) ) ===
'ды' ) {
93 $word = join(
'', array_slice( $chars[0], 0, -2 ) ) .
'дах';
94 } elseif ( join(
'', array_slice( $chars[0], -3 ) ) ===
'ник' ) {
95 $word = join(
'', array_slice( $chars[0], 0, -3 ) ) .
'нике';
96 } elseif ( join(
'', array_slice( $chars[0], -3 ) ) ===
'ные' ) {
97 $word = join(
'', array_slice( $chars[0], 0, -3 ) ) .
'ных';
116 if ( preg_match(
'/^-?\d{1,4}(\.\d*)?$/', $_ ) ) {
119 return strrev( (
string)preg_replace(
'/(\d{3})(?=\d)(?!\d*\.)/',
'$1,', strrev( $_ ) ) );