- 使用i18next库来实现国际化。首先安装i18next:
npm install i18next --save
- 然后在Node.js中使用它:
const i18next = require('i18next');
const Backend = require('i18next-node-fs-backend');
i18next.use(Backend).init({
// 设置所需的语言
lng: 'en',
// 设置资源文件的路径,这里是resources目录下的locales目录
backend: {
loadPath: __dirname + '/resources/locales/{{lng}}/{{ns}}.json'
}
});
// 在代码中使用t()函数获取语言资源
const greeting = i18next.t('greeting');
- 使用Sequelize来保存数据。首先安装Sequelize:
npm install sequelize --save
- 然后构建一个模型:
const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mysql',
host: 'localhost'
});
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING,
field: 'first_name'
},
lastName: {
type: Sequelize.STRING,
field: 'last_name'
}
});
sequelize.sync().then(() => {
console.log('Database synced');
});
// 创建新用户并保存到数据库
User.create({ firstName: 'John', lastName: 'Doe' }).then(user => {
console.log(user.toJSON());
});
将i18next和Sequelize结合起来,可以在模型中添加翻译字段:
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING,
field: 'first_name'
},
lastName: {
type: Sequelize.STRING,
field: 'last_name'
},
// 添加国际化的翻译字段
firstName_i18n: {
type: Sequelize.JSON,
allowNull: true,
defaultValue: '{}'
},
lastName_i18n: {
type: Sequelize.JSON,
allowNull: true,
defaultValue: '{}'
}
});
// 创建新用户并保存到数据库
const user = await User.create({
firstName: 'John',
lastName: 'Doe',
firstName_i18n: {
en: 'John',
cn: '约翰'
},
lastName_i18n: {
en: 'Doe',
cn: '杜'
}
});
// 获取用户信息的函数
async function getUserInfo(userId, lang) {
const user = await User.findByPk(userId);
const firstName = user.firstName_i18n[lang] || user.firstName;
const lastName = user.lastName_i18n[lang] || user.lastName;
return `${firstName} ${lastName}`;
}
// 获取指定用户的信息
const userInfo = await getUserInfo(1, 'en');
console.log(userInfo); // 输出:John Doe
这样,在应用程序中使用国际化时,可以从数据库中获取语言资源并将其缓存以供后续使用。