lehadnk/translation-merge-tool

此包的最新版本(1.6.4)没有提供许可证信息。

用于生成和合并翻译文件的工具。

1.6.4 2024-06-06 15:54 UTC

README

i18n_mrg 是一个辅助工具,用于扫描您的项目代码库中的翻译字符串,并与名为 Weblate 的流行翻译工具同步翻译,以及反向同步。

安装

您需要安装以下软件以安装翻译合并工具

  • PHP >= 7.0
  • Composer 包管理器
  • GNU Gettext 包(已在 macOS 和大多数 Linux 发行版中安装)
  • NodeJS >= 6.0(用于 JS 项目)
  • i18next 转换器(如果您在 js 项目中使用 i18next)

您需要 php>=8.1 来运行此软件。此外,您还需要有一个 PHP 包管理器(composer),您可以在这里获取它。

运行以下命令来安装工具

composer global require lehadnk/translation-merge-tool

运行工具

在您的项目根目录下运行以下命令

i18n_mrg

项目设置

首先,您需要准备您的代码库以与 i18n_mrg 一起工作

  1. 将您的项目配置为使用翻译文件。我们建议您使用 GNU gettext 格式,但 i18n_mrg 也可以编译 JSON 文件,如果您更喜欢,这更适合 Web 应用程序。您需要在项目中设置一个目录,并将您的翻译文件存储在其中,每个子文件夹命名为您打算使用的语言代码。例如文件树结构
/i18n/en_GB/messages.po
/i18n/de_DE/messages.po
/i18n/zh_CN/messages.po
  1. 使用名为 __() 的包装函数来标记您的翻译字符串。实现该函数以从存储中返回相应的字符串,例如
public class i18nService {
    private static <LocaleEnum, HashMap<String, String>> translationStrings;

    public static String __(string text, HashMap<String, String> placeholders) 
    {
        var translatedString = i18nService.translationStrings.get("de_DE").get(text);
        StrSubstitutor sub = new StrSubstitutor(placeholders, "%", "%");
        return sub.replace(translatedString);
    }
}
import static i18n.I18nFacade.__;
public class ScoreHandler {
    public UserResponse getScore()
    {
        var placeholders = new HashMap<String, String>();
        placeholders.put("score", 16);
            
        var response = new UserResponse();
        response.message = __("You have %score% points", placeholders); // Sie haben 16 Punkte
        
        return response;
    }
}
  1. .translate-config.json 添加到您的项目根目录。文件的示例内容
{
  "configVersion": "1.3.0",

  "components": [
    {
      "name": "default",
      "includePaths": [
        "app/",
        "resources/"
      ],
      "excludePaths": [],
      "translationFileName": "resources/lang/i18n/{localeName}/LC_MESSAGES/default.po",
      "weblateProjectSlug": "crm",
      "weblateComponentSlug": "main"
    }
  ],

  "vcs": "bitbucket",
  "bitbucketUsername": "bitbucket@user.com",
  "bitbucketPassword": "password",
  "vcsRepository": "company/crm-project",
  "vcsAuthToken": "token",

  "translationBranchName": "translation",

  "weblateServiceUrl": "http://weblate.service.com",
  "weblateAuthToken": "token"
}
  1. 接下来,在您的仓库中定义翻译分支。通常,您希望它只由翻译工具(i18n_mrg 和 Weblate)管理,永远不要触摸它: git checkout -b translations && git push --set-upstream origin translations
  2. 设置 Weblate 平台并定义您的项目的 组件
  3. 现在运行 i18n_mrg 以扫描您的项目中的翻译字符串,并将其最初上传到 Weblate。i18n_mrg 将解析您的代码库中的每个由 __() 装饰器包装的字符串,并将其添加到翻译文件中,并自动从 Weblate 拉取更新。

开发者工作流程

对于与您的项目一起使用 i18n_mrg 的开发者,我建议以下工作流程

  1. 当您即将完成包含翻译字符串的工作分支时,运行 i18n_mrg 并将新翻译字符串推送到 Weblate。
  2. 通知负责处理翻译的团队成员,Weblate 中已添加新字符串。
  3. 一旦完成翻译,再次运行 i18n_mrg 以从 Weblate 拉取翻译字符串并将其添加到分支中的更新翻译文件。

在大型团队中,您可能还希望将翻译文件编译作为 CI 循环的一部分。

更新工具

composer global update lehadnk/translation-merge-tool

处理授权令牌

要使用各种 VCS 提供商使用此工具,您必须设置授权。

Gitlab

  1. 使用您的配置文件设置 > 访问令牌来创建密钥。
  2. 您的密钥必须具有以下权限范围:api、read_repository、write_repository
  3. 将您的令牌导出到 I18N_MRG_GITLAB_AUTH_TOKEN 环境变量:export I18N_MRG_GITLAB_AUTH_TOKEN=<token>

Github

  1. 转到设置 > 开发者设置 > 个人访问令牌
  2. 创建一个具有 repo 范围的令牌
  3. 将您的令牌导出到 I18N_MRG_GITHUB_AUTH_TOKEN 环境变量:export I18N_MRG_GITHUB_AUTH_TOKEN=<token>

BitBucket

  1. 转到仓库设置
  2. 在“访问令牌”部分颁发具有读写权限的仓库访问令牌
  3. 将您的令牌放置在 I18N_MRG_BITBUCKET_AUTH_TOKEN 环境变量中:export I18N_MRG_BITBUCKET_AUTH_TOKEN=<token>

如何添加到项目

首先,您需要在项目的根目录下创建一个.translate-config.json配置文件。配置文件的示例内容

故障排除

一些使用 Brew 安装 gettext 工具的 Mac 用户报告说他们遇到了问题。解除链接并重新链接它可以解决问题

brew unlink gettext && brew link gettext