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]);

});

 

posted @ 2023-06-26 21:25  心随所遇  阅读(201)  评论(0编辑  收藏  举报