X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=languages%2Fclasses%2FLanguageUk.php;h=4ad272ba9075ed00c70aba0f100e6ceab66a05cd;hb=b5ef545ae319e9f0d653e7997c202a052132aca6;hp=a16576ec067e916efd6a8fc122af59fd40c0d8e0;hpb=c6208e5d8277ad28e7baa5d4f7a95bc91aedbb9b;p=lhc%2Fweb%2Fwiklou.git diff --git a/languages/classes/LanguageUk.php b/languages/classes/LanguageUk.php index a16576ec06..4ad272ba90 100644 --- a/languages/classes/LanguageUk.php +++ b/languages/classes/LanguageUk.php @@ -1,88 +1,138 @@ 10 && floor(($count % 100) / 10) == 1) { - return $wordform3; + /** + * @param $count int + * @param $forms array + * @return string + */ + function convertPlural( $count, $forms ) { + if ( !count( $forms ) ) { + return ''; + } + + // If the actual number is not mentioned in the expression, then just two forms are enough: + // singular for $count == 1 + // plural for $count != 1 + // For example, "This user belongs to {{PLURAL:$1|one group|several groups}}." + if ( count( $forms ) === 2 ) { + return $count == 1 ? $forms[0] : $forms[1]; + } + + // @todo FIXME: CLDR defines 4 plural forms. Form for decimals is missing/ + // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#uk + $forms = $this->preConvertPlural( $forms, 3 ); + + if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) { + return $forms[2]; } else { - switch ($count % 10) { - case 1: return $wordform1; + switch ( $count % 10 ) { + case 1: return $forms[0]; case 2: case 3: - case 4: return $wordform2; - default: return $wordform3; + case 4: return $forms[1]; + default: return $forms[2]; } } } - /* + /** * Ukrainian numeric format is "12 345,67" but "1234,56" + * + * @param $_ string + * + * @return string */ - - function commafy($_) { - if (!preg_match('/^\d{1,4}$/',$_)) { - return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_))); + function commafy( $_ ) { + if ( !preg_match( '/^\-?\d{1,4}(\.\d+)?$/', $_ ) ) { + return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) ); } else { return $_; } } } -?>