节点和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来配置这个应用程序:

默认情况下,每个上传的翻译文件都将运行后处理器,但您可以通过从对应的下拉菜单中选择一种文件格式来缩小范围。

准备好之后,单击启用应用程序.伟大的工作!


这个页面对你有帮助吗?