Используйте Ally Python, Jinja и I18n, чтобы определить, локализовать и предварительный просмотр транзакционных писем
Приложения, которые поддерживают локализацию Frontend, обычно также требуют некоторых стратегий локализации для Backend Services. Видный пример – генерация локализованных транзакционных писем. В этой статье обсуждаются стратегии и рабочие процессы I18N для транзакционных электронных писем, обрабатываемых через бэкэндов Python. Это зависит главным образом по следующим ресурсам:
- Jinja , универсальный шаблонный язык для Python
- Отличный ресурс Postmark для транзакционные шаблоны электронной почты
- I18N. Союзник Расширение кода VS для локализации
Если вы заинтересованы в рассмотрении полной реализации:
https://github.com/visini/email-templates-i18n
Определение почтовых сообщений
Для каждого «типа» или своего рода электронное сообщение наследовать из общего родительского класса EmailMessage
, что, в свою очередь, реализует необходимые атрибуты и методы (например, рендеринг шаблонов). Смотрите Партспионский репозиторий для возможной реализации.
class EmailVerification(EmailMessage): def __init__(self, config, locale, variables): email_type = "email_verification" required = ["cta_url"] super().__init__(config, email_type, required, locale, variables) class PasswordReset(EmailMessage): def __init__(self, config, locale, variables): email_type = "password_reset" required = ["cta_url", "operating_system", "browser_name"] super().__init__(config, email_type, required, locale, variables)
Сведения о новом сообщении с локалями и переменными и извлеките все необходимые атрибуты для отправки локализованных электронных писем:
message = EmailVerification(config, "en-US", {"foo": "bar"}) # print(message.subject) # localized subject # print(message.html) # localized HTML with inlined CSS # print(message.txt) # localized plaintext email # ... send_email(recepient, message.subject, message.html, message.txt)
Локали и шаблоны
Все строки локали хранятся в формате JSON. Это обеспечивает гибкость с обоими рабочими процессом локализации и должна быть относительно устойчивым к изменяющимся требованиям. Глобальные переменные определяются по всему локам, поскольку они обычно не зависят от контекста локали (E.g., Компании или имена продуктов).
{ "company_name": "Company Name", "product_name": "Product Name", "product_website": "https://www.example.com/" }
Файлы строк локали содержат глобальный
Ключ и ключ для каждого типа сообщения электронной почты, например подтверждение адреса электронной почты
. Первый содержит «локализованные глобалы», то есть строки, многоразовые в различных типах сообщений электронной почты. Последнее определяет все строки определенного типа электронной почты.
{ "global": { "greetings": "Viele Grüsse,", "all_rights_reserved": "Alle Rechte vorbehalten." }, "email_verification": { "subject": "E-Mail-Adresse bestätigen", "thank_you": "Vielen Dank für deine Registrierung!" } }
Используйте блоки для наследования макета из более высокого порядка, более общие шаблоны. В Партспионский репозиторий Предлагается трехслойное иерархическое наследование (макет Barebone с базовым стилем → Многоразовый макет электронной почты → Определенные шаблоны сообщения электронной почты). Шаблонные файлы интерполируют как локальные строки, так и переменные с двойной фигурной скобойкой.
{% extends "layouts/call_to_action.html" %} {% block body_top %} {{localized.thank_you}} {% endblock %} {% block body_bottom %} {{localized.contact_us_for_help}} {% endblock %}
Определите отдельный шаблон для простых текстовых электронных писем – добавьте разделители, чтобы структурировать шаблон без какой-либо разметки. Посмотреть Отстойки лучших практик Для получения более подробной информации о том, как форматировать простые текстовые электронные письма.
{% extends "layouts/call_to_action.txt" %} {% block body_top %} +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ {{localized.thank_you}} {% endblock %} {% block body_bottom %} +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ {{localized.contact_us_for_help}} {% endblock %}
Кроме того, в шаблонах файлов, переменные могут использоваться для интерполирующих значений в локализации файлов с той же обозначением. Интерполировать …
- Глобальные строки →
{{наименование товара}}
- Локаль-специфические строки («Локализованные глобалы») →
{{localizalized.support_phone_us}}
- Переменные →
{{variables.Operating_system}}
{ "global": { "greetings": "Regards,", "team_signature": "Your {{product_name}} Team", "support_phone_us": "1-800-000-0000" }, "password_reset": { "subject": "Password Reset Request", "support_message": "Need help? Call {{localized.support_phone_us}}.", "security_information": "This request was received from a {{variables.operating_system}} device." } }
Это даже возможно использовать более сложные функции Jinja, такие как условные операторы, непосредственно в строках локали.
{ "discounted_items_cart_abandonment_notification": { "subject": "There are {{variables.no_items_in_cart}} items in your shopping cart!", "promo_message": "{{'One item has a discount!' if variables.no_items_in_cart_discounted < 2 else variables.no_items_in_cart_discounted + ' items have a discount!'}}" } }
Однако более удобный подход – это разгрузить всю логику в соответствующие шаблоны и использовать простое переменную интерполяцию в строковых файлах локали для удобства.
Рабочий процесс локализации
I18N. Союзник это расширение по коде для локализации. Он интегрируется с различными рамками (например, Vue.js), но также может быть использован для ускорения рабочих процессов локализации статического каталога файлов Locale JSON. Он даже включает в себя функции для совместной обзор и обсуждения локализации.
Предварительный просмотр сгенерированных электронных писем
В Партспионский репозиторий Предоставляется реализация образца для тонкой утилиты для генерации и выполненных шаблонов.
- Автоматическая перезагрузка После обнаружения изменений файлов (шаблоны и строки локали)
- Интерактивный переключатель между локалью, типом электронной почты и форматом (HTML и простой текст)
- Отзывчивый вид (например, Chrome devtools) позволяет просматривать представленные шаблоны в различных сценариях
- На основе Vue.js и fastapi, расширяемой и с минимальным накладным расходом
- Работа в процессе
Отправка электронной почты (AWS SES)
Доступ к атрибутам класса экземплярованного сообщения электронной почты для реализации функций отправки электронной почты. Для иллюстрации приведен пример для AWS SES приведен ниже:
import boto3 from botocore.exceptions import ClientError from src.messages import EmailVerification config_path = "./src/data" lang_path = "./src/data/lang" templates_path = "./src/templates" # Message config locale = "en-US" variables = {"cta_url": "https://www.example.com/"} message = EmailVerification(config, locale, variables) # Application config SENDER = "Sender Name" RECIPIENT = "recipient@example.com" CONFIGURATION_SET = "ConfigSet" AWS_REGION = "us-west-2" client = boto3.client("ses", region_name=AWS_REGION) try: response = client.send_email( Destination={"ToAddresses": [RECIPIENT] }, Message={ "Body": { "Html": {"Charset": "UTF-8", "Data": message.html}, "Text": {"Charset": "UTF-8", "Data": message.txt}, }, "Subject": {"Charset": "UTF-8", "Data": message.subject}, }, Source=SENDER, ConfigurationSetName=CONFIGURATION_SET, ) except ClientError as e: print(e.response["Error"]["Message"]) else: print("Email sent! Message ID:"), print(response["MessageId"])
Заключение
Поддержка нескольких локалей для транзакционных электронных писем требует дополнительных соображений для определения строк шаблонов и локали. Предлагаемый подход включает в себя классы и дополнительную инструмент для реализации электронных писем I18N в приложениях Python.
Я надеюсь, что вы нашли эту статью информацию о том, как подойдут I18N в Britending Python!
Оригинал: “https://dev.to/visini/python-i18n-localizing-transactional-email-templates-255j”