feat(i18n): extract strings from navigation, dialogs, onboarding, settings, and login

- Add useTranslation() to TopNav, BottomTabBar, FabMenu, UserMenu
- Internationalize ConfirmDialog, AuthPromptModal, ExternalLinkDialog
- Extract all onboarding flow strings (Welcome, HobbyPicker, ItemBrowser, Review, Done)
- Internationalize settings page (weight unit, currency, API keys, import/export)
- Internationalize login page and root error boundary
- All dialogs in __root.tsx use t() for UI chrome

Phase 34, Plan 02 (core navigation and global UI)
This commit is contained in:
2026-04-13 18:19:29 +02:00
parent 8c0fb31df2
commit 672b17fd13
15 changed files with 123 additions and 98 deletions

View File

@@ -1,7 +1,9 @@
import { Link } from "@tanstack/react-router";
import { useTranslation } from "react-i18next";
import { useUIStore } from "../stores/uiStore";
export function AuthPromptModal() {
const { t } = useTranslation();
const showAuthPrompt = useUIStore((s) => s.showAuthPrompt);
const closeAuthPrompt = useUIStore((s) => s.closeAuthPrompt);
@@ -18,10 +20,10 @@ export function AuthPromptModal() {
/>
<div className="relative bg-white rounded-xl shadow-lg p-6 max-w-sm mx-4 w-full">
<h3 className="text-lg font-semibold text-gray-900 mb-2">
Join GearBox
{t("auth.joinGearBox")}
</h3>
<p className="text-sm text-gray-600 mb-6">
To manage your own collection, sign in or sign up.
{t("auth.signInDescription")}
</p>
<div className="flex flex-col gap-3">
<Link
@@ -29,14 +31,14 @@ export function AuthPromptModal() {
className="w-full text-center px-4 py-2.5 text-sm font-medium text-white bg-gray-700 hover:bg-gray-800 rounded-lg transition-colors"
onClick={closeAuthPrompt}
>
Sign in
{t("auth.signIn")}
</Link>
<Link
to="/login"
className="w-full text-center px-4 py-2.5 text-sm font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 rounded-lg transition-colors"
onClick={closeAuthPrompt}
>
Create account
{t("auth.createAccount")}
</Link>
</div>
</div>