laravel 安装语言包
安装 laravel 语言包( https://laravel-lang.com )composer require laravel-lang/lang
安装完成后,会在项目根目录或者 resources 目录下生成 lang 语言包
添加语言包php artisan lang:add zh_CN
php artisan lang:add en
更新已添加的语言包php artisan lang:update
修改配置文件 config/app.php
'locale' => 'zh_CN', // 默认语言
'fallback_locale' => 'en', //备用语言
相关方法App::setLocale('en');
App::currentLocale();
App::isLocale('en')
使用短键
lang/en/messages.php
<?php
return [
'welcome' => 'Welcome to our application!', //一般用法 echo __('messages.welcome');
'welcome.name' => 'Welcome, :name', //传参数 echo __('messages.welcome.name', ['name' => 'tom']);
'welcome.ucfirst' => 'Welcome, :Name', //首字母大写 echo __('messages.welcome.ucfirst', ['name' => 'tom']);
'welcome.upper' => 'Welcome, :NAME', //转大写 echo __('messages.welcome.upper', ['name' => 'tom']);
// 复数 trans_choice('messages.apples', $count); 原理是根据 | 分割成数组,传入数量,判断符合哪个条件区间,就返回哪句翻译
'apples' => 'There is one apple|There are many apples', //单复数,数量大于1为复数, 要切换到支持复数的语言,参考 Illuminate\Translation\MessageSelector::getPluralIndex()
'apples.count' => '{0} There are none|[1,19] There are some|[20,*] There are many', // trans_choice('messages.apples.count', 10)
'minutes_ago' => '{1} :value minute ago|[2,*] :value minutes ago', //传入参数 echo trans_choice('messages.minutes_ago', 5, ['value' => 5]);
];
使用翻译字符串作为键
lang/en.json{
"我爱编程": "I love programming."
}
//使用方式
echo __('我爱编程');
注册在 AppServiceProvider::boot() 中
public function boot(): void
{
// 设置其他复数语言
Illuminate\Support\Pluralizer::useLanguage('spanish');
// 将对象作为参数传时,如 trans('messages.price', ['money' => (new Money)]),会调用 Money 对象的 __toString(),你也可以调用 Lang::stringable() 注册自定义格式处理程序
Illuminate\Support\Facades\Lang::stringable(function (Money $money) {
return $money->formatTo('en_GB');
});
}
测试代码
Route::any('/test', function (){
App::setLocale('en');
echo __('messages.welcome');
echo __('messages.welcome.name', ['name' => 'tom']);
echo __('messages.welcome.ucfirst', ['name' => 'tom']);
echo __('messages.welcome.upper', ['name' => 'tom']);
echo trans_choice('messages.apples.count', 10);
echo trans_choice('messages.minutes_ago', 5, ['value' => 5]);
});