跳转到主要内容

使用 RWS LanguageCloud 翻译和本地化 Wagtail CMS 内容

项目描述

Wagtail Localize RWS LanguageCloud

这允许 RWS LanguageCloud 的用户翻译和本地化 Wagtail CMS 内容。

要求

  • Python >= 3.7
  • Django >= 3.0
  • Wagtail >= 2.12
  • wagtail-localize >= 1.0.1

设置

  1. pip install wagtail-localize-rws-languagecloud

  2. INSTALLED_APPS 中添加 wagtail_localize_rws_languagecloud,在 wagtail.adminwagtail_localize 之前。

    INSTALLED_APPS = [
        # ...
        "wagtail_localize_rws_languagecloud",
        "wagtail.admin",
        "wagtail_localize",
    ]
    
  3. 在 Django 设置中配置插件

    import datetime
    
    WAGTAILLOCALIZE_RWS_LANGUAGECLOUD = {
        # (required) Authentication details to connect to the LanguageCloud API.
        # For info on how to obtain these credentials see https://languagecloud.sdl.com/lc/api-docs/authenticate
        "CLIENT_ID": "<client id>",
        "CLIENT_SECRET": "<client secret>",
        "ACCOUNT_ID": "<account id>",
        # (required) Identifier of a LanguageCloud template to create projects from
        "TEMPLATE_ID": "<template id>",
        # (required) Identifier of a LanguageCloud location to store project files in
        "LOCATION_ID": "<location id>",
        # (optional) Prefix for project names. Defaults to '' if not specified
        "PROJECT_PREFIX": "foobar_",
        # (optional) A timedelta object used to set the project 'due by' date.
        # Defaults to datetime.timedelta(days=7) if not specified
        "DUE_BY_DELTA": datetime.timedelta(days=30),
        # (optional) Number of a seconds to sleep between each API request.
        # Defaults to 0 if not specified
        "API_SLEEP_SECONDS": 5,
        # (optional) Send an email to uers with any of the following permissions:
        # - wagtail_localize.add_translation
        # - wagtail_localize.change_translation
        # - wagtail_localize.delete_translation
        # - wagtail_localize.submit_translation
        # when new translations are ready for review.
        # Defaults to False if not specified
        "SEND_EMAILS": True,
        # (optional) Provide a WAGTAIL_CONTENT_LANGUAGE code to RWS language code map
        # RWS expects region codes (e.g. "en-US", "de-DE") whereas Wagtail will happily
        # accept two letter lanugage code ("en", "de"). You can also use this mapping
        # to map dialect language codes to the main supported language
        "LANGUAGE_CODE_MAP": {
            "en": "en-US",
            "ja": "ja-JP",
            "es-mx": "es-ES",
        },
    }
    
  4. 应用迁移

    ./manage.py migrate
    

将内容导出和导入到LanguageCloud

此插件的工作原理是

  • 识别Wagtail中待本地化的文本并将其导出到LanguageCloud
  • 识别LanguageCloud中的已完成项目,并将本地化内容导入到Wagtail

这是通过管理命令完成的

./manage.py sync_rws

需要使用cron等调度器定期运行此命令。我们建议每10分钟运行一次。

最好防止同时运行多个同步命令的副本。

  • 如果使用cron作为调度器,可以使用lockrun来防止同一作业的多个实例同时运行。
  • 如果使用基于队列的调度器如Celery Beat,则SyncManager类包含is_queuedis_running扩展点,可用于实现锁策略。

更新翻译页面

Wagtail Localize提供了一个名为“同步翻译页面”的功能,它将源页面中的未翻译内容复制到其翻译页面。当源页面内容更新并需要复制和重新翻译时,这很有用。

此插件提供了一个可选的管理命令,通过在具有过时翻译内容的页面上运行同步翻译页面来自动化此过程。

./manage.py update_translated_pages

此命令

  • 在已发布但尚未同步的页面上运行“同步翻译页面”
  • 将这些页面排队以使用默认设置在LanguageCloud上进行翻译。
  • 发送包含同步或跳过的页面列表的电子邮件摘要。

以下条件的页面将从自动同步中排除

  • 以前未翻译过的页面。
  • 在LanguageCloud上有待翻译内容的页面。

您可以使用此命令进行一次性运行,或安排它定期运行以自动保持内容的翻译版本更新。

您可以通过运行带有--dry-run的命令来安全地预览受影响的页面而无需实际更新它们。

./manage.py update_translated_pages --dry-run

信号

translation_imported

当从RWS LanguageCloud成功导入翻译时发送此信号。

参数

  • sender: LanguageCloudProject
  • instance: 具体的LanguageCloudProject实例。
  • source_object: 此翻译针对的页面或片段实例。
  • translated_object: 页面或片段的翻译实例。

有关信号处理器的更多信息,请参阅Django文档

有关如何使用translation_imported信号发送Slack通知的更多示例,请参阅slack-notification-examples.md

工作原理

此插件使用wagtail-localize将页面转换为段并从翻译段构建新页面。wagtail-localize提供了在Wagtail本身中翻译这些段面的网络界面,并且此插件与该界面配合良好(翻译也可以从Wagtail端进行)。

当页面从默认区域设置提交进行翻译时,将它们提交到LanguageCloud。尚不支持在其他区域设置的页面。

贡献

所有贡献都受欢迎!

安装

要更改此项目,首先克隆此存储库,然后激活您首选的虚拟环境,然后安装测试依赖项

make install

pre-commit

注意,此项目使用pre-commit。要本地设置

# if you don't have it yet, globally
$ pip install pre-commit
# go to the project directory
$ cd wagtail-localize-rws-languagecloud
# initialize pre-commit
$ pre-commit install

# Optional, run all checks once for this, then the checks will run only on the changed files
$ pre-commit run --all-files

local_settings.py

您可以在settings.py旁边添加一个local_settings.py文件,以包含在本地运行项目时需要的任何设置。

例如,您可能想为SQLite测试数据库设置一个NAME,以便--keepdb工作。

# wagtail_localize_rws_languagecloud/test/local_settings.py
from .settings import DATABASES

DATABASES["default"]["TEST"] = {"NAME": "test.db"}

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源分发

构建分发

由以下机构支持