• Ранее я уже писал в рубрике «Мысли вслух» о всех ограничениях, которые накладывает локализация на переводчика. Теперь, после того как я выполнил несколько заказов на локализацию и осознал, что я и раньше делал подобное (но рассматривал это как перевод с дополнительными требованиями), я решил создать новую рубрику «Локализация«, где будут рассматриваться проблемы, их решения и новости в области локализации.

    В качестве первой записи я частично продублирую указанную выше статью, в которой описано интересное решение проблемы склонения и множественного числа при локализации веб-сайтов на русский язык.

    Проблема заключается в том, что многие программисты не учитывают особенности склонения и множественного числа существительных в русском языке. Допустим, нужно написать, что найдено столько-то файлов — это может быть 1 файл, 2 файла, 5 файлов. Вариант «файл(-а, -ов)» не подходит, предлагается перестраивать фразу. Например:

    Найдено файлов: %1.

    Это удачное, но не всегда применимое решение.

    Другой вариант — использовать сокращения. Например:

    %1 days left for activation.
    На выполнение активации осталось %1 дн.

    Тоже не всегда подходит — 1, 21, 31 день и т.д. не подпадают под сокращение «дн.».

    Некоторые разработчики предусматривают два варианта фразы — для единственного и множественного числа, например:

    1 day left for activation.
    %1 days left for activation.

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    function declension($n,$string=array('день','дня','дней'))
    {
        $n = abs($n) % 100;
        $n1 = $n % 10;
        if ($n > 10 && $n < 20) return $string[2];
        if ($n1 > 1 && $n1 < 5) return $string[1];
        if ($n1 == 1) return $string[0];
        return $string[2];
    }

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

    Интересно, правильно ли будет при случае посоветовать клиенту описанную функцию для реализации на его веб-сайте?

    Posted by admin @ 07:33

  • 6 комментариев

    • Интересно, правильно ли будет при случае посоветовать клиенту описанную функцию для реализации на его веб-сайте?

      А Вы только советуете или сами программируете?

    • Только что натолкнулся на эту статью. Я программист и в нашем проекте как раз используется приведенный выше алгоритм. И, к сожалению, он содержит ошибку. Для числа 21 результат будет:
      21 день
      21 day (а хотелось бы days)

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Это не спам.
    сделано dimoning.ru

Archives: