Package Data | |
---|---|
Maintainer Username: | translation |
Maintainer Contact: | armands.leinieks@gmail.com (Armands Leinieks) |
Package Create Date: | 2017-09-23 |
Package Last Update: | 2024-07-24 |
Home Page: | https://translation.io/laravel |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-11 15:05:43 |
Package Statistics | |
---|---|
Total Downloads: | 239,838 |
Monthly Downloads: | 3,716 |
Daily Downloads: | 93 |
Total Stars: | 168 |
Total Watchers: | 11 |
Total Forks: | 22 |
Total Open Issues: | 5 |
Add this package to localize your Laravel application.
Use the official Laravel syntax (with PHP or JSON files), or use the GetText syntax.
Write only the source text, and keep it synchronized with your translators on Translation.io.
Technical Demo (2.5min)
Need help? contact@translation.io
The default Laravel method to localize.
// Regular
__('inbox.title');
// Regular with sublevel key
__('inbox.menu.title');
// Pluralization
trans_choice('inbox.message', $number);
// Interpolation
__('inbox.hello', ['name' => $user->name]);
With the PHP file resources/lang/en/inbox.php
:
return [
'title' => 'Title to be translated',
'hello' => 'Hello :name',
'messages' => 'One message|Many messages',
'menu' => [
'title' => 'Title of menu'
]
];
Note that trans
can also be used instead of __
.
A new feature of Laravel 5.4
is the possibility to use __
with the source text (and not only with keys like in the previous section).
These translations are stored into JSON files located in the resources/lang/
directory.
// Regular
__("Text to be translated");
// Pluralization
trans_choice(__('One message|Many messages'), $number);
// Interpolation
__('Hello :name', ['name' => $user->name]);
With the JSON file resources/lang/en.json
:
{
"Text to be translated": "",
"One message|Many messages": "",
"Hello :name": ""
}
To spend less time dealing with multiple JSON files, we advise to only edit
the original language (usually en.json
) to add new strings, and leave the
translations empty.
During a sync, This package will automatically create and fill the JSON files of the target languages.
This package adds the GetText support to Laravel. We strongly suggest that you use GetText to localize your application since it allows an easier and more complete syntax.
Also, you won't need to create and manage any PHP or JSON file since your code will be automatically scanned for any string to translate.
// Regular
t("Text to be translated");
// Pluralization
n("Singular text", "Plural text", $number);
// Regular with context
p("context", "Text to be translated");
// Pluralization with context
np("context", "Singular text", "Plural text", $number);
// Simple Interpolations (works with n, p and np too)
t('Hello %s', $user->name);
// Complex Interpolations (works with n, p and np too)
t(':city1 is bigger than :city2', [ ':city1' => 'NYC', ':city2' => 'BXL' ]);
$ composer require tio/laravel
If you are on a Laravel version lower than 5.5
(or choose not to use package auto discovery) add this to service providers (config/app.php
):
\Tio\Laravel\ServiceProvider::class
config/translation.php
) or execute php artisan vendor:publish
.The initializer looks like this:
return [
'key' => env('TRANSLATIONIO_KEY'),
'source_locale' => 'en',
'target_locales' => ['fr', 'nl', 'de', 'es']
];
TRANSLATIONIO_KEY
) in your .env
file.$ php artisan translation:init
If you later need to add/remove target languages, please read our this section about that.
To send new translatable keys/strings and get new translations from Translation.io, simply run:
$ php artisan translation:sync
If you need to find out what are the unused keys/strings from Translation.io, using the current branch as reference:
$ php artisan translation:sync_and_show_purgeable
As the name says, this operation will also perform a sync at the same time.
If you need to remove unused keys/strings from Translation.io, using the current branch as reference:
$ php artisan translation:sync_and_purge
As the name says, this operation will also perform a sync at the same time.
Warning: all keys that are not present in the current branch will be permanently deleted from Translation.io.
You can add or remove a language by updating 'target_locales' => []
in your
config/translation.php
file, and executing php artisan translation:sync
.
If you want to add a new language with existing translations (ex. if you already have
a translated PHP file in your lang
directory), you will need to create a new project on
Translation.io and run php artisan translation:init
for them to appear.
To edit existing languages while keeping their translations (e.g. changing from en
to en-US
).
config/translation.php
(new API key and languages)resources/lang
(optional: adapt GetText .po
headers)php artisan translation:init
and check that everything went fine.Since you created a new project, the translation history and tags will unfortunately be lost.
A custom language is always derived from an existing language. It's useful if you want to adapt some translations to another instance of your application, or to a specific customer.
The structure of a custom language is: existing language code
+ -
+ custom text
, where
custom text
can only contain alphanumeric characters and -
.
Examples: en-microsoft
or fr-BE-custom
.
Custom languages can be added and used like any other language.
The easiest way to change the current locale is with the set.locale
Middleware.
// in routes/web.php
// Solution 1: Apply the locale selection to root.
// => https://yourdomain.com?locale=fr
Route::get('/', function () {
return view('welcome');
})->middleware('set.locale');
// Solution 2: Apply the locale selection to many routes.
// => https://yourdomain.com/...?locale=fr
Route::middleware('set.locale')->group(function () {
Route::get('/', function () {
return view('welcome');
});
});
// Solution 3: prefix your routes with the locale and apply it.
// => https://yourdomain.com/fr
// => https://yourdomain.com/fr/...
Route::prefix('{locale?}')->middleware('set.locale')->group(function() {
Route::get('/', function () {
return view('welcome');
});
});
First time the user will connect, it will automatically set the locale extracted
from the browser HTTP_ACCEPT_LANGUAGE
value, and keep it in the session between
requests.
The set.locale
Middleware code is here,
feel free to adapt it with your own locale management.
Change the current locale with:
use Tio\Laravel\Facade as Translation;
Translation::setLocale('fr');
The config/translation.php
file can take several optional configuration options.
Some options are described below but for an exhaustive list, please refer to translation.php.
If you would like to ignore some PHP keys or even entire PHP files or
subdirectories, you can use the ignored_key_prefixes
option.
For example:
return [
...
'ignored_key_prefixes' => [
'validation', // ignore the whole validation.php file.
'validation.custom', // ignore the "custom" subtree in validation.php file.
'subfolder/more', // ignore the whole subfolder/more.php file.
],
...
];
To run the specs with oldest dependencies:
$ composer update --no-interaction --prefer-stable --prefer-lowest
$ ./vendor/bin/phpunit
To run the specs with latest dependencies:
$ composer update --no-interaction --prefer-stable
$ ./vendor/bin/phpunit
Please read the CONTRIBUTING file.
These implementations were usually started by contributors for their own projects. Some of them are officially supported by Translation.io and some are not yet supported. However, they are quite well documented.
Thanks a lot to these contributors for their hard work!
Officially Supported on https://translation.io/rails
Credits: @aurels, @michaelhoste
Officially Supported on https://translation.io/laravel
Credits: @armandsar, @michaelhoste
Credits: @deecewan
If you want to create a new client for your favorite language or framework, please read our Create a Translation.io Library guide and use the special init and sync endpoints.
You can also use the more traditional API.
Feel free to contact us on contact@translation.io if you need some help or if you want to share your library.
The MIT License (MIT). Please see License File for more information.