orkhanahmadov/spreadsheet-translations

Laravel 的电子表格翻译

1.4.0 2024-03-04 11:56 UTC

This package is auto-updated.

Last update: 2024-09-04 13:05:51 UTC


README

Latest Version on Packagist Total Downloads GitHub Actions

Spreadsheet Translation

为什么?

在 Laravel 应用程序中维护多语言支持可能会很困难

  • Laravel 的翻译文件是纯 PHP/JSON 文件。这假设将要翻译应用程序的人知道如何处理 PHP/JSON 文件,但这并不总是如此
  • 每个区域的翻译都位于不同的文件夹中。例如,en 文件夹用于英文翻译,de 文件夹用于德语。这种分离在代码级别上是好的,但使得维护 2 个以上区域的翻译变得困难。
  • 很容易为英语添加一个新键和翻译,但可能会忘记在德语中做同样的事情,因为没有强制这样做或使其容易发现的方法。

或者,您可以将应用程序的翻译存储在电子表格文件中,类似于

这解决了上述所有问题

  • 翻译维护者不需要知道如何使用 PHP 或 JSON
  • 所有翻译都维护在一个单独的文件和视图中
  • 每个翻译都位于区域列下,这使得很容易发现缺失的翻译

但问题是,Laravel 无法直接与这个电子表格文件一起使用来显示翻译。

这就是 spreadsheet-translations 包的用途!它读取包含多个区域翻译的电子表格文件,并将其转换为 Laravel 可以处理的纯 JSON 文件。

安装

您可以通过 composer 安装该包

composer require orkhanahmadov/spreadsheet-translations

使用以下命令发布配置文件

php artisan vendor:publish --provider="Orkhanahmadov\SpreadsheetTranslations\SpreadsheetTranslationsServiceProvider"

配置文件包含以下参数

  • locales - 解析器应在电子表格中查找的区域代码数组。默认是 ['en']
  • filepath - 电子表格文件的路径。默认情况下,指向 Laravel 项目的 lang 目录中的 translations.xlsx 文件。此配置参数还可以使用 URL 作为远程文件位置。当提供有效 URL 时,解析器将尝试下载该文件到临时本地文件并解析它。
  • sheet - 定义应使用哪个工作表。默认是 null。当 null 时,解析器选择电子表格中的活动工作表以解析翻译。如果您想使用不同的工作表,请在此参数中提供工作表的名称。
  • header_row_number - 哪一行应用作标题。默认是 1。标题行应包含在 locales 配置参数中定义的区域代码。
  • key_column - 应使用哪一列作为翻译键。默认是 A 列。
  • ignored_rows - 应在解析翻译时忽略的行号数组。默认是空数组。

用法

让我们假设我们有一个以下 Excel 电子表格文件,该文件位于具有公共 URL https://example.com/translations.xlsx 的远程服务器上。电子表格包含

我们想要

  • 将解析器指向远程文件以下载和解析
  • 仅解析 ende 区域的翻译
  • 使用 key 列作为键,在这种情况下为电子表格中的列 B
  • 忽略行号 3

发布配置文件后,我们需要进行以下调整

[
    'filepath' => 'https://example.com/translations.xlsx', // direct download URL of the file
    'locales' => ['en', 'de'], // parse `en` and `de` translations only, which means `es` will be ignored
    'key_column' => 'B', // sets key column to B
    'ignored_rows' => [3], // ignore row number 3
]

该包附带一个 artisan 命令 translations:generate

php artisan translations:generate

当执行时,它将在 Laravel 的 lang 目录中生成必要的 JSON 翻译文件。

对于上述电子表格文件和配置,translations:generate 将生成以下文件夹和文件结构

  • lang/
    • en.json
      • {"dashboard.statistics": "统计数据", "login.form.first_name": "名字", "welcome": "欢迎"}
    • de.json
      • {"dashboard.statistics": "统计信息", "login.form.first_name": "名", "welcome": "欢迎"}

测试

composer test

变更日志

有关最近更改的详细信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

MIT许可(MIT)。有关更多信息,请参阅许可文件

安全性

如果您发现任何安全相关的问题,请通过hey@orkhan.dev发送电子邮件,而不是使用问题跟踪器。

致谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件

替代方案

如果您想检测缺失的翻译,可以检查larswiegers/laravel-translations-checker