美文网首页
解决php中 Laravel i18n 语言国际化的问题

解决php中 Laravel i18n 语言国际化的问题

作者: liurongming | 来源:发表于2024-01-09 22:10 被阅读0次

一、什么是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.

相关文章

网友评论

      本文标题:解决php中 Laravel i18n 语言国际化的问题

      本文链接:https://www.haomeiwen.com/subject/tfmandtx.html