Laravel은 강력하고 우아하며 간단한 구문 세트를 제공하는 인기 있는 PHP 웹 애플리케이션 프레임워크로, 웹 애플리케이션의 개발과 유지 관리를 더욱 쉽고 즐겁게 만들어줍니다. Laravel은 많은 유용한 기능을 제공하며 그 중 하나는 다중 언어 애플리케이션 개발을 위한 내장 지원입니다. 이 기사에서는 Laravel이 데이터베이스 다중 언어를 구현하는 방법을 살펴보겠습니다.
Laravel에서 국제화와 지역화는 두 가지 기본 개념입니다. 국제화는 여러 언어와 문화적 관행을 지원하도록 애플리케이션을 설계하는 것을 의미하고, 지역화는 애플리케이션을 특정 장소에 적용하는 것을 의미합니다. Laravel에는 i18n과 l10n을 구현하는 데 도움이 되는 내장 도구와 클래스가 있습니다.
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를 저장합니다. 필드에는 각각 영어와 중국어로 제품 설명이 저장됩니다.
다음으로, 여러 언어를 지원하기 위해 이러한 테이블을 일부 변경해야 합니다.
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 데이터베이스의 다국어 구현이 완료되었으며 다국어 웹 애플리케이션을 쉽게 만들 수 있습니다.
위 내용은 Laravel이 데이터베이스 다중 언어를 구현하는 방법에 대해 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!