# breezejp writes Japanese into a Laravel app instead of swapping the framework

> breezejp is a Composer package that localises Laravel starter kits into Japanese with a single artisan command, and it can add a language switcher on top. It started as a Breeze translation tool and now covers Livewire, Breeze, Jetstream, Laravel UI and the Svelte starter kit, including validation messages.

**askdkc/breezejp** — Laravel Starter Kit (Livewire&Svelte+Breeze+Laravel UI+Jetstream)を一瞬で日本語化し、言語切替機能も提供するパッケージです / Laravelの各種バリデーションメッセージも日本語化するのでStarter Kit無しでも便利✨

- Repository: https://github.com/askdkc/breezejp
- Website: https://github.com/askdkc/breezejp
- Stars: 591 · Forks: 10
- Language: PHP
- License: MIT
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/askdkc-breezejp

## Two commands, and the one thing it does not do

breezejp is a Composer package that localises Laravel's starter kits into Japanese. The whole pitch fits in two commands:

```bash
composer require askdkc/breezejp --dev

php artisan breezejp
```

That installs the package as a development dependency and then runs an artisan command that writes the Japanese translation files into the project's lang directory. The package description says the starter kits supported are Livewire, Breeze, Jetstream and Laravel UI, and the documentation is explicit that the package also localises Laravel's built-in validation messages, which means it is useful even if you never install a starter kit at all.

The mechanism is a file write, not a runtime layer. The documentation describes the behaviour as outputting the translation files needed under Laravel's lang directory and automatically changing the language setting in the config. Concretely, the command writes Japanese locale files and edits config/app.php.

There is an optional second command that adds a language switcher feature:

```bash
php artisan breezejp --langswitch
```

and a third that handles the Svelte starter kit:

```bash
php artisan breezejp --svelte
```

If you develop with Laravel Sail, every one of these is prefixed with the sail binary, for example ./vendor/bin/sail artisan breezejp.

The audience is a Japanese-speaking Laravel developer who has already chosen a starter kit and wants the interface in their own language without hand-translating a dozen blade templates. The install instructions are explicit that you should install one of Laravel's starter kits first, because the usage guide is written on that assumption.

## It rewrites your .env and config, not just the translation files

The part of breezejp that deserves a careful read before you run it is that it edits your configuration.

The documentation states that when the php artisan breezejp command runs, it changes the locale in the .env file automatically from en to ja, and that it also fixes the timezone setting for Japan. Before installation, the environment file looks like this:

```vim
'APP_TIMEZONE=UTC'

'APP_LOCALE=en'

'APP_FAKER_LOCALE=en_US'
```

and after running the command, the configuration file holds:

```vim
'APP_TIMEZONE=Asia/Tokyo'

'APP_LOCALE=ja'

'APP_FAKER_LOCALE=ja_JP'
```

The same applies to the timezone key in config/app.php, which moves from:

```vim
'timezone' => 'UTC',
```

to:

```vim
'timezone' => 'Asia/Tokyo',
```

The documentation says you do not need to do anything else after that.

This is a deliberate convenience and a genuine surprise for a team used to a package that only writes into its own namespace. If your application serves users in more than one timezone, or if the locale setting is managed by your deployment pipeline, the command will fight that. The right way to use it is to run it once, on a branch, and read the diff.

There is one more thing in that output worth noting. The command prompts the user to star the GitHub repository, opening a browser, and prints a thank you message. That is a small detail, but it tells you the tool expects to be run by a human at a terminal rather than unattended in a script.

## Following Laravel releases, one starter kit at a time

The news list at the top of the documentation is the clearest statement of what this package is: a translation layer that tracks upstream changes.

The entries record Svelte starter kit support on 2026/7/13, PassKey translation on 2026/5/19, Laravel 13 support on 2026/3/18, and two-factor authentication translation on 2025/10/24. Each entry corresponds to something the Laravel team added to a starter kit, and each one is a batch of new English strings that need Japanese.

The Laravel 12 Livewire starter kit support entry goes further. The documentation explains that the author submitted multilingual support pull requests to the livewire-starter-kit repository, PR #24 and PR #39, and that they were merged, which is why the overall Japanese support coverage advanced. In other words, part of the work happened upstream rather than inside this package.

That is the right shape for the problem. A starter kit is a generated set of views and controllers, and when the framework team adds a two-factor page or a PassKey flow, the English strings change. A translation package that is not updated in the same week as the upstream release is a package whose users find untranslated text in production.

The release history supports the same conclusion. The tags are v2.6.3 on 2026-08-07, v2.6.2 on 2026-08-01 and v2.6.1 on 2026-07-17, and the last push was on 2026-08-07. Patch releases roughly weekly, with the version reset to 2.x rather than 1.x despite the earlier note about pagination support arriving in v1.64, which tells you the maintainer bumps the minor version when the Laravel major version changes.

## The Svelte path rewrites your components, which is the real difference

The Svelte support is the most interesting technical decision in the package, and it is not the same problem as translating blade templates.

The documentation explains the difference directly. The Svelte starter kit, unlike the Livewire version, has its UI English text hardcoded, so the __() translation function does not work on it. The solution the package implements is to install the t() translation helper in resources/js/lib/i18n.ts, share the lang/ja.json file through Inertia props, and rewrite the calls in each .svelte template to use t(), which amounts to building a runtime translation equivalent to Livewire's __().

So for Svelte, breezejp is a code transformation tool, not a file drop. It reads your .svelte files and edits them. That is a different risk profile from writing translation files into a directory, and it is worth running on a branch with a clean diff before you commit to it.

For the Livewire and blade kits, the mechanism stays the simpler one. The documentation lists what ends up Japanese after installation: the registration screen, the login screen, the validation warning messages, the email address confirmation notifications sent by Breeze, the password reset notification emails, the profile screen added in breeze v1.15, and pagination, which was localised starting from breezejp v1.64.

That list is the honest scope of the package. It covers the screens a starter kit ships with, which is exactly the set of strings that changes when Laravel releases a new starter kit version.

## MIT, a PHPStan baseline, and a package layout built for publishing

The licence is MIT, with the LICENSE.md file at the repository root, which is the uncomplicated case for a package that most people pull in as a dev dependency.

The repository layout is what you would expect from a package that publishes stub files. There is a src/ directory for the PHP source, a resources/ directory, a stubs/ directory for the files the command writes, a tests/ directory, and a composer.json at the root. The stubs directory is the mechanism behind the whole tool: the translations and any template files the command needs to output are stub files that get copied into the project.

The static analysis setup is worth a mention. The repository has phpstan.neon.dist and a phpstan-baseline.neon file, which is the conventional arrangement where the baseline records the issues that are known and accepted, and the dist file holds the configuration for the current version. The presence of a committed baseline in a package of this size says the author is running level-appropriate static analysis and choosing to record exceptions rather than pretend they do not exist.

The CI badges at the top show a test workflow and a separate PHP code style workflow that fixes issues rather than just reporting them, plus a Packagist version badge and a total downloads badge. The code style workflow name is the giveaway: a bot that applies the formatter, so a pull request arrives already formatted.

The documentation also has sections on testing the package, on testing mail with mailpit, mailhog and mailtrap, on a sample language switching application, and on the change log, plus sections on contributing and on reporting security issues. The presence of a dedicated section for each of the three mail testing tools is a small sign of who this is for: someone actually running the registration and password reset flows locally.

## Conclusion

breezejp suits a Laravel team that has chosen a starter kit for its scaffolding and needs Japanese output on day one, particularly one that has already accepted the artisan command and file-rewriting approach as acceptable. It is the wrong choice if you need a runtime translation layer for many locales, because the Svelte support shows the direction of travel and it is a code rewrite rather than a runtime lookup, and it is the wrong choice if you are on a Laravel version or starter kit the package does not yet cover. Before adopting it, run php artisan breezejp on a throwaway branch and diff the result, since the command edits your .env and config/app.php as well as writing translation files, and check the changelog for the Laravel version you are on.

## FAQ

### How do I install breezejp and localise a Laravel app into Japanese?

Run composer require askdkc/breezejp --dev and then php artisan breezejp. The command writes the Japanese translation files into the lang directory, changes the locale in .env from en to ja and sets the timezone to Asia/Tokyo in config/app.php. With Laravel Sail, prefix the commands with ./vendor/bin/sail.

### Which Laravel starter kits does breezejp support?

The package supports the Laravel 12 Livewire starter kit, Breeze, Jetstream and Laravel UI, and it also localises Laravel's own validation messages so it is useful without a starter kit. A separate --svelte flag handles the Svelte starter kit, and a --langswitch flag adds a language switching feature.

### How does breezejp handle the Svelte starter kit where the text is hardcoded?

Because the Svelte starter kit hardcodes its English text so the __() function does not apply, the --svelte command installs a t() translation helper at resources/js/lib/i18n.ts, shares lang/ja.json through Inertia props, and rewrites the calls in each .svelte template, which adds a runtime translation equivalent to Livewire's __().

## Sources

- [askdkc/breezejp on GitHub](https://github.com/askdkc/breezejp)
- [License: MIT](https://github.com/askdkc/breezejp/blob/main/LICENSE)
- [Project website](https://github.com/askdkc/breezejp)
- [README](https://github.com/askdkc/breezejp/blob/main/README.md)
- [Releases](https://github.com/askdkc/breezejp/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/askdkc-breezejp
