Локализация сайта — интересная задача и, в общем-то, не слишком сложная. Но не существует ни одного универсального подхода к ее решению. Кроме того, эта задача многопланова: нужно не только заменить строки, но и продумать много мелочей, которые разницей в строках не ограничиваются.
Сегодня речь о числах. Мой коллега, который в свое время сделал замечательную функцию, выявляющую мобильные версии браузеров, дополнил проект другой простой и полезной функцией, форматирующей числа. Вот промежуточный рабочий фрагмент этой функции:
sub format_number {
my ($number) = @_;
my $type = $number < 10000 ? 'no_ts' : '';
$_num_format{$type} ||= new Number::Format(
-thousands_sep => $type eq 'no_ts' ? '' : "\x{2009}",
-decimal_point => ',',
-neg_format => "\x{2212}x",
);
return $_num_format{$type}->format_number($number);
}
Задача форматирования числа — это не просто разбить его на группы по три цифры. Важно помнить, что по правилам русского языка на тройки следует разбивать только числа, содержащие более четырех цифр. Есть смысл делать исключение лишь для таблиц, в которых много однородных чисел стоят в столбцах друг под другам — различное форматирование в таких случаях испортит весь вид :-)
Все вышеописанное следует теперь дополнить правилами для разных языков. К сожалению, про «правило десяти тысяч» модули для локализации обычно не знают.
Комментировать