Rrule: Dokumentation für i18n von toText

Erstellt am 17. Apr. 2013  ·  15Kommentare  ·  Quelle: jakubroztocil/rrule

Bitte fügen Sie eine bessere Dokumentation über i18n der Methode toText() .

  1. Was bedeutet der Parameter today ?
  2. Welche Werte werden an gettext ?
  3. Wie übersetze ich eigentlich Sachen? Ich kann dayNames und monthNames ändern, aber das ist nur ein Teil davon.

Vielen Dank, dass Sie diese Bibliothek erstellt haben!

enhancement

Hilfreichster Kommentar

Irgendwelche Updates? Wie übersetzt man Text in eine andere Sprache?

Alle 15 Kommentare

Was bedeutet der Parameter heute?

Es wird derzeit nicht wirklich verwendet, Sie können einfach null .

Welche Werte werden an gettext übergeben?
Wie übersetze ich eigentlich Sachen? Ich kann dayNames und monthNames ändern, aber das ist nur ein Teil davon.

Die API ist nicht sehr schön.

Sie müssen eine Sprachdefinition mit Datumsangaben erstellen. Die englische Standardeinstellung ist hier . tokens werden nur für RRule.fromText .

gettext ruft den englischen String ab (Sie können hier sehen, welche Strings verwendet werden ).

Ein grobes Beispiel (Sie benötigen den aktuellen Master, ältere Versionen haben die Ausgabe von 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: API verbessern und dokumentieren (vielleicht wäre eine Klasse Language nett).

Die API ist nicht sehr schön.

Hm, ja. Es fehlt etwas. Denn man kann die Wörter nicht einfach übersetzen. Je nach Sprache muss auch die Reihenfolge geändert werden, da sie eine andere Grammatik haben. Stattdessen sollten Formatzeichenfolgen wie

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

Das ist nur ein grobes Beispiel. Ich weiß, dass es viele Randfälle usw. gibt und dass es wahrscheinlich schwierig ist, es richtig zu machen.

Bin gerade auf https://github.com/airbnb/polyglot.js gestoßen , aber es gibt viele andere Lösungen für i18n

Etwas, das mich gerade gebissen hat:

Auf Englisch heißt es "jede Woche" und "jeden Monat". Auf Deutsch heißt es "jede Woche" und "jeden Monat". Beachten Sie das "n". Ich kann nicht einfach "jeder" übersetzen, das geht nicht.

Ähnliches mit der Übergabe von "st" oder "rd" an gettext. Es macht keinen Sinn.

Gibt es Neuigkeiten oder Pläne? Jetzt, wo ich angefangen habe, DTSTART und UNTIL kann ich die Methode toText nicht mehr verwenden. Davor konnte ich die aktuelle Implementierung herumhacken.

Noch etwas für die Liste: Datumsformate. Ich will DD.MM.YYYY und nicht MMMM DD, YYYY .

Ich verstehe nicht. In einer HTML-Datei habe ich diesen Code mit der neuesten Version (2.0).

[Code]

Handelstests

[/Code]
Es funktioniert nicht mit dem Fehler:

TypeError: _ ist nicht definiert
var-Standardwerte = _.clone(RRule.DEFAULT_OPTIONS);
in der Regel in Zeile 463.

Wo liege ich falsch?

Sie benötigen eine weitere Bibliothek namens underscorejs. Ich telefoniere, sonst hätte ich dir einen Link gegeben.

Am 30. Oktober 2013 um 23:54 Uhr schrieb elecoest [email protected] :

Ich verstehe nicht. In einer HTML-Datei habe ich diesen Code mit der neuesten Version (2.0).

Handelstests
Es funktioniert nicht mit dem Fehler:

TypeError: _ ist nicht definiert

var defaults = .clone(RRule.DEFAULTOPTIONS);
in der Regel in Zeile 463.

Wo liege ich falsch?


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an.

ok, ich hatte undesrcore.js an dritter Stelle platziert...
Ich habe underscore.js an erster Stelle platziert.
Jetzt habe ich einen Fehler
TypeError: 2 ist kein Objekt
return result.call(this, func.apply(_, args));
in underscore.js

Sorry aber dieser Weg ist ak für jeden Körper ?

Hat noch keiner diesen Fehler gehabt?

Vielen dank für Deine Hilfe.

Was bedeutet der Parameter heute?

Es wird derzeit nicht wirklich verwendet, Sie können einfach null .

Welche Werte werden an gettext übergeben?
Wie übersetze ich eigentlich Sachen? Ich kann dayNames und monthNames ändern, aber das ist nur ein Teil davon.

Die API ist nicht sehr schön.

Sie müssen eine Sprachdefinition mit Datumsangaben erstellen. Die englische Standardeinstellung ist hier . tokens werden nur für RRule.fromText .

gettext ruft den englischen String ab (Sie können hier sehen, welche Strings verwendet werden ).

Ein grobes Beispiel (Sie benötigen den aktuellen Master, ältere Versionen haben die Ausgabe von 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: API verbessern und dokumentieren (vielleicht wäre eine Klasse Language nett).

Hallo, ich versuche, i18n für Deutsch zu bekommen, kann aber nicht finden, welche Strings in "gettext" verwendet werden, da der Link defekt ist. Ich habe versucht, in den Quellen nachzusehen, aber ich konnte alles finden.

Vielen Dank!

Was bedeutet der Parameter heute?

Es wird derzeit nicht wirklich verwendet, Sie können einfach null .

Welche Werte werden an gettext übergeben?
Wie übersetze ich eigentlich Sachen? Ich kann dayNames und monthNames ändern, aber das ist nur ein Teil davon.

Die API ist nicht sehr schön.
Sie müssen eine Sprachdefinition mit Datumsangaben erstellen. Die englische Standardeinstellung ist hier . tokens werden nur für RRule.fromText .
gettext ruft den englischen String ab (Sie können hier sehen, welche Strings verwendet werden ).
Ein grobes Beispiel (Sie benötigen den aktuellen Master, ältere Versionen haben die Ausgabe von 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: API verbessern und dokumentieren (vielleicht wäre eine Klasse Language nett).

Hallo, ich versuche, i18n für Deutsch zu bekommen, kann aber nicht finden, welche Strings in "gettext" verwendet werden, da der Link defekt ist. Ich habe versucht, in den Quellen nachzusehen, aber ich konnte alles finden.

Vielen Dank!

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

Wäre schön, wenn ich eine Dokumentation zur Verwendung hätte. Ich habe ins Deutsche übersetzt, aber es sieht falsch aus:

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

Irgendwelche Updates? Wie übersetzt man Text in eine andere Sprache?

Ich denke, das i18n dieser Bibliothek ist derzeit grundlegend fehlerhaft. Dinge wie

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

sind für die endgültige Nutzung der Benutzererfahrung in verschiedenen Sprachen absolut notwendig. Ich würde empfehlen, die Logik in dieser Alternative zu implementieren (wie von @wakirin in diesem Beitrag erwähnt). Es würde die Verwendung dieser Bibliothek wirklich auf den Punkt bringen, da diese Logik derzeit manuell ausgeführt werden muss, um eine brauchbare i18n-Logik zu erstellen.

UPDATE: Nach dem Crawlen des Codes habe ich einen Weg gefunden, das zu tun, was ich wollte, der es für meine Sprache "gelöst" hat. Nur für zukünftige Referenzen hinterlasse ich hier eine Liste aller Schlüssel, die Sie für die von Ihnen übergebene getText-Methode übersetzen müssen.

 '(~ 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 Danke,
In Ihrem Beispiel konnte ich moment.js und i18n wie folgt verwenden :

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

Wird es zu diesem Thema ein Update geben? Ich muss ins Japanische übersetzen; Die Reihenfolge der Wörter unterscheidet sich erheblich, daher habe ich keine Ahnung, wie ich vorgehen soll...

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen