diff options
| author | Adam <[email protected]> | 2026-02-06 08:54:51 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-06 08:54:51 -0600 |
| commit | 812597bb8b101896a8988493d37261ff851ae502 (patch) | |
| tree | 3b713c13f49c65665e6a7296ed483a3f6f8befbf /packages/console/app/src/lib/form-error.ts | |
| parent | 0ec5f6608bdfea5be62dbbdc4c04a61de6d3e67c (diff) | |
| download | opencode-812597bb8b101896a8988493d37261ff851ae502.tar.gz opencode-812597bb8b101896a8988493d37261ff851ae502.zip | |
feat(web): i18n (#12471)
Diffstat (limited to 'packages/console/app/src/lib/form-error.ts')
| -rw-r--r-- | packages/console/app/src/lib/form-error.ts | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/packages/console/app/src/lib/form-error.ts b/packages/console/app/src/lib/form-error.ts new file mode 100644 index 000000000..1f6e2ea1e --- /dev/null +++ b/packages/console/app/src/lib/form-error.ts @@ -0,0 +1,83 @@ +import type { Key } from "~/i18n" + +export const formError = { + invalidPlan: "error.invalidPlan", + workspaceRequired: "error.workspaceRequired", + alreadySubscribed: "error.alreadySubscribed", + limitRequired: "error.limitRequired", + monthlyLimitInvalid: "error.monthlyLimitInvalid", + workspaceNameRequired: "error.workspaceNameRequired", + nameTooLong: "error.nameTooLong", + emailRequired: "error.emailRequired", + roleRequired: "error.roleRequired", + idRequired: "error.idRequired", + nameRequired: "error.nameRequired", + providerRequired: "error.providerRequired", + apiKeyRequired: "error.apiKeyRequired", + modelRequired: "error.modelRequired", +} as const + +const map = { + [formError.invalidPlan]: "error.invalidPlan", + [formError.workspaceRequired]: "error.workspaceRequired", + [formError.alreadySubscribed]: "error.alreadySubscribed", + [formError.limitRequired]: "error.limitRequired", + [formError.monthlyLimitInvalid]: "error.monthlyLimitInvalid", + [formError.workspaceNameRequired]: "error.workspaceNameRequired", + [formError.nameTooLong]: "error.nameTooLong", + [formError.emailRequired]: "error.emailRequired", + [formError.roleRequired]: "error.roleRequired", + [formError.idRequired]: "error.idRequired", + [formError.nameRequired]: "error.nameRequired", + [formError.providerRequired]: "error.providerRequired", + [formError.apiKeyRequired]: "error.apiKeyRequired", + [formError.modelRequired]: "error.modelRequired", + "Invalid plan": "error.invalidPlan", + "Workspace ID is required": "error.workspaceRequired", + "Workspace ID is required.": "error.workspaceRequired", + "This workspace already has a subscription": "error.alreadySubscribed", + "Limit is required.": "error.limitRequired", + "Set a valid monthly limit": "error.monthlyLimitInvalid", + "Set a valid monthly limit.": "error.monthlyLimitInvalid", + "Workspace name is required.": "error.workspaceNameRequired", + "Name must be 255 characters or less.": "error.nameTooLong", + "Email is required": "error.emailRequired", + "Role is required": "error.roleRequired", + "ID is required": "error.idRequired", + "Name is required": "error.nameRequired", + "Provider is required": "error.providerRequired", + "API key is required": "error.apiKeyRequired", + "Model is required": "error.modelRequired", +} as const satisfies Record<string, Key> + +export function formErrorReloadAmountMin(amount: number) { + return `error.reloadAmountMin:${amount}` +} + +export function formErrorReloadTriggerMin(amount: number) { + return `error.reloadTriggerMin:${amount}` +} + +export function localizeError(t: (key: Key, params?: Record<string, string | number>) => string, error?: string) { + if (!error) return "" + + if (error.startsWith("error.reloadAmountMin:")) { + const amount = Number(error.split(":")[1] ?? 0) + return t("error.reloadAmountMin", { amount }) + } + + if (error.startsWith("error.reloadTriggerMin:")) { + const amount = Number(error.split(":")[1] ?? 0) + return t("error.reloadTriggerMin", { amount }) + } + + const amount = error.match(/^Reload amount must be at least \$(\d+)$/) + if (amount) return t("error.reloadAmountMin", { amount: Number(amount[1]) }) + + const trigger = error.match(/^Balance trigger must be at least \$(\d+)$/) + if (trigger) return t("error.reloadTriggerMin", { amount: Number(trigger[1]) }) + + const key = map[error as keyof typeof map] + if (key) return t(key) + return error +} |
