Как локализовать цифры? - PullRequest
1 голос
/ 20 мая 2010

Хорошо, я использую математические уравнения для вывода чисел, хотя мне нужно, чтобы это было совместимо для всех языков. В настоящее время все языковые строки находятся в массиве php с именем $txt, и каждый ключ массива вызывается для этого языка. Я выводил следующее: Column 1, Column 2, Column 3 и т. Д., А также Row 1, Row 2, Row 3 и т. Д. Расчеты выполняются с помощью php и javascript, поэтому мне интересно, как лучше поддерживать все языки только для чисел.

Я не делаю переводы, кто-то другой, но мне нужно иметь возможность указать на это, либо на переменную php $ txt, где определен язык, либо, поскольку вычисления выполняются также с помощью javascript Мне нужно как-то хранить это там. Я думаю о сохранении чего-то вроде этого:

// This part goes in the php language file.
$txt['0'] = '0';
$txt['1'] = '1';
$txt['2'] = '2';
$txt['2'] = '3';
$txt['4'] = '4';
$txt['5'] = '5';
$txt['6'] = '6';
$txt['7'] = '7';
$txt['8'] = '8';
$txt['9'] = '9';

// This part goes in the php file that needs to call the numbers.
echo '<script>
    var numtxts = new Array();
    numtxts[0] = \'', $txt['0'], '\';
    numtxts[1] = \'', $txt['1'], '\';
    numtxts[2] = \'', $txt['2'], '\';
    numtxts[3] = \'', $txt['3'], '\';
    numtxts[4] = \'', $txt['4'], '\';
    numtxts[5] = \'', $txt['5'], '\';
    numtxts[6] = \'', $txt['6'], '\';
    numtxts[7] = \'', $txt['7'], '\';
    numtxts[8] = \'', $txt['8'], '\';
    numtxts[9] = \'', $txt['9'], '\';
</script>';

И чем в функции javascript он может получить правильную строку для каждого числа, например, так:

// Example Number String below.
var numString = "10";
var transNum = "";

for(x=0;x<numString.length;x++)
{
    var numChar = numString.charAt(x);
    transNum += numtxts[parseInt(numChar)];
}

return transNum;

Проблема с этим битом кода заключается в том, что он группирует числа, не будучи уверенным, что все языки так делают, как это делает английский язык ...?

Возможно, есть лучший подход к этому? Может кто-нибудь помочь, пожалуйста?

Спасибо:)

Ответы [ 3 ]

4 голосов
/ 20 мая 2010

Для правильной локализации чисел вам понадобится гораздо более сложная логика. Быстрый пример того, что вам нужно сделать:

function localizeNumber($num, $lang) {
    switch ($lang) {

        case 'eng':
        case ...
            return number_format($num, 0);

        case 'deu':
        case ...
            return number_format($num, 0, ',', '.');

        case 'jpn':
            // TODO: learn about Kanji numerals and implement custom logic
            // Example: 3000 -> 三千, 30000 -> 三万, 321 -> 三百二十一

        ...

    }
}

Для большинства западных культур делать нечего, просто в некоторых есть разделитель тысяч и обратный десятичный знак. Если вы хотите перевести числа в неарабские цифры, узнайте, как работает целевая числовая система, а затем реализуйте свою собственную логику (или осмотрите существующие библиотеки).

Также обратите внимание, что хотя японцы, например, имеют "свои собственные цифры" (позаимствованные у китайцев), в эти дни они обычно предпочитают арабские цифры. Это зависит от контекста и того, какое изображение вы хотите передать, хотя иногда лучше выбрать китайские цифры. Это говорит о том, что здесь задействована целая культура, которую вы должны понять в первую очередь.

1 голос
/ 30 октября 2012

PHP NumberFormatter хорошо использовать http://php.net/manual/en/class.numberformatter.php

1 голос
/ 20 мая 2010

Для связи Php / Js просто используйте json:

echo "var jsArray = " + json_encode($phpArray);
...