gsferro/translation-solution-easy

针对Laravel简单高效的i18n的完整解决方案

v1.3.0 2021-12-27 23:46 UTC

This package is auto-updated.

Last update: 2024-09-28 07:01:18 UTC


README

一个涵盖3个基本步骤的i18n的强大且易于使用的解决方案

  1. 固定术语(字符串)的翻译(视图和控制台)

    1. 创建resources/lang/pt-br.json文件并将固定术语放置其中,这些术语在所有地方都使用,例如:

      • 页面标题
      • 面包屑
      • 菜单
      • 标签或表格列
      • 短语/文本
      1. 按pt-br的使用方式编写
        • 例如
        {
           "Nome": "Nome",
           "Email": "Email",
           "Nome Social": "Nome Social",
           "Termos de compromisso de uso": "Termos de compromisso de uso"
        }
      2. 要执行,请使用Laravel的常规方法
        • 例如
        echo __("Nome Social"); 
        # ou
        {{ __("Termos de compromisso de uso") }}
    • 仅在值根据使用情况进行更改时,在resources/lang/pt-br/<arquivo>.php中创建文件,例如,它是组件的一部分或需要特定翻译。
      • 例如
        # crud-pessoa.php
        <?php
        
        return [
            "index" => ":attribute recuperados(as) com sucesso",
        ];
        
        // uso
        echo __("crud-pessoa.index", ["attribute" => "Pessoa"]);
    • 相关注意事项
      1. 如果在项目进行中封装所有文本/术语并更新json文件会变得相当繁琐

      2. 如果项目从一开始就采用这种理念,将会容易得多

      3. 在团队中强化这种原则,即在任何更改中都要封装文本/术语

      4. 在php文件中的索引名称内不要使用空格,使用_-作为分隔符

      5. 注意:不要使用二维数组,除了validation.php以外的例外

    1. 要翻译文件,请参阅文件翻译部分,使用与数据库相同的命令
      php artisan gsferro:translate-files 
  2. Langs管理

    1. 请参阅使用配置部分第1、2和5项
    2. 区域设置将作为URL的前缀,但默认区域设置(pt-br)不会显示
    3. 管理由包自动完成,您只需要在视图中包含@translationsolutioneasyFlags(),以便用户可以进行切换
    4. 包还会检查用户的浏览器以帮助设置位置
    5. 在调用某些API时,请将"accept-language" => "pt-BR,pt;q=0.8",放入HTTP头中
    6. 包首先检查数据库,然后根据Iterator模式检查文件,但在下一个版本中我们将颠倒顺序,但这不会影响您的使用
  3. 数据库翻译

    1. 如果想要使用SQLite,请参阅使用SQLite部分,其中说明了如何通过几个简单步骤进行配置
      php artisan gsferro:configure-sqlite
    2. 数据库翻译部分中,解释了如何配置包以在config/translationsolutioneasy文件中翻译一个或多个表和列
      php artisan gsferro:translate-tables
  • 待办事项
    1. 是否自动翻译用户输入的信息?

      • 如果是,是否使用观察器或监听器?
    2. 在自动翻译时,应提供内部(PF / time)检查和/或系统用户建议更好翻译的选项。

依赖关系

  1. https://github.com/spatie/laravel-translation-loader/tree/2.6.3
  2. https://github.com/mcamara/laravel-localization/

版本

安装

composer require gsferro/translation-solution-easy

php artisan vendor:publish --provider="Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider"
php artisan vendor:publish --provider="Gsferro\TranslationSolutionEasy\Providers\TranslationSolutionEasyServiceProvider" --force
  • 在ServiceProvider中执行mergeConfigFrom,将app.php中的locale设置为pt-br
  • 待办事项:通过命令更改配置

使用配置

  1. 在基础HTML文件中应包含以下内容:

    <html lang="{{ strtolower(str_replace('_', '-', app()->getLocale())) }}">
  2. 为了便于封装和自动化测试

    • 创建routes/withLacale.php文件
        <?php
        
        if (app()->environment("testing")) {
            require "web.php";
        } else {
            Route::prefix(LaravelLocalization::setLocale())
                ->middleware(["localeSessionRedirect", "localizationRedirect", "localeViewPath"])
                ->group(function () {
                    require "web.php";
                });
        }
    • 修改RouteServiceProvider@mapWebRoutes
        Route::middleware("web")
             ->namespace($this->namespace)
             ->group(base_path("routes/withLacale.php"));
  3. 如果您不选择使用SQLite,请在终端执行以下命令。

    php artisan migrate --path=database/migrations/translation
    • 如果您使用其他连接
      php artisan migrate --path=database/migrations/translation --database=<outra-conexão>
  4. 访问config/laravellocalization并设置应用程序将支持的语言

    • 默认
      • pt-br
      • en
  5. 包括语言切换选项

    • @translationsolutioneasyFlags()
    • 它需要被<ul>标签封装
    • 可能需要根据放置的位置调整public/vendor/gsferro/translationsolutioneasy/css/flags.css

使用SQLite

  1. 创建数据库的命令
    php artisan gsferro:configure-sqlite {--database= : Database name}
  • 在ServiceProvider中执行mergeConfigFrom,将新配置合并到config/databaseconfig/translationsolutioneasy
  1. 迁移
    php artisan gsferro:configure-sqlite-migrate
  • 如果您想从SQLite切换到其他数据库管理系统(SGBD),请删除vendor/gsferro/translation-solution-easy/config/sqlite中的文件
  • TODO 通过命令删除配置

文件翻译

  1. 通过artisan命令执行,如果您只想在单个文件或语言上运行,请传递参数
    php artisan gsferro:translate-files [--file= : File name] [--lang= : Language] [--force :  : default false, execute translate if no exists]

数据库翻译

  1. config/translationsolutioneasy.translate-tables中放置您希望翻译的表和字段

    • 例如
        "translate-tables" => [
            "paises" => "nome", 
            // ou
            "servicos" => [
                "nome",
                "descricao",
                "observacoes",
            ]
        ],
    • 注意:仅放置有意义的可翻译列。包含日期和数字的列不适用。
  2. 在模型中

    1. 放置接口TranslationColumnsInterface
    2. 放置特质TranslationColumnsTrait
    3. 如果尚未配置第1项(内联),则设置属性public $translationColumns = ["<name-column1>", ...]
  3. 通过artisan命令执行,如果您只想在单个表/列(内联)上运行,请传递参数

    php artisan gsferro:translate-tables [--table= : Table name] [--column= : Collumn name]  [--lang= : Language] [--force :  : default false, execute translate if no exists]
  • 待办事项
    • 有传递模型并直接从中获取信息的选择,这样就可以在多个数据库连接上执行翻译。

附加信息/重要信息

鸣谢

许可证

Laravel Localization是一个开源的Laravel包,许可协议为MIT许可证