
Store your translations in the database with Laravel translation loader package
Laravel has built-in support for localization using arrays stored in language files and in 5.4 they are adding the ability for JSON based language files.
Some applications are better suited to have the language strings stored in the database so that end users can change them through a custom user interface, and that’s where the Laravel translation loader package can be helpful.
Let’s take a look at how this package can be set up and used.
Installation
First, install Laravel translation loader through Composer:
composer require spatie/spatie/laravel-translation-loader
Next, open your config/app.php and replace Laravel’s translation service provider:
Illuminate\Translation\TranslationServiceProvider::class,
with Laravel translation loader service provider:
Spatie\TranslationLoader\TranslationServiceProvider::class,
Then publish Laravel translation loader migration file:
php artisan vendor:publish --provider="Spatie\TranslationLoader\TranslationServiceProvider" --tag="migrations"
Finally, run the migrations, it will create a new table called language_lines in the database which will hold your application translations:
php artisan migrate
Overview
After you complete the installations, adding a new language line to the database will be easy as this:
use Spatie\TranslationLoader\LanguageLine;
LanguageLine::create([
'group' => '<span id="result_box" class="short_text" lang="en"><span class="">greetings</span></span>',
'key' => 'hello',
'text' => ['en' => 'Hello', 'ar' => 'السلام عليكم ورحمة الله وبركاته', 'es' => 'Hola'],
]);
And to fetch the translation from the database, use the default Laravel trans function like this:
echo trans('<span id="result_box" class="short_text" lang="en"><span class="">greetings</span></span>.hello');
// Will return 'Hello' if the locale is English and Will return 'السلام عليكم ورحمة الله وبركاته' if the locale is Arabic
Or you can use blade syntax and @lang directive like this:
{{ trans('<span id="result_box" class="short_text" lang="en"><span class="">greetings</span></span>.hello') }}
// Or
@lang('<span id="result_box" class="short_text" lang="en"><span class="">greetings</span></span>.hello')
You can also use the parameter feature of laravel trans function which will allow you to use placeholders in the translations and replace it later by passing an array of replacements as the second argument to the trans function like this:
trans('<span id="result_box" class="short_text" lang="en"><span class="">greetings</span></span>.welcome', ['name' => 'Diaa'])
One nice feature of Laravel translation loader is allowing you to save your translations in both language files and the database at the same time. By default, it will look for the database version then fall back to the file. Another feature is that you can extend the package to support other translation providers like YAML, CSV, etc.
That’s it, if you want a very useful package that provides a clean and easy way to save your translations in the database, check out Laravel translation loader.
Filed in: Laravel Packages / localization
Enjoy this? Get Laravel News delivered straight to your inbox every Sunday.
No Spam, ever. We'll never share your email address and you can opt out at any time.
Newsletter

Join the weekly newsletter and never miss out on new tips, tutorials, and more.
Laravel Jobs

- Senior Laravel Engineer
-
Remote okay (must already live in USA)
Hawthorne Effect - Senior Software Engineer (Remote - Contract)
-
Remote
Koodi Systems - PHP Developer
-
Pittsburgh / Remote
Sequoia Waste Solutions - Software Developer
-
Eindhoven
Simac IDS - Application Developer Level II (CakePHP / MySql / Vue.js)
-
Lancaster, PA
Harbor Compliance - FULL STACK LARAVEL DEVELOPER
-
LONDON - WEST END
AMPERSAND HEATLH - Mid/Senior Laravel Developer - U.S. Only
-
Kenner, Louisiana
Profit Miner Technologies
Laravel Spark 50% Sale!
Laravel Spark is running a 50% off sale through the weekend on both single site licenses and unlimited site licenses.…
React for Beginners and ES6 for everyone is 50% off!
Wes Bos has two wildly successful training courses that are 50% off until Monday. This is an excellent time to pick u…