Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lukasss93/laravel-larex
Laravel Larex lets you translate your whole Laravel application with a single CSV file.
https://github.com/lukasss93/laravel-larex
csv i18n laravel localization php
Last synced: 6 days ago
JSON representation
Laravel Larex lets you translate your whole Laravel application with a single CSV file.
- Host: GitHub
- URL: https://github.com/lukasss93/laravel-larex
- Owner: Lukasss93
- License: mit
- Created: 2020-06-29T23:04:23.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-05-05T06:43:23.000Z (6 months ago)
- Last Synced: 2024-05-14T00:04:31.447Z (6 months ago)
- Topics: csv, i18n, laravel, localization, php
- Language: PHP
- Homepage:
- Size: 363 KB
- Stars: 90
- Watchers: 4
- Forks: 7
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
- Code of conduct: .github/CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Laravel Larex
[![Version](https://img.shields.io/packagist/v/lukasss93/laravel-larex?label=composer&logo=composer)](https://packagist.org/packages/lukasss93/laravel-larex)
[![Downloads](https://img.shields.io/packagist/dt/lukasss93/laravel-larex)](https://packagist.org/packages/lukasss93/laravel-larex)
![License](https://img.shields.io/packagist/l/lukasss93/laravel-larex)
![PHP](https://img.shields.io/packagist/dependency-v/lukasss93/laravel-larex/php?logo=php)
![Laravel](https://img.shields.io/packagist/dependency-v/lukasss93/laravel-larex/illuminate/support?label=laravel&logo=laravel)![Tests](https://img.shields.io/github/actions/workflow/status/lukasss93/laravel-larex/run-tests.yml?label=Test%20Suite&logo=github)
[![Test Coverage](https://api.codeclimate.com/v1/badges/174c66250f81b7637524/test_coverage)](https://codeclimate.com/github/Lukasss93/laravel-larex/test_coverage)> Laravel Larex lets you translate your whole Laravel application with a single CSV file.
You can import translation entries from lang folder into a structured CSV, edit the translations and export them back to Laravel PHP files.
Laravel Larex also supports functionalities to sort entries and find strings that aren't localized yet.
_See **[Plugins](#-plugins)** section for other features._
## 🚀 Installation
You can install the package using composer
```bash
composer require lukasss93/laravel-larex --dev
```Then add the service provider to `config/app.php`.
This step *can be skipped* if package auto-discovery is enabled.```php
'providers' => [
Lukasss93\Larex\LarexServiceProvider::class
];
```## ⚙ Publishing the config file
Publishing the config file is optional:
```bash
php artisan vendor:publish --provider="Lukasss93\Larex\LarexServiceProvider" --tag="larex-config"
```## 👓 Usage
1. First, you must create the initial CSV file with `php artisan larex:init`.
Or you can use `php artisan larex:import` to import entries from lang folder.
The csv file has the following columns:
* group (basically the file name)
* key (the array key)
* en (the language code)
* other language codes...2. Open the *project-root/lang/localization.csv* file and edit it as you see fit.
3. Finally, you can use `php artisan larex:export` to translate your entries from the csv file to the laravel php files.
### ✨ Tips
* You can import existing laravel php files with `php artisan larex:import`.
* You can use `php artisan larex:init --base` to init the CSV file with default Laravel entries.
* The **key** column inside the CSV file supports the **dot notation** for nested arrays.
* You can watch your CSV file with `php artisan larex:export --watch`
* You can use `php artisan larex:sort` to sort the CSV file by group and key.
* Be careful when using the `php artisan larex:export` command! It will overwrite all files named with the group names
inside the CSV.
* Be careful when using the **dot notation**! Only the **last** entry will override the value.
* You can use `php artisan larex:insert` to add new items via CLI too!
* You can use `php artisan larex:import --include=en,it` to import only _"en"_ and _"it"_ items.
* You can use `php artisan larex:import --exclude=it` to import all items except _"it"_ item.
* You can use `php artisan larex:export --include=en,it` to export only _"en"_ and _"it"_ columns.
* You can use `php artisan larex:export --exclude=it` to export all columns except _"it"_ column.
* You can use `php artisan larex:localize` to find unlocalized strings (use the `--import` option to add strings in your
CSV).
* You can use `php artisan larex:find` to search existing groups or keys in your CSV file.
* You can use `php artisan larex:remove` to remove existing strings in your CSV file.
* You can use `php artisan larex:lang:add` to add a new language column to your CSV file.
* You can use `php artisan larex:lang:remove` to remove a language column from your CSV file.
* You can use `php artisan larex:lang:order` to reorder language columns in your CSV file.### 📝 Example
1. Run `php artisan larex:init` command
2. Edit the *project-root/lang/localization.csv* file
| group | key | en | it |
|-------|-----------------|------------|--------------|
| app | hello | Hello | Ciao |
| app | list.developers | Developers | Sviluppatori |
| app | list.teachers | Teachers | Insegnanti |3. Run `php artisan larex:export` command
4. You'll get the following files:
```php
//project-root/lang/en/app.php
'Hello',
'list' => [
'developers' => 'Developers',
'teachers' => 'Teachers',
]
];
```
```php
//project-root/lang/it/app.php
'Ciao',
'list' => [
'developers' => 'Sviluppatori',
'teachers' => 'Insegnanti',
]
];
```### ⏫ Exporters
The `larex:export ` command exports CSV strings to a specific location based on the selected exporter.
| Exporter | Default | Description |
|------------|:-------:|----------------------------------------------------|
| laravel | ✅ | Export data from CSV to Laravel localization files |
| json:group | ❌ | Export data from CSV to JSON by group |
| json:lang | ❌ | Export data from CSV to JSON by language |##### How to create an exporter:
1. Create a class that implements the `Lukasss93\Larex\Contracts\Exporter` interface
2. Add your exporter inside the larex config### ⏬ Importers
The `larex:import ` command imports the strings of the selected importer, into the CSV.
| Importer | Default | Description |
|------------|:---------:|----------------------------------------------------|
| laravel | ✅ | Import data from Laravel localization files to CSV |
| json:group | ❌ | Import data from JSON by group to CSV |
| json:lang | ❌ | Import data from JSON by language to CSV |##### How to create an importer:
1. Create a class that implements the `Lukasss93\Larex\Contracts\Importer` interface
2. Add your importer inside the larex config### 🔍 Linters
Larex provides a linting system by using the `php artisan larex:lint` command to validate your CSV file.
##### Available linters:
| Linter | Enabled
by default | Description |
|---------------------------|:---------------------:|---------------------------------------------------|
| ValidHeaderLinter | ✅ | Validate the header structure |
| ValidLanguageCodeLinter | ✅ | Validate the language codes in the header columns |
| DuplicateKeyLinter | ✅ | Find duplicated keys |
| ConcurrentKeyLinter | ✅ | Find concurrent keys |
| NoValueLinter | ✅ | Find missing values |
| DuplicateValueLinter | ✅ | Find duplicated values in the same row |
| UntranslatedStringsLinter | ❌ | Find untranslated strings |
| UntranslatedStringsLinter | ❌ | Find unused strings |
| ValidHtmlValueLinter | ❌ | Check valid html values |
| SameParametersLinter | ❌ | Check same parameters in each language |You can enable/disable any linter you want by comment/uncomment it inside the larex config.
##### How to create a linter:
1. Create a class that implements the `Lukasss93\Larex\Contracts\Linter` interface
2. Add your linter inside the larex config## 🧩 Plugins
- **[Crowdin Plugin](https://github.com/Lukasss93/laravel-larex-crowdin)**
_A Laravel Larex plugin to import/export localization strings from/to Crowdin_## ⚗️ Testing
```bash
composer test
```## 🔰 Version Support
| Larex | L5.8 | L6.x | L7.x | L8.x | L9.x | L10.x | L11.x |
|:----------------:|:----:|:----:|:----:|:----:|:----:|:-----:|-------|
| ^1.0 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| ^1.2 | ^2.0 | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| ^3.0 | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
| ^4.0 | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ || Larex | PHP7.2 | PHP7.3 | PHP7.4 | PHP8.0 | PHP8.1 | PHP8.2 | PHP8.3 |
|:----------------:|:------:|:------:|:------:|:------:|:------:|:------:|--------|
| ^1.0 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| ^1.6 | ^2.0 | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| ^3.0 | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ^4.0 | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |## 📃 Changelog
Please see the [CHANGELOG.md](CHANGELOG.md) for more information
on what has changed recently.## 🏅 Credits
- [Luca Patera](https://github.com/Lukasss93)
- [All Contributors](https://github.com/Lukasss93/laravel-larex/contributors)## 📖 License
Please see the [LICENSE.md](LICENSE.md) file for more
information.