Rrule: Documentação para i18n de toText

Criado em 17 abr. 2013  ·  15Comentários  ·  Fonte: jakubroztocil/rrule

Adicione melhor documentação sobre i18n do método toText() .

  1. Qual é o significado do parâmetro today ?
  2. Quais valores são passados ​​para gettext ?
  3. Como faço para traduzir as coisas? Sou capaz de alterar dayNames e monthNames , mas isso é apenas parte.

Obrigado por criar esta biblioteca!

enhancement

Comentários muito úteis

Alguma atualização? Como traduzir texto para outro idioma?

Todos 15 comentários

Qual é o significado do parâmetro hoje?

Não é realmente usado a partir de agora, você pode simplesmente passar null .

Quais valores são passados ​​para gettext?
Como faço para traduzir as coisas? Consigo alterar dayNames e monthNames, mas isso é apenas uma parte.

A API não é muito boa.

Você precisa criar uma definição de idioma com coisas relacionadas a datas. O padrão em inglês está aqui . tokens são necessários apenas para RRule.fromText .

gettext obtém a string em inglês (você pode ver quais strings são usadas aqui ).

Um exemplo bruto (você precisa do mestre atual, as versões mais antigas armazenaram em cache a saída de 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

TODO: melhore e documente a API (talvez uma classe Language seria bom).

A API não é muito boa.

Hm, sim. Falta alguma coisa. Porque você não pode simplesmente traduzir as palavras. Dependendo do idioma, a ordem também precisa ser alterada, porque eles têm uma gramática diferente. Em vez disso, deve haver strings de formato como

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

Este é apenas um exemplo aproximado. Eu sei que existem muitos casos extremos etc. e que provavelmente é difícil fazer certo.

Acabei de descobrir https://github.com/airbnb/polyglot.js , mas existem muitas outras soluções para i18n

Algo que me mordeu:

Em inglês é "every week" e "every month". Em alemão é "jede Woche" e "jeden Monat". Observe o "n". Não posso simplesmente traduzir "todos", não vai funcionar.

Coisa semelhante com a passagem de "st" ou "rd" para obter o texto. Não faz sentido.

Alguma notícia ou plano? Agora que comecei a usar DTSTART e UNTIL não posso mais usar o método toText . Antes disso, eu era capaz de hackear a implementação atual.

Mais uma coisa para a lista: formatos de data. Eu quero DD.MM.YYYY e não MMMM DD, YYYY .

Não entendo. Em um arquivo html eu tenho esse código com a versão mais recente (2.0).

[código]

testes comerciais

[/código]
Não funciona com o erro:

TypeError: _ is undefined
var defaults = _.clone (RRule.DEFAULT_OPTIONS);
em regra na linha 463.

Onde estou errado?

Você precisa de outra biblioteca chamada underscorejs. Estou no meu telefone, caso contrário, teria dado a você um link.

Em 30 de outubro de 2013, às 23h54, elecoest [email protected] escreveu:

Não entendo. Em um arquivo html eu tenho esse código com a versão mais recente (2.0).

testes comerciais
Não funciona com o erro:

TypeError: _ is undefined

var defaults = .clone (RRule.DEFAULTOPTIONS);
em regra na linha 463.

Onde estou errado?

-
Responda a este e-mail diretamente ou visualize-o no GitHub.

ok, coloquei undesrcore.js na terceira posição ...
Coloquei o underscore.js na primeira posição.
Agora eu estou errado
TypeError: 2 não é um objeto
retornar result.call (this, func.apply (_, args));
em underscore.js

Desculpe, mas esse jeito é para todos os corpos?

Ninguém cometeu esse erro antes?

Muito obrigado por sua ajuda.

Qual é o significado do parâmetro hoje?

Não é realmente usado a partir de agora, você pode simplesmente passar null .

Quais valores são passados ​​para gettext?
Como faço para traduzir as coisas? Consigo alterar dayNames e monthNames, mas isso é apenas uma parte.

A API não é muito boa.

Você precisa criar uma definição de idioma com coisas relacionadas a datas. O padrão em inglês está aqui . tokens são necessários apenas para RRule.fromText .

gettext obtém a string em inglês (você pode ver quais strings são usadas aqui ).

Um exemplo bruto (você precisa do mestre atual, as versões mais antigas armazenaram em cache a saída de 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

TODO: melhore e documente a API (talvez uma classe Language seria bom).

Olá, estou tentando obter i18n para alemão, mas não consigo encontrar quais strings são usadas em "gettext" porque o link está quebrado. Tentei procurar nas fontes, mas não consegui encontrar nada.

Obrigado!

Qual é o significado do parâmetro hoje?

Não é realmente usado a partir de agora, você pode simplesmente passar null .

Quais valores são passados ​​para gettext?
Como faço para traduzir as coisas? Consigo alterar dayNames e monthNames, mas isso é apenas uma parte.

A API não é muito boa.
Você precisa criar uma definição de idioma com coisas relacionadas a datas. O padrão em inglês está aqui . tokens são necessários apenas para RRule.fromText .
gettext obtém a string em inglês (você pode ver quais strings são usadas aqui ).
Um exemplo bruto (você precisa do mestre atual, as versões mais antigas armazenaram em cache a saída de 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

TODO: melhore e documente a API (talvez uma classe Language seria bom).

Olá, estou tentando obter i18n para alemão, mas não consigo encontrar quais strings são usadas em "gettext" porque o link está quebrado. Tentei procurar nas fontes, mas não consegui encontrar nada.

Obrigado!

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

Seria bom ter alguma documentação sobre como usá-lo. Traduzi para o alemão, mas parece errado:

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);

Alguma atualização? Como traduzir texto para outro idioma?

Acho que a i18n desta biblioteca, a partir de agora, é fundamentalmente falha. Coisas como

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'
    ),

são absolutamente necessários para algum uso final da experiência do usuário, em diferentes idiomas. Eu recomendo implementar a lógica nesta alternativa (conforme mencionado por @wakirin neste post). Isso realmente traria o uso dessa biblioteca, já que, neste momento, essa lógica deve ser feita manualmente, a fim de criar alguma lógica i18n utilizável.

ATUALIZAÇÃO: depois de rastrear o código, encontrei uma maneira de fazer o que queria, que, para a minha linguagem, "resolveu". Apenas para referência futura, deixarei aqui uma lista de todas as chaves que você deve traduzir no método getText que você passar.

 '(~ 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 Obrigado,
Com o seu exemplo, fui capaz de usar moment.js e i18n , como abaixo:

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)
      )
    : "";
};

Haverá uma atualização sobre este assunto? Tenho que traduzir para o japonês; a ordem das palavras é significativamente diferente, então não tenho ideia de como proceder ...

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

kirrg001 picture kirrg001  ·  5Comentários

maconfr picture maconfr  ·  6Comentários

marcoancona picture marcoancona  ·  22Comentários

espen picture espen  ·  10Comentários

fatshotty picture fatshotty  ·  5Comentários