in10 / multilanguage
Laravel 的简单、有观点的多语言包
Requires
- php: ^7.1 || ^7.2 || ^7.3 || ^7.4
- laravel/framework: ^8.0.0
- dev-master
- v2.0.0
- v2.0.0-alpha.2
- v2.0.0-alpha.1
- v1.2.0-alpha.3
- v1.2.0-alpha.2
- v1.2.0-alpha.1
- v1.1.2
- v1.1.1
- v1.1.0
- v1.1.0-alpha.2
- v1.1.0-alpha.1
- v1.0.0
- v1.0.0-alpha.5
- v1.0.0-alpha.4
- v1.0.0-alpha.3
- v1.0.0-alpha.2
- v1.0.0-alpha.1
- dev-feature/laravel-8-update
- dev-feature/laravel-7-upgrade
- dev-feature/laravel-6-upgrade
- dev-develop
- dev-feature/update-default-language-redirect
This package is auto-updated.
Last update: 2024-09-24 16:57:20 UTC
README
Laravel 的简单、有观点的多语言包
内容
需求
- PHP 7.1 - 7.3
- Laravel 5.7
设计
这是一个有观点的包:它以我们在 IN10 运行的特定方式工作。这意味着
- 所有翻译的路由都以一个路由部分开头,例如 example.com/de/news/
- 网站有一个预定义的语言集,其他语言将返回 404。
- 语言总是两个字符。
- 主页是翻译的。
- 网站有一个默认语言,默认为 "en",您可以在配置中更改它。默认语言通过 301-重定向排除在 URL 之外。如果您访问 example.com/en/test,它将被重定向到 example.com/test。
安装
使用 composer 安装包
composer require "in10/multilanguage"
并发布配置文件
php artisan vendor:publish --provider=IN10\\Multilanguage\\ServiceProvider
您可以根据需要自定义此文件。
从 ARCANEDEV/localization 迁移
我们在 IN10 之前使用的一个包是 ARCANEDEV/Localization。为了便于从包升级到此新的小包,请执行以下步骤
- 删除现有包:
composer remove arcanedev/localization
。 - 如果需要,删除 ServiceProvider 和配置文件。
- 按照上面 安装 部分的步骤安装 IN10/multilanguage。
- 在您的项目中搜索以下特定的 Localization 代码实例,需要替换
- 彻底测试您的项目,以检查所有翻译的路由和功能是否仍然正常工作。
用法
设置组
您可以通过将它们包裹在一个组中,来使一组路由可翻译
Route::multilanguage([], function() { Route::get('/', 'HomepageController')->name('homepage'); Route::get('/news/{slug}', 'HomepageController')->name('news.show'); });
第一个参数 attributes
与常规路由组具有相同的设置,除了 prefix
、as
和 middleware
,这些将被覆盖(这些参数是使翻译工作所必需的)。多语言组应该是一个顶级构造。将其添加到另一个组或前缀内部未经验证,并且可能不会工作。
路由翻译
在某些情况下,您可能想翻译 URL 中的 slugs。一个常见的例子是 /en/news/an-article
和 /nl/nieuws/een-artikel
的 URL 变体。这可以通过使用 transGet
路由函数来实现
Route::multilanguage([], function() { Route::transGet('news.show'); });
请注意,在多语言路由组外使用 transGet
不会工作。
翻译键将自动在 routes.php
翻译文件中查找。所有翻译路由都必须始终翻译。不要担心:如果缺少翻译,包会大声提醒您。
// resources/lang/en/routes.php return [ 'news.show' => 'news/{slug}', ]; // resources/lang/nl/routes.php return [ 'news.show' => 'nieuws/{slug}', ];
路由生成
如果您想生成一个带有正确语言的路由,请使用包含的辅助函数
function translatedRoute(string $route, array $parameters = [], bool $absolute = true, ?string $language = null) : string
此辅助函数与 Laravel route()
辅助函数具有相同的参数,可选的语言作为最后一个参数。如果您省略了语言,辅助函数将使用请求的当前语言。这通常是您想要的,因此通常可以像使用常规辅助函数一样使用 translatedRoute 辅助函数
translatedRoute('news.show', ['slug' => 'five-ways-to-translate-content');
在这个例子中,如果当前语言设置为荷兰语,它将生成 /nl/news/five-ways-to-translate-content
。
开发者
许可证
版权 2019 IN10。版权所有。