kargnas/laravel-ai-translator

Laravel语言文件的AI翻译工具

v1.5.4 2024-08-02 22:19 UTC

README

Laravel语言文件的AI翻译工具

💡 新特性:自定义语言风格

我们通过支持自定义语言风格扩展了功能,允许进行独特和富有创造性的翻译。了解自定义语言风格的更多信息

概述

Laravel AI Translator是一个强大的工具,旨在简化Laravel项目中本地化流程。它自动处理跨多种语言的字符串翻译任务,利用先进的AI模型提供高质量、上下文感知的翻译。

主要优势

  • 节省时间:一键命令即可翻译所有语言文件
  • AI驱动:利用最先进的语言模型(GPT-4,GPT-4o,GPT-3.5,Claude)提供优质的翻译质量
  • 智能上下文理解:准确捕捉细微差别、术语和Laravel特定表达式
  • 无缝集成:在现有Laravel项目结构中工作,保留复杂的语言文件结构

无论您是在进行个人项目还是大型应用的开发,Laravel AI Translator都可以简化国际化过程,让您能够专注于构建优秀的功能,而不是与翻译斗争。

主要功能

  • 自动检测您lang目录中的所有语言文件夹
  • 将源语言(默认:英语)的PHP语言文件翻译成所有其他语言
  • 支持多个AI提供商进行智能、上下文感知的翻译
  • 保留变量、HTML标签、复数代码和嵌套结构
  • 保持翻译中的一致语气和风格
  • 支持自定义翻译规则,以增强质量和满足特定项目需求
  • 高效处理大型语言文件,节省时间和精力
  • 尊重Laravel的本地化系统,确保与现有设置兼容
  • 分块功能以实现成本效益翻译:在一个AI请求中处理多个字符串,显著降低API成本并提高效率
  • 字符串验证以确保翻译准确性:自动检查和验证AI翻译,以捕捉和纠正任何错误或误译

此外,此工具还设计用于智能地翻译语言文件

  • 上下文理解:分析键以确定它们是否代表按钮、描述或其他UI元素。
  • 语言精确度:在翻译中保留单词形式、时态和标点符号。
  • 变量处理:在翻译过程中尊重并维护语言文件变量。
  • 智能长度适应:在可能的情况下调整翻译长度以适应UI约束。
  • 语气一致性:保持翻译中的语气一致,可配置。

您想知道它是如何工作的吗?请查看src/AI中的提示。

自定义语言风格

除了标准语言翻译外,该包现在还支持自定义语言风格,允许进行独特和富有创造性的本地化。

内置风格

该包包含几个内置语言风格

  • ko_kp:朝鲜风格韩语
  • 各种地区方言和语言变体

这些风格自动可用,无需额外配置。

自定义风格示例:Reddit英语

作为自定义样式功能的演示,我们实现了“Reddit风格”英语

这种风格模仿Reddit上常见的休闲、幽默语言,包括

  • 大量使用讽刺
  • 网络俚语和梗
  • 轻松的怀疑态度

示例配置

'locale_names' => [
    'en_reddit' => 'English (Reddit)',
],
'additional_rules' => [
    'en_reddit' => [
        "- Incorporate sarcasm and exaggeration",
        "- Use popular internet slang and meme references",
        "- Add humorous calls for sources on obvious statements",
    ],
],

创建自定义样式

您可以通过在配置中的 locale_namesadditional_rules 中添加新条目来创建自己的自定义语言样式。这允许您针对特定受众或平台定制翻译。

这些自定义样式提供了定制翻译的创意方法,为您的本地化内容增添了独特的风格。负责任地使用,以增强用户参与度,同时保持对受众的清晰和适宜性。

先决条件

  • PHP 8.0 或更高版本
  • Laravel 8.0 或更高版本

安装

  1. 使用 composer 安装包

    composer require kargnas/laravel-ai-translator
  2. 将 OpenAI API 密钥添加到您的 .env 文件

    OPENAI_API_KEY=your-openai-api-key-here
    

    您可以从 OpenAI 网站 获取 API 密钥。

    (如果您想使用 Anthropic 的 Claude,请参阅下方的步骤 4 进行配置。)

  3. (可选) 发布配置文件

    php artisan vendor:publish --provider="Kargnas\LaravelAiTranslator\ServiceProvider"

    此步骤是可选的,但建议您在想要自定义包的行为时执行。它将在您可以修改各种设置的 config/ai-translator.php 文件中创建一个文件。

  4. (可选) 如果您想使用 Anthropic 的 Claude 而不是 OpenAI 的 GPT,更新 config/ai-translator.php 文件

    'ai' => [
        'provider' => 'anthropic',
        'model' => 'claude-3-5-sonnet-20240620',
        'api_key' => env('ANTHROPIC_API_KEY'),
    ],

    然后,将 Anthropic API 密钥添加到您的 .env 文件

    ANTHROPIC_API_KEY=your-anthropic-api-key-here
    

    您可以从 Anthropic 网站 获取 Anthropic API 密钥。为了获得最佳效果,我们建议使用 Claude-3-5-Sonnet 模型进行翻译,而不是 OpenAI GPT。此模型提供了更准确和自然的翻译。

  5. 现在,您已经准备好使用 Laravel AI Translator 了!

用法

要翻译您的语言文件,请运行以下命令

php artisan ai-translator:translate

此命令将

  1. 识别您 lang 目录中的所有语言文件夹
  2. 使用 AI 将源语言(英语)的字符串文件内容进行翻译。(您可以在配置文件中更改源语言)

示例

给定一个英语语言文件

<?php

return [
    'notifications' => [
        'new_feature_search_sentence' => 'New feature: Now you can type sentences not only words. Even in your languages. The AI will translate them to Chinese.',
        'refresh_after_1_min' => 'Refresh after 1 minutes. New content will be available! (The previous model: :model, Updated: :updated_at)',
    ]
];

包将生成如下翻译

  • 韩语 (ko-kr)
    <?php
    return array (
      'notifications.new_feature_search_sentence' => '새로운 기능: 이제 단어뿐만 아니라 문장도 입력할 수 있어요. 심지어 여러분의 언어로도 가능해요.',
      'notifications.refresh_after_1_min' => '1분 후에 새로고침하세요. 새로운 내용이 준비될 거예요! (이전 모델: :model, 업데이트: :updated_at)',
    );
  • 中文 (zh-cn)
    <?php
    return array (
      'notifications.new_feature_search_sentence' => '新功能:现在你不仅可以输入单词,还可以输入句子。甚至可以用你的语言。',
      'notifications.refresh_after_1_min' => '1分钟后刷新。新内容即将到来!(之前的模型::model,更新时间::updated_at)',
    );
  • 泰语 (th-th)
    <?php
    return array (
      'notifications.new_feature_search_sentence' => 'ฟีเจอร์ใหม่: ตอนนี้คุณพิมพ์ประโยคได้แล้ว ไม่ใช่แค่คำเดียว แม้แต่ภาษาของคุณเอง',
      'notifications.refresh_after_1_min' => 'รีเฟรชหลังจาก 1 นาที จะมีเนื้อหาใหม่ให้ดู! (โมเดลก่อนหน้า: :model, อัปเดตเมื่อ: :updated_at)',
    );
  • 🤣 韩语 (朝鲜)
    <?php
    return array (
      'notifications.new_feature_search_sentence' => '혁명적 새로운 기능: 동무들! 이제 단어뿐만 아니라 문장도 입력하여 단어의 력사를 확인할 수 있습니다. 모국어로도 괜찮습니다. 인공지능이 중국어로 번역해드리겠습니다.',
      'notifications.refresh_after_1_min' => '1분후에 새로고침하십시요. 새로운 내용을 볼수 있습니다! (이전 모델: :model, 갱신: :updated_at)',
    );
  • 🤣 英语 (Reddit)
    <?php
    return array (
      'notifications.new_feature_search_sentence' => 'Whoa, hold onto your keyboards, nerds! We\'ve leveled up our search game. Now you can type entire sentences, not just measly words. Mind. Blown. And get this - it even works in your weird non-English languages! Our AI overlord will graciously translate your gibberish into Chinese. You\'re welcome.',
      'notifications.refresh_after_1_min' => 'Yo, hit that F5 in 60 seconds, fam. Fresh content incoming! (Previous model was :model, last updated when dinosaurs roamed the Earth at :updated_at)',
    );

配置

如果您想自定义设置,可以发布配置文件

php artisan vendor:publish --provider="Kargnas\LaravelAiTranslator\ServiceProvider"

这将创建一个 config/ai-translator.php 文件,您可以在此修改以下设置

  • source_directory:如果您使用与默认 lang 目录不同的目录来管理语言文件,您可以在此处指定它。

  • ai:在此处配置 AI 提供商、模型和 API 密钥。以下是我们的最佳模型推荐

    以下是不推荐的模型,它们要么价格昂贵,要么质量低下

  • locale_names:此地区代码到语言名称的映射通过为 AI 提供上下文来提高翻译质量。

  • additional_rules:将自定义规则添加到翻译提示中。这对于定制消息的风格或创建全新的语言风格非常有用。

示例配置

<?php

return [
    'source_directory' => 'lang',

    'ai' => [
        'provider' => 'openai', // or 'anthropic'
        'model' => 'gpt-4o', // or 'gpt-4', 'gpt-3.5-turbo', 'claude-3-5-sonnet-20240620'
        'api_key' => env('OPENAI_API_KEY'), // or env('ANTHROPIC_API_KEY')
    ],

    'locale_names' => [
        'en' => 'English',
        'ko' => 'Korean',
        'zh_cn' => 'Chinese (Simplified)',
        // ... other locales
    ],

    'additional_rules' => [
        'default' => [
            "Use a friendly and intuitive tone of voice, like the service tone of voice of 'Discord'.",
        ],
        'ko' => [
            "한국의 인터넷 서비스 '토스'의 서비스 말투 처럼, 유저에게 친근하고 직관적인 말투로 설명하고 존댓말로 설명하세요.",
        ],
    ],
];

请确保在您的 .env 文件中设置所选 AI 提供商的 API 密钥。

支持的文件类型

目前,此包仅支持 Laravel 使用的 PHP 语言文件。JSON 语言文件不受支持,并且没有计划在未来添加对其的支持。

为什么只支持 PHP 文件?

我们建议使用 PHP 文件来管理翻译,尤其是在处理多种语言时。以下是原因

  1. 结构:PHP 文件允许使用更有组织的结构,具有嵌套数组,这使得分组相关翻译更容易。

  2. 注释:您可以在PHP文件中添加注释,为翻译者提供上下文或说明。

  3. 性能:与JSON文件相比,PHP文件加载速度略快,因为它们不需要解析。

  4. 灵活性:PHP文件允许进行更复杂的操作,例如在翻译中使用变量或条件。

  5. 可扩展性:在管理多个语言中的大量翻译时,PHP文件的目录结构使得导航和维护更加容易。

如果您目前使用JSON文件进行翻译,我们建议迁移到PHP文件,以更好地兼容此包并提高翻译的可管理性。

AI服务

此包支持OpenAI的GPT模型和Anthropic的Claude进行翻译,每种都有其自身优势。

  • OpenAI
  • Anthropic

待办事项列表

我们一直在努力改进Laravel AI Translator。以下是我们的计划中的功能和改进。

  • 实施对翻译的严格验证
    • 验证变量是否正确保留在翻译字符串中
    • 确保占位符和Laravel特定语法得到保留
    • 检查翻译中的复数规则一致性
  • 编写测试代码以确保可靠性和捕捉潜在问题
  • 实现功能以在翻译过程中保持字符串数组的结构
  • 扩展对其他LLMs(如Gemini)的支持

如果您想为这些任务中的任何一项做出贡献,请随时提交pull request!

贡献

欢迎贡献!请随时提交Pull Request。

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。

致谢