in10/multilanguage

Laravel 的简单、有观点的多语言包

v2.0.0 2022-03-02 11:31 UTC

README

Laravel 的简单、有观点的多语言包

内容

需求

  • PHP 7.1 - 7.3
  • Laravel 5.7

设计

这是一个有观点的包:它以我们在 IN10 运行的特定方式工作。这意味着

  1. 所有翻译的路由都以一个路由部分开头,例如 example.com/de/news/
  2. 网站有一个预定义的语言集,其他语言将返回 404。
  3. 语言总是两个字符。
  4. 主页是翻译的。
  5. 网站有一个默认语言,默认为 "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。为了便于从包升级到此新的小包,请执行以下步骤

  1. 删除现有包: composer remove arcanedev/localization
  2. 如果需要,删除 ServiceProvider 和配置文件。
  3. 按照上面 安装 部分的步骤安装 IN10/multilanguage。
  4. 在您的项目中搜索以下特定的 Localization 代码实例,需要替换
  1. 彻底测试您的项目,以检查所有翻译的路由和功能是否仍然正常工作。

用法

设置组

您可以通过将它们包裹在一个组中,来使一组路由可翻译

Route::multilanguage([], function() {
    Route::get('/', 'HomepageController')->name('homepage');
    Route::get('/news/{slug}', 'HomepageController')->name('news.show');
});

第一个参数 attributes 与常规路由组具有相同的设置,除了 prefixasmiddleware,这些将被覆盖(这些参数是使翻译工作所必需的)。多语言组应该是一个顶级构造。将其添加到另一个组或前缀内部未经验证,并且可能不会工作。

路由翻译

在某些情况下,您可能想翻译 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

开发者

Jakob Buis

许可证

版权 2019 IN10。版权所有。