Rumah  >  Artikel  >  rangka kerja php  >  Bincangkan bagaimana Laravel melaksanakan pangkalan data berbilang bahasa

Bincangkan bagaimana Laravel melaksanakan pangkalan data berbilang bahasa

PHPz
PHPzasal
2023-04-10 14:16:23959semak imbas

Laravel ialah rangka kerja aplikasi web PHP yang popular yang menyediakan satu set sintaks yang berkuasa, elegan dan ringkas, menjadikan pembangunan dan penyelenggaraan aplikasi web lebih mudah dan menyeronokkan. Laravel menyediakan banyak ciri berguna, salah satunya adalah sokongan terbina dalam untuk pembangunan aplikasi berbilang bahasa. Dalam artikel ini, kami akan meneroka cara Laravel melaksanakan pelbagai bahasa pangkalan data.

  1. Pengantarabangsaan (i18n) dan penyetempatan (l10n) dalam Laravel

Dalam Laravel, pengantarabangsaan dan penyetempatan ialah dua konsep asas. Pengantarabangsaan merujuk kepada mereka bentuk aplikasi untuk menyokong pelbagai bahasa dan amalan budaya, manakala penyetempatan merujuk kepada menyesuaikan aplikasi ke tempat tertentu. Laravel mempunyai beberapa alatan dan kelas terbina dalam yang boleh membantu kami melaksanakan i18n dan l10n.

  1. Cara melaksanakan pelbagai bahasa Laravel

Terdapat banyak cara untuk melaksanakan aplikasi berbilang bahasa Laravel Kami akan memperkenalkan salah satu kaedah pelaksanaan iaitu menggunakan pangkalan data untuk melaksanakan aplikasi berbilang bahasa.

Pertama, buat jadual dalam pangkalan data untuk menyimpan berbilang bahasa yang disokong oleh sistem, contohnya:

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;

Dalam jadual ini, medan nama menyimpan nama bahasa, dan medan kod menyimpan Kod bahasa (seperti en, zh, dll.) ditentukan, dan medan is_default menentukan bahasa lalai.

Kemudian, tambahkan berbilang medan pada jadual yang memerlukan sokongan berbilang bahasa, sepadan dengan teks dalam bahasa yang berbeza Contohnya:

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;

Dalam jadual ini, medan name_en dan name_zh adalah. masing-masing disimpan nama produk Inggeris dan Cina, medan description_en dan description_zh masing-masing menyimpan penerangan produk Inggeris dan Cina.

Seterusnya, kita perlu membuat beberapa perubahan pada jadual ini untuk menyokong berbilang bahasa:

  1. Dalam fail app/Http/Kernel.php, daftar perisian tengah dengan Untuk menetapkan secara dinamik bahasa yang digunakan sekarang:
protected $middleware = [
    ...
    \App\Http\Middleware\SetLanguage::class,
];
  1. Buat perisian tengah SetLanguage:
<?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);
    }
}

Fungsi perisian tengah ini adalah untuk mendapatkan semula parameter permintaan daripada Dapatkan lang dan tetapkan bahasa yang sedang digunakan.

  1. Buat model Bahasa:
<?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();
    }
}

Model ini digunakan untuk mendapatkan maklumat bahasa yang sedang digunakan, maklumat bahasa lalai, dsb.

  1. Buat kaedah getLocalizedAttribute dalam Model:
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';
}

Kaedah ini digunakan untuk mendapatkan medan yang sepadan dengan bahasa semasa, contohnya: jika bahasa semasa adalah bahasa Cina, dan model sepadan dengan nama produk Inggeris, kemudian medan Cina sepadan dengan nama produk dikembalikan.

  1. Dalam fail templat Blade, anda boleh menggunakan rentetan berbilang bahasa seperti ini:
<h1>{{ $product->localized }}</h1>

Pernyataan ini secara automatik akan memperoleh produk dalam bahasa yang sepadan berdasarkan nama bahasa yang digunakan sekarang.

Pada ketika ini, kami telah menyelesaikan pelaksanaan berbilang bahasa bagi pangkalan data Laravel dan boleh membuat aplikasi web berbilang bahasa dengan mudah.

Atas ialah kandungan terperinci Bincangkan bagaimana Laravel melaksanakan pangkalan data berbilang bahasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn