https://github.com/eramitgupta/laravel-lang-sync-inertia
Laravel package for syncing translations with Inertia.js in Vue and React apps.
https://github.com/eramitgupta/laravel-lang-sync-inertia
inertiajs laravel localization localization-management multi-language reactjs translations vuejs
Last synced: 3 months ago
JSON representation
Laravel package for syncing translations with Inertia.js in Vue and React apps.
- Host: GitHub
- URL: https://github.com/eramitgupta/laravel-lang-sync-inertia
- Owner: eramitgupta
- License: mit
- Created: 2025-05-06T16:06:20.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2025-06-26T04:49:05.000Z (3 months ago)
- Last Synced: 2025-06-26T05:15:15.872Z (3 months ago)
- Topics: inertiajs, laravel, localization, localization-management, multi-language, reactjs, translations, vuejs
- Language: PHP
- Homepage:
- Size: 54.7 KB
- Stars: 4
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
# π Laravel Easy Translation Sync with Inertia (Vue.js / React)
[](https://github.com/eramitgupta/laravel-lang-sync-inertia/blob/main/LICENSE)
[](https://packagist.org/packages/erag/laravel-lang-sync-inertia)
[](https://packagist.org/packages/erag/laravel-lang-sync-inertia)**Laravel Lang Sync Inertia** helps you add different languages to your Laravel app with Vue or React. It makes translations easy!
## β¨ Features
* βοΈ Inertia.js integration with automatic sharing
* π Load single or multiple language files
* π Dynamic replacement support in translations
* π§© Supports both Vue.js and React
* π§΅ Built-in middleware for automatic sharing
* π οΈ Helper functions like `trans()` and `__()` for frontend usage
* π Automatically switches language folder based on current Laravel locale---
## π¦ Installation
To install the package, run the following command via Composer:
```bash
composer require erag/laravel-lang-sync-inertia
```---
## π οΈ Publish Configuration & Composables
To publish the configuration and composables, run:
```bash
php artisan erag:install-lang
```This will publish:
* β `config/inertia-lang.php` β for customizing the language path
* β `resources/js/composables/useLang.ts` β for Vue (if selected)
* β `resources/js/hooks/useLang.tsx` β for React (if selected)During installation, you'll be prompted to choose either **Vue** or **React** for your frontend framework.
---
## π Usage Guide: `syncLangFiles()`
The `syncLangFiles()` function is a Laravel helper provided by this package. Use it inside your **controller methods** to load translation files and automatically **share them with your Vue or React frontend via Inertia.js**.
> β Think of `syncLangFiles()` as a bridge between Laravelβs backend translations and your Inertia-powered frontend.
---
### π§ How to Use
```php
// Load and sync a single translation file
syncLangFiles('auth');// Load and sync multiple translation files
syncLangFiles(['auth', 'validation', 'pagination']);
```---
### β Supported Inputs
The `syncLangFiles()` function supports:
* A **string**: For a single translation file
β `syncLangFiles('auth')`* An **array of strings**: For multiple translation files
β `syncLangFiles(['auth', 'validation'])`---
### π§ͺ How It Works
Suppose you have the following language file:
π **`resources/lang/en/auth.php`**
```php
return [
'welcome' => 'Welcome, {name}!',
'greeting' => 'Hello!',
];
```Now, you want to show `auth.welcome` and `auth.greeting` on the frontend using Vue or React.
---
### π Step-by-Step Example
#### πΉ 1. Load Translations in Controller
```php
use Inertia\Inertia;public function login()
{
// Load the auth.php language file
syncLangFiles('auth');return Inertia::render('Login');
}
```π§ This loads the file `resources/lang/en/auth.php` based on the current Laravel locale and shares its content with Inertia.
---
### π‘ Frontend Usage
#### β Vue Example
```vue
{{ __('auth.greeting') }}
{{ trans('auth.welcome', { name: 'John' }) }}
import { useLang } from '@/composables/useLang'
const { trans, __ } = useLang()
```
#### β React Example
```tsx
import React from 'react'
import { useLang } from '@/hooks/useLang'export default function Login() {
const { trans, __ } = useLang()return (
{__('auth.greeting')}
{trans('auth.welcome', { name: 'John' })}
)
}
```---
### π€ Output on Page
When the above code is rendered, this will be the output:
```
Hello!
Welcome, John!
```---
### π§ Notes on `trans()` vs `__()`
| Function | Use Case | Description |
| --------- | -------- | ------------------------------------------------------------ |
| `trans()` | Advanced | Use when you need to pass dynamic placeholders like `{name}` |
| `__()` | Simple | Shortcut for quick access to translated strings |β You can use them interchangeably for basic translations.
β Both support placeholder replacement.---
### π Example with Plain String
Sometimes, you might want to append something without a key:
```js
__('auth.welcome', 'Vue Developer')
// Output: "Welcome, {name}! Vue Developer" (if placeholder is not used)
```But recommended usage is always with an object:
```js
trans('auth.welcome', { name: 'Amit' })
// Output: "Welcome, Amit!"
```---
## π‘ Access Inertia Shared Props
**Vue:**
```ts
import { usePage } from '@inertiajs/vue3'const { lang } = usePage().props
```**React:**
```tsx
import { usePage } from '@inertiajs/react'const { lang } = usePage().props
```You can directly access the full language object shared by Inertia.
---
## ποΈ Translation File Location
Language files are loaded based on the current Laravel locale. By default, Laravel uses `resources/lang/{locale}` structure:
```
resources/lang/
βββ en/
β βββ auth.php
βββ hi/
β βββ auth.php
```When calling:
```php
syncLangFiles('auth');
```It dynamically loads `resources/lang/{locale}/auth.php`.
---
## βοΈ Configuration
You can customize the language directory by modifying `config/inertia-lang.php`:
```php
return [
'lang_path' => lang_path(), // Default: /resources/lang
];
```---
## π§© Composables Location
* **Vue:** `resources/js/composables/useLang.ts`
* **React:** `resources/js/hooks/useLang.tsx`You can modify the location or structure of these files by adjusting the published files.
---
## π License
This package is licensed under the [MIT License](https://opensource.org/licenses/MIT).
---
## π€ Contributing
Pull requests and issues are welcome!
Letβs work together to improve localization in Laravel! π¬