alecscodes/inertia-i18n

Minimal i18n for Laravel Inertia — share PHP and JSON translations with t() and tc() on the frontend

Maintainers

Package info

github.com/alecscodes/inertia-i18n

pkg:composer/alecscodes/inertia-i18n

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.0 2026-03-31 10:14 UTC

This package is auto-updated.

Last update: 2026-03-31 16:57:00 UTC


README

Latest Version on Packagist Total Downloads License

Minimal i18n bridge for Laravel + Inertia.js — share your PHP and JSON translation files with the frontend.

Requirements

  • PHP ^8.2
  • Laravel ^10.0 || ^11.0 || ^12.0 || ^13.0
  • Inertia Laravel ^2.0 || ^3.0

Install

composer require alecscodes/inertia-i18n

Publish

php artisan vendor:publish --tag=inertia-i18n-js
php artisan vendor:publish --tag=inertia-i18n-config

Configure

In config/inertia-i18n.php, set shared to only the groups used on every page (e.g. common, nav) and load everything else per-page with ->withTranslations().

'shared' => ['common', 'nav'];

You can also use ['*'] in config/inertia-i18n.php to load all translation files on every page. This is a convenient quickstart for small apps (no need to touch each controller), but it can become heavy if you have a lot of translations.

'shared' => ['*'],

Frontend

import { useTranslation } from '@/vendor/inertia-i18n/useTranslation';

const page = /* get the Inertia page object from your adapter */
const { t, tc, locale } = useTranslation(page.props);

t('settings.two_factor.title') // Two-factor authentication

Backend

When using ['*'] in the config to load all translations globally, the ->withTranslations() calls are not required.

return Inertia::render('Dashboard')
    ->withTranslations('dashboard', 'widgets');

Localization

Translation files are loaded from:

  • lang/{locale}/**/*.php
  • lang/{locale}/**/*.json
    (subdirectories are supported)

Language switching can be implemented using any method you prefer (e.g., route parameters, session, cookies, etc.).

Set the locale before rendering the Inertia response:

app()->setLocale($locale);

📄 License

The MIT License (MIT). Please see LICENSE.md for more information.

Made with ♥ for the Laravel community