ホームページ > 記事 > PHPフレームワーク > Laravel がデータベースの多言語をどのように実装するかについて話し合う
Laravel は、強力かつエレガントでシンプルな構文のセットを提供する人気の PHP Web アプリケーション フレームワークで、Web アプリケーションの開発と保守をより簡単かつ楽しくします。 Laravel は多くの便利な機能を提供しており、その 1 つは多言語アプリケーションの開発をサポートする組み込み機能です。この記事では、Laravel がデータベースのポリグロットをどのように実装するかを見ていきます。
Laravel では、国際化とローカリゼーションは 2 つの基本概念です。国際化とは、複数の言語や文化的習慣をサポートするようにアプリケーションを設計することを指しますが、ローカリゼーションはアプリケーションを特定の場所に適応させることを指します。 Laravel には、i18n と l10n の実装に役立つ組み込みツールとクラスがいくつかあります。
Laravel 多言語アプリケーションを実装するにはさまざまな方法がありますが、ここではその実装方法の 1 つである、複数の言語を実装するためのデータベース。
まず、システムでサポートされている複数の言語を保存するテーブルをデータベースに作成します。例:
CREATE TABLE `languages` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `code` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, `is_default` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
このテーブルでは、name フィールドに言語名が保存され、 code フィールドには言語が格納されます。コード (en、zh など)、is_default フィールドはデフォルトの言語を指定します。
次に、さまざまな言語のテキストに対応する、多言語サポートを必要とする複数のフィールドをテーブルに追加します。例:
CREATE TABLE `products` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name_en` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `name_zh` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `description_en` text COLLATE utf8mb4_unicode_ci, `description_zh` text COLLATE utf8mb4_unicode_ci, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
このテーブルでは、name_en フィールドと name_zh フィールドに英語と name_zh フィールドが格納されます。中国語の製品名、description_en、および description_zh フィールドには、それぞれ英語と中国語の製品説明が格納されます。
次に、複数の言語をサポートするために、これらのテーブルにいくつかの変更を加える必要があります。
protected $middleware = [ ... \App\Http\Middleware\SetLanguage::class, ];
<?php namespace App\Http\Middleware; use Closure; use App; class SetLanguage { public function handle($request, Closure $next) { $language = $request->get('lang', ''); if ($language != '') { App::setLocale($language); } return $next($request); } }
このミドルウェアの機能は、リクエスト パラメータから lang パラメータを取得し、現在使用されている言語。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Language extends Model { protected $table = 'languages'; public $timestamps = false; public static function getDefault() { return self::where('is_default', true)->first(); } public static function getCurrent() { $code = app()->getLocale(); return self::where('code', $code)->first(); } }
このモデルは、現在使用されている言語情報、デフォルト言語情報などを取得するために使用されます。
public function getLocalizedAttribute($value) { $lang = Language::getCurrent(); $field = $this->getLocalizedFieldName($lang->code); return $this->$field; } protected function getLocalizedFieldName($langCode) { $fallback = $this->getDefaultFieldName(); return "{$this->$fallback}_{$langCode}"; } protected function getDefaultFieldName() { return 'name_en'; }
このメソッドは、現在使用されている言語に対応するフィールドを取得するために使用されます。たとえば、現在の言語が中国語、このモデルは英語の製品名に対応しており、製品名に対応する中国語フィールドが返されます。
<h1>{{ $product->localized }}</h1>
このステートメントは、現在使用されている言語。
これまでに、Laravel データベースの多言語実装が完了し、多言語 Web アプリケーションを簡単に作成できるようになりました。
以上がLaravel がデータベースの多言語をどのように実装するかについて話し合うの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。