Laravel oferuje bardzo dobry system tworzenia aplikacji wielojęzykowych. Opiera się on na pobieraniu tłumaczeń z plików umieszczonych w katalogu resources/lang
. Dzięki wsparciu wielojęzykowości, przetłumaczenie aplikacji napisanej w Laravelu z domyślnego języka angielskiego na język polski jest zadaniem dosyć łatwym. Właśnie tym tematem zajmiemy się w tym wpisie.
Zacznijmy od zrozumienia tego jak w Laravelu możemy tworzyć i używać plików z tłumaczeniami. Są na to dwa sposoby.
Sposób pierwszy: tablice asocjacyjne w plikach php
Spójrzmy do katalogu resources/lang/en
, znajdziemy tam cztery pliki:
auth.php
pagination.php
passwords.php
validation.php
W tych plikach znajdują się tłumaczenia, których używają wbudowane komponenty Laravela. Na przykład te odpowiedzialne za wyświetlanie linków paginacji lub błędów walidacji. Każdy z plików w tym katalogu zwraca tablicę asocjacyjną. Przykładowo plik auth.php
wygląda tak:
<?php
return [
'failed' => 'These credentials do not match our records.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
];
Jeśli chcemy uzyskać dostęp do tłumaczenia w naszej aplikacji, powinniśmy użyć funkcji globalnej __()
(nazwa funkcji to dwa znaki podkreślenia). Jako parametr przekazujemy najpierw nazwę pliku, następnie klucz z tablicy, oddzielone kropką. Przykładowo, żeby uzyskać tłumaczenie These credentials do not match our records.
użyjemy __('auth.failed')
.
Sposób drugi: plik json
Drugim sposobem jest definiowanie tłumaczeń za pomocą domyślnego tłumaczenia jako klucza w pliku json. W praktyce wygląda to tak: dla polskiego tłumaczenia dodajemy plik resources/lang/pl.json
:
{
"Hello World": "Witaj Świecie"
}
Teraz możemy, na przykład w pliku blade, odwołać się do tego tłumaczenia w następujący sposób:
// resources/views/index.blade.php
<p>
{{ __('Hello World') }}
</p>
// lub używając dyrektywy Blade @lang:
<p>
@lang('Hello World')
</p>
Jeśli Laravel nie znajdzie pliku resources/lang/pl.json
lub w tym pliku nie znajdzie klucza Hello World
, wyświetli klucz w niezmienionej postaci.
Z tej metody korzystają, między innymi, domyślne widoki uwierzytelniania, które framework generuje przy użyciu komendy php artisan make:auth
. Na przykład w wygenerowanym pliku resources/views/auth/login.blade.php
znajdziemy:
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
Jeśli framework nie znajdzie tłumaczenia dla stringa Forgot Your Password?
to po prostu wyświetli ten string.
Tłumaczenie na język polski
Teraz wiemy już jak działa funkcja globalna __()
oraz gdzie i w jaki sposób definiować pliki z tłumaczeniami. Pozostaje nam poinformować Laravel jakiego języka chcemy używać. Najłatwiej jest to zrobić w pliku konfiguracyjnym config/app.php
. Znajdziemy tam klucz locale
:
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
Ustawmy jego wartość na pl
.
Następnym krokiem jest dodanie polskich plików z tłumaczeniami. Stwórzmy katalog resources/lang/pl
i w nim pliki:
auth.php
pagination.php
passwords.php
validation.php
oraz plik resources/lang/pl.json
. W tych plikach powinniśmy przetłumaczyć wszystkie klucze, których używa framework. W przypadku plików php z powyższej listy, jest to łatwe, gdyż mamy angielskie odpowiedniki. Stworzenie odpowiedniego pliku json jest nieco trudniejsze. Musimy bowiem wiedzieć jakie klucze są tam potrzebne. Jak wspomniałem wcześniej, framework używa tłumaczeń z tego pliku w widokach wygenerowanych przez komendę php artisan make:auth
. Oprócz tego, używa ich też w dwóch notifykacjach wysyłanych do użytkownika: ResetPassword i VerifyEmail oraz w layoutach maili i notifykacji właśnie. Odnalezienie wszystkich kluczy w tych plikach to sporo roboty. Na szczęście nie musimy tego robić sami. Możemy posłużyć się gotowymi plikami z tłumaczeniami ze świetnego repozytorium caouecs/Laravel-lang.
Użycie paczki laravel-localize
Jeśli często tworzymy nowe aplikacje Laravela, kopiowanie odpowiednich plików z tego repozytorium może być nieco uciążliwe. Dlatego stworzyłem paczkę, która instaluje globalną komendę laravel-localize
, która sama automatycznie ściągnie pliki z tłumaczeniami. By ją zainstalować wpiszmy w terminalu:
composer global require pawelmysior/laravel-localize
Potem należy przejść do katalog z naszą aplikacją opartą na Laravelu i wpisać:
laravel-localize pl
I to tyle! Komenda ściągnie z repozytorium caouecs/Laravel-lang wszystkie odpowiednie pliki php oraz plik json. Jedyną rzeczą, którą musimy zrobić sami to zmiana klucza locale
w pliku config/app.php
.