Remove language coverter for Kazakh
This has been constantly mentioned as buggy and broken and there is no official version of latin or Arabic (see the ticket for more details). This can be turned back as an extension if needed by third party users. Bug: T350684 Bug: T268143 Depends-On: I6180dca2c49b3119751766268acc56087aaf8414 Change-Id: Ifbf3c8954d885daf891f8d9efc11743d898302f0
This commit is contained in:
parent
8c51e4b03c
commit
beb3261b8d
13 changed files with 15 additions and 1057 deletions
|
|
@ -86,6 +86,7 @@ MediaWiki supports over 350 languages. Many localisations are updated regularly.
|
|||
Below only new and removed languages are listed, as well as changes to languages
|
||||
because of Phabricator reports.
|
||||
|
||||
* (T268143) Language variant conversion has been removed for Kazakh.
|
||||
* …
|
||||
|
||||
=== Breaking changes in 1.42 ===
|
||||
|
|
|
|||
|
|
@ -715,7 +715,6 @@ $wgAutoloadLocalClasses = [
|
|||
'JpegMetadataExtractor' => __DIR__ . '/includes/media/JpegMetadataExtractor.php',
|
||||
'JsonContent' => __DIR__ . '/includes/content/JsonContent.php',
|
||||
'JsonContentHandler' => __DIR__ . '/includes/content/JsonContentHandler.php',
|
||||
'KkConverter' => __DIR__ . '/includes/language/converters/KkConverter.php',
|
||||
'KuConverter' => __DIR__ . '/includes/language/converters/KuConverter.php',
|
||||
'LCStore' => __DIR__ . '/includes/language/LCStore.php',
|
||||
'LCStoreCDB' => __DIR__ . '/includes/language/LCStoreCDB.php',
|
||||
|
|
|
|||
|
|
@ -55,7 +55,6 @@ abstract class LanguageConverter implements ILanguageConverter {
|
|||
'crh',
|
||||
'gan',
|
||||
'iu',
|
||||
'kk',
|
||||
'ku',
|
||||
'sh',
|
||||
'shi',
|
||||
|
|
@ -79,7 +78,6 @@ abstract class LanguageConverter implements ILanguageConverter {
|
|||
'crh' => 'crh',
|
||||
'gan' => 'gan',
|
||||
'iu' => 'iu',
|
||||
'kk' => 'kk',
|
||||
'ku' => 'ku',
|
||||
'sh' => 'sh-latn',
|
||||
'shi' => 'shi',
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ use EnConverter;
|
|||
use GanConverter;
|
||||
use ILanguageConverter;
|
||||
use IuConverter;
|
||||
use KkConverter;
|
||||
use KuConverter;
|
||||
use Language;
|
||||
use MediaWiki\StubObject\StubUserLang;
|
||||
|
|
@ -66,9 +65,6 @@ class LanguageConverterFactory {
|
|||
'iu' => [
|
||||
'class' => IuConverter::class,
|
||||
],
|
||||
'kk' => [
|
||||
'class' => KkConverter::class,
|
||||
],
|
||||
'ku' => [
|
||||
'class' => KuConverter::class,
|
||||
],
|
||||
|
|
|
|||
|
|
@ -1,353 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
|
||||
define( 'KK_C_UC', 'АӘБВГҒДЕЁЖЗИЙКҚЛМНҢОӨПРСТУҰҮФХҺЦЧШЩЪЫІЬЭЮЯ' ); # Kazakh Cyrillic uppercase
|
||||
define( 'KK_C_LC', 'аәбвгғдеёжзийкқлмнңоөпрстуұүфхһцчшщъыіьэюя' ); # Kazakh Cyrillic lowercase
|
||||
define( 'KK_L_UC', 'AÄBCÇDEÉFGĞHIİÏJKLMNÑOÖPQRSŞTUÜVWXYÝZ' ); # Kazakh Latin uppercase
|
||||
define( 'KK_L_LC', 'aäbcçdeéfgğhıiïjklmnñoöpqrsştuüvwxyýz' ); # Kazakh Latin lowercase
|
||||
// define( 'KK_A', 'ٴابپتجحدرزسشعفقكلمنڭەوۇۋۆىيچھ' ); # Kazakh Arabic
|
||||
define( 'H_HAMZA', 'ٴ' ); # U+0674 ARABIC LETTER HIGH HAMZA
|
||||
// define( 'ZWNJ', '' ); # U+200C ZERO WIDTH NON-JOINER
|
||||
|
||||
/**
|
||||
* Kazakh (Қазақша) converter routines
|
||||
*
|
||||
* @ingroup Languages
|
||||
*/
|
||||
class KkConverter extends LanguageConverterSpecific {
|
||||
|
||||
public function getMainCode(): string {
|
||||
return 'kk';
|
||||
}
|
||||
|
||||
public function getLanguageVariants(): array {
|
||||
return [
|
||||
'kk',
|
||||
'kk-cyrl',
|
||||
'kk-latn',
|
||||
'kk-arab',
|
||||
'kk-kz',
|
||||
'kk-tr',
|
||||
'kk-cn'
|
||||
];
|
||||
}
|
||||
|
||||
public function getVariantsFallbacks(): array {
|
||||
return [
|
||||
'kk' => 'kk-cyrl',
|
||||
'kk-cyrl' => 'kk',
|
||||
'kk-latn' => 'kk',
|
||||
'kk-arab' => 'kk',
|
||||
'kk-kz' => 'kk-cyrl',
|
||||
'kk-tr' => 'kk-latn',
|
||||
'kk-cn' => 'kk-arab'
|
||||
];
|
||||
}
|
||||
|
||||
protected function loadDefaultTables(): array {
|
||||
// require __DIR__."/../../includes/KkConversion.php";
|
||||
// Placeholder for future implementing. Remove the variables declarations
|
||||
// after generating KkConversion.php
|
||||
$kk2Cyrl = [];
|
||||
$kk2Latn = [];
|
||||
$kk2Arab = [];
|
||||
$kk2KZ = [];
|
||||
$kk2TR = [];
|
||||
$kk2CN = [];
|
||||
|
||||
return [
|
||||
'kk-cyrl' => new ReplacementArray( $kk2Cyrl ),
|
||||
'kk-latn' => new ReplacementArray( $kk2Latn ),
|
||||
'kk-arab' => new ReplacementArray( $kk2Arab ),
|
||||
'kk-kz' => new ReplacementArray( array_merge( $kk2Cyrl, $kk2KZ ) ),
|
||||
'kk-tr' => new ReplacementArray( array_merge( $kk2Latn, $kk2TR ) ),
|
||||
'kk-cn' => new ReplacementArray( array_merge( $kk2Arab, $kk2CN ) ),
|
||||
'kk' => new ReplacementArray()
|
||||
];
|
||||
}
|
||||
|
||||
protected function postLoadTables( &$tables ) {
|
||||
$tables['kk-kz']->merge( $tables['kk-cyrl'] );
|
||||
$tables['kk-tr']->merge( $tables['kk-latn'] );
|
||||
$tables['kk-cn']->merge( $tables['kk-arab'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Return cyrillic to latin reg conversion table
|
||||
* @since 1.36
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getMCyrl2Latn(): array {
|
||||
return [
|
||||
# # Punctuation
|
||||
'/№/u' => 'No.',
|
||||
# # Е after vowels
|
||||
'/([АӘЕЁИОӨҰҮЭЮЯЪЬ])Е/u' => '$1YE',
|
||||
'/([АӘЕЁИОӨҰҮЭЮЯЪЬ])е/ui' => '$1ye',
|
||||
# # leading ЁЮЯЩ
|
||||
'/^Ё([' . KK_C_UC . ']|$)/u' => 'YO$1', '/^Ё([' . KK_C_LC . ']|$)/u' => 'Yo$1',
|
||||
'/^Ю([' . KK_C_UC . ']|$)/u' => 'YU$1', '/^Ю([' . KK_C_LC . ']|$)/u' => 'Yu$1',
|
||||
'/^Я([' . KK_C_UC . ']|$)/u' => 'YA$1', '/^Я([' . KK_C_LC . ']|$)/u' => 'Ya$1',
|
||||
'/^Щ([' . KK_C_UC . ']|$)/u' => 'ŞÇ$1', '/^Щ([' . KK_C_LC . ']|$)/u' => 'Şç$1',
|
||||
# # other ЁЮЯ
|
||||
'/Ё/u' => 'YO', '/ё/u' => 'yo',
|
||||
'/Ю/u' => 'YU', '/ю/u' => 'yu',
|
||||
'/Я/u' => 'YA', '/я/u' => 'ya',
|
||||
'/Щ/u' => 'ŞÇ', '/щ/u' => 'şç',
|
||||
# # soft and hard signs
|
||||
'/[ъЪ]/u' => 'ʺ', '/[ьЬ]/u' => 'ʹ',
|
||||
# # other characters
|
||||
'/А/u' => 'A', '/а/u' => 'a', '/Ә/u' => 'Ä', '/ә/u' => 'ä',
|
||||
'/Б/u' => 'B', '/б/u' => 'b', '/В/u' => 'V', '/в/u' => 'v',
|
||||
'/Г/u' => 'G', '/г/u' => 'g', '/Ғ/u' => 'Ğ', '/ғ/u' => 'ğ',
|
||||
'/Д/u' => 'D', '/д/u' => 'd', '/Е/u' => 'E', '/е/u' => 'e',
|
||||
'/Ж/u' => 'J', '/ж/u' => 'j', '/З/u' => 'Z', '/з/u' => 'z',
|
||||
'/И/u' => 'Ï', '/и/u' => 'ï', '/Й/u' => 'Ý', '/й/u' => 'ý',
|
||||
'/К/u' => 'K', '/к/u' => 'k', '/Қ/u' => 'Q', '/қ/u' => 'q',
|
||||
'/Л/u' => 'L', '/л/u' => 'l', '/М/u' => 'M', '/м/u' => 'm',
|
||||
'/Н/u' => 'N', '/н/u' => 'n', '/Ң/u' => 'Ñ', '/ң/u' => 'ñ',
|
||||
'/О/u' => 'O', '/о/u' => 'o', '/Ө/u' => 'Ö', '/ө/u' => 'ö',
|
||||
'/П/u' => 'P', '/п/u' => 'p', '/Р/u' => 'R', '/р/u' => 'r',
|
||||
'/С/u' => 'S', '/с/u' => 's', '/Т/u' => 'T', '/т/u' => 't',
|
||||
'/У/u' => 'W', '/у/u' => 'w', '/Ұ/u' => 'U', '/ұ/u' => 'u',
|
||||
'/Ү/u' => 'Ü', '/ү/u' => 'ü', '/Ф/u' => 'F', '/ф/u' => 'f',
|
||||
'/Х/u' => 'X', '/х/u' => 'x', '/Һ/u' => 'H', '/һ/u' => 'h',
|
||||
'/Ц/u' => 'C', '/ц/u' => 'c', '/Ч/u' => 'Ç', '/ч/u' => 'ç',
|
||||
'/Ш/u' => 'Ş', '/ш/u' => 'ş', '/Ы/u' => 'I', '/ы/u' => 'ı',
|
||||
'/І/u' => 'İ', '/і/u' => 'i', '/Э/u' => 'É', '/э/u' => 'é',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return latin to cyrillic reg conversion table
|
||||
* @since 1.36
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getMLatn2Cyrl(): array {
|
||||
return [
|
||||
# # Punctuation
|
||||
'/#|No\./' => '№',
|
||||
# # Şç
|
||||
'/ŞÇʹ/u' => 'ЩЬ', '/Şçʹ/u' => 'Щь',
|
||||
'/Ş[Çç]/u' => 'Щ', '/şç/u' => 'щ',
|
||||
# # soft and hard signs
|
||||
'/([' . KK_L_UC . '])ʺ([' . KK_L_UC . '])/u' => '$1Ъ$2',
|
||||
'/ʺ([' . KK_L_LC . '])/u' => 'ъ$1',
|
||||
'/([' . KK_L_UC . '])ʹ([' . KK_L_UC . '])/u' => '$1Ь$2',
|
||||
'/ʹ([' . KK_L_LC . '])/u' => 'ь$1',
|
||||
'/ʺ/u' => 'ъ',
|
||||
'/ʹ/u' => 'ь',
|
||||
# # Ye Yo Yu Ya.
|
||||
'/Y[Ee]/u' => 'Е', '/ye/u' => 'е',
|
||||
'/Y[Oo]/u' => 'Ё', '/yo/u' => 'ё',
|
||||
'/Y[UWuw]/u' => 'Ю', '/y[uw]/u' => 'ю',
|
||||
'/Y[Aa]/u' => 'Я', '/ya/u' => 'я',
|
||||
# # other characters
|
||||
'/A/u' => 'А', '/a/u' => 'а', '/Ä/u' => 'Ә', '/ä/u' => 'ә',
|
||||
'/B/u' => 'Б', '/b/u' => 'б', '/C/u' => 'Ц', '/c/u' => 'ц',
|
||||
'/Ç/u' => 'Ч', '/ç/u' => 'ч', '/D/u' => 'Д', '/d/u' => 'д',
|
||||
'/E/u' => 'Е', '/e/u' => 'е', '/É/u' => 'Э', '/é/u' => 'э',
|
||||
'/F/u' => 'Ф', '/f/u' => 'ф', '/G/u' => 'Г', '/g/u' => 'г',
|
||||
'/Ğ/u' => 'Ғ', '/ğ/u' => 'ғ', '/H/u' => 'Һ', '/h/u' => 'һ',
|
||||
'/I/u' => 'Ы', '/ı/u' => 'ы', '/İ/u' => 'І', '/i/u' => 'і',
|
||||
'/Ï/u' => 'И', '/ï/u' => 'и', '/J/u' => 'Ж', '/j/u' => 'ж',
|
||||
'/K/u' => 'К', '/k/u' => 'к', '/L/u' => 'Л', '/l/u' => 'л',
|
||||
'/M/u' => 'М', '/m/u' => 'м', '/N/u' => 'Н', '/n/u' => 'н',
|
||||
'/Ñ/u' => 'Ң', '/ñ/u' => 'ң', '/O/u' => 'О', '/o/u' => 'о',
|
||||
'/Ö/u' => 'Ө', '/ö/u' => 'ө', '/P/u' => 'П', '/p/u' => 'п',
|
||||
'/Q/u' => 'Қ', '/q/u' => 'қ', '/R/u' => 'Р', '/r/u' => 'р',
|
||||
'/S/u' => 'С', '/s/u' => 'с', '/Ş/u' => 'Ш', '/ş/u' => 'ш',
|
||||
'/T/u' => 'Т', '/t/u' => 'т', '/U/u' => 'Ұ', '/u/u' => 'ұ',
|
||||
'/Ü/u' => 'Ү', '/ü/u' => 'ү', '/V/u' => 'В', '/v/u' => 'в',
|
||||
'/W/u' => 'У', '/w/u' => 'у', '/Ý/u' => 'Й', '/ý/u' => 'й',
|
||||
'/X/u' => 'Х', '/x/u' => 'х', '/Z/u' => 'З', '/z/u' => 'з',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return latin or cyrillic to arab reg conversion table.
|
||||
* @since 1.36
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getMCyLa2Arab() {
|
||||
return [
|
||||
# # Punctuation -> Arabic
|
||||
'/#|№|No\./u' => '', # U+0600
|
||||
'/\,/' => '،', # U+060C
|
||||
'/;/' => '؛', # U+061B
|
||||
'/\?/' => '؟', # U+061F
|
||||
'/%/' => '٪', # U+066A
|
||||
'/\*/' => '٭', # U+066D
|
||||
# # Digits -> Arabic
|
||||
'/0/' => '۰', # U+06F0
|
||||
'/1/' => '۱', # U+06F1
|
||||
'/2/' => '۲', # U+06F2
|
||||
'/3/' => '۳', # U+06F3
|
||||
'/4/' => '۴', # U+06F4
|
||||
'/5/' => '۵', # U+06F5
|
||||
'/6/' => '۶', # U+06F6
|
||||
'/7/' => '۷', # U+06F7
|
||||
'/8/' => '۸', # U+06F8
|
||||
'/9/' => '۹', # U+06F9
|
||||
# # Cyrillic -> Arabic
|
||||
'/Аллаһ/ui' => 'ﷲ',
|
||||
'/([АӘЕЁИОӨҰҮЭЮЯЪЬ])е/ui' => '$1يە',
|
||||
'/[еэ]/ui' => 'ە', '/[ъь]/ui' => '',
|
||||
'/[аә]/ui' => 'ا', '/[оө]/ui' => 'و', '/[ұү]/ui' => 'ۇ', '/[ыі]/ui' => 'ى',
|
||||
'/[и]/ui' => 'ىي', '/ё/ui' => 'يو', '/ю/ui' => 'يۋ', '/я/ui' => 'يا', '/[й]/ui' => 'ي',
|
||||
'/ц/ui' => 'تس', '/щ/ui' => 'شش',
|
||||
'/һ/ui' => 'ح', '/ч/ui' => 'تش',
|
||||
# '/һ/ui' => 'ھ', '/ч/ui' => 'چ',
|
||||
'/б/ui' => 'ب', '/в/ui' => 'ۆ', '/г/ui' => 'گ', '/ғ/ui' => 'ع',
|
||||
'/д/ui' => 'د', '/ж/ui' => 'ج', '/з/ui' => 'ز', '/к/ui' => 'ك',
|
||||
'/қ/ui' => 'ق', '/л/ui' => 'ل', '/м/ui' => 'م', '/н/ui' => 'ن',
|
||||
'/ң/ui' => 'ڭ', '/п/ui' => 'پ', '/р/ui' => 'ر', '/с/ui' => 'س',
|
||||
'/т/ui' => 'ت', '/у/ui' => 'ۋ', '/ф/ui' => 'ف', '/х/ui' => 'ح',
|
||||
'/ш/ui' => 'ش',
|
||||
# # Latin -> Arabic // commented for now...
|
||||
/*'/Allah/ui' => 'ﷲ',
|
||||
'/[eé]/ui' => 'ە', '/[yý]/ui' => 'ي', '/[ʺʹ]/ui' => '',
|
||||
'/[aä]/ui' => 'ا', '/[oö]/ui' => 'و', '/[uü]/ui' => 'ۇ',
|
||||
'/[ï]/ui' => 'ىي', '/[ıIiİ]/u' => 'ى',
|
||||
'/c/ui' => 'تس',
|
||||
'/ç/ui' => 'تش', '/h/ui' => 'ح',
|
||||
#'/ç/ui' => 'چ', '/h/ui' => 'ھ',
|
||||
'/b/ui' => 'ب','/d/ui' => 'د',
|
||||
'/f/ui' => 'ف', '/g/ui' => 'گ', '/ğ/ui' => 'ع',
|
||||
'/j/ui' => 'ج', '/k/ui' => 'ك', '/l/ui' => 'ل', '/m/ui' => 'م',
|
||||
'/n/ui' => 'ن', '/ñ/ui' => 'ڭ', '/p/ui' => 'پ', '/q/ui' => 'ق',
|
||||
'/r/ui' => 'ر', '/s/ui' => 'س', '/ş/ui' => 'ش', '/t/ui' => 'ت',
|
||||
'/v/ui' => 'ۆ', '/w/ui' => 'ۋ', '/x/ui' => 'ح', '/z/ui' => 'ز',*/
|
||||
];
|
||||
}
|
||||
|
||||
public function translate( $text, $toVariant ) {
|
||||
$text = parent::translate( $text, $toVariant );
|
||||
|
||||
switch ( $toVariant ) {
|
||||
case 'kk-cyrl':
|
||||
case 'kk-kz':
|
||||
$letters = KK_L_UC . KK_L_LC . 'ʺʹ#0123456789';
|
||||
break;
|
||||
|
||||
case 'kk-latn':
|
||||
case 'kk-tr':
|
||||
$letters = KK_C_UC . KK_C_LC . '№0123456789';
|
||||
break;
|
||||
|
||||
case 'kk-arab':
|
||||
case 'kk-cn':
|
||||
$letters = KK_C_UC . KK_C_LC . /*KK_L_UC.KK_L_LC.'ʺʹ'.*/',;\?%\*№0123456789';
|
||||
break;
|
||||
|
||||
default:
|
||||
return $text;
|
||||
}
|
||||
// disable conversion variables like $1, $2...
|
||||
$varsfix = '\$[0-9]';
|
||||
|
||||
$matches = preg_split(
|
||||
'/' . $varsfix . '[^' . $letters . ']+/u',
|
||||
$text,
|
||||
-1,
|
||||
PREG_SPLIT_OFFSET_CAPTURE
|
||||
);
|
||||
|
||||
$mstart = 0;
|
||||
$ret = '';
|
||||
|
||||
foreach ( $matches as $m ) {
|
||||
$ret .= substr( $text, $mstart, (int)$m[1] - $mstart );
|
||||
$ret .= $this->regsConverter( $m[0], $toVariant );
|
||||
$mstart = (int)$m[1] + strlen( $m[0] );
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $text
|
||||
* @param string $toVariant
|
||||
* @return mixed|string
|
||||
*/
|
||||
private function regsConverter( $text, $toVariant ) {
|
||||
if ( $text == '' ) {
|
||||
return $text;
|
||||
}
|
||||
|
||||
switch ( $toVariant ) {
|
||||
case 'kk-arab':
|
||||
case 'kk-cn':
|
||||
$letters = KK_C_LC . KK_C_UC; /*.KK_L_LC.KK_L_UC*/
|
||||
$front = 'әөүіӘӨҮІ'; /*.'äöüiÄÖÜİ'*/
|
||||
$excludes = 'еэгғкқЕЭГҒКҚ'; /*.'eégğkqEÉGĞKQ'*/
|
||||
// split text to words
|
||||
$matches = preg_split( '/[\b\s\-\.:]+/', $text, -1, PREG_SPLIT_OFFSET_CAPTURE );
|
||||
$mstart = 0;
|
||||
$ret = '';
|
||||
foreach ( $matches as $m ) {
|
||||
$ret .= substr( $text, $mstart, (int)$m[1] - $mstart );
|
||||
// is matched the word to front vowels?
|
||||
// exclude a words matched to е, э, г, к, к, қ,
|
||||
// them should be without hamza
|
||||
if ( preg_match( '/[' . $front . ']/u', $m[0] ) &&
|
||||
!preg_match( '/[' . $excludes . ']/u', $m[0] )
|
||||
) {
|
||||
$ret .= preg_replace( '/[' . $letters . ']+/u', H_HAMZA . '$0', $m[0] );
|
||||
} else {
|
||||
$ret .= $m[0];
|
||||
}
|
||||
$mstart = (int)$m[1] + strlen( $m[0] );
|
||||
}
|
||||
$text =& $ret;
|
||||
$mCyLa2Arab = $this->getMCyLa2Arab();
|
||||
foreach ( $mCyLa2Arab as $pat => $rep ) {
|
||||
$text = preg_replace( $pat, $rep, $text );
|
||||
}
|
||||
return $text;
|
||||
|
||||
case 'kk-latn':
|
||||
case 'kk-tr':
|
||||
$mCyrl2Latn = $this->getMCyrl2Latn();
|
||||
foreach ( $mCyrl2Latn as $pat => $rep ) {
|
||||
$text = preg_replace( $pat, $rep, $text );
|
||||
}
|
||||
return $text;
|
||||
|
||||
case 'kk-cyrl':
|
||||
case 'kk-kz':
|
||||
$mLatn2Cyrl = $this->getMLatn2Cyrl();
|
||||
foreach ( $mLatn2Cyrl as $pat => $rep ) {
|
||||
$text = preg_replace( $pat, $rep, $text );
|
||||
}
|
||||
return $text;
|
||||
|
||||
default:
|
||||
return $text;
|
||||
}
|
||||
}
|
||||
|
||||
public function convertCategoryKey( $key ) {
|
||||
return $this->autoConvert( $key, 'kk' );
|
||||
}
|
||||
}
|
||||
|
|
@ -28,59 +28,11 @@
|
|||
* @ingroup Languages
|
||||
*/
|
||||
class LanguageKk extends LanguageKk_cyrl {
|
||||
/**
|
||||
* Fixes an issue with ucfirst for transforming 'i' to 'İ'
|
||||
*
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function ucfirst( $str ) {
|
||||
if ( substr( $str, 0, 1 ) === 'i' ) {
|
||||
$variant = $this->getConverterInternal()->getPreferredVariant();
|
||||
if ( $variant == 'kk-latn' || $variant == 'kk-tr' ) {
|
||||
return 'İ' . substr( $str, 1 );
|
||||
}
|
||||
}
|
||||
return parent::ucfirst( $str );
|
||||
}
|
||||
|
||||
/**
|
||||
* Fixes issue with lcfirst for transforming 'I' to 'ı'
|
||||
*
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function lcfirst( $str ) {
|
||||
if ( substr( $str, 0, 1 ) === 'I' ) {
|
||||
$variant = $this->getConverterInternal()->getPreferredVariant();
|
||||
if ( $variant == 'kk-latn' || $variant == 'kk-tr' ) {
|
||||
return 'ı' . substr( $str, 1 );
|
||||
}
|
||||
}
|
||||
return parent::lcfirst( $str );
|
||||
}
|
||||
|
||||
public function convertGrammar( $word, $case ) {
|
||||
// T277689: If there's no word, then there's nothing to convert.
|
||||
if ( $word === '' ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$variant = $this->getConverterInternal()->getPreferredVariant();
|
||||
switch ( $variant ) {
|
||||
case 'kk-arab':
|
||||
case 'kk-cn':
|
||||
$word = parent::convertGrammarKk_arab( $word, $case );
|
||||
break;
|
||||
case 'kk-latn':
|
||||
case 'kk-tr':
|
||||
$word = parent::convertGrammarKk_latn( $word, $case );
|
||||
break;
|
||||
case 'kk-cyrl':
|
||||
case 'kk-kz':
|
||||
case 'kk':
|
||||
default:
|
||||
$word = parent::convertGrammarKk_cyrl( $word, $case );
|
||||
}
|
||||
|
||||
return $word;
|
||||
return parent::convertGrammarKk_cyrl( $word, $case );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -278,492 +278,6 @@ class LanguageKk_cyrl extends Language {
|
|||
return $word;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $word
|
||||
* @param string $case
|
||||
* @return string
|
||||
*/
|
||||
protected function convertGrammarKk_latn( $word, $case ) {
|
||||
$grammarForms =
|
||||
MediaWikiServices::getInstance()->getMainConfig()->get( MainConfigNames::GrammarForms );
|
||||
if ( isset( $grammarForms['kk-tr'][$case][$word] ) ) {
|
||||
return $grammarForms['kk-tr'][$case][$word];
|
||||
}
|
||||
if ( isset( $grammarForms['kk-latn'][$case][$word] ) ) {
|
||||
return $grammarForms['kk-latn'][$case][$word];
|
||||
}
|
||||
// Set up some constants...
|
||||
// Vowels in last syllable
|
||||
$frontVowels = [ "e", "ö", "ü", "i", "ä", "é" ];
|
||||
$backVowels = [ "a", "o", "u", "ı" ];
|
||||
$allVowels = [ "e", "ö", "ü", "i", "ä", "é", "a", "o", "u", "ı" ];
|
||||
// Preceding letters
|
||||
$Nasals = [ "m", "n", "ñ" ];
|
||||
$Sonants = [ "ï", "y", "ý", "l", "r", "w" ];
|
||||
$Consonants = [ "p", "f", "k", "q", "t", "ş", "s", "x", "c", "ç", "b", "v", "g", "d" ];
|
||||
$Sibilants = [ "j", "z" ];
|
||||
$Sonorants = [ "ï", "y", "ý", "l", "r", "w", "m", "n", "ñ", "j", "z" ];
|
||||
|
||||
// Possessives
|
||||
$firstPerson = [ "m", "ñ" ]; // 1st singular, 2nd informal
|
||||
$secondPerson = [ "z" ]; // 1st plural, 2nd formal
|
||||
$thirdPerson = [ "ı", "i" ]; // 3rd
|
||||
|
||||
[ $wordEnding, $wordLastVowel ] = $this->lastLetter( $word, $allVowels );
|
||||
|
||||
// Now convert the word
|
||||
switch ( $case ) {
|
||||
case "dc1":
|
||||
case "genitive": # ilik
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "tiñ";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "tıñ";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "niñ";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "nıñ";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "diñ";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "dıñ";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc2":
|
||||
case "dative": # barıs
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "ke";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "qa";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "ge";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "ğa";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc21":
|
||||
case "possessive dative": # täweldık + barıs
|
||||
if ( in_array( $wordEnding, $firstPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "e";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "a";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $secondPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "ge";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "ğa";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "ne";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "na";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc3":
|
||||
case "accusative": # tabıs
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "ti";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "tı";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $allVowels ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "ni";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "nı";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $Sonorants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "di";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "dı";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc31":
|
||||
case "possessive accusative": # täweldık + tabıs
|
||||
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "di";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "dı";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
|
||||
$word .= "n";
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc4":
|
||||
case "locative": # jatıs
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "te";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "ta";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "de";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "da";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc41":
|
||||
case "possessive locative": # täweldık + jatıs
|
||||
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "de";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "da";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "nde";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "nda";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc5":
|
||||
case "ablative": # şığıs
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "ten";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "tan";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $allVowels )
|
||||
|| in_array( $wordEnding, $Sonants )
|
||||
|| in_array( $wordEnding, $Sibilants )
|
||||
) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "den";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "dan";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $Nasals ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "nen";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "nan";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc51":
|
||||
case "possessive ablative": # täweldık + şığıs
|
||||
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "nen";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "nan";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $secondPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "den";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "dan";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc6":
|
||||
case "comitative": # kömektes
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
$word .= "pen";
|
||||
} elseif ( in_array( $wordEnding, $allVowels )
|
||||
|| in_array( $wordEnding, $Nasals )
|
||||
|| in_array( $wordEnding, $Sonants )
|
||||
) {
|
||||
$word .= "men";
|
||||
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
|
||||
$word .= "ben";
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc61":
|
||||
case "possessive comitative": # täweldık + kömektes
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
$word .= "penen";
|
||||
} elseif ( in_array( $wordEnding, $allVowels )
|
||||
|| in_array( $wordEnding, $Nasals )
|
||||
|| in_array( $wordEnding, $Sonants )
|
||||
) {
|
||||
$word .= "menen";
|
||||
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
|
||||
$word .= "benen";
|
||||
}
|
||||
break;
|
||||
default: # dc0 #nominative #ataw
|
||||
}
|
||||
return $word;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $word
|
||||
* @param string $case
|
||||
* @return string
|
||||
*/
|
||||
protected function convertGrammarKk_arab( $word, $case ) {
|
||||
$grammarForms =
|
||||
MediaWikiServices::getInstance()->getMainConfig()->get( MainConfigNames::GrammarForms );
|
||||
if ( isset( $grammarForms['kk-cn'][$case][$word] ) ) {
|
||||
return $grammarForms['kk-cn'][$case][$word];
|
||||
}
|
||||
if ( isset( $grammarForms['kk-arab'][$case][$word] ) ) {
|
||||
return $grammarForms['kk-arab'][$case][$word];
|
||||
}
|
||||
// Set up some constants...
|
||||
// Vowels in last syllable
|
||||
$frontVowels = [ "ە", "ٶ", "ٷ", "ٸ", "ٵ", "ە" ];
|
||||
$backVowels = [ "ا", "و", "ۇ", "ى" ];
|
||||
$allVowels = [ "ە", "ٶ", "ٷ", "ٸ", "ٵ", "ە", "ا", "و", "ۇ", "ى" ];
|
||||
// Preceding letters
|
||||
$Nasals = [ "م", "ن", "ڭ" ];
|
||||
$Sonants = [ "ي", "ي", "ل", "ر", "ۋ" ];
|
||||
$Consonants = [ "پ", "ف", "ك", "ق", "ت", "ش", "س", "ح", "تس", "چ", "ب", "ۆ", "گ", "د" ];
|
||||
$Sibilants = [ "ج", "ز" ];
|
||||
$Sonorants = [ "ي", "ي", "ل", "ر", "ۋ", "م", "ن", "ڭ", "ج", "ز" ];
|
||||
|
||||
// Possessives
|
||||
$firstPerson = [ "م", "ڭ" ]; // 1st singular, 2nd informal
|
||||
$secondPerson = [ "ز" ]; // 1st plural, 2nd formal
|
||||
$thirdPerson = [ "ى", "ٸ" ]; // 3rd
|
||||
|
||||
[ $wordEnding, $wordLastVowel ] = $this->lastLetter( $word, $allVowels );
|
||||
|
||||
// Now convert the word
|
||||
switch ( $case ) {
|
||||
case "dc1":
|
||||
case "genitive": # ilik
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "تٸڭ";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "تىڭ";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "نٸڭ";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "نىڭ";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "دٸڭ";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "دىڭ";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc2":
|
||||
case "dative": # barıs
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "كە";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "قا";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "گە";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "عا";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc21":
|
||||
case "possessive dative": # täweldık + barıs
|
||||
if ( in_array( $wordEnding, $firstPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "ە";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "ا";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $secondPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "گە";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "عا";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "نە";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "نا";
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "dc3":
|
||||
case "accusative": # tabıs
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "تٸ";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "تى";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $allVowels ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "نٸ";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "نى";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $Sonorants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "دٸ";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "دى";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc31":
|
||||
case "possessive accusative": # täweldık + tabıs
|
||||
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "دٸ";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "دى";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
|
||||
$word .= "ن";
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc4":
|
||||
case "locative": # jatıs
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "تە";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "تا";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "دە";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "دا";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc41":
|
||||
case "possessive locative": # täweldık + jatıs
|
||||
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "دە";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "دا";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "ندە";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "ندا";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc5":
|
||||
case "ablative": # şığıs
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "تەن";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "تان";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $allVowels )
|
||||
|| in_array( $wordEnding, $Sonants )
|
||||
|| in_array( $wordEnding, $Sibilants )
|
||||
) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "دەن";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "دان";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $Nasals ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "نەن";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "نان";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc51":
|
||||
case "possessive ablative": # täweldık + şığıs
|
||||
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "نەن";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "نان";
|
||||
}
|
||||
} elseif ( in_array( $wordEnding, $secondPerson ) ) {
|
||||
if ( in_array( $wordLastVowel, $frontVowels ) ) {
|
||||
$word .= "دەن";
|
||||
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
|
||||
$word .= "دان";
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "dc6":
|
||||
case "comitative": # kömektes
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
$word .= "پەن";
|
||||
} elseif ( in_array( $wordEnding, $allVowels )
|
||||
|| in_array( $wordEnding, $Nasals )
|
||||
|| in_array( $wordEnding, $Sonants )
|
||||
) {
|
||||
$word .= "مەن";
|
||||
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
|
||||
$word .= "بەن";
|
||||
}
|
||||
break;
|
||||
case "dc61":
|
||||
case "possessive comitative": # täweldık + kömektes
|
||||
if ( in_array( $wordEnding, $Consonants ) ) {
|
||||
$word .= "پەنەن";
|
||||
} elseif ( in_array( $wordEnding, $allVowels )
|
||||
|| in_array( $wordEnding, $Nasals )
|
||||
|| in_array( $wordEnding, $Sonants )
|
||||
) {
|
||||
$word .= "مەنەن";
|
||||
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
|
||||
$word .= "بەنەن";
|
||||
}
|
||||
break;
|
||||
|
||||
default: # dc0 #nominative #ataw
|
||||
break;
|
||||
}
|
||||
return $word;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $word
|
||||
* @param string[] $allVowels
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ describe( 'Page Source', () => {
|
|||
const page = utils.title( 'PageSource_' );
|
||||
const pageWithSpaces = page.replace( '_', ' ' );
|
||||
const variantPage = utils.title( 'PageSourceVariant' );
|
||||
const fallbackVariantPage = 'MediaWiki:Tog-underline/kk-latn';
|
||||
const fallbackVariantPage = 'MediaWiki:Tog-underline/sh-latn';
|
||||
|
||||
// Create a page (or "agepay") for the pig latin variant test.
|
||||
const agepayHash = utils.title( '' ).replace( /\d/g, 'x' ).toLowerCase(); // only lower-case letters.
|
||||
|
|
@ -265,15 +265,15 @@ describe( 'Page Source', () => {
|
|||
assert.match( headers.etag, /en-x-piglatin/i );
|
||||
} );
|
||||
it( 'Should perform fallback variant conversion', async () => {
|
||||
await mindy.edit( fallbackVariantPage, { text: 'Siltemeniñ astın sız:' } );
|
||||
await mindy.edit( fallbackVariantPage, { text: 'Podvlačenje linkova:' } );
|
||||
const { headers, text } = await client.get( `/page/${encodeURIComponent( fallbackVariantPage )}/html`, null, {
|
||||
'accept-language': 'kk-cyrl'
|
||||
'accept-language': 'sh-cyrl'
|
||||
} );
|
||||
|
||||
assert.match( text, /Сілтеменің астын сыз:/ );
|
||||
assert.match( text, /Подвлачење линкова:/ );
|
||||
assert.match( headers.vary, /\bAccept-Language\b/i );
|
||||
assert.match( headers[ 'content-language' ], /kk-cyrl/i );
|
||||
assert.match( headers.etag, /kk-cyrl/i );
|
||||
assert.match( headers[ 'content-language' ], /sh-cyrl/i );
|
||||
assert.match( headers.etag, /sh-cyrl/i );
|
||||
} );
|
||||
} );
|
||||
|
||||
|
|
@ -369,20 +369,20 @@ describe( 'Page Source', () => {
|
|||
}
|
||||
} );
|
||||
it( 'Should perform fallback variant conversion', async () => {
|
||||
await mindy.edit( fallbackVariantPage, { text: 'Siltemeniñ astın sız:' } );
|
||||
await mindy.edit( fallbackVariantPage, { text: 'Podvlačenje linkova:' } );
|
||||
const { headers, text } = await client.get( `/page/${encodeURIComponent( fallbackVariantPage )}/html`, null, {
|
||||
'accept-language': 'kk-cyrl'
|
||||
'accept-language': 'sh-cyrl'
|
||||
} );
|
||||
|
||||
assert.match( text, /Сілтеменің астын сыз:/ );
|
||||
assert.match( text, /Подвлачење линкова:/ );
|
||||
assert.match( headers.vary, /\bAccept-Language\b/i );
|
||||
assert.match( headers.etag, /kk-cyrl/i );
|
||||
assert.match( headers.etag, /sh-cyrl/i );
|
||||
|
||||
// Since with_html returns JSON, content language is not set
|
||||
// but if its set, we expect it to be set correctly.
|
||||
const contentLanguageHeader = headers[ 'content-language' ];
|
||||
if ( contentLanguageHeader ) {
|
||||
assert.match( headers[ 'content-language' ], /kk-cyrl/i );
|
||||
assert.match( headers[ 'content-language' ], /sh-cyrl/i );
|
||||
}
|
||||
} );
|
||||
} );
|
||||
|
|
|
|||
|
|
@ -114,51 +114,6 @@
|
|||
"text": "uqallangniq, uqallautinik iliuqqainirmut maliktangit, katiqsuisuunguvuq uqautinik iliuqqarlugit amaak: illumut isilauqtunga = illu + mut isiq + lauq + tunga tamakkua aviksimajarialiit, uvani illumut isilauqtunga, nalliatuinnaq sivulliugaluaruni suqutaunngittuq: isilauqtunga illumut tukiqarunnarivuq illumut isilauqtunga aaqqiksimaninganik. taanna (–mut) uqautiup sininga uqautigijaujumik nalunaikkutaunngimmat ilaliutigatuinnaugami patuksimajarialik uqautaujumik nalunaikkutalingmut, uuttuutigijattinni uqautaujuq siniqaqpuq (–tunga)-mik uqausiqarmat pilirijumik. asinginnik uqautiit siniqarunnaqput tukingit maliglugit; patuksimaningillu amma uqaqtaujut ittaqqutingit (tamakkua uqallautaujut) maliktaujariaqarivut. uqaqtaujut tukiqattiaqput uqautiit siningit iluitturuttiaqsimakpata ilaliutiningit. tamakkua uqautiit akunningani pisuut nalunaikkutauvut uqautaujup tauttunginnik, qanga pingmangaata, ammalu qanutigi taimaimmangata.",
|
||||
"expected": "uqallangniq, uqallautinik iliuqqainirmut maliktangit, katiqsuisuunguvuq uqautinik iliuqqarlugit amaak: illumut isilauqtunga = illu + mut isiq + lauq + tunga tamakkua aviksimajarialiit, uvani illumut isilauqtunga, nalliatuinnaq sivulliugaluaruni suqutaunngittuq: isilauqtunga illumut tukiqarunnarivuq illumut isilauqtunga aaqqiksimaninganik. taanna (–mut) uqautiup sininga uqautigijaujumik nalunaikkutaunngimmat ilaliutigatuinnaugami patuksimajarialik uqautaujumik nalunaikkutalingmut, uuttuutigijattinni uqautaujuq siniqaqpuq (–tunga)-mik uqausiqarmat pilirijumik. asinginnik uqautiit siniqarunnaqput tukingit maliglugit; patuksimaningillu amma uqaqtaujut ittaqqutingit (tamakkua uqallautaujut) maliktaujariaqarivut. uqaqtaujut tukiqattiaqput uqautiit siningit iluitturuttiaqsimakpata ilaliutiningit. tamakkua uqautiit akunningani pisuut nalunaikkutauvut uqautaujup tauttunginnik, qanga pingmangaata, ammalu qanutigi taimaimmangata."
|
||||
},
|
||||
{
|
||||
"variant": "kk",
|
||||
"text": "Тәттімбет атқа ерте мініп, ел ісіне ерте араласқан адам. Батыс-Сібір генерал-губернаторы генерал-майор Фон Фридрихс Тәттімбет туралы арнайы жинаған мәліметінде мынандай дерек келтіреді: 'Тәттімбет — ақ сүйектер әулетінен, бірақ көпестер гильдасына тіркелмеген. Қарқаралы округіндегі Нұрбике-Шаншар болысында 1842 жылдың 20 қаңтарынан 1845 жылдың 25 қаңтарына дейін болыс болды. Бұл жұмыстан өз арызы бойынша 1854 жылдың 29 шілдесіндегі бұйрықтың негізінде босатылды, қылмыс жасамаған, тергеуде, сотта болмаған » (ООМА, 3-қор, 3-тізім, 3902 -іс). Тәттімбет Ресей патшасы Александр II-нің таққа отыру салтанатына қатысқан. Сондай-ақ, Шоқан Уәлиханов, Григорий Николаевич Потанин, Адольф Янушкеевич сияқты оқымысты-ғалымдармен, Алшынбай, Құнанбай, Шорманның Мұсасы, Жайықбайдың Ыбырайы, Кішкентайдың Аққошқары, Сандыбайдың Ердені, Уәлиханның Шыңғысы сияқты дала шонжарларымен, Жанақ, Шөже, Кемпірбай, Біржан-сал, Жаяу Мұса, Орынбай сияқты әнші-ақындармен, Тоқа, Ықылас, Итаяк, Шашақ сияқты күйшілермен қадірлес-сыйлас болған. Бұл адамдар Тәттімбет көкірегінен күмбірлеп төгілген әсем күйлердің тұсауын кесіп, талғампаз сарапшысы болып отырған.",
|
||||
"expected": "Тәттімбет атқа ерте мініп, ел ісіне ерте араласқан адам. Батыс-Сібір генерал-губернаторы генерал-майор Фон Фридрихс Тәттімбет туралы арнайы жинаған мәліметінде мынандай дерек келтіреді: 'Тәттімбет — ақ сүйектер әулетінен, бірақ көпестер гильдасына тіркелмеген. Қарқаралы округіндегі Нұрбике-Шаншар болысында 1842 жылдың 20 қаңтарынан 1845 жылдың 25 қаңтарына дейін болыс болды. Бұл жұмыстан өз арызы бойынша 1854 жылдың 29 шілдесіндегі бұйрықтың негізінде босатылды, қылмыс жасамаған, тергеуде, сотта болмаған » (ООМА, 3-қор, 3-тізім, 3902 -іс). Тәттімбет Ресей патшасы Александр II-нің таққа отыру салтанатына қатысқан. Сондай-ақ, Шоқан Уәлиханов, Григорий Николаевич Потанин, Адольф Янушкеевич сияқты оқымысты-ғалымдармен, Алшынбай, Құнанбай, Шорманның Мұсасы, Жайықбайдың Ыбырайы, Кішкентайдың Аққошқары, Сандыбайдың Ердені, Уәлиханның Шыңғысы сияқты дала шонжарларымен, Жанақ, Шөже, Кемпірбай, Біржан-сал, Жаяу Мұса, Орынбай сияқты әнші-ақындармен, Тоқа, Ықылас, Итаяк, Шашақ сияқты күйшілермен қадірлес-сыйлас болған. Бұл адамдар Тәттімбет көкірегінен күмбірлеп төгілген әсем күйлердің тұсауын кесіп, талғампаз сарапшысы болып отырған."
|
||||
},
|
||||
{
|
||||
"variant": "kk",
|
||||
"text": "Tättimbet atqa erte minip, el isine erte aralasqan adam. Batıs-Sibir general-gwbernatorı general-maýor Fon Frïdrïxs Tättimbet twralı arnaýı jïnağan mälimetinde mınandaý derek keltiredi: 'Tättimbet — aq süýekter äwletinen, biraq köpester gïlʹdasına tirkelmegen. Qarqaralı okrwgindegi Nurbïke-Şanşar bolısında 1842 jıldıñ 20 qañtarınan 1845 jıldıñ 25 qañtarına deýin bolıs boldı. Bul jumıstan öz arızı boýınşa 1854 jıldıñ 29 şildesindegi buýrıqtıñ negizinde bosatıldı, qılmıs jasamağan, tergewde, sotta bolmağan » (OOMA, 3-qor, 3-tizim, 3902 -is). Tättimbet Reseý patşası Aleksandr II-niñ taqqa otırw saltanatına qatısqan. Sondaý-aq, Şoqan Wälïxanov, Grïgorïý Nïkolayevïç Potanïn, Adolʹf YAnwşkeyevïç sïyaqtı oqımıstı-ğalımdarmen, Alşınbaý, Qunanbaý, Şormannıñ Musası, Jaýıqbaýdıñ Ibıraýı, Kişkentaýdıñ Aqqoşqarı, Sandıbaýdıñ Erdeni, Wälïxannıñ Şıñğısı sïyaqtı dala şonjarlarımen, Janaq, Şöje, Kempirbaý, Birjan-sal, Jayaw Musa, Orınbaý sïyaqtı änşi-aqındarmen, Toqa, Iqılas, Ïtayak, Şaşaq sïyaqtı küýşilermen qadirles-sıýlas bolğan. Bul adamdar Tättimbet kökireginen kümbirlep tögilgen äsem küýlerdiñ tusawın kesip, talğampaz sarapşısı bolıp otırğan.",
|
||||
"expected": "Tättimbet atqa erte minip, el isine erte aralasqan adam. Batıs-Sibir general-gwbernatorı general-maýor Fon Frïdrïxs Tättimbet twralı arnaýı jïnağan mälimetinde mınandaý derek keltiredi: 'Tättimbet — aq süýekter äwletinen, biraq köpester gïlʹdasına tirkelmegen. Qarqaralı okrwgindegi Nurbïke-Şanşar bolısında 1842 jıldıñ 20 qañtarınan 1845 jıldıñ 25 qañtarına deýin bolıs boldı. Bul jumıstan öz arızı boýınşa 1854 jıldıñ 29 şildesindegi buýrıqtıñ negizinde bosatıldı, qılmıs jasamağan, tergewde, sotta bolmağan » (OOMA, 3-qor, 3-tizim, 3902 -is). Tättimbet Reseý patşası Aleksandr II-niñ taqqa otırw saltanatına qatısqan. Sondaý-aq, Şoqan Wälïxanov, Grïgorïý Nïkolayevïç Potanïn, Adolʹf YAnwşkeyevïç sïyaqtı oqımıstı-ğalımdarmen, Alşınbaý, Qunanbaý, Şormannıñ Musası, Jaýıqbaýdıñ Ibıraýı, Kişkentaýdıñ Aqqoşqarı, Sandıbaýdıñ Erdeni, Wälïxannıñ Şıñğısı sïyaqtı dala şonjarlarımen, Janaq, Şöje, Kempirbaý, Birjan-sal, Jayaw Musa, Orınbaý sïyaqtı änşi-aqındarmen, Toqa, Iqılas, Ïtayak, Şaşaq sïyaqtı küýşilermen qadirles-sıýlas bolğan. Bul adamdar Tättimbet kökireginen kümbirlep tögilgen äsem küýlerdiñ tusawın kesip, talğampaz sarapşısı bolıp otırğan."
|
||||
},
|
||||
{
|
||||
"variant": "kk",
|
||||
"text": "ول ارتىنا كىتاپ جازىپ قالتىرماعان، ىيدەيالارى مەن عۇمىربايانىن شاكىرتتەرى (اسىرەسە پلاتون) جازىپ قالتىرعان. سونداي-اق زامانداسى ارىيستوفاننىڭ (ب.ز.د.۴۴۸- ب.ز.د.۲۲۰) كومەدىيياسىندا ('بۇلت') دا سوكرات كۇلكىلى ادام رەتىندە كەزدەسەدى. پلاتون ٴوز دىيالوگتارىندا سوكراتتى نەگىزگى سۇحباتتاسۋشى ەتكەن. پلاتون بىلاي جازعان: 'مەن ٴوز شىعارمالارىمدى ەڭ ۇلى دانا — سوكراتقا ارنادىم. ادامدار مەنى ۇمىتىپ كەتۋى مۇمكىن، بىراق مەنىڭ شىعارمالارىم ارقىلى سوكراتتى ۇمىتپايتىن بولادى.",
|
||||
"expected": "ول ارتىنا كىتاپ جازىپ قالتىرماعان، ىيدەيالارى مەن عۇمىربايانىن شاكىرتتەرى (اسىرەسە پلاتون) جازىپ قالتىرعان. سونداي-اق زامانداسى ارىيستوفاننىڭ (ب.ز.د.۴۴۸- ب.ز.د.۲۲۰) كومەدىيياسىندا ('بۇلت') دا سوكرات كۇلكىلى ادام رەتىندە كەزدەسەدى. پلاتون ٴوز دىيالوگتارىندا سوكراتتى نەگىزگى سۇحباتتاسۋشى ەتكەن. پلاتون بىلاي جازعان: 'مەن ٴوز شىعارمالارىمدى ەڭ ۇلى دانا — سوكراتقا ارنادىم. ادامدار مەنى ۇمىتىپ كەتۋى مۇمكىن، بىراق مەنىڭ شىعارمالارىم ارقىلى سوكراتتى ۇمىتپايتىن بولادى."
|
||||
},
|
||||
{
|
||||
"variant": "kk-cyrl",
|
||||
"text": "Тәттімбет атқа ерте мініп, ел ісіне ерте араласқан адам. Батыс-Сібір генерал-губернаторы генерал-майор Фон Фридрихс Тәттімбет туралы арнайы жинаған мәліметінде мынандай дерек келтіреді: 'Тәттімбет — ақ сүйектер әулетінен, бірақ көпестер гильдасына тіркелмеген. Қарқаралы округіндегі Нұрбике-Шаншар болысында 1842 жылдың 20 қаңтарынан 1845 жылдың 25 қаңтарына дейін болыс болды. Бұл жұмыстан өз арызы бойынша 1854 жылдың 29 шілдесіндегі бұйрықтың негізінде босатылды, қылмыс жасамаған, тергеуде, сотта болмаған » (ООМА, 3-қор, 3-тізім, 3902 -іс).",
|
||||
"expected": "Тәттімбет атқа ерте мініп, ел ісіне ерте араласқан адам. Батыс-Сібір генерал-губернаторы генерал-майор Фон Фридрихс Тәттімбет туралы арнайы жинаған мәліметінде мынандай дерек келтіреді: 'Тәттімбет — ақ сүйектер әулетінен, бірақ көпестер гильдасына тіркелмеген. Қарқаралы округіндегі Нұрбике-Шаншар болысында 1842 жылдың 20 қаңтарынан 1845 жылдың 25 қаңтарына дейін болыс болды. Бұл жұмыстан өз арызы бойынша 1854 жылдың 29 шілдесіндегі бұйрықтың негізінде босатылды, қылмыс жасамаған, тергеуде, сотта болмаған » (ООМА, 3-қор, 3-тізім, 3902 -іс)."
|
||||
},
|
||||
{
|
||||
"variant": "kk-latn",
|
||||
"text": "Тәттімбет атқа ерте мініп, ел ісіне ерте араласқан адам. Батыс-Сібір генерал-губернаторы генерал-майор Фон Фридрихс Тәттімбет туралы арнайы жинаған мәліметінде мынандай дерек келтіреді: 'Тәттімбет — ақ сүйектер әулетінен, бірақ көпестер гильдасына тіркелмеген. Қарқаралы округіндегі Нұрбике-Шаншар болысында 1842 жылдың 20 қаңтарынан 1845 жылдың 25 қаңтарына дейін болыс болды. Бұл жұмыстан өз арызы бойынша 1854 жылдың 29 шілдесіндегі бұйрықтың негізінде босатылды, қылмыс жасамаған, тергеуде, сотта болмаған » (ООМА, 3-қор, 3-тізім, 3902 -іс). Тәттімбет Ресей патшасы Александр II-нің таққа отыру салтанатына қатысқан. Сондай-ақ, Шоқан Уәлиханов, Григорий Николаевич Потанин, Адольф Янушкеевич сияқты оқымысты-ғалымдармен, Алшынбай, Құнанбай, Шорманның Мұсасы, Жайықбайдың Ыбырайы, Кішкентайдың Аққошқары, Сандыбайдың Ердені, Уәлиханның Шыңғысы сияқты дала шонжарларымен, Жанақ, Шөже, Кемпірбай, Біржан-сал, Жаяу Мұса, Орынбай сияқты әнші-ақындармен, Тоқа, Ықылас, Итаяк, Шашақ сияқты күйшілермен қадірлес-сыйлас болған. Бұл адамдар Тәттімбет көкірегінен күмбірлеп төгілген әсем күйлердің тұсауын кесіп, талғампаз сарапшысы болып отырған.",
|
||||
"expected": "Tättimbet atqa erte minip, el isine erte aralasqan adam. Batıs-Sibir general-gwbernatorı general-maýor Fon Frïdrïxs Tättimbet twralı arnaýı jïnağan mälimetinde mınandaý derek keltiredi: 'Tättimbet — aq süýekter äwletinen, biraq köpester gïlʹdasına tirkelmegen. Qarqaralı okrwgindegi Nurbïke-Şanşar bolısında 1842 jıldıñ 20 qañtarınan 1845 jıldıñ 25 qañtarına deýin bolıs boldı. Bul jumıstan öz arızı boýınşa 1854 jıldıñ 29 şildesindegi buýrıqtıñ negizinde bosatıldı, qılmıs jasamağan, tergewde, sotta bolmağan » (OOMA, 3-qor, 3-tizim, 3902 -is). Tättimbet Reseý patşası Aleksandr II-niñ taqqa otırw saltanatına qatısqan. Sondaý-aq, Şoqan Wälïxanov, Grïgorïý Nïkolayevïç Potanïn, Adolʹf YAnwşkeyevïç sïyaqtı oqımıstı-ğalımdarmen, Alşınbaý, Qunanbaý, Şormannıñ Musası, Jaýıqbaýdıñ Ibıraýı, Kişkentaýdıñ Aqqoşqarı, Sandıbaýdıñ Erdeni, Wälïxannıñ Şıñğısı sïyaqtı dala şonjarlarımen, Janaq, Şöje, Kempirbaý, Birjan-sal, Jayaw Musa, Orınbaý sïyaqtı änşi-aqındarmen, Toqa, Iqılas, Ïtayak, Şaşaq sïyaqtı küýşilermen qadirles-sıýlas bolğan. Bul adamdar Tättimbet kökireginen kümbirlep tögilgen äsem küýlerdiñ tusawın kesip, talğampaz sarapşısı bolıp otırğan."
|
||||
},
|
||||
{
|
||||
"variant": "kk-arab",
|
||||
"text": "Ол артына кітап жазып қалтырмаған, идеялары мен ғұмырбаянын шәкірттері (Әсіресе Платон) жазып қалтырған. Сондай-ақ замандасы Аристофанның (б.з.д.448- б.з.д.220) комедиясында ('Бұлт') да Сократ күлкілі адам ретінде кездеседі. Платон өз диалогтарында Сократты негізгі сұхбаттасушы еткен. Платон былай жазған: 'Мен өз шығармаларымды ең ұлы дана — Сократқа арнадым. Адамдар мені ұмытып кетуі мүмкін, бірақ менің шығармаларым арқылы Сократты ұмытпайтын болады.",
|
||||
"expected": "ول ارتىنا كىتاپ جازىپ قالتىرماعان، ىيدەيالارى مەن عۇمىربايانىن شاكىرتتەرى (اسىرەسە پلاتون) جازىپ قالتىرعان. سونداي-اق زامانداسى ارىيستوفاننىڭ (ب.ز.د.۴۴۸- ب.ز.د.۲۲۰) كومەدىيياسىندا ('بۇلت') دا سوكرات كۇلكىلى ادام رەتىندە كەزدەسەدى. پلاتون ٴوز دىيالوگتارىندا سوكراتتى نەگىزگى سۇحباتتاسۋشى ەتكەن. پلاتون بىلاي جازعان: 'مەن ٴوز شىعارمالارىمدى ەڭ ۇلى دانا — سوكراتقا ارنادىم. ادامدار مەنى ۇمىتىپ كەتۋى مۇمكىن، بىراق مەنىڭ شىعارمالارىم ارقىلى سوكراتتى ۇمىتپايتىن بولادى."
|
||||
},
|
||||
{
|
||||
"variant": "kk-kz",
|
||||
"text": "Тәттімбет атқа ерте мініп, ел ісіне ерте араласқан адам. Батыс-Сібір генерал-губернаторы генерал-майор Фон Фридрихс Тәттімбет туралы арнайы жинаған мәліметінде мынандай дерек келтіреді: 'Тәттімбет — ақ сүйектер әулетінен, бірақ көпестер гильдасына тіркелмеген. Қарқаралы округіндегі Нұрбике-Шаншар болысында 1842 жылдың 20 қаңтарынан 1845 жылдың 25 қаңтарына дейін болыс болды. Бұл жұмыстан өз арызы бойынша 1854 жылдың 29 шілдесіндегі бұйрықтың негізінде босатылды, қылмыс жасамаған, тергеуде, сотта болмаған » (ООМА, 3-қор, 3-тізім, 3902 -іс).",
|
||||
"expected": "Тәттімбет атқа ерте мініп, ел ісіне ерте араласқан адам. Батыс-Сібір генерал-губернаторы генерал-майор Фон Фридрихс Тәттімбет туралы арнайы жинаған мәліметінде мынандай дерек келтіреді: 'Тәттімбет — ақ сүйектер әулетінен, бірақ көпестер гильдасына тіркелмеген. Қарқаралы округіндегі Нұрбике-Шаншар болысында 1842 жылдың 20 қаңтарынан 1845 жылдың 25 қаңтарына дейін болыс болды. Бұл жұмыстан өз арызы бойынша 1854 жылдың 29 шілдесіндегі бұйрықтың негізінде босатылды, қылмыс жасамаған, тергеуде, сотта болмаған » (ООМА, 3-қор, 3-тізім, 3902 -іс)."
|
||||
},
|
||||
{
|
||||
"variant": "kk-tr",
|
||||
"text": "Тәттімбет атқа ерте мініп, ел ісіне ерте араласқан адам. Батыс-Сібір генерал-губернаторы генерал-майор Фон Фридрихс Тәттімбет туралы арнайы жинаған мәліметінде мынандай дерек келтіреді: 'Тәттімбет — ақ сүйектер әулетінен, бірақ көпестер гильдасына тіркелмеген. Қарқаралы округіндегі Нұрбике-Шаншар болысында 1842 жылдың 20 қаңтарынан 1845 жылдың 25 қаңтарына дейін болыс болды. Бұл жұмыстан өз арызы бойынша 1854 жылдың 29 шілдесіндегі бұйрықтың негізінде босатылды, қылмыс жасамаған, тергеуде, сотта болмаған » (ООМА, 3-қор, 3-тізім, 3902 -іс). Тәттімбет Ресей патшасы Александр II-нің таққа отыру салтанатына қатысқан. Сондай-ақ, Шоқан Уәлиханов, Григорий Николаевич Потанин, Адольф Янушкеевич сияқты оқымысты-ғалымдармен, Алшынбай, Құнанбай, Шорманның Мұсасы, Жайықбайдың Ыбырайы, Кішкентайдың Аққошқары, Сандыбайдың Ердені, Уәлиханның Шыңғысы сияқты дала шонжарларымен, Жанақ, Шөже, Кемпірбай, Біржан-сал, Жаяу Мұса, Орынбай сияқты әнші-ақындармен, Тоқа, Ықылас, Итаяк, Шашақ сияқты күйшілермен қадірлес-сыйлас болған. Бұл адамдар Тәттімбет көкірегінен күмбірлеп төгілген әсем күйлердің тұсауын кесіп, талғампаз сарапшысы болып отырған.",
|
||||
"expected": "Tättimbet atqa erte minip, el isine erte aralasqan adam. Batıs-Sibir general-gwbernatorı general-maýor Fon Frïdrïxs Tättimbet twralı arnaýı jïnağan mälimetinde mınandaý derek keltiredi: 'Tättimbet — aq süýekter äwletinen, biraq köpester gïlʹdasına tirkelmegen. Qarqaralı okrwgindegi Nurbïke-Şanşar bolısında 1842 jıldıñ 20 qañtarınan 1845 jıldıñ 25 qañtarına deýin bolıs boldı. Bul jumıstan öz arızı boýınşa 1854 jıldıñ 29 şildesindegi buýrıqtıñ negizinde bosatıldı, qılmıs jasamağan, tergewde, sotta bolmağan » (OOMA, 3-qor, 3-tizim, 3902 -is). Tättimbet Reseý patşası Aleksandr II-niñ taqqa otırw saltanatına qatısqan. Sondaý-aq, Şoqan Wälïxanov, Grïgorïý Nïkolayevïç Potanïn, Adolʹf YAnwşkeyevïç sïyaqtı oqımıstı-ğalımdarmen, Alşınbaý, Qunanbaý, Şormannıñ Musası, Jaýıqbaýdıñ Ibıraýı, Kişkentaýdıñ Aqqoşqarı, Sandıbaýdıñ Erdeni, Wälïxannıñ Şıñğısı sïyaqtı dala şonjarlarımen, Janaq, Şöje, Kempirbaý, Birjan-sal, Jayaw Musa, Orınbaý sïyaqtı änşi-aqındarmen, Toqa, Iqılas, Ïtayak, Şaşaq sïyaqtı küýşilermen qadirles-sıýlas bolğan. Bul adamdar Tättimbet kökireginen kümbirlep tögilgen äsem küýlerdiñ tusawın kesip, talğampaz sarapşısı bolıp otırğan."
|
||||
},
|
||||
{
|
||||
"variant": "kk-cn",
|
||||
"text": "Ол артына кітап жазып қалтырмаған, идеялары мен ғұмырбаянын шәкірттері (Әсіресе Платон) жазып қалтырған. Сондай-ақ замандасы Аристофанның (б.з.д.448- б.з.д.220) комедиясында ('Бұлт') да Сократ күлкілі адам ретінде кездеседі. Платон өз диалогтарында Сократты негізгі сұхбаттасушы еткен. Платон былай жазған: 'Мен өз шығармаларымды ең ұлы дана — Сократқа арнадым. Адамдар мені ұмытып кетуі мүмкін, бірақ менің шығармаларым арқылы Сократты ұмытпайтын болады.",
|
||||
"expected": "ول ارتىنا كىتاپ جازىپ قالتىرماعان، ىيدەيالارى مەن عۇمىربايانىن شاكىرتتەرى (اسىرەسە پلاتون) جازىپ قالتىرعان. سونداي-اق زامانداسى ارىيستوفاننىڭ (ب.ز.د.۴۴۸- ب.ز.د.۲۲۰) كومەدىيياسىندا ('بۇلت') دا سوكرات كۇلكىلى ادام رەتىندە كەزدەسەدى. پلاتون ٴوز دىيالوگتارىندا سوكراتتى نەگىزگى سۇحباتتاسۋشى ەتكەن. پلاتون بىلاي جازعان: 'مەن ٴوز شىعارمالارىمدى ەڭ ۇلى دانا — سوكراتقا ارنادىم. ادامدار مەنى ۇمىتىپ كەتۋى مۇمكىن، بىراق مەنىڭ شىعارمالارىم ارقىلى سوكراتتى ۇمىتپايتىن بولادى."
|
||||
},
|
||||
{
|
||||
"variant": "ku",
|
||||
"text": "Di sala 2015an de stêrnas sê gerstêrk vedîtin. Mezinbûna van gerstêrkan mîna Erdê bûn û li derdora stêrka bejnbihost de diçerixiyan. Tîmeke di bin pêşawatiya esmannas Michaël Gillon ê Zanîngeha Liègeyê ya Belçîkayê de, li Riwangeha La Silla ya Şîleyê de, bi bikaranîna fotometreya transît van gerstêrkan zexm kirin.",
|
||||
|
|
@ -394,4 +349,4 @@
|
|||
"text": "利金河是一條位於美國肯塔基州東北部的河流,是俄亥俄河的支流。長約488公里,部分河段可通航。河流流域約為9,310平方公里。利金河的幹流始於肯塔基州的坎伯蘭高原內,流經丹尼爾·布恩國家森林內的凱夫朗水庫後會與多條溪流合流,最終在卡溫頓及紐波特之間流入俄亥俄河。18世紀前,不少美國原住民部落包括肖尼族及切羅基人等皆生活在利金河流域內,直至18世紀中葉才有大批殖民者進駐。流域內約有51.8%的土地是森林,而已發展地區則主要集中在流域北部。同時,人口膨脹使當地河溪的河漫灘逐漸被蠶食。在北美地區,利金河流域的生物多樣性可謂較為豐富。流域孕育著數以百計的動植物,但部分入侵物種卻對原生物種乃至當地的生態系統造成威脅。此外,未經處理的城市徑流把污染物引至河流系統,導致河流水質出現問題。基於防洪目的,美國陸軍工兵部隊在莫爾黑德南部修築凱夫朗水庫,並形成凱夫朗湖,又在下游城市建造其他防洪設施。",
|
||||
"expected": "利金河是一條位於美國肯塔基州東北部的河流,是俄亥俄河的支流。長約488公里,部分河段可通航。河流流域約為9,310平方公里。利金河的幹流始於肯塔基州的坎伯蘭高原內,流經丹尼爾·布恩國家森林內的凱夫朗水庫後會與多條溪流合流,最終在卡溫頓及紐波特之間流入俄亥俄河。18世紀前,不少美國原住民部落包括肖尼族及切羅基人等皆生活在利金河流域內,直至18世紀中葉才有大批殖民者進駐。流域內約有51.8%的土地是森林,而已發展地區則主要集中在流域北部。同時,人口膨脹使當地河溪的河漫灘逐漸被蠶食。在北美地區,利金河流域的生物多樣性可謂較為豐富。流域孕育著數以百計的動植物,但部分入侵物種卻對原生物種乃至當地的生態系統造成威脅。此外,未經處理的城市徑流把污染物引至河流系統,導致河流水質出現問題。基於防洪目的,美國陸軍工兵部隊在莫爾黑德南部修築凱夫朗水庫,並形成凱夫朗湖,又在下游城市建造其他防洪設施。"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
|
|||
|
|
@ -239,8 +239,7 @@ class LanguageConverterFactoryTest extends MediaWikiLangTestCase {
|
|||
'hy', 'hyw', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'ike-cans',
|
||||
'ike-latn', 'ilo', 'inh', 'io', 'is', 'it', 'ja', 'jam', 'jbo', 'jut',
|
||||
'jv', 'ka', 'kaa', 'kab', 'kbd', 'kbd-cyrl', 'kbp', 'kg', 'khw', 'ki',
|
||||
'kiu', 'kj', 'kjp', 'kk-arab', 'kk-cyrl', 'kk-latn', 'kk-cn', 'kk-kz',
|
||||
'kk-tr', 'kl', 'km', 'kn', 'ko', 'ko-kp', 'koi', 'kr', 'krc', 'kri', 'krj',
|
||||
'kiu', 'kj', 'kjp', 'kl', 'km', 'kn', 'ko', 'ko-kp', 'koi', 'kr', 'krc', 'kri', 'krj',
|
||||
'krl', 'ks', 'ks-arab', 'ks-deva', 'ksh', 'ku-latn', 'ku-arab', 'kum', 'kv',
|
||||
'kw', 'ky', 'la', 'lad', 'lb', 'lbe', 'lez', 'lfn', 'lg', 'li', 'lij', 'liv',
|
||||
'lki', 'lmo', 'ln', 'lo', 'lrc', 'loz', 'lt', 'ltg', 'lus', 'luz', 'lv',
|
||||
|
|
@ -330,28 +329,6 @@ class LanguageConverterFactoryTest extends MediaWikiLangTestCase {
|
|||
]
|
||||
];
|
||||
|
||||
yield 'kk' => [
|
||||
'kk', 'kk', KkConverter::class,
|
||||
[ 'kk', 'kk-cyrl', 'kk-latn', 'kk-arab', 'kk-kz', 'kk-tr', 'kk-cn' ],
|
||||
[
|
||||
'kk' => 'kk-cyrl',
|
||||
'kk-cyrl' => 'kk',
|
||||
'kk-latn' => 'kk',
|
||||
'kk-arab' => 'kk',
|
||||
'kk-kz' => 'kk-cyrl',
|
||||
'kk-tr' => 'kk-latn',
|
||||
'kk-cn' => 'kk-arab'
|
||||
], [], [], [
|
||||
'kk' => 'bidirectional',
|
||||
'kk-cyrl' => 'bidirectional',
|
||||
'kk-latn' => 'bidirectional',
|
||||
'kk-arab' => 'bidirectional',
|
||||
'kk-kz' => 'bidirectional',
|
||||
'kk-tr' => 'bidirectional',
|
||||
'kk-cn' => 'bidirectional'
|
||||
]
|
||||
];
|
||||
|
||||
yield 'ku' => [
|
||||
'ku', 'ku', KuConverter::class,
|
||||
[ 'ku', 'ku-arab', 'ku-latn' ],
|
||||
|
|
|
|||
|
|
@ -1,50 +0,0 @@
|
|||
<?php
|
||||
|
||||
use MediaWiki\Title\Title;
|
||||
|
||||
/**
|
||||
* @group Language
|
||||
* @covers KkConverter
|
||||
*/
|
||||
class KkConverterTest extends MediaWikiIntegrationTestCase {
|
||||
|
||||
use LanguageConverterTestTrait;
|
||||
|
||||
/**
|
||||
* @dataProvider provideAutoConvertToAllVariants
|
||||
* @covers KkConverter::autoConvertToAllVariants
|
||||
*/
|
||||
public function testAutoConvertToAllVariants( $result, $value ) {
|
||||
$this->assertEquals( $result, $this->getLanguageConverter()->autoConvertToAllVariants( $value ) );
|
||||
}
|
||||
|
||||
public static function provideAutoConvertToAllVariants() {
|
||||
return [
|
||||
[
|
||||
[
|
||||
'kk' => 'Адамдарға ақыл-парасат, ар-ождан берілген',
|
||||
'kk-cyrl' => 'Адамдарға ақыл-парасат, ар-ождан берілген',
|
||||
'kk-latn' => 'Adamdarğa aqıl-parasat, ar-ojdan berilgen',
|
||||
'kk-arab' => 'ادامدارعا اقىل-پاراسات، ار-وجدان بەرىلگەن',
|
||||
'kk-kz' => 'Адамдарға ақыл-парасат, ар-ождан берілген',
|
||||
'kk-tr' => 'Adamdarğa aqıl-parasat, ar-ojdan berilgen',
|
||||
'kk-cn' => 'ادامدارعا اقىل-پاراسات، ار-وجدان بەرىلگەن'
|
||||
],
|
||||
'Адамдарға ақыл-парасат, ар-ождан берілген'
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers KkConverter::findVariantLink
|
||||
* @covers LanguageConverter::findVariantLink
|
||||
*/
|
||||
public function testFindVariantLinks() {
|
||||
$old = "sample_link";
|
||||
$newLink = $old;
|
||||
$title = Title::makeTitle( NS_MAIN, "Same page for link" );
|
||||
$title->resetArticleID( 42 );
|
||||
$this->getLanguageConverter()->findVariantLink( $newLink, $title );
|
||||
$this->assertSame( $old, $newLink, "inks should'n be changed" );
|
||||
}
|
||||
}
|
||||
|
|
@ -55,9 +55,6 @@ class LanguageFactoryIntegrationTest extends MediaWikiIntegrationTestCase {
|
|||
[ 'en-rtl', 'en-x-rtl' ],
|
||||
[ 'es-formal', 'es-x-formal' ],
|
||||
[ 'hu-formal', 'hu-x-formal' ],
|
||||
[ 'kk-arab', 'kk-Arab', 'kk' ],
|
||||
[ 'kk-cyrl', 'kk-Cyrl', 'kk' ],
|
||||
[ 'kk-latn', 'kk-Latn', 'kk' ],
|
||||
[ 'map-bms', 'jv-x-bms' ],
|
||||
[ 'mo', 'ro-Cyrl-MD' ],
|
||||
[ 'nrm', 'nrf' ],
|
||||
|
|
|
|||
|
|
@ -138,34 +138,6 @@ class LanguageVariantConverterTest extends MediaWikiIntegrationTestCase {
|
|||
'>Hallo Wereld<',
|
||||
false // The output language is currently not indicated. Should be expected to be 'nl' in the future.
|
||||
];
|
||||
yield 'Variant conversion with fallback to core LanguageConverter' => [
|
||||
new PageBundle(
|
||||
'<p>Siltemeniñ astın sız:</p>',
|
||||
[ 'parsoid-data' ],
|
||||
[ 'mw-data' ],
|
||||
Parsoid::defaultHTMLVersion(),
|
||||
[]
|
||||
),
|
||||
null,
|
||||
'kk-cyrl',
|
||||
'kk-latn',
|
||||
'<p>Сілтеменің астын сыз:</p>',
|
||||
'kk-cyrl|kk-Cyrl'
|
||||
];
|
||||
yield 'Variant conversion with fallback to core LanguageConverter (bogus variant code)' => [
|
||||
new PageBundle(
|
||||
'<p>Сілтеменің астын сыз:</p>',
|
||||
[ 'parsoid-data' ],
|
||||
[ 'mw-data' ],
|
||||
Parsoid::defaultHTMLVersion(),
|
||||
[]
|
||||
),
|
||||
null,
|
||||
'kk-cyrl-BOGUS',
|
||||
'kk-latn',
|
||||
'<p>Сілтеменің астын сыз:</p>',
|
||||
'kk' // We get back the original page language
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue