November 30, 2016 —John Koster
The FileLoader
is the class that is responsible for loading the translation files from the file system. The language files are loaded from the /resources/lang/
directory by default. The lang/
directory contains the en
(English from the ISO 639-1 standard) sub-directory by default. Each sub-directory within the lang/
directory corresponds to a particular locale.
Each locale directory may contain various PHP files returning arrays. These arrays contain a key/value pair, indicating the key of the translation and the value of the language translation. For example, the following is the contents of the /resources/lang/en/passwords.php
file:
1<?php 2 3return [ 4 5 /* 6 |------------------------------------------------------------------------- 7 | Password Reminder Language Lines 8 |------------------------------------------------------------------------- 9 |10 | The following language lines are the default lines which match reasons11 | that are given by the password broker for a password update attempt12 | has failed, such as for an invalid token or invalid new password.13 |14 */15 16 'password' => 'Passwords must be at least six characters and match the17 confirmation.',18 'user' => "We can't find a user with that e-mail address.",19 'token' => 'This password reset token is invalid.',20 'sent' => 'We have e-mailed your password reset link!',21 'reset' => 'Your password has been reset!',22 23];
The individual PHP files containing the translation lines are referred to as "groups". So for a fresh Laravel installation, the following groups exist:
Group Name | Path |
---|---|
Pagination | resources/lang/en/pagination.php |
Passwords | resources/lang/en/passwords.php |
Validation | resources/lang/en/validation.php |
FileLoader
Public APIThe FileLoader
implements the Illuminate\Translation\LoaderInterface
contract. The LoaderInterface
requires two public methods load
and addNamespace
. FileLoader
does not add any extra public methods to its implementation.
load($locale, $group, $namespace = null)
The load
method is used to load the messages for the provided $locale
. The load
method also requires a $group
to be specified. The $group
corresponds to the actual file of key/value pairs that should be loaded (such as pagination.php
or passwords.php
).
addNamespace($namespace, $hint)
The addNamespace
method is responsible for adding a given $namespace
to the loader. Each namespace requires a $hint
. The $namespace
parameter is used to give a name to the namespace, which typically would correspond to a package name, or some other logical organization. The $hint
tells the framework where the locale and group files are located for the given namespace. For example, if a directory '/storage/lang_custom/' existed for storing custom language files, the directory path would become the $hint
.
To prevent conflicts between multiple vendors using the same group names for a particular locale, the translator component allows the usage of "namespaces". Namespaces are a way to refer to a specific collection of locales and groups, where collection here refers to a different location on the file system. There is no limit on the number of namespaces that can be created. The translator component always has a *
namespace available.
The *
namespace refers to any groups that exist within the default /resources/lang
directory. Namespaces are separated from the group and language line with the ::
character sequence. Because of this, both function calls in the following example will return the same result:
1<?php 2 3// The following function calls are assuming the 'en' locale, using 4// the default Laravel translation groups. 5 6// Retrieving a language value without a namespace. 7$passwordReset = trans('passwords.reset'); 8 9// Retrieving a language value with the default namespace.10$passwordResetTwo = trans('*::passwords.reset');
After the above code is executed, both $passwordReset
and $passwordResetTwo
would contain the same Your password has been reset!
value.
Adding custom namespaces is simple. Assuming the directory /storage/lang_custom/
exists, it could be added to the file loader like so:
1<?php2 3$loader = app('translation.loader');4$loader->addNamespace('custom', storage_path('lang_custom'));
The Illuminate\Translation\LoaderInterface
can be resolved from the application container using the translation.loader
name.
Assuming there was a locale directory en
with the following passwords.php
group file:
1<?php2 3return [4 5 'reset' => 'This is a custom reset message.',6 7];
The value for reset
can be retrieved from the custom namespace like so:
1<?php2 3$defaultReset = trans('password.reset');4$customReset = trans('custom::password.reset');
After the above code is executed, the $defaultReset
variable would have the value Your password has been reset!
and the value of $customReset
would be This is a custom reset message.
.
∎
The following amazing people help support this site and my open source projects ♥️
If you're interesting in supporting my work and want to show up on this list, check out my GitHub Sponsors Profile.