Я использую издателя GCP pubsub для публикации сообщения в теме, которое, в свою очередь, используется для отправки электронной почты через API sendgrid. Я могу отправлять электронные письма, используя это.

Но я хочу поддерживать шаблоны электронной почты на нескольких языках. Все эти электронные письма отправляются автоматически в зависимости от некоторых действий пользователя.

Ниже приведен пример кода моего шаблона электронного письма:

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;
}

Как видите, я создал шаблон электронного письма только на английском языке. Но мне нужно каким-то образом преобразовать его на другие языки (в основном на испанский и французский на данный момент), прежде чем отправлять его в код электронной почты публикации.

Я ищу способы перевести этот шаблон электронного письма на язык, выбранный пользователем.

Любая помощь будет отличной !!

Спасибо!

1
Yogesh 9 Фев 2021 в 12:51

1 ответ

Лучший ответ

После обсуждения в разделе комментариев я понял, что вы хотите перевести тело письма, которое представляет собой страницу HMTL , на другой язык с помощью NodeJS. Чтобы сохранить все теги html , переводя только правильный текст между ними, вы должны сообщить API перевода, что вы отправите страницу html .

Вы можете использовать API перевода ADVANCED v3 . Вы можете найти документацию здесь. В теле запроса версии 3 необходимо указать mime_type: text/html согласно документация. Это гарантирует, что будет переведен только текст между флагами html. Следуйте инструкциям ниже,

1 - Убедитесь, что вы выполнили процедуру настройки, здесь , например, настройка биллинга и аутентификации.

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, не были переведены.

1
Alexandre Moraes 12 Фев 2021 в 09:53