npm 包 i18n-node-yaml 使用教程

什么是 i18n-node-yaml

i18n-node-yaml 是一个基于 Node.js 的国际化(i18n)库,它可以方便地为网站或应用程序添加多语言支持。这个库支持 YAML 格式的语言文件,可以轻松地管理多语言数据,并提供了一个简单的 API 来获取当前语言环境下的文本。

安装

首先,你需要在你的项目中安装 i18n-node-yaml:

使用

为了使用 i18n-node-yaml,你需要引入它,然后使用它提供的 API 来获取需要的文本。

const i18n = require('i18n-node-yaml');

// ...

i18n.init({
  locales: ['en', 'fr'],
  directory: __dirname + '/locales',
});

app.get('/', function (req, res) {
  res.send(i18n.__('Hello, world!'));
});

在这个例子中,我们首先引入了 i18n-node-yaml 模块。然后,我们使用 i18n.init() 方法初始化 i18n,告诉它我们支持哪些语言以及语言文件所在的目录。最后,我们在路由处理程序中使用 i18n.__() 方法来获取需要的文本。这个方法接受一个字符串作为参数,并返回当前语言环境下对应的文本。

如果你的语言文件被定义在 ./locales/en.yaml 中,而当前的语言是英语,那么 i18n.__('Hello, world!') 将返回 Hello, world!。如果当前的语言是法语,那么它将返回 Bonjour le monde!,因为在 ./locales/fr.yaml 文件中定义了这个语言文本。

按需加载语言文件

如果你的应用程序有多个路由处理程序(比如不同的页面),而每个路由处理程序上需要的文本并不相同,你可能不想在初始化 i18n 时加载所有的语言文件。在这种情况下,你可以使用 i18n.setLocale() 方法按需加载语言文件。

app.get('/about', function (req, res) {
  i18n.setLocale(req, 'en');
  res.render('about', { title: i18n.__('About') });
});

app.get('/contact', function (req, res) {
  i18n.setLocale(req, 'fr');
  res.render('contact', { title: i18n.__('Contact') });
});

在上面的代码中,我们在每个路由处理程序中调用 i18n.setLocale() 来设置当前语言环境。这个方法接受两个参数:请求对象和语言代码。通过这种方式,我们可以使用 i18n.__() 方法根据当前语言环境来获取对应的文本。

示例

假设你的应用程序有一个表单,用户需要填写姓名和电子邮件地址。如果用户在英语环境下使用应用程序,页面应该显示英语提示,如果用户在法语环境下使用应用程序,则应该显示法语提示。

首先,在 ./locales/en.yaml 文件中定义以下文本:

form:
  name:
    label: Name
    placeholder: Enter your name
  email:
    label: Email
    placeholder: Enter your email address

然后,在 ./locales/fr.yaml 文件中定义以下文本:

form:
  name:
    label: Nom
    placeholder: Entrez votre nom
  email:
    label: Adresse e-mail
    placeholder: Entrez votre adresse e-mail

接下来,在路由处理程序中使用 i18n:

app.get('/form', function (req, res) {
  const locale = req.headers['accept-language'].split(',')[0];
  i18n.setLocale(req, locale);

  res.render('form', {
    form: {
      name: {
        label: i18n.__('form.name.label'),
        placeholder: i18n.__('form.name.placeholder'),
      },
      email: {
        label: i18n.__('form.email.label'),
        placeholder: i18n.__('form.email.placeholder'),
      },
    },
  });
});

在这个例子中,我们首先从请求头中获取当前语言环境。然后,我们使用 i18n.setLocale() 方法设置当前的语言环境。最后,我们在渲染表单时使用 i18n.__() 方法来获取需要的文本。注意,在这个例子中,我们需要使用完全限定的键名来获取语言文本。

总结

i18n-node-yaml 是一款非常方便的国际化库,它支持 YAML 格式的语言文件,并提供了一系列简单的 API 来帮助你在应用程序中添加多语言支持。无论你是要添加多语言支持的新项目,还是要为已有的项目增加多语言支持,i18n-node-yaml 都是一个值得考虑的选择。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/600673e0fb81d47349e53cdb


纠错
反馈