我正在AWS上构建一个无服务器的node.js Web应用程序(使用无服务器框架)并尝试在后端实现国际化(API Gateway / Lambda / DynamoDB)。
对于前端(React),我使用redux来存储所选语言,并使用react-intl来切换多种语言。对于后端,实施国际化的最佳方式是什么?
这是我能想到的两种方式,但必须有更好的方法。
:一种。在后端翻译(从路径参数中获取语言)
path: {language}/validate
validate.js
export function main(event, context, callback) {
const language = event.pathParameters.language;
const data = JSON.parse(event.body);
callback(null, validate(language, data));
}
这样,我需要将语言作为函数参数传递给所有地方,这是不可取的。
B中。翻译在前端(i18n,react-intl)
backend hello.js回复
{
id: "samplePage.message.hello",
defaultMessage: `Hello, ${name}`,
values: { name }
}
前端hello.js
<FormattedMessage {...response} />
ja.json(i18n的翻译文件)
{
"samplePage.message.hello": "こんにちは、{name}。",
}
这样,看起来一切正常,没有任何麻烦,但我错过了什么吗?
答案 0 :(得分:2)
我们按照您在B)中的建议做同样的事情......基本上我们在AWS lambda上有后端并从dynamodb访问数据。
我们所有的翻译都发生在前端。只有差异我们使用i18next(更具体的反应-i18next,但如果这个或react-intl - &gt;只提供更多的后端,缓存,语言检测,...... https://www.i18next.com/)没有区别。
如果您想了解详情或在行动中查看https://locize.com(或直接在https://www.locize.io/ 14d免费试用版试用),而应用目前只提供英文版所有文字都来自xhr加载并在运行时应用(i18n)。
如果对我们如何在locize.com上使用无服务器感兴趣,请参阅我们去年发表的演讲中的以下幻灯片:https://blog.locize.com/2017-06-22-how-locize-leverages-serverless/
最后但并非最不重要......如果您希望通过在MT期间不破坏icu dsl来充分利用您的ICU消息和验证,语法突出显示以及正确的复数转换和机器翻译 - >只需尝试我们的服务......它附带14天免费试用。