Rrule: Документация для i18n of toText

Созданный на 17 апр. 2013  ·  15Комментарии  ·  Источник: jakubroztocil/rrule

Пожалуйста, добавьте лучшую документацию о i18n метода toText() .

  1. Что означает параметр today ?
  2. Какие значения передаются в gettext ?
  3. Как мне вообще переводить? Я могу изменить dayNames и monthNames , но это только часть.

Спасибо за создание этой библиотеки!

enhancement

Самый полезный комментарий

Любые обновления? Как перевести текст на другой язык?

Все 15 Комментарий

Что означает параметр сегодня?

На данный момент он фактически не используется, вы можете просто передать null .

Какие значения передаются в gettext?
Как мне вообще переводить? Я могу изменить dayNames и monthNames, но это только часть.

API не очень хороший.

Вам нужно создать определение языка с элементами, связанными с датой. Английский по умолчанию здесь . tokens нужны только для RRule.fromText .

gettext получает английскую строку (вы можете увидеть, какие строки используются здесь ).

Грубый пример (вам нужен текущий мастер, более старые версии кешировали вывод toText ):

// Date-related translations
var portuguese = {
    dayNames: [
        "Domingo",
        "Segunda-Feira",
        "Terça-feira",
        "Quarta-feira",
        "Quinta-feira",
        "Sexta-feira",
        "Sábado"
    ],
    monthNames: [
        "Janeiro",
        "Fevereiro",
        // …
    ]
    // `tokens` are only needed for `RRule.fromText`

};


// Strings
var portugueseStrings = {
    'every': 'cada',
    'until': 'até',
    'day': 'dia',
    'days': 'dias',
    'week': 'semana',
    'weeks': 'semanas',
    'on': 'em'
    // …
};

var gettext =  function(id) {
    // Return pt. string, default to english.
    return portugueseStrings[id] || id;
};


var rule = new RRule(RRule.WEEKLY, {
    interval: 5,
    byweekday: [RRule.MO, RRule.FR],
    dtstart: new Date(2012, 1, 1, 10, 30),
    until: new Date(2012, 12, 31)
});

console.log(rule.toText());
// => every 5 weeks on Monday, Friday until January 31, 2013

console.log(rule.toText(null, gettext, portuguese));
// => cada 5 semanas em Segunda-Feira, Sexta-feira até Janeiro 31, 2013

ЗАДАЧИ: улучшить и задокументировать API (возможно, было бы неплохо использовать класс Language ).

API не очень хороший.

Хм, да. Чего-то не хватает. Потому что нельзя просто перевести слова. В зависимости от языка порядок также необходимо изменить, потому что у них разная грамматика. Вместо этого должны быть строки формата, такие как

singular: 'every week on {{dayNames}}',
plural: 'every {{numWeeks}} weeks on {{dayNames}}'

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

Только что наткнулся на https://github.com/airbnb/polyglot.js , но есть много других решений для i18n

Что-то, что меня укусило:

На английском это «каждую неделю» и «каждый месяц». По-немецки это «jede Woche» и «jeden Monat». Обратите внимание на "n". Я не могу просто перевести «каждый», это не сработает.

То же самое с передачей "st" или "rd" в gettext. В этом нет никакого смысла.

Есть новости или планы? Теперь, когда я начал использовать DTSTART и UNTIL я больше не могу использовать метод toText . До этого я мог обойти текущую реализацию.

Еще одна вещь для списка: форматы даты. Я хочу DD.MM.YYYY а не MMMM DD, YYYY .

Я не понимаю. В одном html файле у меня есть этот код последней версии (2.0).

[код]

традиционные тесты

[/код]
Не работает с ошибкой:

TypeError: _ не определено
var defaults = _.clone (RRule.DEFAULT_OPTIONS);
in rrule в строке 463.

Где я не прав?

Вам нужна еще одна библиотека под названием underscorejs. Я разговариваю по телефону, иначе дал бы ссылку.

30 октября 2013 г., в 23:54, elecoest [email protected] написал:

Я не понимаю. В одном html файле у меня есть этот код последней версии (2.0).

традиционные тесты
Не работает с ошибкой:

TypeError: _ не определено

var defaults = .clone (RRule.DEFAULTOPTIONS);
in rrule в строке 463.

Где я не прав?

-
Ответьте на это письмо напрямую или просмотрите его на GitHub.

хорошо, я поставил undesrcore.js на третью позицию ...
Я поставил underscore.js на первую позицию.
Теперь я ошибка
TypeError: 2 не является объектом
вернуть result.call (this, func.apply (_, args));
в underscore.js

Извините, но этот способ подходит для всех?

Ни у кого раньше не было этой ошибки?

Спасибо большое за вашу помощь.

Что означает параметр сегодня?

На данный момент он фактически не используется, вы можете просто передать null .

Какие значения передаются в gettext?
Как мне вообще переводить? Я могу изменить dayNames и monthNames, но это только часть.

API не очень хороший.

Вам нужно создать определение языка с элементами, связанными с датой. Английский по умолчанию здесь . tokens нужны только для RRule.fromText .

gettext получает английскую строку (вы можете увидеть, какие строки используются здесь ).

Грубый пример (вам нужен текущий мастер, более старые версии кешировали вывод toText ):

// Date-related translations
var portuguese = {
    dayNames: [
        "Domingo",
        "Segunda-Feira",
        "Terça-feira",
        "Quarta-feira",
        "Quinta-feira",
        "Sexta-feira",
        "Sábado"
    ],
    monthNames: [
        "Janeiro",
        "Fevereiro",
        // …
    ]
    // `tokens` are only needed for `RRule.fromText`

};


// Strings
var portugueseStrings = {
    'every': 'cada',
    'until': 'até',
    'day': 'dia',
    'days': 'dias',
    'week': 'semana',
    'weeks': 'semanas',
    'on': 'em'
    // …
};

var gettext =  function(id) {
    // Return pt. string, default to english.
    return portugueseStrings[id] || id;
};


var rule = new RRule(RRule.WEEKLY, {
    interval: 5,
    byweekday: [RRule.MO, RRule.FR],
    dtstart: new Date(2012, 1, 1, 10, 30),
    until: new Date(2012, 12, 31)
});

console.log(rule.toText());
// => every 5 weeks on Monday, Friday until January 31, 2013

console.log(rule.toText(null, gettext, portuguese));
// => cada 5 semanas em Segunda-Feira, Sexta-feira até Janeiro 31, 2013

ЗАДАЧИ: улучшить и задокументировать API (возможно, было бы неплохо использовать класс Language ).

Привет, я пытаюсь получить i18n для немецкого языка, но не могу найти, какие строки используются в "gettext", так как ссылка не работает. Я пытался поискать источники, но ничего не нашел.

Спасибо!

Что означает параметр сегодня?

На данный момент он фактически не используется, вы можете просто передать null .

Какие значения передаются в gettext?
Как мне вообще переводить? Я могу изменить dayNames и monthNames, но это только часть.

API не очень хороший.
Вам нужно создать определение языка с элементами, связанными с датой. Английский по умолчанию здесь . tokens нужны только для RRule.fromText .
gettext получает английскую строку (вы можете увидеть, какие строки используются здесь ).
Грубый пример (вам нужен текущий мастер, более старые версии кешировали вывод toText ):

// Date-related translations
var portuguese = {
    dayNames: [
        "Domingo",
        "Segunda-Feira",
        "Terça-feira",
        "Quarta-feira",
        "Quinta-feira",
        "Sexta-feira",
        "Sábado"
    ],
    monthNames: [
        "Janeiro",
        "Fevereiro",
        // …
    ]
    // `tokens` are only needed for `RRule.fromText`

};


// Strings
var portugueseStrings = {
    'every': 'cada',
    'until': 'até',
    'day': 'dia',
    'days': 'dias',
    'week': 'semana',
    'weeks': 'semanas',
    'on': 'em'
    // …
};

var gettext =  function(id) {
    // Return pt. string, default to english.
    return portugueseStrings[id] || id;
};


var rule = new RRule(RRule.WEEKLY, {
    interval: 5,
    byweekday: [RRule.MO, RRule.FR],
    dtstart: new Date(2012, 1, 1, 10, 30),
    until: new Date(2012, 12, 31)
});

console.log(rule.toText());
// => every 5 weeks on Monday, Friday until January 31, 2013

console.log(rule.toText(null, gettext, portuguese));
// => cada 5 semanas em Segunda-Feira, Sexta-feira até Janeiro 31, 2013

ЗАДАЧИ: улучшить и задокументировать API (возможно, было бы неплохо использовать класс Language ).

Привет, я пытаюсь получить i18n для немецкого языка, но не могу найти, какие строки используются в "gettext", так как ссылка не работает. Я пытался поискать источники, но ничего не нашел.

Спасибо!

https://github.com/jakubroztocil/rrule/tree/master/src/nlp

Было бы неплохо иметь документацию по его использованию. Я перевел на немецкий, но это выглядит неправильно:

const germanStrings = {
    every: 'jedes',
    until: 'bis',
    day: 'Tag',
    days: 'Tage',
    week: 'Woche',
    weeks: 'Wochen',
    on: 'ein',
    in: 'in',
    'on the': 'auf dem',
    for: 'für',
    and: 'und',
    or: 'oder',
    at: 'bei',
    last: 'zuletzt',
    '(~ approximate)': '(~ approximativ)',
    times: 'Zeiten',
    time: 'Zeit',
    minutes: 'Minuten',
    hours: 'Stunden',
    weekdays: 'Wochentage',
    weekday: 'Wochentag',
    months: 'Monate',
    month: 'Monat',
    years: 'Jahre',
    year: 'Jahr'
  };
const RRULE_GERMAN = {
  dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
  monthNames: [
    'Januar',
    'Februar',
    'März',
    'April',
    'Mai',
    'Juni',
    'Juli',
    'August',
    'September',
    'Oktober',
    'November',
    'Dezember'
  ]
};
const gettext = id => {
    return germanStrings[id] || id;
};

const rruleText = rule.toText(id => {
    gettext(id);
}, RRULE_GERMAN);

Любые обновления? Как перевести текст на другой язык?

Я думаю, что i18n этой библиотеки на данный момент в корне ошибочен. Вещи как

nth_monthday' => array(
        '1' => 'the 1st',
        '2' => 'the 2nd',
        '3' => 'the 3rd',
        '21' => 'the 21st',
        '22' => 'the 22nd',
        '23' => 'the 23rd',
        '31' => 'the 31st',
        'else' => 'the %{n}th'
    ),

абсолютно необходимы для конечного использования на разных языках. Я бы рекомендовал реализовать логику в этой альтернативе (как упоминалось @wakirin в этом сообщении). Это действительно улучшило бы использование этой библиотеки, поскольку на данный момент эта логика должна выполняться вручную, чтобы создать некоторую полезную логику i18n.

ОБНОВЛЕНИЕ: после сканирования кода я нашел способ делать то, что хотел, который для моего языка «решил» это. На всякий случай я оставлю здесь список всех ключей, которые вы должны перевести в метод getText, который вы передаете.

 '(~ approximate)'
 'and'
 'at'
 'day'
 'days'
 'every'
 'for'
 'hour'
 'hours'
 'in'
 'last'
 'minutes'
 'month'
 'months'
 'nd'
 'on the'
 'on'
 'or'
 'rd'
 'st'
 'th'
 'the'
 'time'
 'times'
 'until'
 'week'
 'weekday'
 'weekdays'
 'weeks'
 'weeks'
 'year'
 'years'
 'RRule error: Unable to fully convert this rrule to text'

@gongAll Спасибо,
В вашем примере я смог использовать moment.js и i18n , как показано ниже:

export const RRuleToText = ({ strRRule }) => {
  const language = {
    dayNames: moment.weekdays(),
    monthNames: moment.months()
  };

  const getText = id => {
    return i18n.t(`vendor.rrule.${id}`, id);
  };

  const dateFormat = (year, month, day) =>
    moment()
      .date(day)
      .year(year)
      .month(month)
      .format("LL");

  return strRRule
    ? capitalize(
        RRule.fromString(strRRule).toText(getText, language, dateFormat)
      )
    : "";
};

Будет ли информация по этому поводу? Мне нужно перевести на японский; порядок слов существенно отличается, поэтому я понятия не имею, как действовать дальше ...

Была ли эта страница полезной?
0 / 5 - 0 рейтинги