Генерировать читаемый текст на человеческий язык с машиночитаемыми данными


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

В настоящее время у меня есть функции, такие как эти, на выходе соединяются в основную программу:

function UserinfoJsFormatQty(qty, singular, plural) {
    return String(qty).replace(/\d{1,3}(?=(\d{3})+(?!\d))/g, "$&,") + "\u00a0" + (qty == 1 ? singular : plural);
}

function UserinfoJsFormatDateRel(old) {
    // The code below requires the computer's clock to be set correctly.
    var age = new Date().getTime() - old.getTime();
    var ageNumber, ageRemainder, ageWords;
    if(age < 60000) {
        // less than one minute old
        ageNumber = Math.floor(age / 1000);
        ageWords = UserinfoJsFormatQty(ageNumber, "second", "seconds");
    } else if(age < 3600000) {
        // less than one hour old
        ageNumber = Math.floor(age / 60000);
        ageWords = UserinfoJsFormatQty(ageNumber, "minute", "minutes");
    } else if(age < 86400000) {
        // less than one day old
        ageNumber = Math.floor(age / 3600000);
        ageWords = UserinfoJsFormatQty(ageNumber, "hour", "hours");
        ageRemainder = Math.floor((age - ageNumber * 3600000) / 60000);
    } else if(age < 604800000) {
        // less than one week old
        ageNumber = Math.floor(age / 86400000);
        ageWords = UserinfoJsFormatQty(ageNumber, "day", "days");
    } // ...
    return ageWords;
}

Предполагается генерировать выходные данные, как:

Рецензент и rollbacker, 2 года 9 месяцев, с 8,624 изменения. Последний раз 7 часов назад.

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



268
8
задан 22 февраля 2011 в 04:02 Источник Поделиться
Комментарии
1 ответ

Я вижу несколько потенциальных проблем с уважением к интернационализации:

Я бы посоветовал :


  • локализовать перевод с помощью именованных параметров в замене: это решает проблему заказ, и избежать конкатенации.

  • формат значений, для форматирования чисел и плюрализации, используя отдельную функцию локализованные для каждого языка

  • заменить параметры с отформатированного значения параметризованный перевод, используя шаблонизатор: это должно сохранить некоторые потенциально багги регулярных выражений из вашего кода :)

Вы можете быть заинтересованы в том, чтобы взглянуть на:

и последнее, но не менее важно, как i18n API, в рамках масштабируемой платформе приложений на JavaScript, который я разработал для юридических-коробки :)

Я может быть в состоянии предоставить более практические советы если ты покажешь больше кода, особенно на самом "верху", часть основной программы.

5
ответ дан 26 февраля 2011 в 02:02 Источник Поделиться