使用apos.i18n翻译模块选项?

时间:2018-05-01 18:25:34

标签: apostrophe-cms

我需要一个在自定义小部件模块index.js文件中使用撇号-i18n模块的示例。

在搜索了所有Apostrophes内置模块后,我意识到Apostrophe从不使用i18n来翻译javascript字符串。

我尝试了以下(在一个模块中找到),但它说“自我未定义”。我怎么能导入撇号-i18n模块来翻译我在index.js文件中的字符串?

module.exports = {
    extend: 'apostrophe-widgets',
    label: self.apos.i18n.__('Link Page'),
    addFields: {
        name: '_page',
        type: 'joinByOne',
        withType: 'apostrophe-page',
        label: self.apos.i18n.__('Page'),
        required: true,
        idField: 'pageId',
        filters: {
            projection: {
                title: 1,
                slug: 1
            }
        }
    }
};

编辑以供参考:

不需要i18​​n for module选项,因为Apostrophe处理管理字符串本身的语言环境。将小部件添加到apos.areaapos.singleton来电后,所有字符串都显示在locale/en.json内,可以进行翻译(根据我的观察)。

似乎apostrophe-i18n使用浏览器语言来确定要使用的语言环境。必须在app.js

中对此语言进行如下配置
'apostrophe-i18n': {
  locales: ['en', 'de']
},

之后,我在locale/de.json内的所有翻译字符串都被打印到页面上。

在模块中使用self的工作代码(同样,i18n不需要):

module.exports = {

    construct: function(self, options) {
        options.label = self.apos.i18n.__('Link Page');
    },

    extend: 'apostrophe-widgets',
    addFields: [
        {
            name: '_page',
            type: 'joinByOne',
            withType: 'apostrophe-page',
            label: 'Page',
            required: true,
            idField: 'pageId',
            filters: {
                projection: {
                    title: 1,
                    slug: 1
                }
            }
        }
    ]
};

1 个答案:

答案 0 :(得分:0)

self不存在于模块的construct函数之外。尝试改为

  construct: function(self, options) {
    options.label = self.apos.i18n.__('Link Page');
  }