acmesaicopackage/laravel-translation-manager

v2.0.0 2024-08-01 14:48 UTC

This package is not auto-updated.

Last update: 2024-09-27 10:55:42 UTC


README

对于 Laravel 4,请使用 0.1 分支

这是一个管理 Laravel 翻译文件的包。它不替代翻译系统,只是将 php 文件导入数据库并可以通过 Web 界面进行编辑。工作流程如下:

- Import translations: Read all translation files and save them in the database
- Find all translations in php/twig sources
- Optionally: Listen to missing translation with the custom Translator
- Translate all keys through the webinterface
- Export: Write all translations back to the translation files.

这样,翻译可以保存在 git 历史记录中,并且在生产中不会引入额外开销。

Screenshot

要求

首先安装 mcamara/laravel-localization,运行 composer require mcamara/laravel-localization 并按照 https://github.com/mcamara/laravel-localization 中的安装流程操作。

安装

在 composer.json 中包含此包并运行 composer update(或直接运行 composer require acmesaicopackage/laravel-translation-manager

composer require acmesaicopackage/laravel-translation-manager

更新 composer 后,将 ServiceProvider 添加到 config/app.php 中的 providers 数组

'AcmeSaicopackage\TranslationManager\ManagerServiceProvider',

您需要为此包运行迁移

$ php artisan vendor:publish --provider="AcmeSaicopackage\TranslationManager\ManagerServiceProvider" --tag=migrations
$ php artisan migrate

您需要发布此包的配置文件。这将添加 config/translation-manager.php 文件,您可以在其中配置此包。

$ php artisan vendor:publish --provider="AcmeSaicopackage\TranslationManager\ManagerServiceProvider" --tag=config

为了编辑默认模板,您还需要发布视图。视图将被放置在 resources/views/vendor/translation-manager

$ php artisan vendor:publish --provider="AcmeSaicopackage\TranslationManager\ManagerServiceProvider" --tag=views

路由在 ServiceProvider 中添加。您可以在配置中设置路由的组参数。您可以更改前缀或路由的过滤/中间件。如果您想进行完全自定义,您可以扩展 ServiceProvider 并重写 map() 函数。

此示例将使翻译管理器在 http://yourdomain.com/translations 中可用

如果您想使用 Google Translate API 进行自动翻译

php artisan vendor:publish --provider=Tanmuhittin\LaravelGoogleTranslate\LaravelGoogleTranslateServiceProvider

编辑 config/laravel_google_translate.php 并添加您的 Google Translate API 密钥。

php artisan config:cache

现在您可以使用自动翻译特性

Laravel >= 5.2

默认情况下,配置文件只包括 auth 中间件,但 Laravel 5.2 的最新更改使得会话变量仅在包含 web 中间件的路由中可访问。为了使此包在 Laravel 5.2 上工作,您必须将路由/中间件设置从默认的

    'route' => [
        'prefix' => 'translations',
        'middleware' => 'auth',
    ],

更改为

    'route' => [
        'prefix' => 'translations',
        'middleware' => [
	        'web',
	        'auth',
		],
    ],

注意: 这仅在 Laravel 5.2(及更高版本)中需要。

用法

Web 界面

当您已通过按钮或命令导入翻译后,您可以在 Web 界面(在您使用控制器定义的 URL 上)查看它们。您可以点击一个翻译,并弹出一个编辑字段。只需点击保存,它就会被保存:)当某个翻译尚未在另一个区域创建时,您也可以直接编辑它以创建它。

您还可以使用 Web 界面上的按钮导入/导出翻译。在发布翻译时,请确保您的应用程序可以写入语言目录。

您还可以使用以下命令。

导入命令

导入命令将遍历 app/lang 并将所有字符串加载到数据库中,以便您可以轻松管理它们。

$ php artisan translations:import

来自 app/lang/locale.json 文件的翻译字符串将被导入到 __json_ 组。

注意:默认情况下,只有新的字符串会被添加。数据库中已存在的翻译将被保留不变。如果您想用文件中的值替换所有值,请添加 --replace(或 -R)选项:php artisan translations:import --replace

在源中查找翻译

查找命令/按钮将在应用目录中的所有 php/twig 文件中进行搜索,查看是否包含翻译函数,并尝试提取分组/项名称。找到的键将被添加到数据库中,以便于轻松翻译。这可以通过网页界面或 Artisan 命令来完成。

$ php artisan translations:find

如果您的项目使用翻译字符串作为键,这些键将被存储在 __json_ 分组中。

导出命令

导出命令将数据库内容写回应用目录下的 lang php 文件。这将覆盖现有翻译并删除所有注释,因此在使用之前请确保备份您的数据。提供分组名称以定义您想要发布的分组。

$ php artisan translations:export <group>

例如,当您有两个区域(en/nl)时,php artisan translations:export reminders 将写入 app/lang/en/reminders.phpapp/lang/nl/reminders.php

要导出作为键的翻译字符串到 JSON 文件,请使用 --json(或 -J)选项:php artisan translations:export --json。这将导入 __json_ 分组中的每个条目。

清理命令

清理命令将搜索所有为 NULL 的翻译并删除它们,以便您的界面看起来更干净。注意:空翻译永远不会被导出。

$ php artisan translations:clean

重置命令

重置命令简单地将数据库中的所有翻译清除,以便您可以从头开始(通过新的导入)。在使用此操作之前,请确保导出您的工作(如果需要的话)。

$ php artisan translations:reset

检测缺失的翻译

大多数翻译可以通过使用查找命令(见上方)来找到,但在您有动态键(变量/自动表单等)的情况下,监听缺失的翻译可能会有所帮助。要检测缺失的翻译,我们可以用自定义提供程序替换 Laravel TranslationServiceProvider。在您的 config/app.php 中,取消注释原始 TranslationServiceProvider 并添加此包中的提供程序

//'Illuminate\Translation\TranslationServiceProvider',
'AcmeSaicopackage\TranslationManager\TranslationServiceProvider',

这将扩展翻译器,并在找不到键时创建新的数据库条目,这样您就必须访问使用它们的页面。这样它就会在网页界面中显示出来,可以编辑,然后可以导出。您不应该在生产环境中使用此功能,仅在开发中翻译视图时使用,然后切换回来。

待办事项

此包仍然处于非常初级的阶段。待办事项列表中的一些事情

- Add locales/groups via webinterface
- Improve webinterface (more selection/filtering, behavior of popup after save etc)
- Seed existing languages (https://github.com/caouecs/Laravel-lang)
- Suggestions are welcome :)