Skip to content

feat(ui): add Turkish (tr) locale#355

Merged
geodro merged 1 commit into
geodro:mainfrom
erhanurgun:feat/i18n-turkish
May 15, 2026
Merged

feat(ui): add Turkish (tr) locale#355
geodro merged 1 commit into
geodro:mainfrom
erhanurgun:feat/i18n-turkish

Conversation

@erhanurgun
Copy link
Copy Markdown
Contributor

@erhanurgun erhanurgun commented May 15, 2026

What this adds

Türkçe (Turkish) as the eighth dashboard language.

Files

  • internal/ui/web/messages/tr.json (new). 620 strings, full coverage of en.json.
  • internal/ui/web/project.inlang/settings.json. "tr" added to the locales array.
  • internal/ui/web/src/stores/locale.ts. LOCALE_LABELS["tr"] = "Türkçe", LOCALE_CODES["tr"] = "TR".
  • internal/ui/web/src/lib/locales.test.ts. tr.json import, drift assertion, LOCALES.toContain('tr').

Translation choices

English Türkçe
Dashboard Pano
Service Servis
Worker, Worktree kept untranslated (Laravel and git jargon)
Horizon, Reverb, Stripe, FrankenPHP, Tinker, Mailpit, dnsmasq kept

All {placeholder} interpolations are preserved.

Verified

  • npm run i18n: 0 errors, 0 warnings
  • npm run check (svelte-check, strict TS): 0 errors, 0 warnings
  • npx vitest run src/lib/locales.test.ts: 15 / 15 passed

Open to wording changes if anything reads off in Türkçe.

Adds Türkçe to the dashboard languages alongside English, German,
Spanish, French, Indonesian, Dutch, Portuguese.

- messages/tr.json: 620 strings translated (full coverage)
- project.inlang/settings.json: tr in locales array
- src/stores/locale.ts: LOCALE_LABELS["tr"] = "Türkçe", LOCALE_CODES["tr"] = "TR"
- src/lib/locales.test.ts: tr import, key-drift assertion, LOCALES coverage

Glossary chosen for technical accuracy and Türkçe convention:
- Dashboard -> Pano
- Service -> Servis
- Worker, Worktree, Horizon, Reverb, Stripe, FrankenPHP, Tinker preserved as-is
@geodro
Copy link
Copy Markdown
Owner

geodro commented May 15, 2026

Thanks a lot for this, Erhan, really appreciate you taking the time to add Türkçe. Welcome aboard, will merge shortly.

@geodro geodro merged commit 4b70ade into geodro:main May 15, 2026
3 checks passed
@erhanurgun
Copy link
Copy Markdown
Contributor Author

erhanurgun commented May 15, 2026

Thanks for the quick merge. Honored to land a contribution on lerd, the cleanest local PHP environment I have run on Linux. I’m glad that Turkish has been included.

@geodro geodro mentioned this pull request May 18, 2026
geodro added a commit that referenced this pull request May 18, 2026
First beta of the 1.21.0 line. The headline is desktop notifications via Web Push (#353), with a per-category settings page polished alongside a dashboard health row (#354). The PHP-FPM image grows a real shell environment, zsh plus starship plus eza, bat, fzf, zoxide, isolated from the host (#358), then loses around 800 MB of build toolchain in a multi-stage split that drops the image from 1.36 GB to 535 MB without losing any of its 68 PHP modules (#364). A new on-demand commands feature surfaces one-shot framework actions across the dashboard, the lerd run CLI, the command palette, and four new MCP tools, all backed by a generalised Dropdown component that replaces every native select in the UI (#363). The site detail header gets a browser-style address bar with the favicon, TLS lock, LAN-share chip, and worktrees promoted from a dropdown to tabs (#365), an Env tab joins Overview, Tinker, and Dumps to show the project .env verbatim (#366), and the tray menu picks up Dump bridge and Notifications toggles that update live via a new KindDumpsStatus event (#373). Postgres grows 17 and 18 alternates alongside a new MySQL 9.7 LTS line, all gated by a canonical-version pin so flipping the yaml canonical no longer silently major-jumps existing installs (#361). Türkçe joins the dashboard languages (#355), a public_dir override lands in .lerd.yaml for projects with a non-standard document root (#370), every git invocation in the tree now flows through internal/git (#356), and worker-failure pushes are batched so a systemd cascade no longer fires six near-identical notifications back to back (#372). Plus the post-1.20.2 fix queue covers the worktree-manager button rendering on non-git sites (#357), TLS certs not refreshing when a secured site's domain set changed (#367), streamed worktree install and a wave of audit follow-ups (#368), and tinker swallowing bare-expression results when the dump bridge was on (#371).
geodro added a commit that referenced this pull request May 18, 2026
#365's address-bar header for site detail landed with English literals
on the TLS toggle, LAN toggle, mobile overflow LAN entry, and the
overflow menu's aria-label. The Paraglide message keys all existed
already (sites_controls_httpsToggle_on/off, sites_controls_lanToggle_on/off,
common_moreActions) and tr.json was complete — the new component just
skipped them. Non-English users (tr just shipped in #355) saw English
on the most heavily-touched UI of v1.21.0.
geodro added a commit that referenced this pull request May 18, 2026
…376)

* fix(workers): stop host workers from resurrecting after stop (#375)

A host worker that the user stopped via the UI or `lerd worker stop` was getting silently revived. Two paths were doing it. On Linux and macOS, every HEAD write inside a worktree (commit, checkout, rebase, branch rename) fires the fsnotify "changed" handler, which was unconditionally calling AutoStartOptedInWorktreeWorkers and re-bootstrapping every opted-in host worker. The fix gates that call to action=="added" via a tiny shouldAutoStartWorkersOnSync helper, so HEAD movement leaves existing units alone. On macOS the launchd heal loop additionally treated a missing plist as drift and recreated it, even though WorkerStopForSite removes the plist precisely to represent user intent. shouldHealOnReason now skips "plist missing" and only heals genuine drift like "not loaded in launchd" or "loaded but no live process".

The same report also flagged a separate symptom: when Vite did run, Inertia's wayfinder plugin shelled out to `php artisan wayfinder:generate --with-form` and failed with "/bin/sh: php: command not found". The launchd guard script and the systemd unit for host workers were never putting lerd's bin directory on PATH, so the php/composer/laravel shims couldn't be reached from npm-spawned subprocesses. Both paths now prepend config.BinDir(), and the Linux unit additionally re-adds ~/.local/bin so we don't quietly narrow what systemd-user previously inherited.

* fix(ui): localize hardcoded English in site detail address bar

#365's address-bar header for site detail landed with English literals
on the TLS toggle, LAN toggle, mobile overflow LAN entry, and the
overflow menu's aria-label. The Paraglide message keys all existed
already (sites_controls_httpsToggle_on/off, sites_controls_lanToggle_on/off,
common_moreActions) and tr.json was complete — the new component just
skipped them. Non-English users (tr just shipped in #355) saw English
on the most heavily-touched UI of v1.21.0.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants