MediaWiki master
LanguageTyv.php
Go to the documentation of this file.
1<?php
24
32class LanguageTyv extends Language {
33
34 public function convertGrammar( $word, $case ) {
35 $grammarForms =
36 MediaWikiServices::getInstance()->getMainConfig()->get( MainConfigNames::GrammarForms );
37 if ( isset( $grammarForms['tyv'][$case][$word] ) ) {
38 return $grammarForms['tyv'][$case][$word];
39 }
40
41 // Set up some constants...
42 $allVowels = [ "е", "и", "э", "ө", "ү", "а", "ё", "о", "у", "ы", "ю", "я" ];
43 $frontVowels = [ "е", "и", "э", "ө", "ү" ];
44 $backVowels = [ "а", "ё", "о", "у", "ы", "ю", "я" ];
45 $unroundFrontVowels = [ "е", "и", "э" ];
46 $roundFrontVowels = [ "ө", "ү" ];
47 $unroundBackVowels = [ "а", "ы", "я" ];
48 $roundBackVowels = [ "ё", "о", "у", "ю" ];
49 $unvoicedPhonemes = [ "т", "п", "с", "ш", "к", "ч", "х" ];
50 $directiveUnvoicedStems = [ "т", "п", "с", "ш", "к", "ч", "х", "л", "м", "н", "ң" ];
51 $directiveVoicedStems = [ "д", "б", "з", "ж", "г", "р", "й" ];
52
53 // Put the word in a form we can play with since we're using UTF-8
54 $ar = mb_str_split( $word, 1 );
55
56 // Here's the last letter in the word
57 $wordEnding = end( $ar );
58
59 // Find the last vowel in the word
60 $wordLastVowel = null;
61 for ( $i = count( $ar ); $i--; ) {
62 if ( in_array( $ar[$i], $allVowels, true ) ) {
63 $wordLastVowel = $ar[$i];
64 break;
65 }
66 }
67
68 // Now convert the word
69 switch ( $case ) {
70 case "genitive":
71 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
72 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
73 $word .= "түң";
74 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
75 $word .= "тиң";
76 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
77 $word .= "туң";
78 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
79 $word .= "тың";
80 }
81 } elseif ( $wordEnding === "л" ) {
82 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
83 $word .= "дүң";
84 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
85 $word .= "диң";
86 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
87 $word .= "дуң";
88 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
89 $word .= "дың";
90 }
91 } else {
92 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
93 $word .= "нүң";
94 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
95 $word .= "ниң";
96 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
97 $word .= "нуң";
98 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
99 $word .= "ның";
100 }
101 }
102 break;
103
104 case "dative":
105 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
106 if ( in_array( $wordLastVowel, $frontVowels ) ) {
107 $word .= "ке";
108 } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
109 $word .= "ка";
110 }
111 } else {
112 if ( in_array( $wordLastVowel, $frontVowels ) ) {
113 $word .= "ге";
114 } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
115 $word .= "га";
116 }
117 }
118 break;
119
120 case "accusative":
121 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
122 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
123 $word .= "тү";
124 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
125 $word .= "ти";
126 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
127 $word .= "ту";
128 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
129 $word .= "ты";
130 }
131 } elseif ( $wordEnding === "л" ) {
132 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
133 $word .= "дү";
134 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
135 $word .= "ди";
136 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
137 $word .= "ду";
138 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
139 $word .= "ды";
140 }
141 } else {
142 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
143 $word .= "нү";
144 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
145 $word .= "ни";
146 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
147 $word .= "ну";
148 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
149 $word .= "ны";
150 }
151 }
152 break;
153
154 case "locative":
155 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
156 if ( in_array( $wordLastVowel, $frontVowels ) ) {
157 $word .= "те";
158 } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
159 $word .= "та";
160 }
161 } else {
162 if ( in_array( $wordLastVowel, $frontVowels ) ) {
163 $word .= "де";
164 } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
165 $word .= "да";
166 }
167 }
168 break;
169
170 case "ablative":
171 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
172 if ( in_array( $wordLastVowel, $frontVowels ) ) {
173 $word .= "тен";
174 } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
175 $word .= "тан";
176 }
177 } else {
178 if ( in_array( $wordLastVowel, $frontVowels ) ) {
179 $word .= "ден";
180 } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
181 $word .= "дан";
182 }
183 }
184 break;
185
186 case "directive1":
187 if ( in_array( $wordEnding, $directiveVoicedStems ) ) {
188 $word .= "же";
189 } elseif ( in_array( $wordEnding, $directiveUnvoicedStems ) ) {
190 $word .= "че";
191 }
192 break;
193
194 case "directive2":
195 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
196 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
197 $word .= "түве";
198 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
199 $word .= "тиве";
200 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
201 $word .= "туве";
202 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
203 $word .= "тыве";
204 }
205 } else {
206 if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
207 $word .= "дүве";
208 } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
209 $word .= "диве";
210 } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
211 $word .= "дуве";
212 } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
213 $word .= "дыве";
214 }
215 }
216 break;
217
218 default:
219 break;
220 }
221
222 return $word;
223 }
224}
Tyvan localization (Тыва дыл)
convertGrammar( $word, $case)
Grammatical transformations, needed for inflected languages Invoked by putting {{grammar:case|word}} ...
Base class for language-specific code.
Definition Language.php:81
A class containing constants representing the names of configuration variables.
Service locator for MediaWiki core services.