In some languages it's conventional not to insert a thousands separator in numbers that are four digits long (1000-9999). Rather than copy-paste the custom code to do this between 13 files, introduce another option and have the base Language class handle it. This also fixes an issue in several languages where this logic previously would not work for negative or fractional numbers. To implement this, a new option is added to MessagesXx.php files, `$minimumGroupingDigits = 2;`, with the meaning as defined in <http://unicode.org/reports/tr35/tr35-numbers.html>. It is a little roundabout, but it could allow us to migrate the number formatting (currently all custom code) to some generic library easily. Bug: T177846 Change-Id: Iedd8de5648cf2de1c94044918626de2f96365d48
81 lines
2.5 KiB
PHP
81 lines
2.5 KiB
PHP
<?php
|
||
/**
|
||
* Armenian (Հայերեն) specific code.
|
||
*
|
||
* 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
|
||
* @author Ruben Vardanyan (Me@RubenVardanyan.com)
|
||
* @ingroup Language
|
||
*/
|
||
|
||
/**
|
||
* Armenian (Հայերեն)
|
||
*
|
||
* @ingroup Language
|
||
*/
|
||
class LanguageHy extends Language {
|
||
|
||
/**
|
||
* Convert from the nominative form of a noun to some other case
|
||
* Invoked with {{grammar:case|word}}
|
||
*
|
||
* @param string $word
|
||
* @param string $case
|
||
* @return string
|
||
*/
|
||
function convertGrammar( $word, $case ) {
|
||
global $wgGrammarForms;
|
||
if ( isset( $wgGrammarForms['hy'][$case][$word] ) ) {
|
||
return $wgGrammarForms['hy'][$case][$word];
|
||
}
|
||
|
||
# These rules are not perfect, but they are currently only used for site names so it doesn't
|
||
# matter if they are wrong sometimes. Just add a special case for your site name if necessary.
|
||
|
||
# join and array_slice instead mb_substr
|
||
$ar = [];
|
||
preg_match_all( '/./us', $word, $ar );
|
||
if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
|
||
switch ( $case ) {
|
||
case 'genitive': # սեռական հոլով
|
||
if ( implode( '', array_slice( $ar[0], -1 ) ) == 'ա' ) {
|
||
$word = implode( '', array_slice( $ar[0], 0, -1 ) ) . 'այի';
|
||
} elseif ( implode( '', array_slice( $ar[0], -1 ) ) == 'ո' ) {
|
||
$word = implode( '', array_slice( $ar[0], 0, -1 ) ) . 'ոյի';
|
||
} elseif ( implode( '', array_slice( $ar[0], -4 ) ) == 'գիրք' ) {
|
||
$word = implode( '', array_slice( $ar[0], 0, -4 ) ) . 'գրքի';
|
||
} else {
|
||
$word .= 'ի';
|
||
}
|
||
break;
|
||
case 'dative': # Տրական հոլով
|
||
# stub
|
||
break;
|
||
case 'accusative': # Հայցական հոլով
|
||
# stub
|
||
break;
|
||
case 'instrumental':
|
||
# stub
|
||
break;
|
||
case 'prepositional':
|
||
# stub
|
||
break;
|
||
}
|
||
}
|
||
return $word;
|
||
}
|
||
}
|