gsferro / translation-solution-easy
针对Laravel简单高效的i18n的完整解决方案
v1.3.0
2021-12-27 23:46 UTC
Requires
README
一个涵盖3个基本步骤的i18n的强大且易于使用的解决方案
-
固定术语(字符串)的翻译(视图和控制台)
-
创建
resources/lang/pt-br.json
文件并将固定术语放置其中,这些术语在所有地方都使用,例如:- 页面标题
- 面包屑
- 菜单
- 标签或表格列
- 短语/文本
- 按pt-br的使用方式编写
- 例如
{ "Nome": "Nome", "Email": "Email", "Nome Social": "Nome Social", "Termos de compromisso de uso": "Termos de compromisso de uso" }
- 要执行,请使用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"]);
- 相关注意事项
- 要翻译文件,请参阅文件翻译部分,使用与数据库相同的命令
php artisan gsferro:translate-files
-
-
Langs管理
- 请参阅使用配置部分第1、2和5项
- 区域设置将作为URL的前缀,但默认区域设置(pt-br)不会显示
- 管理由包自动完成,您只需要在视图中包含
@translationsolutioneasyFlags()
,以便用户可以进行切换 - 包还会检查用户的浏览器以帮助设置位置
- 在调用某些API时,请将
"accept-language" => "pt-BR,pt;q=0.8",
放入HTTP头中 - 包首先检查数据库,然后根据Iterator模式检查文件,但在下一个版本中我们将颠倒顺序,但这不会影响您的使用
-
数据库翻译
待办事项
-
是否自动翻译用户输入的信息?
- 如果是,是否使用观察器或监听器?
-
在自动翻译时,应提供内部(PF / time)检查和/或系统用户建议更好翻译的选项。
-
依赖关系
- https://github.com/spatie/laravel-translation-loader/tree/2.6.3
- 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
使用配置
-
在基础HTML文件中应包含以下内容:
<html lang="{{ strtolower(str_replace('_', '-', app()->getLocale())) }}">
-
为了便于封装和自动化测试
- 创建
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"));
- 如需更多详细信息,请参阅附加信息部分。
- 创建
-
如果您不选择使用SQLite,请在终端执行以下命令。
php artisan migrate --path=database/migrations/translation
- 如果您使用其他连接
php artisan migrate --path=database/migrations/translation --database=<outra-conexão>
- 如果您使用其他连接
-
访问
config/laravellocalization
并设置应用程序将支持的语言- 默认
pt-br
en
- 默认
-
包括语言切换选项
@translationsolutioneasyFlags()
- 它需要被
<ul>
标签封装 - 可能需要根据放置的位置调整
public/vendor/gsferro/translationsolutioneasy/css/flags.css
使用SQLite
- 创建数据库的命令
php artisan gsferro:configure-sqlite {--database= : Database name}
- 在ServiceProvider中执行
mergeConfigFrom
,将新配置合并到config/database
和config/translationsolutioneasy
- 迁移
php artisan gsferro:configure-sqlite-migrate
- 如果您想从SQLite切换到其他数据库管理系统(SGBD),请删除
vendor/gsferro/translation-solution-easy/config/sqlite
中的文件
文件翻译
- 通过artisan命令执行,如果您只想在单个文件或语言上运行,请传递参数
php artisan gsferro:translate-files [--file= : File name] [--lang= : Language] [--force : : default false, execute translate if no exists]
数据库翻译
-
在
config/translationsolutioneasy.translate-tables
中放置您希望翻译的表和字段- 例如
"translate-tables" => [ "paises" => "nome", // ou "servicos" => [ "nome", "descricao", "observacoes", ] ],
- 注意:仅放置有意义的可翻译列。包含日期和数字的列不适用。
-
在模型中
- 放置接口
TranslationColumnsInterface
- 放置特质
TranslationColumnsTrait
- 如果尚未配置第1项(内联),则设置属性
public $translationColumns = ["<name-column1>", ...]
- 放置接口
-
通过artisan命令执行,如果您只想在单个表/列(内联)上运行,请传递参数
php artisan gsferro:translate-tables [--table= : Table name] [--column= : Collumn name] [--lang= : Language] [--force : : default false, execute translate if no exists]
待办事项
- 有传递模型并直接从中获取信息的选择,这样就可以在多个数据库连接上执行翻译。
附加信息/重要信息
-
在选择用于翻译的SGBD时请注意,根据选择,发布此包时可能需要更改生成的迁移:
sqlite
:- 在
key
字段中使用的varchar
(migrate中的字符串)大小有限制为500个字符;
- 在
sql server
:- 不推荐使用
text
类型的字段,因为某个版本的Laravel可能会弃用它,当前的varchar限制是8k;
- 不推荐使用
key
字段是字符串,即根据Laravel的配置,长度为191,根据您的项目,可能需要增加;
-
选项
--force
- 在v1.3.0中添加,默认为false,即只有当没有为所选语言找到翻译时,才会查找翻译,这可以显著减少时间;
- 如果将其设置为true,则会对所有内容进行操作,可能需要数小时,具体取决于文件或表的大小。
-
每个翻译的字符限制为3k
-
测试
-
路由缓存
-
帖子不工作
-
翻译路由
鸣谢
许可证
Laravel Localization是一个开源的Laravel包,许可协议为MIT许可证