35 'а' =>
'a',
'б' =>
'b',
'в' =>
'v',
'г' =>
'g',
'д' =>
'd',
36 'ђ' =>
'đ',
'е' =>
'e',
'ж' =>
'ž',
'з' =>
'z',
'и' =>
'i',
37 'ј' =>
'j',
'к' =>
'k',
'л' =>
'l',
'љ' =>
'lj',
'м' =>
'm',
38 'н' =>
'n',
'њ' =>
'nj',
'о' =>
'o',
'п' =>
'p',
'р' =>
'r',
39 'с' =>
's',
'т' =>
't',
'ћ' =>
'ć',
'у' =>
'u',
'ф' =>
'f',
40 'х' =>
'h',
'ц' =>
'c',
'ч' =>
'č',
'џ' =>
'dž',
'ш' =>
'š',
42 'А' =>
'A',
'Б' =>
'B',
'В' =>
'V',
'Г' =>
'G',
'Д' =>
'D',
43 'Ђ' =>
'Đ',
'Е' =>
'E',
'Ж' =>
'Ž',
'З' =>
'Z',
'И' =>
'I',
44 'Ј' =>
'J',
'К' =>
'K',
'Л' =>
'L',
'Љ' =>
'Lj',
'М' =>
'M',
45 'Н' =>
'N',
'Њ' =>
'Nj',
'О' =>
'O',
'П' =>
'P',
'Р' =>
'R',
46 'С' =>
'S',
'Т' =>
'T',
'Ћ' =>
'Ć',
'У' =>
'U',
'Ф' =>
'F',
47 'Х' =>
'H',
'Ц' =>
'C',
'Ч' =>
'Č',
'Џ' =>
'Dž',
'Ш' =>
'Š',
51 'a' =>
'а',
'b' =>
'б',
'c' =>
'ц',
'č' =>
'ч',
'ć' =>
'ћ',
52 'd' =>
'д',
'dž' =>
'џ',
'đ' =>
'ђ',
'e' =>
'е',
'f' =>
'ф',
53 'g' =>
'г',
'h' =>
'х',
'i' =>
'и',
'j' =>
'ј',
'k' =>
'к',
54 'l' =>
'л',
'lj' =>
'љ',
'm' =>
'м',
'n' =>
'н',
'nj' =>
'њ',
55 'o' =>
'о',
'p' =>
'п',
'r' =>
'р',
's' =>
'с',
'š' =>
'ш',
56 't' =>
'т',
'u' =>
'у',
'v' =>
'в',
'z' =>
'з',
'ž' =>
'ж',
58 'A' =>
'А',
'B' =>
'Б',
'C' =>
'Ц',
'Č' =>
'Ч',
'Ć' =>
'Ћ',
59 'D' =>
'Д',
'Dž' =>
'Џ',
'Đ' =>
'Ђ',
'E' =>
'Е',
'F' =>
'Ф',
60 'G' =>
'Г',
'H' =>
'Х',
'I' =>
'И',
'J' =>
'Ј',
'K' =>
'К',
61 'L' =>
'Л',
'LJ' =>
'Љ',
'M' =>
'М',
'N' =>
'Н',
'NJ' =>
'Њ',
62 'O' =>
'О',
'P' =>
'П',
'R' =>
'Р',
'S' =>
'С',
'Š' =>
'Ш',
63 'T' =>
'Т',
'U' =>
'У',
'V' =>
'В',
'Z' =>
'З',
'Ž' =>
'Ж',
65 'DŽ' =>
'Џ',
'd!ž' =>
'дж',
'D!ž' =>
'Дж',
'D!Ž' =>
'ДЖ',
66 'Lj' =>
'Љ',
'l!j' =>
'лј',
'L!j' =>
'Лј',
'L!J' =>
'ЛЈ',
67 'Nj' =>
'Њ',
'n!j' =>
'нј',
'N!j' =>
'Нј',
'N!J' =>
'НЈ'
90 if ( is_object( $nt ) ) {
91 $ns = $nt->getNamespace();
98 parent::findVariantLink(
$link, $nt, $ignoreOtherCond );
115 $breaks =
'[^\w\x80-\xff]';
119 $roman =
'(?=[MDCLXVI])M{0,4}(C[DM]|D?C{0,3})(X[LC]|L?X{0,3})(I[VX]|V?I{0,3})';
121 $reg =
'/^' . $roman .
'$|^' . $roman . $breaks .
'|' . $breaks
122 . $roman .
'$|' . $breaks . $roman . $breaks .
'/';
124 $matches = preg_split( $reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE );
128 if ( !isset( $this->mTables[$toVariant] ) ) {
130 . implode(
',', array_keys( $this->mTables ) ) );
132 $ret = $this->mTables[$toVariant]->replace( $m[0] );
133 $mstart = $m[1] + strlen( $m[0] );
135 $ret .= substr( $text, $mstart, $m[1] - $mstart );
136 $ret .= parent::translate( $m[0], $toVariant );
137 $mstart = $m[1] + strlen( $m[0] );
155 $numCyrillic = preg_match_all(
"/[шђчћжШЂЧЋЖ]/u", $text, $dummy );
156 $numLatin = preg_match_all(
"/[šđč枊ĐČĆŽ]/u", $text, $dummy );
158 if ( $variant ==
'sr-ec' ) {
159 return $numCyrillic > $numLatin;
160 } elseif ( $variant ==
'sr-el' ) {
161 return $numLatin > $numCyrillic;
176 parent::__construct();
178 $variants = [
'sr',
'sr-ec',
'sr-el' ];
179 $variantfallbacks = [
186 'S' =>
'S',
'писмо' =>
'S',
'pismo' =>
'S',
187 'W' =>
'W',
'реч' =>
'W',
'reč' =>
'W',
'ријеч' =>
'W',
'riječ' =>
'W'
189 $this->mConverter =
new SrConverter( $this,
'sr', $variants, $variantfallbacks, $flags );
Base class for language conversion.
getPreferredVariant()
Get preferred language variant.
loadTables( $fromCache=true)
Load conversion tables either from the cache or the disk.
Serbian (Српски / Srpski)
Internationalisation code.
Wrapper around strtr() that holds replacements.
There are two levels of conversion for Serbian: the script level (Cyrillics <-> Latin),...
loadDefaultTables()
Load default conversion tables.
findVariantLink(&$link, &$nt, $ignoreOtherCond=false)
A function wrapper:
guessVariant( $text, $variant)
Guess if a text is written in Cyrillic or Latin.
translate( $text, $toVariant)
It translates text into variant, specials:
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses & $ret
usually copyright or history_copyright This message must be in HTML not wikitext & $link