一、什么是i18n国际化
即为:i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。类似的命名,还有k8s(Kubernetes)等等。
二、Laravel 10 国际化
默认情况下,Laravel 应用程序框架不包含 lang 目录。如果你想自定义 Laravel 的语言文件,可以通过lang:publish Artisan
命令发布它们。
Laravel 的本地化功能提供了一种方便的方法来检索各种语言的字符串,从而使你可以轻松地在应用程序中支持多种语言。
Laravel 提供了两种管理翻译字符串的方法。首先,语言字符串可以存储在 lang 目录里的文件中。在此目录中,可能存在应用程序支持的每种语言的子目录。这是 Laravel 用于管理内置 Laravel 功能(例如验证错误消息)的翻译字符串的方法:
/lang
/en
messages.php
/es
messages.php
或者,可以在 lang 目录中放置的 JSON 文件中定义翻译字符串。采用这种方法时,应用程序支持的每种语言在此目录中都会有一个对应的 JSON 文件。对于具有大量可翻译字符串的应用,建议使用此方法:
/lang
en.json
es.json
我们将在本文档中讨论每种管理翻译字符串的方法。
发布语言文件
默认情况下,Laravel 应用程序框架不包含 lang 目录。如果你想自定义 Laravel 的语言文件或创建自己的语言文件,则应通过 lang:publish Artisan 命令构建 lang 目录。 lang:publish 命令将在应用程序中创建 lang 目录,并发布 Laravel 使用的默认语言文件集:
php artisan lang:publish
切换语言环境
Laravel 提供了一个全局的 App 门面,可以用来设置和获取当前语言环境。通过调用 setLocale 方法可以设置当前语言环境,如:
App::setLocale('en');
上述代码将把当前语言环境设置为英语。
可以在代码中使用App::getLocale()
方法来获取当前语言环境。
三、采用第三方本地化【推荐】
官网:https://laravel-lang.com/
- 安装所有
# 安装通用
composer require --dev laravel-lang/common
# 更新
php artisan lang:update
- 不想安装所有,就单个安装
composer require --dev laravel-lang/lang
composer require --dev laravel-lang/actions
composer require --dev laravel-lang/attributes
composer require --dev laravel-lang/http-statuses
composer require laravel-lang/locales
composer require laravel-lang/locale-list
composer require laravel-lang/native-country-names
composer require laravel-lang/native-currency-names
composer require laravel-lang/native-locale-names
- API接口支持则使用:JSON Fallback
# 安装
composer require laravel-lang/json-fallback
After this, you need to add a link to the service provider in the providers section of the config/app.php settings file:
<?php
use Illuminate\Support\ServiceProvider;
# 注意引用,作了别名处理
use Illuminate\Translation\TranslationServiceProvider as BaseTranslationServiceProvider;
use LaravelLang\JsonFallback\TranslationServiceProvider as JsonTranslationServiceProvider;
return [
'providers' => ServiceProvider::defaultProviders()->merge([
// your service providers
// 保持之前的配置
])->replace([
// 新增配置
BaseTranslationServiceProvider::class => JsonTranslationServiceProvider::class,
])->toArray(),
];
Now JSON keys will correctly output the value based on the selected localization.
网友评论