]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - languages/classes/LanguageTyv.php
MediaWiki 1.30.2
[autoinstalls/mediawiki.git] / languages / classes / LanguageTyv.php
1 <?php
2 /**
3  * Tyvan (Тыва дыл) specific code.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  * http://www.gnu.org/copyleft/gpl.html
19  *
20  * @file
21  * @ingroup Language
22  */
23
24 /**
25  * Tyvan localization (Тыва дыл)
26  *
27  * From friends at tyvawiki.org
28  *
29  * @ingroup Language
30  */
31 class LanguageTyv extends Language {
32         /**
33          * Grammatical transformations, needed for inflected languages
34          * Invoked by putting {{grammar:case|word}} in a message
35          *
36          * @param string $word
37          * @param string $case
38          * @return string
39          */
40         function convertGrammar( $word, $case ) {
41                 global $wgGrammarForms;
42                 if ( isset( $wgGrammarForms['tyv'][$case][$word] ) ) {
43                         return $wgGrammarForms['tyv'][$case][$word];
44                 }
45
46                 // Set up some constants...
47                 $allVowels = [ "е", "и", "э", "ө", "ү", "а", "ё", "о", "у", "ы", "ю", "я" ];
48                 $frontVowels = [ "е", "и", "э", "ө", "ү" ];
49                 $backVowels = [ "а", "ё", "о", "у", "ы", "ю", "я" ];
50                 $unroundFrontVowels = [ "е", "и", "э" ];
51                 $roundFrontVowels = [ "ө", "ү" ];
52                 $unroundBackVowels = [ "а", "ы", "я" ];
53                 $roundBackVowels = [ "ё", "о", "у", "ю" ];
54                 $unvoicedPhonemes = [ "т", "п", "с", "ш", "к", "ч", "х" ];
55                 $directiveUnvoicedStems = [ "т", "п", "с", "ш", "к", "ч", "х", "л", "м", "н", "ң" ];
56                 $directiveVoicedStems = [ "д", "б", "з", "ж", "г", "р", "й" ];
57
58                 // Put the word in a form we can play with since we're using UTF-8
59                 preg_match_all( '/./us', $word, $ar );
60
61                 // Here's the last letter in the word
62                 $wordEnding = $ar[0][count( $ar[0] ) - 1];
63
64                 // Here's an array with the order of the letters in the word reversed so
65                 // we can find a match quicker. *shrug*
66                 $wordReversed = array_reverse( $ar[0] );
67
68                 // Find the last vowel in the word
69                 $wordLastVowel = null;
70                 foreach ( $wordReversed as $xvalue ) {
71                         foreach ( $allVowels as $yvalue ) {
72                                 if ( strcmp( $xvalue, $yvalue ) == 0 ) {
73                                         $wordLastVowel = $xvalue;
74                                         break;
75                                 } else {
76                                         continue;
77                                 }
78                         }
79
80                         if ( $wordLastVowel !== null ) {
81                                 break;
82                         } else {
83                                 continue;
84                         }
85                 }
86
87                 // Now convert the word
88                 switch ( $case ) {
89                         case "genitive":
90                                 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
91                                         if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
92                                                 $word = implode( "", $ar[0] ) . "түң";
93                                         } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
94                                                 $word = implode( "", $ar[0] ) . "тиң";
95                                         } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
96                                                 $word = implode( "", $ar[0] ) . "туң";
97                                         } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
98                                                 $word = implode( "", $ar[0] ) . "тың";
99                                         } else {
100                                         }
101                                 } elseif ( $wordEnding === "л" ) {
102                                         if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
103                                                 $word = implode( "", $ar[0] ) . "дүң";
104                                         } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
105                                                 $word = implode( "", $ar[0] ) . "диң";
106                                         } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
107                                                 $word = implode( "", $ar[0] ) . "дуң";
108                                         } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
109                                                 $word = implode( "", $ar[0] ) . "дың";
110                                         } else {
111                                         }
112                                 } else {
113                                         if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
114                                                 $word = implode( "", $ar[0] ) . "нүң";
115                                         } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
116                                                 $word = implode( "", $ar[0] ) . "ниң";
117                                         } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
118                                                 $word = implode( "", $ar[0] ) . "нуң";
119                                         } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
120                                                 $word = implode( "", $ar[0] ) . "ның";
121                                         } else {
122                                         }
123                                 }
124                                 break;
125                         case "dative":
126                                 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
127                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
128                                                 $word = implode( "", $ar[0] ) . "ке";
129                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
130                                                 $word = implode( "", $ar[0] ) . "ка";
131                                         } else {
132                                         }
133                                 } else {
134                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
135                                                 $word = implode( "", $ar[0] ) . "ге";
136                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
137                                                 $word = implode( "", $ar[0] ) . "га";
138                                         } else {
139                                         }
140                                 }
141                                 break;
142                         case "accusative":
143                                 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
144                                         if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
145                                                 $word = implode( "", $ar[0] ) . "тү";
146                                         } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
147                                                 $word = implode( "", $ar[0] ) . "ти";
148                                         } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
149                                                 $word = implode( "", $ar[0] ) . "ту";
150                                         } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
151                                                 $word = implode( "", $ar[0] ) . "ты";
152                                         } else {
153                                         }
154                                 } elseif ( $wordEnding === "л" ) {
155                                         if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
156                                                 $word = implode( "", $ar[0] ) . "дү";
157                                         } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
158                                                 $word = implode( "", $ar[0] ) . "ди";
159                                         } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
160                                                 $word = implode( "", $ar[0] ) . "ду";
161                                         } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
162                                                 $word = implode( "", $ar[0] ) . "ды";
163                                         } else {
164                                         }
165                                 } else {
166                                         if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
167                                                 $word = implode( "", $ar[0] ) . "нү";
168                                         } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
169                                                 $word = implode( "", $ar[0] ) . "ни";
170                                         } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
171                                                 $word = implode( "", $ar[0] ) . "ну";
172                                         } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
173                                                 $word = implode( "", $ar[0] ) . "ны";
174                                         } else {
175                                         }
176                                 }
177                                 break;
178                         case "locative":
179                                 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
180                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
181                                                 $word = implode( "", $ar[0] ) . "те";
182                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
183                                                 $word = implode( "", $ar[0] ) . "та";
184                                         } else {
185                                         }
186                                 } else {
187                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
188                                                 $word = implode( "", $ar[0] ) . "де";
189                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
190                                                 $word = implode( "", $ar[0] ) . "да";
191                                         } else {
192                                         }
193                                 }
194                                 break;
195                         case "ablative":
196                                 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
197                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
198                                                 $word = implode( "", $ar[0] ) . "тен";
199                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
200                                                 $word = implode( "", $ar[0] ) . "тан";
201                                         } else {
202                                         }
203                                 } else {
204                                         if ( in_array( $wordLastVowel, $frontVowels ) ) {
205                                                 $word = implode( "", $ar[0] ) . "ден";
206                                         } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
207                                                 $word = implode( "", $ar[0] ) . "дан";
208                                         } else {
209                                         }
210                                 }
211                                 break;
212                         case "directive1":
213                                 if ( in_array( $wordEnding, $directiveVoicedStems ) ) {
214                                         $word = implode( "", $ar[0] ) . "же";
215                                 } elseif ( in_array( $wordEnding, $directiveUnvoicedStems ) ) {
216                                         $word = implode( "", $ar[0] ) . "че";
217                                 } else {
218                                 }
219                                 break;
220                         case "directive2":
221                                 if ( in_array( $wordEnding, $unvoicedPhonemes ) ) {
222                                         if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
223                                                 $word = implode( "", $ar[0] ) . "түве";
224                                         } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
225                                                 $word = implode( "", $ar[0] ) . "тиве";
226                                         } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
227                                                 $word = implode( "", $ar[0] ) . "туве";
228                                         } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
229                                                 $word = implode( "", $ar[0] ) . "тыве";
230                                         } else {
231                                         }
232                                 } else {
233                                         if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
234                                                 $word = implode( "", $ar[0] ) . "дүве";
235                                         } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
236                                                 $word = implode( "", $ar[0] ) . "диве";
237                                         } elseif ( in_array( $wordLastVowel, $roundBackVowels ) ) {
238                                                 $word = implode( "", $ar[0] ) . "дуве";
239                                         } elseif ( in_array( $wordLastVowel, $unroundBackVowels ) ) {
240                                                 $word = implode( "", $ar[0] ) . "дыве";
241                                         } else {
242                                         }
243                                 }
244                                 break;
245                         default:
246                                 break;
247                 }
248
249                 return $word;
250         }
251 }