@@ -140,7 +141,7 @@ function SettingsSidebar() {
- Back to App
+ {uiT('Back to App')}
diff --git a/frontend/src/components/shared/confirmation-dialog.tsx b/frontend/src/components/shared/confirmation-dialog.tsx
index 1ec2bacb..61982cf1 100644
--- a/frontend/src/components/shared/confirmation-dialog.tsx
+++ b/frontend/src/components/shared/confirmation-dialog.tsx
@@ -12,6 +12,7 @@ import {
DialogHeader,
DialogTitle,
} from '@/components/ui/dialog';
+import { uiT } from '@/lib/i18n';
import { cn } from '@/lib/utils';
type ConfirmationDialogIconProps = ReactElement>;
@@ -35,10 +36,10 @@ interface ConfirmationDialogProps {
function ConfirmationDialog({
cancelIcon,
- cancelText = 'Cancel',
+ cancelText = uiT('Cancel'),
cancelVariant = 'outline',
confirmIcon = ,
- confirmText = 'Confirm',
+ confirmText = uiT('Confirm'),
confirmVariant = 'destructive',
description,
handleConfirm,
@@ -54,14 +55,16 @@ function ConfirmationDialog({
// see "Confirm Action" for a Delete prompt or a Save prompt. Explicit
// `title` always wins.
const verb = confirmText.trim();
- const resolvedTitle = title ?? (verb && verb !== 'Confirm' ? `${verb} ${itemType}` : 'Confirm Action');
-
- const defaultDescription = description || (
- <>
- Are you sure you want to {verb.toLowerCase() || 'perform this action on'}{' '}
- {itemName} {itemType}?
- >
- );
+ const resolvedTitle =
+ title ?? (verb && verb !== uiT('Confirm') ? `${verb} ${uiT(itemType)}` : uiT('Confirm Action'));
+
+ const defaultDescription =
+ description ||
+ uiT('Are you sure you want to {{verb}} {{itemName}} {{itemType}}?', {
+ itemName,
+ itemType: uiT(itemType),
+ verb: verb.toLowerCase() || uiT('perform this action on'),
+ });
const processIcon = (icon?: ConfirmationDialogIconProps): ConfirmationDialogIconProps | null => {
if (!icon) {
diff --git a/frontend/src/components/shared/detail-navigation/detail-navigation-buttons.tsx b/frontend/src/components/shared/detail-navigation/detail-navigation-buttons.tsx
index d60451f4..7e187c28 100644
--- a/frontend/src/components/shared/detail-navigation/detail-navigation-buttons.tsx
+++ b/frontend/src/components/shared/detail-navigation/detail-navigation-buttons.tsx
@@ -2,6 +2,7 @@ import { ChevronLeft, ChevronRight } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
+import { uiT } from '@/lib/i18n';
import { cn } from '@/lib/utils';
import type { DetailNavigationController } from './use-detail-navigation';
@@ -42,7 +43,7 @@ export function DetailNavigationButtons({
- Previous
+ {uiT('Previous')}
@@ -76,7 +77,7 @@ export function DetailNavigationButtons({
- Next
+ {uiT('Next')}
);
diff --git a/frontend/src/components/shared/detail-navigation/detail-navigation-sheet.tsx b/frontend/src/components/shared/detail-navigation/detail-navigation-sheet.tsx
index fba58137..a7df7261 100644
--- a/frontend/src/components/shared/detail-navigation/detail-navigation-sheet.tsx
+++ b/frontend/src/components/shared/detail-navigation/detail-navigation-sheet.tsx
@@ -4,6 +4,7 @@ import { type KeyboardEvent, type ReactNode, useCallback, useEffect, useMemo, us
import { Badge } from '@/components/ui/badge';
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/components/ui/input-group';
import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet';
+import { uiT } from '@/lib/i18n';
import { cn } from '@/lib/utils';
import type { DetailNavigationController } from './use-detail-navigation';
@@ -372,7 +373,7 @@ export function DetailNavigationSheet({
{hasClearButton ? (
({
) : (
{trimmedQuery.length > 0
- ? `No items match "${trimmedQuery}".`
- : 'No items match the current filter.'}
+ ? uiT('No items match "{{query}}".', { query: trimmedQuery })
+ : uiT('No items match the current filter.')}