Rrule: Documentación para i18n de toText

Creado en 17 abr. 2013  ·  15Comentarios  ·  Fuente: jakubroztocil/rrule

Agregue mejor documentación sobre i18n del método toText() .

  1. ¿Cuál es el significado del parámetro today ?
  2. ¿Qué valores se pasan a gettext ?
  3. ¿Cómo traduzco cosas? Puedo cambiar dayNames y monthNames , pero eso es solo una parte.

¡Gracias por crear esta biblioteca!

enhancement

Comentario más útil

¿Alguna actualización? ¿Cómo traducir texto a otro idioma?

Todos 15 comentarios

¿Cuál es el significado del parámetro de hoy?

En realidad, no se usa a partir de ahora, solo puede pasar null .

¿Qué valores se pasan a gettext?
¿Cómo traduzco cosas? Puedo cambiar dayNames y monthNames, pero eso es solo una parte.

La API no es muy buena.

Necesita crear una definición de lenguaje con cosas relacionadas con la fecha. El inglés predeterminado está aquí . tokens solo se necesitan para RRule.fromText .

gettext obtiene la cadena en inglés (puede ver qué cadenas se utilizan aquí ).

Un ejemplo burdo (necesita el maestro actual, las versiones anteriores almacenaron en caché la salida 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: mejorar y documentar la API (quizás una clase Language sería buena).

La API no es muy buena.

Hm, sí. Falta algo. Porque no puedes simplemente traducir las palabras. Dependiendo del idioma, el orden también debe cambiarse, porque tienen una gramática diferente. En su lugar, debería haber cadenas de formato como

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

Ese es solo un ejemplo aproximado. Sé que hay muchos casos extremos, etc. y que probablemente sea difícil hacerlo bien.

Acabo de encontrar https://github.com/airbnb/polyglot.js , pero hay muchas otras soluciones para i18n

Algo que solo me mordió:

En inglés es "todas las semanas" y "todos los meses". En alemán es "jede Woche" y "jeden Monat". Observe la "n". No puedo simplemente traducir "todos", no funcionará.

Algo similar con pasar "st" o "rd" para obtener texto. No tiene ningún sentido.

¿Alguna novedad o planes? Ahora que comencé a usar DTSTART y UNTIL ya no puedo usar el método toText . Antes de eso, pude piratear la implementación actual.

Una cosa más para la lista: formatos de fecha. Quiero DD.MM.YYYY y no MMMM DD, YYYY .

No entiendo. En un archivo html tengo este código con la última versión (2.0).

[código]

pruebas comerciales

[/código]
No funciona con el error:

TypeError: _ no está definido
var por defecto = _.clone (RRule.DEFAULT_OPTIONS);
en rrule en la línea 463.

¿Dónde estoy equivocado?

Necesita otra biblioteca llamada underscorejs. Estoy en mi teléfono, de lo contrario, te habría dado un enlace.

El 30 de octubre de 2013, a las 11:54 p.m., elecoest [email protected] escribió:

No entiendo. En un archivo html tengo este código con la última versión (2.0).

pruebas comerciales
No funciona con el error:

TypeError: _ no está definido

var por defecto = .clone (RRule.DEFAULTOPTIONS);
en rrule en la línea 463.

¿Dónde estoy equivocado?

-
Responda a este correo electrónico directamente o véalo en GitHub.

ok, había colocado undesrcore.js en tercera posición ...
He colocado underscore.js en primera posición.
Ahora tengo un error
TypeError: 2 no es un objeto
return result.call (this, func.apply (_, args));
en underscore.js

Lo siento, pero ¿esta forma es para todos?

¿Nadie ha tenido este error antes?

Muchas gracias por tu ayuda.

¿Cuál es el significado del parámetro de hoy?

En realidad, no se usa a partir de ahora, solo puede pasar null .

¿Qué valores se pasan a gettext?
¿Cómo traduzco cosas? Puedo cambiar dayNames y monthNames, pero eso es solo una parte.

La API no es muy buena.

Necesita crear una definición de lenguaje con cosas relacionadas con la fecha. El inglés predeterminado está aquí . tokens solo se necesitan para RRule.fromText .

gettext obtiene la cadena en inglés (puede ver qué cadenas se utilizan aquí ).

Un ejemplo burdo (necesita el maestro actual, las versiones anteriores almacenaron en caché la salida 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: mejorar y documentar la API (quizás una clase Language sería buena).

Hola, estoy intentando obtener i18n para alemán, pero no puedo encontrar qué cadenas se utilizan en "gettext" porque el enlace está roto. Traté de buscar en las fuentes pero pude encontrar cualquier cosa.

¡Gracias!

¿Cuál es el significado del parámetro de hoy?

En realidad, no se usa a partir de ahora, solo puede pasar null .

¿Qué valores se pasan a gettext?
¿Cómo traduzco cosas? Puedo cambiar dayNames y monthNames, pero eso es solo una parte.

La API no es muy buena.
Necesita crear una definición de lenguaje con cosas relacionadas con la fecha. El inglés predeterminado está aquí . tokens solo se necesitan para RRule.fromText .
gettext obtiene la cadena en inglés (puede ver qué cadenas se utilizan aquí ).
Un ejemplo burdo (necesita el maestro actual, las versiones anteriores almacenaron en caché la salida 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: mejorar y documentar la API (quizás una clase Language sería buena).

Hola, estoy intentando obtener i18n para alemán, pero no puedo encontrar qué cadenas se utilizan en "gettext" porque el enlace está roto. Traté de buscar en las fuentes pero pude encontrar cualquier cosa.

¡Gracias!

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

Sería bueno tener alguna documentación sobre cómo usarlo. He traducido al alemán, pero se ve mal:

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

¿Alguna actualización? ¿Cómo traducir texto a otro idioma?

Creo que el i18n de esta biblioteca, a partir de ahora, es fundamentalmente defectuoso. Cosas 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'
    ),

son absolutamente necesarios para el uso de la experiencia del usuario final, en diferentes idiomas. Recomendaría implementar la lógica en esta alternativa (como lo menciona @wakirin en esta publicación). Realmente aumentaría el uso de esta biblioteca, ya que, en este momento, esta lógica debe realizarse manualmente para crear alguna lógica i18n utilizable.

ACTUALIZACIÓN: después de rastrear el código, encontré una manera de hacer lo que quería, que, para mi lenguaje, lo "resolvió". Solo para referencia futura, dejaré aquí una lista de todas las claves que debe traducir en el método getText que transmita.

 '(~ 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 Gracias,
Con su ejemplo, pude usar moment.js e i18n , como se muestra a continuación:

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

¿Habrá una actualización sobre este asunto? Tengo que traducir al japonés; el orden de las palabras es significativamente diferente, así que no tengo idea de cómo proceder ...

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

espen picture espen  ·  10Comentarios

agordeev picture agordeev  ·  16Comentarios

jimmywarting picture jimmywarting  ·  9Comentarios

elazar picture elazar  ·  18Comentarios

spurreiter picture spurreiter  ·  3Comentarios