>  기사  >  PHP 프레임워크  >  Laravel이 데이터베이스 다중 언어를 구현하는 방법에 대해 토론

Laravel이 데이터베이스 다중 언어를 구현하는 방법에 대해 토론

PHPz
PHPz원래의
2023-04-10 14:16:23967검색

Laravel은 강력하고 우아하며 간단한 구문 세트를 제공하는 인기 있는 PHP 웹 애플리케이션 프레임워크로, 웹 애플리케이션의 개발과 유지 관리를 더욱 쉽고 즐겁게 만들어줍니다. Laravel은 많은 유용한 기능을 제공하며 그 중 하나는 다중 언어 애플리케이션 개발을 위한 내장 지원입니다. 이 기사에서는 Laravel이 데이터베이스 다중 언어를 구현하는 방법을 살펴보겠습니다.

  1. Laravel의 국제화(i18n)와 지역화(l10n)

Laravel에서 국제화와 지역화는 두 가지 기본 개념입니다. 국제화는 여러 언어와 문화적 관행을 지원하도록 애플리케이션을 설계하는 것을 의미하고, 지역화는 애플리케이션을 특정 장소에 적용하는 것을 의미합니다. Laravel에는 i18n과 l10n을 구현하는 데 도움이 되는 내장 도구와 클래스가 있습니다.

  1. Laravel 다중 언어 구현 방법

Laravel 다중 언어 애플리케이션을 구현하는 방법에는 여러 가지가 있습니다. 구현 방법 중 하나인 데이터베이스를 사용하여 다중 언어를 구현하는 것입니다.

먼저 데이터베이스에 테이블을 생성하여 시스템에서 지원하는 여러 언어를 저장합니다. 예:

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;

이 테이블에서 이름 필드는 언어 이름을 저장하고 코드 필드는 언어 코드(예: 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 필드는 영어 및 중국어 제품 이름, 설명_en 및 설명_zh를 저장합니다. 필드에는 각각 영어와 중국어로 제품 설명이 저장됩니다.

다음으로, 여러 언어를 지원하기 위해 이러한 테이블을 일부 변경해야 합니다.

  1. app/Http/Kernel.php 파일에서 현재 사용되는 언어를 동적으로 설정하는 미들웨어를 등록합니다.
protected $middleware = [
    ...
    \App\Http\Middleware\SetLanguage::class,
];
  1. 만들기 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);
    }
}

이 미들웨어의 기능은 요청 매개변수에서 lang 매개변수를 가져와 현재 사용되는 언어를 설정하는 것입니다.

  1. 언어 모델 생성:
<?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();
    }
}

이 모델은 현재 사용되는 언어 정보, 기본 언어 정보 등을 얻는 데 사용됩니다.

  1. 모델에서 getLocalizedAttribute 메소드 생성:
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';
}

이 메소드는 현재 언어에 해당하는 필드를 가져오는 데 사용됩니다. 예: 현재 언어가 중국어이고 모델이 영어 제품 이름에 해당하는 경우 반환합니다. 제품 이름에 해당하는 중국어 필드입니다.

  1. 블레이드 템플릿 파일에서는 다음과 같은 다국어 문자열을 사용할 수 있습니다.
<h1>{{ $product->localized }}</h1>

이 문은 현재 사용되는 언어를 기반으로 해당 언어로 제품 이름을 자동으로 가져옵니다.

이제 Laravel 데이터베이스의 다국어 구현이 완료되었으며 다국어 웹 애플리케이션을 쉽게 만들 수 있습니다.

위 내용은 Laravel이 데이터베이스 다중 언어를 구현하는 방법에 대해 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.