diff --git a/src/client/components/AuthPromptModal.tsx b/src/client/components/AuthPromptModal.tsx index d2eca84..2852eee 100644 --- a/src/client/components/AuthPromptModal.tsx +++ b/src/client/components/AuthPromptModal.tsx @@ -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() { />
- To manage your own collection, sign in or sign up. + {t("auth.signInDescription")}
- Are you sure you want to delete{" "} - {itemName}? This action cannot be - undone. + {t("confirm.deleteItemMessage", { name: itemName })}
You will be redirected to:
+{t("externalLink.redirectMessage")}
{externalLinkUrl}
@@ -47,14 +49,14 @@ export function ExternalLinkDialog() { onClick={closeExternalLink} className="px-4 py-2 text-sm font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 rounded-lg transition-colors" > - Cancel + {t("actions.cancel")}- Your collection is ready. Browse the catalog anytime to discover more - gear. + {t("done.subtitle")}
- Pick one or more — we'll show you popular gear for each. + {t("hobby.subtitle")}
- Tap items you already own. We'll add them to your collection. + {t("items.subtitle")}
{isLoading && ( @@ -64,11 +67,10 @@ export function OnboardingItemBrowser({ {!isLoading && !hasItems && (- We're still building our catalog for this hobby. You can skip this - step and add gear manually later. + {t("items.noCatalogDescription")}
{items.length > 0 - ? `${items.length} ${items.length === 1 ? "item" : "items"} ready to add` - : "No items selected — you can always add gear later from the catalog."} + ? t("review.itemsReady", { count: items.length }) + : t("review.noItemsSelected")}
{items.length > 0 && ( @@ -101,7 +103,7 @@ export function OnboardingReview({ disabled={isSubmitting} className="px-8 py-3 bg-gray-700 hover:bg-gray-800 disabled:opacity-50 text-white font-medium rounded-lg transition-colors" > - {isSubmitting ? "Adding..." : "Add to my collection"} + {isSubmitting ? t("review.adding") : t("review.addToCollection")} ) : ( )} {items.length > 0 && ( @@ -118,7 +120,7 @@ export function OnboardingReview({ onClick={onSkip} className="text-sm text-gray-400 hover:text-gray-600 transition-colors" > - Skip this step + {t("common:actions.skipStep")} )}- Tell us what you're into, and we'll help you set up your collection - with gear that people actually use. + {t("welcome.subtitle")}
{error instanceof Error ? error.message - : "An unexpected error occurred"} + : t("errors.unexpectedError")}
- Are you sure you want to delete{" "} - {candidateName}? This action - cannot be undone. + {t("confirm.deleteCandidateMessage", { name: candidateName })}
- Pick {candidateName} as the - winner? This will add it to your collection and archive the thread. + {t("confirm.pickWinnerMessage", { name: candidateName })}
Loading...
+{t("actions.loading")}
- You will be redirected to sign in with your account. + {t("auth.redirectDescription")}
- API keys allow programmatic access to GearBox (e.g., from Claude Desktop - or scripts). + {t("apiKeys.description")}
{newKey && (- Copy this key now — it won't be shown again: + {t("apiKeys.copyWarning")}
{newKey}
@@ -61,7 +62,7 @@ function ApiKeySection() {
onClick={() => setNewKey(null)}
className="mt-2 block text-xs text-amber-700 hover:text-amber-900"
>
- Dismiss
+ {t("common:actions.dismiss")}
- Export your gear collection as a CSV file, or import items from a CSV. + {t("importExport.description")}
- Choose the unit used to display weights across the app + {t("weightUnit.description")}
- Sets your market region and currency for price display + {t("currency.description")}