[Laravel] Localization 지역화 적용하기
깃허브에 Laravel-JS-Localization라는 라이브러리가 있는데
적용이 잘 안되어서 다른방법을 찾다가 web.php에서 설정하는 방법을 찾았다!
방법은 매우 간단!!
lang파일 설정
기본적으로 resources-lang-en이 존재하는데, 내가 사용할 언어폴더를 만든 후
en에 있던 기본php 파일들을 복사하였다
(쓸지 않쓸지는 의문.. 우선 복사한 이유는 세팅한 언어가 영어로 나올지 해당 언어로 나올지 테스트용!)
그리고 실제로 사용할 언어변수들은 custom.php에 모아두고 싶었기 때문에 생성하였는데 이건 취향껏!
config - app.php의 locale 설정
기본은 영어(en)으로 세팅 되어있고, 나같은 경우 locale만 변경하였다
//기본으로 세팅할 언어
'locale' => 'ja',
//세팅한 언어를 불러오는데 실패하였을때 출력될 언어
'fallback_locale' => 'en',
//라이브러리 언어설정
'faker_locale' => 'en_US',
public-routes-web.php
lang 정보를 캐시에 저장해주는 부분이다
Cache::rememberForever를 사용하면 자동갱신하여 캐시에 저장한다고 적혀있었는데 테스트를 해보니 갱신이 안되는것 같았다
코멘트를 보니까 다들 Cache::forget('lang.js') 구문을 추가하길래 또 검색검색..
rememberForever은 캐시가 수동으로 지워질 때까지 갱신되지 않는 함수로 캐시를 지워주는 Cache::forget으로 먼저 지워줌으로서 자동갱신 역할을 할수 있게 추가하니까 아주 잘 된다!
로그를 찍어보면 $strings에 키와 값으로 된 배열로 저장된것을 확인 할 수 있다.
21번째줄의 echo 안에 있는 구문으로 js에서 호출하면 된다!
// Localization
Route::get('/js/lang.js', function () {
Cache::forget('lang.js');
$strings = Cache::rememberForever('lang.js', function () {
$lang = config('app.locale');
Log::info('Language set >>> '.$lang);
$files = glob(resource_path('lang/' . $lang . '/*.php'));
$strings = [];
foreach ($files as $file) {
$name = basename($file, '.php');
$strings[$name] = require $file;
}
return $strings;
});
header('Content-Type: text/javascript');
echo('window.lang = ' . json_encode($strings) . ';');
exit();
})->name('assets.lang');
app.blade.php
위에서 만든 루트 경로를 호출하는 구문을 추가한다.
app.blade.php에서 라이브러리 구문을 작성하여서 해당 구문도 여기에 추가하였다.
<head>
<!-- localization -->
<script src="/js/lang.js"></script>
</head>
호출 예시
custom.php에서 작성한 label 안의 password 문구를 가져온다고 하자
<?php
return [
'menu' => [
],
'label' => [
'password' => 'パスワード',
'email' => 'e-mail',
],
'button' => [
'enroll' => '登録',
'back' => '戻る'
],
'message' => [
],
]
?>
lang.custom.label['password']
결과
잡담
만약 ja폴더안의 custom.php에 언어를 설정하였는데 en폴더에 custom.php파일이 없는 상황에서 locale을 ja->en으로 변경하면 fallback_locale이 될까?
결과는 JS 구문오류가 발생한다.
이점도 고려해서 구조를 짜는게 좋을것 같다.
다국어를 사용하지 않을 경우는 아예 locale을 전부 ja로 설정한다던가..
localization 말 그대로 지역화이지만 전직장에서는 지역화가 굳이 필요하지 않은 어플리케이션이였지만 이런식으로 화면에 보여지는 문구를 설정하였다.
'확인', '취소', '등록되었습니다.' 등등 자주 사용되는 언어가 만약 클라이언트의 요청에 의해서 변경해야하는 경우 사용된 페이지를 하나하나 들어가서 고치는것도 고역일 것이다.
그런 의미에서 지역화가 필요하지 않은 어플리케이션이라고 해도 이곳에서 언어세팅을 해두면 여러모로 편할것 같다고 생각한다.
참고자료
Using Laravel localization with JavaScript and VueJS
We do know that Laravel has a wonderful localization support out of box which by default is located in resources/lang folder. We can use it…
medium.com
https://blog.capilano-fw.com/?p=1344
永久保存版!Laravel・Cacheの使い方大全
さてさて、ウェブサイト開発でページ表示の速度を向上させるためによく「キャッシュ」を利用することがあります。 キャッシュとは、時間がかかる計算結果を一時的に保管しておいて、一
blog.capilano-fw.com
https://laravel.com/docs/10.x/cache
Laravel - The PHP Framework For Web Artisans
Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small things.
laravel.com