如何在 NestJS 中使用多语言电子邮件模板?
How to use multi lingual email templates in NestJS?
我正在使用 GCP pubsub 发布者向主题发布一些消息,该主题又用于通过 sendgrid API 发送电子邮件。我可以使用它发送电子邮件。
但我想支持多语言电子邮件模板。所有这些电子邮件都是根据某些用户操作自动发送的。
以下是我的电子邮件模板代码示例:
import * as _ from 'lodash';
export const getUserRegEmailSubject = (data) => {
return `Account Created Successfully – ${_.get(data, 'name')}`;
};
export const getUserRegEmailBody = (data) => {
return `
<!DOCTYPE html>
<html lang="en">
<body>
<p style="padding-bottom: 5px">Thank you for registering with us.</p>
<b>Your account details:</b>
<b>Full Name: </b>${_.get(data, 'name')}<br/>
<b>Username: </b>${_.get(data, 'uid')}<br/>
<p style="padding-bottom: 5px">Thank you!!</p>
`;
}
我在我的服务中使用这个电子邮件模板如下;
async createUser(userData) {
// Some logic and validations
const subject = getUserRegEmailSubject(userData);
const body = getUserRegEmailBody(userData);
if(userData.email) {
const email = {
to: userData.email,
from: env.EMAIL_FROM,
subject: subject,
html: body,
};
await pubEmailReq(email);
}
}
以下为邮件发布代码:
export const pubEmailReq = async (email) => {
const pubSub = new PubSub();
const message = {
data: Buffer.from(JSON.stringify(email))
}
const msgId = await pubSubClient
.topic('projects/' + env.GCP_PROJECT + '/topics/sendEmail')
.publishMessage(message);
return msgId;
}
如您所见,我仅使用英语创建了电子邮件模板。但是在将其发送到发布电子邮件代码之前,我需要一些方法将其转换为其他语言(目前主要是西班牙语和法语)。
我正在寻找将此电子邮件模板翻译成用户选择的语言偏好的方法。
任何帮助都会很棒!!
谢谢!
经过我们在评论部分的讨论,我了解到您想使用 NodeJS 将 HMTL 页面 的电子邮件正文翻译成另一种语言。为了保留所有 html 标签,只翻译它们之间的正确文本,您必须通知翻译 API 您将发送一个 html 页。
您可以使用翻译APIADVANCED v3。您可以找到文档 here. Within the request body of v3, you need to specify the mime_type: text/html
, as per documentation。它将保证只翻译 html 标志之间的文本。请按照以下步骤操作,
1 -确保您遵循了设置过程,here,例如设置计费和身份验证。
2 - 安装客户端库:
npm install --save @google-cloud/translate
3 - 准备代码。下面的代码片段显示了如何将简单的 html 文本从英语翻译成德语。
const projectId = 'YOUR_PROJECT_ID';
const location = 'global';
const text = 'To get in touch <a href="your_website" id="xyz">Click
here</a> and we will email you';
// Imports the Google Cloud Translation library
const {TranslationServiceClient} = require('@google-cloud/translate');
// Instantiates a client
const translationClient = new TranslationServiceClient();
async function translateText() {
// Construct request
const request = {
parent: `projects/${projectId}/locations/${location}`,
contents: [text],
mimeType: 'text/plain', // mime types: text/plain, text/html
sourceLanguageCode: 'en',
targetLanguageCode: 'de',
};
try {
// Run request
const [response] = await translationClient.translateText(request);
for (const translation of response.translations) {
console.log(`Translation: ${translation.translatedText}`);
}
} catch (error) {
console.error(error.details);
}
}
translateText();
4 - 执行代码后,输出为:
Um Kontakt aufzunehmen <a path="your_website" id="xyz">Klicken Sie hier</a> und wir werden Ihnen eine E-Mail senden
请注意,path
和网站 your_website
等标签未翻译。
我正在使用 GCP pubsub 发布者向主题发布一些消息,该主题又用于通过 sendgrid API 发送电子邮件。我可以使用它发送电子邮件。
但我想支持多语言电子邮件模板。所有这些电子邮件都是根据某些用户操作自动发送的。
以下是我的电子邮件模板代码示例:
import * as _ from 'lodash';
export const getUserRegEmailSubject = (data) => {
return `Account Created Successfully – ${_.get(data, 'name')}`;
};
export const getUserRegEmailBody = (data) => {
return `
<!DOCTYPE html>
<html lang="en">
<body>
<p style="padding-bottom: 5px">Thank you for registering with us.</p>
<b>Your account details:</b>
<b>Full Name: </b>${_.get(data, 'name')}<br/>
<b>Username: </b>${_.get(data, 'uid')}<br/>
<p style="padding-bottom: 5px">Thank you!!</p>
`;
}
我在我的服务中使用这个电子邮件模板如下;
async createUser(userData) {
// Some logic and validations
const subject = getUserRegEmailSubject(userData);
const body = getUserRegEmailBody(userData);
if(userData.email) {
const email = {
to: userData.email,
from: env.EMAIL_FROM,
subject: subject,
html: body,
};
await pubEmailReq(email);
}
}
以下为邮件发布代码:
export const pubEmailReq = async (email) => {
const pubSub = new PubSub();
const message = {
data: Buffer.from(JSON.stringify(email))
}
const msgId = await pubSubClient
.topic('projects/' + env.GCP_PROJECT + '/topics/sendEmail')
.publishMessage(message);
return msgId;
}
如您所见,我仅使用英语创建了电子邮件模板。但是在将其发送到发布电子邮件代码之前,我需要一些方法将其转换为其他语言(目前主要是西班牙语和法语)。
我正在寻找将此电子邮件模板翻译成用户选择的语言偏好的方法。
任何帮助都会很棒!!
谢谢!
经过我们在评论部分的讨论,我了解到您想使用 NodeJS 将 HMTL 页面 的电子邮件正文翻译成另一种语言。为了保留所有 html 标签,只翻译它们之间的正确文本,您必须通知翻译 API 您将发送一个 html 页。
您可以使用翻译APIADVANCED v3。您可以找到文档 here. Within the request body of v3, you need to specify the mime_type: text/html
, as per documentation。它将保证只翻译 html 标志之间的文本。请按照以下步骤操作,
1 -确保您遵循了设置过程,here,例如设置计费和身份验证。
2 - 安装客户端库:
npm install --save @google-cloud/translate
3 - 准备代码。下面的代码片段显示了如何将简单的 html 文本从英语翻译成德语。
const projectId = 'YOUR_PROJECT_ID';
const location = 'global';
const text = 'To get in touch <a href="your_website" id="xyz">Click
here</a> and we will email you';
// Imports the Google Cloud Translation library
const {TranslationServiceClient} = require('@google-cloud/translate');
// Instantiates a client
const translationClient = new TranslationServiceClient();
async function translateText() {
// Construct request
const request = {
parent: `projects/${projectId}/locations/${location}`,
contents: [text],
mimeType: 'text/plain', // mime types: text/plain, text/html
sourceLanguageCode: 'en',
targetLanguageCode: 'de',
};
try {
// Run request
const [response] = await translationClient.translateText(request);
for (const translation of response.translations) {
console.log(`Translation: ${translation.translatedText}`);
}
} catch (error) {
console.error(error.details);
}
}
translateText();
4 - 执行代码后,输出为:
Um Kontakt aufzunehmen <a path="your_website" id="xyz">Klicken Sie hier</a> und wir werden Ihnen eine E-Mail senden
请注意,path
和网站 your_website
等标签未翻译。