【问题标题】:Access i18n package data inside the JS with Meteor.js使用 Meteor.js 访问 JS 内部的 i18n 包数据
【发布时间】:2015-11-02 12:19:57
【问题描述】:

我正在寻找某种方法来访问 tap:i18n Meteor.js 包的数据,以便以正确的语言向用户发送电子邮件。

很遗憾,我在网上找不到任何关于此的内容。

我尝试访问 .json 和 $.getJSON,但没有成功。

有人解决这个问题吗?我的同事也面临同样的问题,但没有找到解决方案。

谢谢你,

大卫

【问题讨论】:

    标签: javascript json meteor internationalization


    【解决方案1】:

    你检查过API docs吗?

    如您所见,您可以在客户端上使用TAPi18n.getLanguage()。您可能正在使用方法触发电子邮件。所以你可以用语言传递一个额外的参数:

    Meteor.call('sendMail', 'Hi!', TAPi18n.getLanguage())
    

    使用模板呈现电子邮件

    您也可以使用Blaze.toHTML 在客户端呈现电子邮件 HTML。然后你可以将它传递给方法调用。

    Meteor.call('sendMail', Blaze.toHTML(Template.myMailTemplate))
    

    您也可以使用Blaze.toHTMLWithData 将一些数据传递到电子邮件。

    呈现电子邮件服务器端

    如果您想向某个用户发送电子邮件,您只需将他们的语言偏好保存在他们的个人资料中即可。因此,每当您使用 TAPi18n.setLanguage 时,您都需要执行以下操作:

    Meteor.users.update(Meteor.userId(), { $set: { 'profile.lang': newLang } })
    TAPi18n.setLanguage(newLang)
    

    然后你可以在服务器上使用meteorhaks:ssr:

    server/*.js

    var user = // Set this to the object of the user you want to send the mail to
    Template.registerHelper('_', TAPi18n._.bind(TAPi18n))
    var myEmailHtml = SSR.render('myEmail', { lang: user.profile.lang })
    

    private/myEmail.html

    <p>{{ _ 'Hi!' lang }}</p>
    

    或者您可以只在 JavaScript 中生成 HTML:

    var user = // Set this to the object of the user you want to send the mail to
    var myEmailHtml = ['<p>' '</p>'].join(TAPi18n._('Hi!', user.profile.lang))
    

    更新

    TAPi18n._ 已重命名为 TAPi18n.__

    THX /u/kvnmrz 的提示。

    【讨论】:

    • 确实有这种可能性,但为了避免在我的 JS 文件中有几个长邮件文本,我想访问 .json 并通过它。没有办法做类似 i18n.getLanguage().emailsText.mailConfirmation 的事情吗?正如我在 HTML 中所做的 {{_ "emailsText.mailConfirmation"}}
    • 我扩展了我的答案,你也可以渲染邮件客户端。
    • 哦,不错!那么是否会根据当前选择的 i18n 语言构建 HTML 邮件?非常感谢芽!
    • 我还是有问题...邮件通常是从服务器发送的(在这里,我能够从处理新通知的函数发送邮件要容易得多)。有没有办法从服务器获取渲染的模板而不必从客户端发送它?如果我这样做,那将是非常棘手和丑陋的:/
    • 我假设您正在向特定用户推送通知。所以我更新了我的答案以包含该案例的解决方案。
    猜你喜欢
    • 2018-05-09
    • 2020-09-20
    • 2014-09-05
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2015-04-11
    相关资源
    最近更新 更多