Laravel est un framework d'application Web PHP populaire qui fournit un ensemble de syntaxes puissantes, élégantes et simples, rendant le développement et la maintenance d'applications Web plus faciles et plus agréables. Laravel fournit de nombreuses fonctionnalités utiles, dont la prise en charge intégrée du développement d'applications multilingues. Dans cet article, nous explorerons comment Laravel implémente les bases de données polyglottes.
Dans Laravel, l'internationalisation et la localisation sont deux concepts de base. L'internationalisation fait référence à la conception d'une application pour prendre en charge plusieurs langues et pratiques culturelles, tandis que la localisation fait référence à l'adaptation d'une application à un lieu spécifique. Laravel possède des outils et des classes intégrés qui peuvent nous aider à implémenter i18n et l10n.
Il existe de nombreuses façons d'implémenter des applications multilingues Laravel. Nous présenterons l'une des méthodes d'implémentation, qui consiste à utiliser une base de données pour implémenter le multilingue.
Tout d'abord, créez une table dans la base de données pour stocker les multiples langues prises en charge par le système, par exemple :
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;
Dans cette table, le champ name stocke le nom de la langue et le champ code stocke le code de la langue (tel que comme en, zh, etc.), le champ is_default spécifie la langue par défaut.
Ensuite, ajoutez plusieurs champs au tableau nécessitant une prise en charge multilingue, correspondant à du texte dans différentes langues, par exemple :
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;
Dans ce tableau, les champs name_en et name_zh stockent les noms de produits anglais et chinois, description_en et description_zh respectivement. Les champs stockent les descriptions de produits respectivement en anglais et en chinois.
Ensuite, nous devons apporter quelques modifications à ces tableaux pour prendre en charge plusieurs langues :
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); } }
La fonction de ce middleware est d'obtenir le paramètre lang du paramètre de requête et de définir la langue actuellement utilisée.
<?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(); } }
Ce modèle est utilisé pour obtenir les informations de langue actuellement utilisées, les informations de langue par défaut, etc.
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'; }
Cette méthode permet d'obtenir le champ correspondant à la langue actuelle Par exemple : si la langue actuelle est le chinois et que le modèle correspond au nom du produit anglais, alors retournez. Le champ chinois correspondant au nom du produit.
<h1>{{ $product->localized }}</h1>
Cette déclaration obtiendra automatiquement le nom du produit dans la langue correspondante en fonction de la langue actuellement utilisée.
À ce stade, nous avons terminé l'implémentation multilingue de la base de données Laravel et pouvons facilement créer des applications Web multilingues.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!