Rrule: toText 的 i18n 文档

创建于 2013-04-17  ·  15评论  ·  资料来源: jakubroztocil/rrule

请添加有关toText()方法的 i18n 的更好文档。

  1. today参数的含义是什么?
  2. 哪些值被传递给gettext
  3. 我如何实际翻译内容? 我可以更改dayNamesmonthNames ,但这只是其中的一部分。

感谢您创建这个库!

enhancement

最有用的评论

任何更新? 如何将文本翻译成其他语言?

所有15条评论

today 参数的含义是什么?

它目前尚未实际使用,您只需传递null

将哪些值传递给 gettext?
我如何实际翻译内容? 我可以更改 dayNames 和 monthNames,但这只是其中的一部分。

API 不是很好。

您需要使用与日期相关的内容创建语言定义。 默认英文版在这里tokens只需要RRule.fromText

gettext获取英文字符串(你可以在这里看到使用

一个粗略的例子(你需要当前的 master,旧版本缓存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(也许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的类似事情。 这没有任何意义。

有什么消息或计划吗? 现在我开始使用DTSTARTUNTIL我不能再使用toText方法了。 在此之前,我能够绕过当前的实现。

列表中的另一件事:日期格式。 我想要DD.MM.YYYY而不是MMMM DD, YYYY

我不明白。 在一个 html 文件中,我有最新版本 (2.0) 的这段代码。

[代码]

传统测试

[/代码]
它不适用于错误:

类型错误:_ 未定义
var 默认值 = _.clone(RRule.DEFAULT_OPTIONS);
在第 463 行的规则中。

我哪里错了?

您需要另一个名为 underscorejs 的库。 我正在打电话,否则我会给你一个链接。

年10月30,2013年,在下午11点54分,elecoest [email protected]写道:

我不明白。 在一个 html 文件中,我有最新版本 (2.0) 的这段代码。

传统测试
错误不起作用:

类型错误:_ 未定义

var defaults = .clone(RRule.DEFAULTOPTIONS);
在第 463 行的规则中。

我哪里错了?


直接回复此邮件或在 GitHub 上查看。

好吧,我把 undesrcore.js 放在第三位......
我把 underscore.js 放在第一位。
现在我出错了
类型错误:2 不是对象
return result.call(this, func.apply(_, args));
在下划线.js

抱歉,但这种方式对每个人都适用吗?

以前没有人有这个错误吗?

非常感谢你的帮助。

today 参数的含义是什么?

它目前尚未实际使用,您只需传递null

将哪些值传递给 gettext?
我如何实际翻译内容? 我可以更改 dayNames 和 monthNames,但这只是其中的一部分。

API 不是很好。

您需要使用与日期相关的内容创建语言定义。 默认英文版在这里tokens只需要RRule.fromText

gettext获取英文字符串(你可以在这里看到使用

一个粗略的例子(你需要当前的 master,旧版本缓存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(也许Language类会很好)。

嗨,我正在尝试为德语获取 i18n,但是由于链接已损坏,我找不到“gettext”中使用的字符串。 我试图查看来源,但我可以找到任何东西。

谢谢!

today 参数的含义是什么?

它目前尚未实际使用,您只需传递null

将哪些值传递给 gettext?
我如何实际翻译内容? 我可以更改 dayNames 和 monthNames,但这只是其中的一部分。

API 不是很好。
您需要使用与日期相关的内容创建语言定义。 默认英文版在这里tokens只需要RRule.fromText
gettext获取英文字符串(你可以在这里看到使用
一个粗略的例子(你需要当前的 master,旧版本缓存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(也许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.jsi18n ,如下所示:

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 等级

相关问题

maconfr picture maconfr  ·  6评论

shavenwalrus picture shavenwalrus  ·  7评论

elazar picture elazar  ·  18评论

grigio picture grigio  ·  7评论

berardo picture berardo  ·  9评论