节点和Fastify
本教程将向您展示如何使用Lokalise预处理和后处理功能来管理Node应用程序中上传和下载的翻译。
在本教程中,您将学习如何……
使用Node和Fastify为Lokalise实现自定义处理器。
你可以在GitHub上找到源代码。.你还可以找到这是一个非常类似的例子,它利用了Next.js函数,可以托管在Vercel上.
先决条件
本指南假设您有一个Lokalise项目(如果没有,学习如何创建你的Lokalise项目在这里).
如果你想在你的电脑上本地执行本指南,你需要安装以下软件:
我们要建造什么
我们将创建一个简单的应用程序,它将处理在Lokalise上导入和导出的翻译。然后,该应用程序将处理翻译并删除所有禁用的单词。
项目准备
首先,我们来创建一个package.json
将所有必要的脚本和依赖项归档:
{" name ": " custom-processors”,“主要”:“server.js”,“脚本”:{“开始”:“节点server.js”,“开发”:“fastify开始- w - l - p app.js信息”,“棉絮”:“eslint。”,“漂亮”:“漂亮——写。”},“依赖性”:{“配置”:“^ 3.3.7”、“fastify”:“^ 3.29.0”、“fastify-autoload”:“^ 3.13.0”、“fastify-cli”:“^ 3.1.0”、“fastify-plugin”:“^ 3.0.1”},“devDependencies”:{“eslint”:“^ 8.16.0”、“eslint-config-prettier”:“^ 8.5.0”、“eslint-plugin-import”:“^ 2.26.0”、“eslint-plugin-jest”:“^ 26.4.6”、“eslint-plugin-prettier”:“^ 4.0.0”,“笑话”:“^ 28.1.0”、“nodemon”:“^ 2.0.16”、“漂亮”:“^ 2.6.2}}
接下来,创建一个server.js
将启动Fastify服务器的文件:
'use strict' //读取。env文件。require('dotenv').config() //要求框架const Fastify = require(' Fastify ') //实例化Fastify with some config const app = Fastify({logger: true, pluginTimeout: 30000,}) //注册你的应用作为一个普通插件。app.register(require('./app.js')) //开始监听。app.listen (process.env。港| | 3000年,0.0.0.0,(err) = >{如果(err) {app.log.error (err) process.exit (1)}})
另外,让我们创建一个app.js
包含一些样板代码的文件:
'使用strict' const path = require('path') const AutoLoad = require('fastify-autoload')模块。exports = async function (fastify, opts){//在这里放置您的自定义代码!//不要碰下面的行//这会加载plugins中定义的所有插件//这些插件应该是通过你的应用fastify重用的支持插件。寄存器(自动加载,{dir:路径。join(__dirname, 'plugins'), options: Object。assign({}, opts),}) //加载在routes中定义的所有插件//在这些fastify中定义你的路由。寄存器(自动加载,{dir:路径。join(__dirname, 'routes'), options:对象。赋值({},opts),})}
添加一个Procfile
:
Web: NPM启动
最后,您可以在下面创建根路由路线/ root.js
:
'使用严格'模块。导出=异步函数(fastify) {fastify。Get ('/', async函数(请求,答复){等待答复。发送({hello: 'world'})})}
预处理的翻译
现在基础工作已经完成,让我们看看如何使用Fastify实现翻译预处理。每当将翻译上传到Lokalise项目时,都会进行预处理。
创建一个名为路线/ preprocess.js
:
'使用严格'模块。导出=异步函数(fastify) {fastify。post('/preprocess', async function (request, reply) {if (!request.body) {return {error: 'Invalid request: Missing body'}} //从request中获取有效负载:const payload = request。Body})}
因此,我们正在获取请求体,如果它不存在就会引发错误。
现在,假设我们想要迭代所有上传的翻译并删除一个禁用的单词。要实现这一点,首先你必须以以下方式迭代翻译键:
for (const [keyId, keyValue] of Object.entries(payload.collection.keys)) {}
现在让我们迭代每个键的每个转换并执行替换:
for (const [keyId, keyValue] of Object.entries(keyValue.translations)) {for (const [lang, v] of Object.entries(keyValue.translations)) {payload.collection.keys[keyId].translations[lang]。翻译;replace(' forbidden ', ",)}}
在本例中,我们只是将单词“forbidden”替换为空字符串。
最后但并非最不重要的是用新的有效载荷来回应洛卡利斯。这一点非常重要,否则上传过程将失败:
等待reply.send(载荷)
下面是一个完整的例子:
'使用严格'模块。导出=异步函数(fastify) {fastify。post('/preprocess', async function (request, reply) {if (!request.body) {return {error: 'Invalid request: Missing body'}} const payload = request。body for (const [keyId, keyValue] of Object.entries(keyValue.translations)) {for (const [lang, v] of Object.entries(keyValue.translations)) {payload.collection.keys[keyId].translations[lang]。翻译;replace(' forbidden ', ",)}}等待reply.send(载荷)}) }
伟大的工作!
使预处理器
现在预处理器已经准备好了,我们必须在Lokalise上启用它。要实现这一点,打开Lokalise项目,继续应用程序,找定制的处理器在列表中单击它。然后单击安装并通过输入预处理URL来配置这个应用程序:
默认情况下,预处理程序将为每个上传的翻译文件运行,但您可以通过从相应的下拉菜单中选择一种文件格式来缩小范围。
准备好之后,单击启用应用程序.伟大的工作!
后处理的翻译
当你从Lokalise下载翻译时,后处理就会发生。让我们创建一个新的路线/ postprocess.js
文件来处理导出的数据:
'使用严格'模块。导出=异步函数(fastify) {fastify。post('/postprocess', async function (request, reply) {if (!request.body) {return {error: 'Invalid request: Missing body'}} const payload = request。Body})}
因此,我们正在获取请求体,如果它不存在就会引发错误。
现在假设我们想从所有翻译中删除一个禁用的单词。方法与前一节中看到的相同:我们只需要遍历所有键和转换,然后用一个新的有效负载响应:
for (const [keyId, keyValue] of Object.entries(keyValue.translations)) {for (const [lang, v] of Object.entries(keyValue.translations)) {payload.collection.keys[keyId].translations[lang]。翻译;replace(' forbidden ', ",)}}等待reply.send(载荷)
下面是完整的例子:
'使用严格'模块。导出=异步函数(fastify) {fastify。post('/postprocess', async function (request, reply) {if (!request.body) {return {error: 'Invalid request: Missing body'}} const payload = request。body for (const [keyId, keyValue] of Object.entries(keyValue.translations)) {for (const [lang, v] of Object.entries(keyValue.translations)) {payload.collection.keys[keyId].translations[lang]。翻译;replace(' forbidden ', ",)}}等待reply.send(载荷)}) }
使后处理
现在应用程序已经完成,我们必须启用Lokalise的后处理功能。要实现这一点,打开Lokalise项目,继续应用程序,找定制的处理器在列表中单击它。然后单击安装并通过输入postprocess URL来配置这个应用程序:
默认情况下,每个上传的翻译文件都将运行后处理器,但您可以通过从对应的下拉菜单中选择一种文件格式来缩小范围。
准备好之后,单击启用应用程序.伟大的工作!
更新 3个月前