【问题标题】:How to localize (i18n) moment.js within meteor.js?如何在meteor.js中本地化(i18n)moment.js?
【发布时间】:2014-06-14 02:07:43
【问题描述】:

如何告诉在meteor.js 应用程序中使用的moment.js 使用其他语言而不是英语? moment.js(作为 mrt 包安装)可以很好地使用默认的英语语言。

使用 http://momentjs.com/docs/#/i18n/changing-language/ 的 moment.js 文档中的演示调用始终会生成“en”。我注意到meteor_project/packages/moment/lib/moment/lang/de.js 中有一个暂时没有使用的德语文件?

要指定:在我尝试过的模板助手中: moment.lang('de'); return moment.lang() //将返回 'en'

以及此处提到的其他选项:Format a date from inside a Handlebars Template in Meteor

【问题讨论】:

  • 您是否包含moment-with-langs.js?我对 mrt 包一无所知...
  • 不,我只在 mrt add meteor 中包含了流星。 phoenix 在他的 anwser 中添加了缺少的信息,现在它可以工作了。

标签: javascript internationalization meteor momentjs


【解决方案1】:

只是不要使用 Meteorite 包。包括 Moment.js 客户端以及您需要的任何语言文件。

  1. mrt remove moment
  2. 在您的项目中创建一个文件夹client/compatibility/moment
  3. http://momentjs.com/downloads/moment-with-locales.min.js 保存到client/compatibility/moment

就是这样。你不需要添加任何<script> 标签,什么都没有。因为 Moment.js 位于 client/compatibility 子文件夹中,所以从 clientclient 的任何其他子文件夹加载的任何客户端代码都将在加载 Moment.js 之后运行。 p>

【讨论】:

  • 该链接已损坏,我似乎无法通过 Google 找到它引用的文件。
  • 我认为当前的等价物是momentjs.com/downloads/moment-with-locales.js
  • 感谢您的回答!由于我不小心将 moment.js 包含在我的项目中两次,所以最初我没有得到它,但现在它可以工作了。
【解决方案2】:

如果您将moment 安装为

mrt add moment

那么您已经获得了语言,但您必须手动包含它们。在packages\moment\lib\lang 找到他们。要包含它们,请转到 package.js 文件并在所有其他文件之后添加您选择的语言。

api.add_files('lib/moment/lang/de.js', 'client')

你去吧!

【讨论】:

  • 太棒了!我想知道为什么 github.com/acreeger/meteor-moment 没有包含这些信息,或者我错过了?
  • 这在 Meteor 1.0.3.2 中不起作用。结构不一样。我正在四处寻找如何解决它。也许你知道?
【解决方案3】:

如果您直到今天执行官方“meteor add momentjs:moment”,他们似乎仍然只是安装了没有翻译的momentum.js。 我的解决方法:只需打开 moment-with-locales.js 和 Str-F 您想要的语言(在我的情况下为德语)并复制并过去:

// moment.js locale configuration
// locale : german (de)
// author : lluchs : 
// author: Menelion Elensúle: 

(function (factory) {
    ...
}`

在momentum.js 文件中,例如客户端/lib 文件夹。重新加载,然后你就可以使用 moment.locale('de') ... 因为 moment.lang('de') 已被弃用。

【讨论】:

    【解决方案4】:

    至于今天(2015 年 7 月)我已经这样做了:

    从 Moment.js github 存储库下载 locales.min.js 并将其放在应用程序的客户端文件夹中的某个位置。

    我选择client/lib/moment/locales.min.js
    然后你可以设置你喜欢的任何语言环境(那一刻 js 有)并根据用户帐户设置进行更改。

    moment.locale('en')
    // or
    moment.locale('ru')
    

    我不喜欢的是所有语言都合并在一个文件中。即使它不是太大,仍有一些工作要做(ajax 调用或类似的东西来获取您需要的区域设置文件)


    顺便说一句。如果您不需要所有支持的语言,您可以获取 locale files
    我相信meteor.js会在你投入生产时自动缩小这些文件

    【讨论】:

    • 仅供参考,您应该将这样的库文件放入 client/compatibility 以确保正确的加载顺序并加快 Meteor 构建时间(因为它不会尝试评估该特殊文件夹中的文件)。
    【解决方案5】:

    你可以使用rzymek的包。

    这些包使用官方的 momentjs:moment Meteor 包。

    地区:

    添加特定区域设置用户

    meteor add rzymek:moment-locale-pl

    完整的语言环境列表可以通过以下方式获得

    meteor search rzymek:moment-locale-.*

    要添加所有语言环境,请使用:

    meteor add rzymek:moment-locales

    【讨论】:

      【解决方案6】:

      我做了以下翻译。

      你必须安装“momentjs:moment”。

      之后,您必须为要添加的每种语言使用以下行。我把它放在我的 main.js 文件中。

      // French translation for moment JS
      moment.locale('fr', {
          months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),
          monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),
          weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),
          weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"),
          weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),
          longDateFormat : {
              LT : "HH:mm",
              LTS : "HH:mm:ss",
              L : "DD/MM/YYYY",
              LL : "D MMMM YYYY",
              LLL : "D MMMM YYYY LT",
              LLLL : "dddd D MMMM YYYY LT"
          },
          calendar : {
              sameDay: "[Aujourd'hui à] LT",
              nextDay: '[Demain à] LT',
              nextWeek: 'dddd [à] LT',
              lastDay: '[Hier à] LT',
              lastWeek: 'dddd [dernier à] LT',
              sameElse: 'L'
          },
          relativeTime : {
              future : "dans %s",
              past : "il y a %s",
              s : "quelques secondes",
              m : "une minute",
              mm : "%d minutes",
              h : "une heure",
              hh : "%d heures",
              d : "un jour",
              dd : "%d jours",
              M : "un mois",
              MM : "%d mois",
              y : "une année",
              yy : "%d années"
          },
          ordinalParse : /\d{1,2}(er|ème)/,
          ordinal : function (number) {
              return number + (number === 1 ? 'er' : 'ème');
          },
          meridiemParse: /PD|MD/,
          isPM: function (input) {
              return input.charAt(0) === 'M';
          },
          // in case the meridiem units are not separated around 12, then implement
          // this function (look at locale/id.js for an example)
          // meridiemHour : function (hour, meridiem) {
          //     return /* 0-23 hour, given meridiem token and hour 1-12 */
          // },
          meridiem : function (hours, minutes, isLower) {
              return hours < 12 ? 'PD' : 'MD';
          },
          week : {
              dow : 1, // Monday is the first day of the week.
              doy : 4  // The week that contains Jan 4th is the first week of the year.
          }
      });

      然后就没有"ReferenceError: module is not defined"了。有关信息,我使用momentjs:moment@2.11.0

      【讨论】:

        猜你喜欢
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        • 2017-05-26
        • 2012-12-23
        • 2019-08-21
        相关资源
        最近更新 更多