Heim > PHP-Framework > Laravel > Besprechen Sie, wie Laravel die Mehrsprachigkeit der Datenbank implementiert

Besprechen Sie, wie Laravel die Mehrsprachigkeit der Datenbank implementiert

PHPz
Freigeben: 2023-04-10 15:18:52
Original
1024 Leute haben es durchsucht

Laravel ist ein beliebtes PHP-Webanwendungs-Framework, das eine Reihe leistungsstarker, eleganter und einfacher Syntax bietet und die Entwicklung und Wartung von Webanwendungen einfacher und angenehmer macht. Laravel bietet viele nützliche Funktionen, darunter die integrierte Unterstützung für die Entwicklung mehrsprachiger Anwendungen. In diesem Artikel werden wir untersuchen, wie Laravel Datenbank-Polyglotten implementiert.

  1. Internationalisierung (i18n) und Lokalisierung (l10n) in Laravel

In Laravel sind Internationalisierung und Lokalisierung zwei Grundkonzepte. Unter Internationalisierung versteht man die Gestaltung einer Anwendung zur Unterstützung mehrerer Sprachen und kultureller Praktiken, während sich Lokalisierung auf die Anpassung einer Anwendung an einen bestimmten Ort bezieht. Laravel verfügt über einige integrierte Tools und Klassen, die uns bei der Implementierung von i18n und l10n helfen können.

  1. So implementieren Sie mehrsprachige Laravel-Anwendungen

Es gibt viele Möglichkeiten, mehrsprachige Laravel-Anwendungen zu implementieren. Wir stellen eine der Implementierungsmethoden vor, nämlich die Verwendung einer Datenbank zur Implementierung von mehrsprachigen Anwendungen.

Erstellen Sie zunächst eine Tabelle in der Datenbank, um die mehreren vom System unterstützten Sprachen zu speichern, zum Beispiel:

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;
Nach dem Login kopieren

In dieser Tabelle speichert das Namensfeld den Sprachnamen und das Codefeld den Sprachcode (z (z. B. en, zh usw.) gibt das Feld is_default die Standardsprache an. 🔜 In den Feldern werden Produktbeschreibungen jeweils auf Englisch und Chinesisch gespeichert.

Als nächstes müssen wir einige Änderungen an diesen Tabellen vornehmen, um mehrere Sprachen zu unterstützen:

Registrieren Sie in der Datei app/Http/Kernel.php eine Middleware, um die aktuell verwendete Sprache dynamisch festzulegen:

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;
Nach dem Login kopieren
  1. Erstellen Sie eine SetLanguage-Middleware:
protected $middleware = [
    ...
    \App\Http\Middleware\SetLanguage::class,
];
Nach dem Login kopieren
    Die Funktion dieser Middleware besteht darin, den Lang-Parameter aus dem Anforderungsparameter abzurufen und die aktuell verwendete Sprache festzulegen.
Erstellen Sie ein Sprachmodell:

<?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);
    }
}
Nach dem Login kopieren
    Dieses Modell wird verwendet, um die aktuell verwendeten Sprachinformationen, Standardsprachinformationen usw. abzurufen.
Erstellen Sie eine getLocalizedAttribute-Methode im Modell:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Language extends Model
{
    protected $table = &#39;languages&#39;;
    public $timestamps = false;

    public static function getDefault()
    {
        return self::where(&#39;is_default&#39;, true)->first();
    }

    public static function getCurrent()
    {
        $code = app()->getLocale();
        return self::where('code', $code)->first();
    }
}
Nach dem Login kopieren
    Diese Methode wird verwendet, um das Feld abzurufen, das der aktuellen Sprache entspricht. Beispiel: Wenn die aktuelle Sprache Chinesisch ist und das Modell dem englischen Produktnamen entspricht, dann kehren Sie zurück Das chinesische Feld, das dem Produktnamen entspricht.
In der Blade-Vorlagendatei können Sie mehrsprachige Zeichenfolgen wie diese verwenden:

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';
}
Nach dem Login kopieren
    Diese Anweisung erhält automatisch den Produktnamen in der entsprechenden Sprache basierend auf der aktuell verwendeten Sprache.
  1. Zu diesem Zeitpunkt haben wir die mehrsprachige Implementierung der Laravel-Datenbank abgeschlossen und können problemlos mehrsprachige Webanwendungen erstellen.

Das obige ist der detaillierte Inhalt vonBesprechen Sie, wie Laravel die Mehrsprachigkeit der Datenbank implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage