【问题标题】:i18next Error: ENOENTi18next 错误:ENOENT
【发布时间】:2015-05-28 17:11:13
【问题描述】:

我有这个:

  I18N =
    detectLngQS: "lang"
    resGetPath: "locales/__lng__/__ns__.json"
    ns: { namespaces: ['ns.common', 'ns.layout', 'ns.forms', 'ns.msg'], defaultNs: 'ns.common'}
    ignoreRoutes: ["images/", "public/", "css/"]
    extension:".json"
    debug: false

在我的 node-express 应用程序中,我的语言环境如下:

☺  tree -L 2 locales                                                                                                                            ruby-2.0.0-p195 master 02bd09a ✗""
locales
├── README.md
├── cs-CZ
│   ├── ns.common.json
│   ├── ns.forms.json
│   ├── ns.layout.json
│   └── ns.msg.json
├── dev
│   ├── ns.common.json
│   ├── ns.forms.json
│   ├── ns.layout.json
│   └── ns.msg.json
├── en-UK
│   ├── ns.common.json
│   ├── ns.layout.json
│   └── ns.msg.json
├── fr-FR
│   ├── ns.common.json
│   ├── ns.forms.json
│   ├── ns.layout.json
│   └── ns.msg.json
└── sk-SK
    ├── ns.common.json
    ├── ns.forms.json
    ├── ns.layout.json
    └── ns.msg.json

我在控制台中不断收到ENOENT 消息,例如:

currentLng set to: fr-FR
loaded file: locales/fr-FR/ns.common.json
loaded file: locales/fr-FR/ns.layout.json
loaded file: locales/fr-FR/ns.forms.json
loaded file: locales/fr-FR/ns.msg.json
[ { [Error: ENOENT, open 'locales/fr/ns.common.json'] errno: 34, code: 'ENOENT', path: 'locales/fr/ns.common.json' },
  { [Error: ENOENT, open 'locales/fr/ns.layout.json'] errno: 34, code: 'ENOENT', path: 'locales/fr/ns.layout.json' },
  { [Error: ENOENT, open 'locales/fr/ns.forms.json'] errno: 34, code: 'ENOENT', path: 'locales/fr/ns.forms.json' },
  { [Error: ENOENT, open 'locales/fr/ns.msg.json'] errno: 34, code: 'ENOENT', path: 'locales/fr/ns.msg.json' } ]

我错过了什么?

另外,在某些情况下,我只想使用备用文件,例如 en-UK,我没有 ns.forms.json 文件所以我得到

locales en-UK
loaded file: locales/en-UK/ns.common.json
loaded file: locales/en-UK/ns.layout.json
loaded file: locales/en-UK/ns.msg.json
[ { [Error: ENOENT, open 'locales/en/ns.common.json'] errno: 34, code: 'ENOENT', path: 'locales/en/ns.common.json' },
  { [Error: ENOENT, open 'locales/en/ns.layout.json'] errno: 34, code: 'ENOENT', path: 'locales/en/ns.layout.json' },
  { [Error: ENOENT, open 'locales/en-UK/ns.forms.json']
    errno: 34,
    code: 'ENOENT',
    path: 'locales/en-UK/ns.forms.json' },

解决这个问题的正确方法是什么?

任何建议都非常感谢

【问题讨论】:

  • ENOENT 表示它没有找到文件(实体)。例如,您似乎在 locales/en-UK/ns.forms.json 没有文件。问题是,当语言是 fr-Fr 时,为什么它会在 /fr/ 中查找?尝试的简单解决方法是将fr-Fr 目录重命名为fr。不是一个实际的答案,因为我只是在试一试。
  • github.com/jamuhl/i18next/blob/… -- 尝试打破该行并查看它试图解析的 url。

标签: node.js express coffeescript i18next


【解决方案1】:

由于在 Thread 中仍然没有解决此问题,但谷歌在此问题上的热门点击之一是解决方案:

var options = {
    preload: ['en-US','de-DE'],
    fallbackLng: 'en-US',
    cookieName: 'lng',
    saveMissing: true,
    debug: true,
    resGetPath: 'locales/__lng__/__ns__.json',
    lng: 'en-US',   
    /*this is the important part*/  
    load: 'current',
    languages: ['en-US','de-DE'],
    ns: {
        namespaces: ['app','buttons'],
        defaultNs: 'app'
    }
};

i18n.init(options, function (t) {/*loaded*/});

如果加载选项设置为当前 i18next 将加载当前设置的语言(这可能是特定 (en-US) 或非特定 (en) 资源文件)。

提示:为防止加载 fallbackLng 的资源文件,请将 fallbackLng 设置为 false。

【讨论】:

    【解决方案2】:

    我的错误,因为我将代码设置为 https://github.com/nkhine/node-blade-boiler-template/blob/master/public/js/locale.js#L15 以仅采用第一个参数,所以当我从客户端更改语言时,它设置为 en 而不是 en-UK 作为示例。

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2014-08-26
      • 1970-01-01
      • 2013-07-30
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多