Spatie는 Laravel의 현지화 시스템과 통합하고 앱의 현재 로케일을 기반으로 번역을 저장하고 검색하는 유연한 방법을 제공하여 Laravel 애플리케이션의 번역을 관리합니다.
앱 로케일이 변경 될 때 Spatie가 번역을 처리하는 방법
1. 번역 저장 및 검색
-Spatie는 Laravel-Translation-Loader라는 패키지를 제공하여 언어 파일 대신 데이터베이스에 번역을 저장할 수 있습니다. 이 패키지는 Laravel의 Default Translation Service 제공 업체를 Spatie의 공급자로 대체하여 데이터베이스에서 번역을 동적으로 가져올 수 있습니다 [1].
- 번역은 각 항목에 그룹 (일반적으로`eance_lines`)에 저장됩니다. 각 항목에는 그룹 (예 : "검증"), 키 (예 : "필수") 및 여러 로케일에 대한 번역을 보유하는 JSON 객체 (예 :`en '=>'필요한 필드 ','nl '=>'dit is een verplicht veld'`)에 저장됩니다.
-Laravel의`__ ()
````` '기능을 번역 키를 사용하여 호출하면 Spatie's Loader는 응용 프로그램에서 설정된 현재 로케일의 번역을 가져옵니다. 예를 들어, 앱 로케일이` 'nl' ',`__ ('validation.required ') 인 경우 데이터베이스에서 네덜란드 번역을 반환합니다 [1].
2. 로케일 전환
- 앱 로케일은 런타임에 laravel의`app ()-> setlocale ( 'locale_code')`메소드를 사용하여 변경할 수 있습니다.
- 로케일이 변경되면`__ ()``또는 기타 번역 기능을 통한 모든 후속 번역 검색은 새로 설정된 로케일에서 텍스트를 자동으로 반환합니다.
- 데이터베이스의 현재 로케일에 대한 번역이 없으면 Laravel의 폴백 로케일 메커니즘은 명시 적으로 비활성화되지 않는 한 기본 로케일에서 번역을 반환 할 수 있습니다 [1] [8].
3. JSON 스토리지를 사용한 모델 수준 번역
- 또 다른 Spatie 패키지 인 Laravel Translatable은 웅변 모델이 속성을 번역 할 수 있도록 설계되었습니다.
- 번역은 추가 테이블이 필요없이 번역 가능한 속성 당 단일 데이터베이스 열에서 JSON으로 저장됩니다 [3].
- 앱 로케일이 변경되면 모델에서 번역 가능한 속성에 액세스하면 현재 로케일의 값이 자동으로 반환됩니다. 예를 들어,`$ newsitem-> name`은 앱에서 설정된 현재 로케일의 번역을 반환합니다 [4].
-`gettranslation (속성, 로케일) 및`settranslation (속성, 로케일, 가치)과 같은 메소드를 사용하여 특정 지역에 대한 번역을 명시 적으로 받거나 설정할 수 있습니다. [4].
4. 폴백 및 누락 된 번역
- Spatie의 번역 가능한 패키지는 폴백 로케일을 지원하므로 현재 로케일에 대한 번역이 누락되면 다른 로케일 (일반적으로 기본값)에서 번역을 반환 할 수 있습니다 [8].
-이 동작은 부울 깃발을 'gettranslation'으로 전달하여 변환을 비활성화하고 번역이 누락 된 경우 빈 줄을 얻음으로써 제어 할 수 있습니다 [8].
요약
앱 로케일이 변경되면 Spatie의 번역 패키지는 데이터베이스 저장어 라인 또는 JSON 저장 모델 속성에서 적절한 변환을 자동으로 제공하여 Laravelâ의 로케일 설정을 활용합니다. 이 원활한 통합은 번역 검색 기능이 현재 앱 로케일을 기반으로 올바른 현지화 된 문자열을 반환하고 번역이 누락 된 경우 폴백 메커니즘을 사용할 수 있도록합니다.
이 접근법은 런타임시 동적 로케일 전환을 허용하고 사용 된 패키지에 따라 데이터베이스 테이블 또는 JSON 열에서 유연한 방식으로 번역을 저장하는 것을 지원합니다.
참고 문헌 : [1] [3] [4] [8]
인용 :
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://github.com/spatie/laravel-translatable
[4] https://spatie.be/docs/laravel-translatable/v6/basic-usage/getting-and-settings-translations
[5] https://filamentphp.com/plugins/filament-spatie-translatable
[6] https://github.com/filamentphp/filament/discussions/6913
[7] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-shows-----i-i-try-trieck-th