A Laravel package providing artisan commands to import and export language files from and to CSV.

8.1.0 2022-02-11 11:37 UTC


This package provides artisan commands to import and export language files from and to CSV. This can be used to send translations to agencies that normally work with Excel-like files.

It turns some navigation.php file...


return [
  'commands' => [
    'next' => 'Next',
    'prev' => 'Previous',
    'play' => 'Play',
  'tips' => [
    'next' => 'Navigate to the next item',
    'prev' => 'Navigate to the previous item',
    'play' => 'Autoplay the slide show',

...to the following CSV...

navigation.tips.next,"Navigate to the next item"
navigation.tips.prev,"Navigate to the previous item"
navigation.tips.play,"Autoplay the slide show"

...and vice versa.


Laravel 8.* and above

composer require ufirst/lang-import-export:^8.1.0

Laravel 7.*

composer require ufirst/lang-import-export:^7.0.0

Finally add the following line to the providers array of your app/config/app.php file:

    'providers' => [
        /* ... */

Laravel 5.*

For Laravel 5.* checkout the legacy branch and require version ^5.1.2

The usage of the legacy version of this package is slightly different

As an alternative you can checkout the fork of this repository highsolutions/laravel-lang-import-export


The package currently provides two commands, one for exporting the files and one for importing them back:


# export all locales with all groups to console
php artisan lang-export:csv
# export all locales with all groups to csv file
php artisan lang-export:csv --output /some/file.csv
# custom csv delimiter and enclosure
php artisan lang-export:csv --delimiter=";" --enclosure='"' --output=/some/file.csv
# export single locale
php artisan lang-export:csv -l en --output=/some/path/translations-en.csv
# export single translation group
php artisan lang-export:csv -g navigation --output=/some/path/navigation-all-langs.csv

You can optionally pass the -l (locale) and the -g (group) as options. The group is the name of the langauge file without its extension. You may define options for your desired CSV format.


# import translations from csv
php artisan lang-import:csv /some/file.csv
# import from custom csv format
php artisan lang-import:csv --delimiter=";" --enclosure='"' --escape='\\' /some/file.csv
# import and merge over existing translation file
php artisan lang-import:csv --merge=true /some/file.csv

During import the locale is extracted from the first row of the CSV file. Translation groups are guessed from the translation keys e.g. navigation.tips.next is imported to navigation group



  • added support for laravel 9
  • dropped support below laravel 8
  • automatic service provider and alias discovery


  • merge imported csv with existing translations by adding --merge=true option to import command


  • fix: header delimiter and enclosure did not respect the given options during export


  • added support for Laravel 8.x


  • automatically create translation files during import based on translation keys in csv
  • formatted code (PSR-2)


  • added support for laravel:^7.0.0
  • added feature to export all locales and groups in a single run
  • the import command will guess the locale and the translation group from the csv
  • added symfony/var-exporter for new array syntax during the import command


  • legacy version
  • compatible with laravel:^5.4