longman/laravel-multilang

用于集成Laravel 5.x多语言(多地区)功能的包


README

Build Status Code Coverage Code Quality Latest Stable Version Total Downloads Downloads Month License

MultiLang包的这个版本需要最低PHP 7.0。对于旧版本的PHP,请使用MultiLang 1.x

这是一个非常有用的包,用于在Laravel 5.x中集成多语言(多地区)功能。它包含一个ServiceProvider用于注册多语言和Middleware,以自动修改如http://site.com/en/your-routes的路由。

此包使用数据库来存储翻译(在生产环境中缓存数据以提高性能)。此外,包会自动在数据库中添加缺失的键(仅在本地环境中)。

目录

安装

通过 Composer 安装此包。

编辑项目的 composer.json 文件,以要求 longman/laravel-multilang

创建 composer.json 文件

{
    "name": "yourproject/yourproject",
    "type": "project",
    "require": {
        "longman/laravel-multilang": "~2.0"
    }
}

然后运行 composer update

或者 在命令行中运行命令

composer require longman/laravel-multilang

在Laravel中,ServiceProvider和facade将自动注册。

使用发布命令将包配置复制到本地配置

php artisan vendor:publish --provider="Longman\LaravelMultiLang\MultiLangServiceProvider"

运行多语言迁移命令后

php artisan multilang:migration

它将在数据库/migrations文件夹中创建多语言迁移文件。之后,您可以运行

php artisan migrate

如果您想根据URL(如http://site.com/en/your-routes)自动更改地区,必须在app/Http/Kernel.php中添加中间件

建议在CheckForMaintenanceMode中间件之后添加multilang

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Longman\LaravelMultiLang\Middleware\MultiLang::class,
];

在您的RoutesServiceProvider中进行修改

MultiLang::routeGroup(function($router) {
    require app_path('Http/routes.php');
});

或者在app/Http/routes.php文件中添加multilang组

MultiLang::routeGroup(function($router) {
    // your routes and route groups here
});

或者,如果您只想翻译字符串而不自动解析地区和重定向,您可以在应用程序中手动设置地区,如下所示

App::setLocale('en');

用法

翻译

在应用程序的任何地方,您都可以使用 t() 辅助函数,如下所示

$string = t('Your translatable string');

您可以使用标记来动态文本并传递任何数据,如下所示

$string = t('The :attribute must be a date after :date.', ['attribute' => 'Start Date', 'date' => '7 April 1986']);

这将返回 开始日期必须是在1986年4月7日之后的日期。

Blade模板

在blade模板中,您可以使用@t()标记,如下所示

@t('Your translatable string')

它等同于 {{ t('可翻译的字符串') }}

URL生成

此外,您还可以使用 lang_url() 辅助函数自动将当前语言标记附加到URL中。

$url = lang_url('users'); // which returns /en/users depending on your language (locale)

您可以强制设置地区并获取当前URL的本地化URL,例如。

$url = lang_url('users', [], null, 'ka'); // which returns /ka/users ignoring current locale

或者

$url = lang_url('en/users', [], null, 'ka'); // also returns /ka/users

您还可以通过lang_route()函数使用命名路由

$url = lang_route('users'); // which returns en.users depending on your language (locale)

Request::locale()始终返回当前地区。

注意:文本将在触发Laravel的LocaleUpdated事件后选择。因此,您应该使用MultiLang中间件或手动在应用程序中设置地区。

文本作用域

如果您想按某些作用域分组翻译,在包中可以定义作用域。例如,要定义应用程序中的admin作用域,您应该在设置地区之前调用

app('multilang')->setScope('admin');

默认作用域是 global

注意:默认作用域是global

导入/导出文本

为了与源代码(git/svn)版本化文本并轻松管理,可以导入yml文件中的文本并导出为文件。

yml文件格式是

-
  key: 'authorization'
  texts:
    en: 'Authorization'
    ge: 'ავტორიზაცია'
-
  key: 'registration'
  texts:
    en: 'Registration'
    ge: 'რეგისტრაცია'

运行命令以获取可能的选项和更多信息

php artisan help multilang:import

php artisan help multilang:export

待办事项

编写更多测试

故障排除

如果您喜欢走在科技前沿,请将您发现的任何错误报告到 laravel-multilang issues 页面。

贡献

欢迎提交合并请求。有关信息,请参阅 CONTRIBUTING.md

许可

请参阅此仓库中包含的 LICENSE,以获取完整的MIT许可副本,该项目基于此许可。

鸣谢

完整的致谢名单请见 CREDITS