mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-10-16 07:25:44 -04:00
New Crowdin translations by GitHub Action
This commit is contained in:
1 parent
eb9c7ae6df
commit
fe8c652b4a
11 files changed
+3242
-448
No files matched your search
+296
-42
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ar\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:52\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Arabic\n"
|
||||
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
|
||||
@@ -37,6 +37,11 @@ msgstr "{0, plural, zero {# صور} one {# صورة} two {# صورتين} few {#
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, zero {# عناوين} one {# عنوان} two {# عنوانين} few {# عناوين} many {# عنوان} other {# عنوان}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, zero {# عناوين} one {# عنوان} two {# عنواني
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr "{backupCount, plural, zero {# نسخ احتياطية} one {# نسخة احتياطية} two {# نسختين احتياطيتين} few {# نسخ احتياطية} many {# نسخة احتياطية} other {# نسخة احتياطية}} مخزنة"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
msgstr "{backupCount} نسخ احتياطية · آخر <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr "{cachedImageCount} صور مخزنة مؤقتًا"
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr "{count, plural, zero {# حلقات سابقة} one {# حلقة سابقة} two {# حلقتين سابقتين} few {# حلقات سابقة} many {# حلقة سابقة} other {# حلقة سابقة}} غير مشاهدة"
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr "{count} حلق{suffix}"
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -156,21 +173,29 @@ msgstr "{movieCount} فيلم، {episodeCount} حلقة"
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr "{ratingCount} تقييم"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr "{unresolvedCount} عنصر لا يحتوي على معرّفات خارجية وسيتم البحث عنه بالعنوان، مما قد يكون أقل دقة."
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total} حلقة"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr "{watchedCount} من أصل {episodeCount} حلقة مشاهدة"
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr "{watchedCount} من أصل {episodeCount} حلقة مشاهدة"
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedCount}/{episodeCount, plural, zero {# حلقات} one {# حلقة} two {# حلقتين} few {# حلقات} many {# حلقة} other {# حلقة}}"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedEpisodes}/{totalEpisodes, plural, zero {# حلقات} one {# حلقة} two {# حلقتين} few {# حلقات} many {# حلقة} other {# حلقة}}"
|
||||
@@ -198,6 +225,10 @@ msgstr "{watchlistCount} عناصر"
|
||||
msgid "Account"
|
||||
msgstr "الحساب"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr "الإجراءات"
|
||||
@@ -221,15 +252,20 @@ msgstr "أضف <0>Generic Destination</0> والصق الرابط أعلاه"
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "أضف webhook جديداً والصق الرابط أعلاه"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "إضافة إلى المكتبة"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "إضافة إلى قائمة المشاهدة"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "هل لديك حساب بالفعل؟ تسجيل الدخول"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "حدث خطأ غير متوقع أثناء تحميل هذه الصفحة. يمكنك المحاولة مرة أخرى أو العودة إلى لوحة التحكم."
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "الإبلاغ المجهول عن الاستخدام"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr "تم اللحاق — تم تحديد {count, plural, zero {# حلقات} one {# حلقة} two {# حلقتين} few {# حلقات} many {# حلقة} other {# حلقة}} كمشاهدة"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "تغيير كلمة المرور"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "تغيير كلمة المرور"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "تغيير الخادم"
|
||||
msgid "Check configuration"
|
||||
msgstr "التحقق من الإعداد"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "التحقق من التحديثات"
|
||||
@@ -530,6 +569,7 @@ msgstr "إغلاق"
|
||||
msgid "Completed"
|
||||
msgstr "مكتمل"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "تعذر تحميل تفاصيل الشخص"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "إنشاء حساب"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "إنشاء حساب"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "إنشاء حسابك"
|
||||
msgid "Creating…"
|
||||
msgstr "جارٍ الإنشاء…"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "كلمة المرور الحالية"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "كلمة المرور الحالية مطلوبة"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "منطقة الخطر"
|
||||
@@ -732,6 +784,10 @@ msgstr "قطع الاتصال"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "قطع الاتصال بـ {label}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "ليس لديك خادم؟"
|
||||
@@ -745,6 +801,10 @@ msgstr "ليس لديك حساب؟"
|
||||
msgid "Done"
|
||||
msgstr "تم"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "انقر مرتين لمسح هذا الفلتر"
|
||||
@@ -753,6 +813,10 @@ msgstr "انقر مرتين لمسح هذا الفلتر"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "انقر مرتين للتصفية بـ {label}"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "تنزيل النسخة الاحتياطية"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr "محرر"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr "البريد الإلكتروني"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "فعّل نوع الإشعار \"Playback Stop\""
|
||||
@@ -794,10 +869,19 @@ msgstr "فعّل نوع الإشعار <0>Playback Stop</0>"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "فعّل فئة الحدث <0>Playback</0>"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "أدخل الرمز أدناه على موقع {source} لتفويض Sofa."
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "أدخل كلمة مرورك الحالية واختر كلمة مرور جديدة."
|
||||
@@ -828,11 +912,13 @@ msgstr "الحلقة {episodeNumber}"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "الحلقة {episodeNumber}، {episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "تم إلغاء مشاهدة الحلقة"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr "خطأ"
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr "الأخطاء ({errorCount})"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "فشل قطع الاتصال بـ {label}"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "فشل تحميل إعدادات جدول النسخ الاحتياطي."
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "فشل تسجيل الدخول"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr "فشل بدء الاتصال بـ {sourceLabel}"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "فشل تشغيل المهمة"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "إليك ما يحدث في مكتبتك"
|
||||
msgid "Home"
|
||||
msgstr "الرئيسية"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "ذاكرة التخزين المؤقت للصور"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "ذاكرة التخزين المؤقت للصور"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "جارٍ الاستيراد من {source}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "في المكتبة"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "في المكتبة"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "في قائمة المشاهدة"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1346,7 +1446,7 @@ msgstr "نجح آخر تشغيل"
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Library"
|
||||
msgstr ""
|
||||
msgstr "المكتبة"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Library refresh"
|
||||
@@ -1356,10 +1456,19 @@ msgstr "تحديث المكتبة"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "جارٍ التحميل…"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "تحديد الكل كمشاهدة"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "تحديد كمشاهدة"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "تحديد كمشاهدة"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "تم تحديد جميع حلقات \"{titleName}\" كمشاهدة"
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "تم التحديد كمشاهدة"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "عضو منذ {memberSince}"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "الاثنين"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "أفلام {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr "الاسم"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "لا يتم قبول حسابات جديدة في الوقت الحال
|
||||
msgid "New backup"
|
||||
msgstr "نسخة احتياطية جديدة"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "الحلقة التالية"
|
||||
msgid "Next run"
|
||||
msgstr "التشغيل التالي"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "غير مُهيَّأ"
|
||||
msgid "Not Found"
|
||||
msgstr "غير موجود"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "في قائمة المشاهدة"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "افتح Radarr، وانتقل إلى <0>الإعدادات > Import Lis
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "افتح Radarr، وانتقل إلى الإعدادات > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "افتح Sonarr، وانتقل إلى <0>الإعدادات > Import Lis
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "افتح Sonarr، وانتقل إلى الإعدادات > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "أو"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "أو"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "جارٍ التحليل..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr "كلمة المرور"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "تم تحديث كلمة المرور"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "كلمتا المرور غير متطابقتين"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "الشخص غير موجود"
|
||||
msgid "Play trailer"
|
||||
msgstr "تشغيل الإعلان"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "المسلسلات الشائعة"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "نسخة احتياطية قبل الاستعادة"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "الإجراءات السريعة"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "رابط قائمة Radarr"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "تم التقييم بـ {stars, plural, zero {# نجمة} one {# نجم
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "التقييم"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "التقييم"
|
||||
msgid "Rating removed"
|
||||
msgstr "تم حذف التقييم"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "تم إغلاق التسجيل"
|
||||
msgid "Registration Closed"
|
||||
msgstr "التسجيل مغلق"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "تم فتح التسجيل"
|
||||
msgid "Remove"
|
||||
msgstr "إزالة"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "إزالة من المكتبة"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "إزالة من المكتبة"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "إزالة من المكتبة"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "إزالة من المكتبة؟"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "إزالة الصورة"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "بحث…"
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr "الموسم {seasonNumber}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr "الخادم"
|
||||
msgid "Server Health"
|
||||
msgstr "صحة الخادم"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "رابط الخادم"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "حدد ملف تعريف الجودة المفضل والمجلد الج
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "الإعدادات"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "عرض أقل"
|
||||
msgid "Show more"
|
||||
msgstr "عرض المزيد"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "تسجيل الدخول"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "تسجيل الدخول"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr "تسجيل الدخول باستخدام {providerName}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "تسجيل الخروج"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "تسجيل الخروج"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "سيقوم Sofa تلقائياً بتسجيل الأفلام والحل
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "حدث خطأ ما…"
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "رابط قائمة Sonarr"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "ابدأ الاستكشاف"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr "إعلان"
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "رائج اليوم"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "رائج اليوم"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "غير معروف"
|
||||
msgid "unlimited"
|
||||
msgstr "غير محدود"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "غير قابل للوصول"
|
||||
@@ -2578,6 +2800,10 @@ msgstr "تم إلغاء مشاهدة كل {seasonLabel}"
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "تم إلغاء مشاهدة م{seasonNum} ح{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "تم تفعيل التحقق من التحديثات"
|
||||
msgid "Update failed"
|
||||
msgstr "فشل التحديث"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "تحديث كلمة المرور"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "تحديث كلمة المرور"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "رفع صورة الملف الشخصي"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "تم نسخ الرابط إلى الحافظة"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "عرض الإصدار"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "سجل المشاهدة"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "مشاهدة على {name}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "تمت مشاهدة كل {seasonLabel}"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "تمت مشاهدة كل {seasonName}"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "تمت مشاهدة م{seasonNum} ح{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr "رابط Webhook"
|
||||
msgid "Wednesday"
|
||||
msgstr "الأربعاء"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "مكتبتك فارغة"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "اسمك"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
+294
-40
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: de\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:53\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: German\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -37,6 +37,11 @@ msgstr "{0, plural, one {# Bild} other {# Bilder}}"
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, one {# Titel} other {# Titel}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, one {# Titel} other {# Titel}}"
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr ""
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr ""
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -156,21 +173,29 @@ msgstr ""
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total} Episoden"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr ""
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr ""
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
@@ -198,6 +225,10 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Konto"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr "Aktionen"
|
||||
@@ -221,15 +252,20 @@ msgstr "Füge ein <0>Generic Destination</0> hinzu und füge die URL oben ein"
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "Füge einen neuen Webhook hinzu und füge die URL oben ein"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "Zur Bibliothek hinzufügen"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "Zur Merkliste hinzufügen"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "Bereits ein Konto? Anmelden"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "Beim Laden dieser Seite ist ein unerwarteter Fehler aufgetreten. Du kannst es erneut versuchen oder zum Dashboard zurückkehren."
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "Anonyme Nutzungsberichte"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "Passwort ändern"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "Passwort ändern"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "Server wechseln"
|
||||
msgid "Check configuration"
|
||||
msgstr "Konfiguration prüfen"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "Nach Updates suchen"
|
||||
@@ -530,6 +569,7 @@ msgstr "Schließen"
|
||||
msgid "Completed"
|
||||
msgstr "Abgeschlossen"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "Personendetails konnten nicht geladen werden"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "Konto erstellen"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "Konto erstellen"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "Erstelle dein Konto"
|
||||
msgid "Creating…"
|
||||
msgstr "Erstelle..."
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Aktuelles Passwort"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "Aktuelles Passwort ist erforderlich"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "Gefahrenzone"
|
||||
@@ -732,6 +784,10 @@ msgstr "Trennen"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "{label} trennen"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "Noch keinen Server?"
|
||||
@@ -745,6 +801,10 @@ msgstr "Noch kein Konto?"
|
||||
msgid "Done"
|
||||
msgstr "Fertig"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "Doppeltippen zum Entfernen dieses Filters"
|
||||
@@ -753,6 +813,10 @@ msgstr "Doppeltippen zum Entfernen dieses Filters"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "Doppeltippen zum Filtern nach {label}"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "Backup herunterladen"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr "Cutter"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr "E-Mail"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "Benachrichtigungstyp \"Playback Stop\" aktivieren"
|
||||
@@ -794,10 +869,19 @@ msgstr "Benachrichtigungstyp <0>Playback Stop</0> aktivieren"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "Ereigniskategorie <0>Playback</0> aktivieren"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "Gib den untenstehenden Code auf der Website von {source} ein, um Sofa zu autorisieren."
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "Gib dein aktuelles Passwort ein und wähle ein neues."
|
||||
@@ -828,11 +912,13 @@ msgstr "Folge {episodeNumber}"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "Folge {episodeNumber}, {episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "Episode als ungesehen markiert"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr "Fehler"
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "{label} konnte nicht getrennt werden"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "Backup-Zeitplaneinstellungen konnten nicht geladen werden."
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "Anmeldung fehlgeschlagen"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "Aufgabe konnte nicht ausgelöst werden"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "Das passiert in deiner Bibliothek"
|
||||
msgid "Home"
|
||||
msgstr "Startseite"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "Bild-Cache"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "Bild-Cache"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "Importiere von {source}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "In Bibliothek"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "In Bibliothek"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "In der Merkliste"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1356,10 +1456,19 @@ msgstr "Bibliothek aktualisieren"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "Lade..."
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "Alle als gesehen markieren"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "Als gesehen markieren"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "Als gesehen markieren"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "Alle Folgen von \"{titleName}\" als gesehen markiert"
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "Als gesehen markiert"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "Mitglied seit {memberSince}"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "Montag"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "Filme {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "Neue Konten werden derzeit nicht akzeptiert. Kontaktiere den Admin, wenn
|
||||
msgid "New backup"
|
||||
msgstr "Neues Backup"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "Nächste Episode"
|
||||
msgid "Next run"
|
||||
msgstr "Nächster Lauf"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "Nicht konfiguriert"
|
||||
msgid "Not Found"
|
||||
msgstr "Nicht gefunden"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "Auf der Merkliste"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "Öffne Radarr, gehe zu <0>Settings > Import Lists</0>"
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "Öffne Radarr, gehe zu Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "Öffne Sonarr, gehe zu <0>Settings > Import Lists</0>"
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "Öffne Sonarr, gehe zu Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "oder"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "ODER"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "Verarbeite..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Passwort aktualisiert"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Passwörter stimmen nicht überein"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "Person nicht gefunden"
|
||||
msgid "Play trailer"
|
||||
msgstr "Trailer abspielen"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "Beliebte Serien"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "Backup vor Wiederherstellung"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "Schnellaktionen"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "Radarr-Listen-URL"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "{stars, plural, one {# Stern} other {# Sterne}} vergeben"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "Bewertung"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "Bewertung"
|
||||
msgid "Rating removed"
|
||||
msgstr "Bewertung entfernt"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "Registrierung geschlossen"
|
||||
msgid "Registration Closed"
|
||||
msgstr "Registrierung geschlossen"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "Registrierung geöffnet"
|
||||
msgid "Remove"
|
||||
msgstr "Entfernen"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "Aus Bibliothek entfernen"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "Aus Bibliothek entfernen"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "Aus Bibliothek entfernen"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "Aus der Bibliothek entfernen?"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "Foto entfernen"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "Suchen..."
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr ""
|
||||
msgid "Server Health"
|
||||
msgstr "Server-Status"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "Server-URL"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "Bevorzugtes Qualitätsprofil und Stammordner festlegen"
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "Weniger anzeigen"
|
||||
msgid "Show more"
|
||||
msgstr "Mehr anzeigen"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "Anmelden"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "Anmelden"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "Abmelden"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "Abmelden"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "Sofa protokolliert Filme und Episoden automatisch, wenn du sie zu Ende g
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "Etwas ist schiefgelaufen..."
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "Sonarr-Listen-URL"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "Jetzt entdecken"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "Heute im Trend"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "Heute im Trend"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "unbekannt"
|
||||
msgid "unlimited"
|
||||
msgstr "unbegrenzt"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "Nicht erreichbar"
|
||||
@@ -2578,6 +2800,10 @@ msgstr ""
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "S{seasonNum} E{epNum} als ungesehen markiert"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "Update-Prüfung aktiviert"
|
||||
msgid "Update failed"
|
||||
msgstr "Aktualisierung fehlgeschlagen"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "Passwort aktualisieren"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "Passwort aktualisieren"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "Profilbild hochladen"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "URL in die Zwischenablage kopiert"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "Version ansehen"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "Verlauf"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "Ansehen auf {name}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "Alle Episoden von {seasonLabel} als gesehen markiert"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "Alle Episoden von {seasonName} als gesehen markiert"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "S{seasonNum} E{epNum} als gesehen markiert"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr "Webhook-URL"
|
||||
msgid "Wednesday"
|
||||
msgstr "Mittwoch"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "Deine Bibliothek ist leer"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "Dein Name"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
+295
-41
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: es\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:53\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -37,6 +37,11 @@ msgstr "{0, plural, one {# imagen} other {# imágenes}}"
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, one {# título} other {# títulos}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, one {# título} other {# títulos}}"
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr ""
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr ""
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -129,7 +146,7 @@ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{jobLabel} triggered"
|
||||
msgstr ""
|
||||
msgstr "{jobLabel} iniciado"
|
||||
|
||||
#: apps/native/src/components/settings/integration-card.tsx
|
||||
#: apps/web/src/components/settings/integration-card.tsx
|
||||
@@ -156,21 +173,29 @@ msgstr ""
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total} episodios"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr ""
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr ""
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
@@ -198,6 +225,10 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Cuenta"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr "Acciones"
|
||||
@@ -221,15 +252,20 @@ msgstr "Añade un <0>Generic Destination</0> y pega la URL anterior"
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "Añade un nuevo webhook y pega la URL anterior"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "Añadir a la biblioteca"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "Añadir a la lista"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "¿Ya tienes una cuenta? Inicia sesión"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "Ocurrió un error inesperado al cargar esta página. Puedes intentarlo de nuevo o volver al panel."
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "Informe de uso anónimo"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "Cambiar contraseña"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "Cambiar contraseña"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "Cambiar servidor"
|
||||
msgid "Check configuration"
|
||||
msgstr "Comprobar configuración"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "Buscar actualizaciones"
|
||||
@@ -530,6 +569,7 @@ msgstr "Cerrar"
|
||||
msgid "Completed"
|
||||
msgstr "Completado"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "No se pudieron cargar los detalles de la persona"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "Crear cuenta"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "Crear cuenta"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "Crea tu cuenta"
|
||||
msgid "Creating…"
|
||||
msgstr "Creando…"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Contraseña actual"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "La contraseña actual es obligatoria"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "Zona de peligro"
|
||||
@@ -732,6 +784,10 @@ msgstr "Desconectar"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "Desconectar {label}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "¿No tienes un servidor?"
|
||||
@@ -745,6 +801,10 @@ msgstr "¿No tienes una cuenta?"
|
||||
msgid "Done"
|
||||
msgstr "Hecho"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "Doble toque para eliminar este filtro"
|
||||
@@ -753,6 +813,10 @@ msgstr "Doble toque para eliminar este filtro"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "Doble toque para filtrar por {label}"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "Descargar copia de seguridad"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr "Correo electrónico"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "Activa el tipo de notificación \"Playback Stop\""
|
||||
@@ -794,10 +869,19 @@ msgstr "Activa el tipo de notificación <0>Playback Stop</0>"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "Activa la categoría de evento <0>Playback</0>"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "Introduce el siguiente código en el sitio web de {source} para autorizar a Sofa."
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "Introduce tu contraseña actual y elige una nueva."
|
||||
@@ -828,11 +912,13 @@ msgstr "Episodio {episodeNumber}"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "Episodio {episodeNumber}, {episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "Episodio marcado como no visto"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr ""
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "Error al desconectar {label}"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "Error al cargar los ajustes de programación de copias de seguridad."
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "Error al iniciar sesión"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "Error al iniciar la tarea"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "Esto es lo que pasa con tu biblioteca"
|
||||
msgid "Home"
|
||||
msgstr "Inicio"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "Caché de imágenes"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "Caché de imágenes"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "Importando desde {source}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "En la biblioteca"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "En la biblioteca"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "En lista de seguimiento"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1356,10 +1456,19 @@ msgstr "Actualización de biblioteca"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "Cargando…"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "Marcar todos como vistos"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "Marcar como visto"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "Marcar como visto"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "Se marcaron todos los episodios de \"{titleName}\" como vistos"
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "Marcado como visto"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "Miembro desde {memberSince}"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "Lunes"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "Películas {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "No se aceptan nuevas cuentas en este momento. Contacta al administrador
|
||||
msgid "New backup"
|
||||
msgstr "Nueva copia de seguridad"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "Siguiente episodio"
|
||||
msgid "Next run"
|
||||
msgstr "Próxima ejecución"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "No configurado"
|
||||
msgid "Not Found"
|
||||
msgstr "No encontrado"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "En la lista"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "Abre Radarr, ve a <0>Settings > Import Lists</0>"
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "Abre Radarr, ve a Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "Abre Sonarr, ve a <0>Settings > Import Lists</0>"
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "Abre Sonarr, ve a Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "o"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "O"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "Analizando..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr "Contraseña"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Contraseña actualizada"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Las contraseñas no coinciden"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "Persona no encontrada"
|
||||
msgid "Play trailer"
|
||||
msgstr "Reproducir tráiler"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "Series populares"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "Copia de seguridad previa a restauración"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "Acciones rápidas"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "URL de lista de Radarr"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "Valorado con {stars, plural, one {# estrella} other {# estrellas}}"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "Valoración"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "Valoración"
|
||||
msgid "Rating removed"
|
||||
msgstr "Valoración eliminada"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "Registro cerrado"
|
||||
msgid "Registration Closed"
|
||||
msgstr "Registro cerrado"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "Registro abierto"
|
||||
msgid "Remove"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "Eliminar de la biblioteca"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "Eliminar de la biblioteca"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "Eliminar de la biblioteca"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "¿Eliminar de la biblioteca?"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "Eliminar foto"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "Buscar…"
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr "Servidor"
|
||||
msgid "Server Health"
|
||||
msgstr "Estado del servidor"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "URL del servidor"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "Configura tu perfil de calidad y carpeta raíz preferidos"
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "Ajustes"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "Mostrar menos"
|
||||
msgid "Show more"
|
||||
msgstr "Mostrar más"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "Iniciar sesión"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "Cerrar sesión"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "Cerrar sesión"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "Sofa registrará automáticamente películas y episodios cuando termines
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "Algo salió mal…"
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "URL de lista de Sonarr"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "Empezar a explorar"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr "Tráiler"
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "Tendencia hoy"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "Tendencias hoy"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "desconocido"
|
||||
msgid "unlimited"
|
||||
msgstr "ilimitado"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "Inaccesible"
|
||||
@@ -2578,6 +2800,10 @@ msgstr ""
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "No visto T{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "Comprobaciones de actualizaciones activadas"
|
||||
msgid "Update failed"
|
||||
msgstr "Error al actualizar"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "Actualizar contraseña"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "Actualizar contraseña"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "Subir foto de perfil"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "URL copiada al portapapeles"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "Ver versión"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "Historial de visionado"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "Ver en {name}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "Visto todo de {seasonLabel}"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "Visto todo de {seasonName}"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "Visto T{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr "URL de webhook"
|
||||
msgid "Wednesday"
|
||||
msgstr "Miércoles"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "Tu biblioteca está vacía"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "Tu nombre"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
+294
-40
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: fr\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:52\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: French\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
@@ -37,6 +37,11 @@ msgstr ""
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, one {# titre} other {# titres}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, one {# titre} other {# titres}}"
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr ""
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr ""
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -156,21 +173,29 @@ msgstr ""
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total} épisodes"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr ""
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr ""
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
@@ -198,6 +225,10 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Compte"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
@@ -221,15 +252,20 @@ msgstr "Ajoutez une <0>Generic Destination</0> et collez l'URL ci-dessus"
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "Ajoutez un nouveau webhook et collez l'URL ci-dessus"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "Ajouter à la bibliothèque"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "Ajouter à la liste de suivi"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "Vous avez déjà un compte ? Se connecter"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "Une erreur inattendue s'est produite lors du chargement de cette page. Vous pouvez réessayer ou retourner au tableau de bord."
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "Rapports d'utilisation anonymes"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "Changer le mot de passe"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "Changer le mot de passe"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "Changer de serveur"
|
||||
msgid "Check configuration"
|
||||
msgstr "Vérifier la configuration"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "Rechercher des mises à jour"
|
||||
@@ -530,6 +569,7 @@ msgstr "Fermer"
|
||||
msgid "Completed"
|
||||
msgstr "Terminé"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "Impossible de charger les détails de la personne"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "Créer un compte"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "Créer un compte"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "Créez votre compte"
|
||||
msgid "Creating…"
|
||||
msgstr "Création…"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Mot de passe actuel"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "Le mot de passe actuel est requis"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "Zone de danger"
|
||||
@@ -732,6 +784,10 @@ msgstr "Déconnecter"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "Déconnecter {label}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "Pas de serveur ?"
|
||||
@@ -745,6 +801,10 @@ msgstr "Pas encore de compte ?"
|
||||
msgid "Done"
|
||||
msgstr "Terminé"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "Double appui pour supprimer ce filtre"
|
||||
@@ -753,6 +813,10 @@ msgstr "Double appui pour supprimer ce filtre"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "Double appui pour filtrer par {label}"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "Télécharger la sauvegarde"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr "Monteur"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "Activez le type de notification « Playback Stop »"
|
||||
@@ -794,10 +869,19 @@ msgstr "Activez le type de notification <0>Playback Stop</0>"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "Activez la catégorie d'événement <0>Playback</0>"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "Entrez le code ci-dessous sur le site de {source} pour autoriser Sofa."
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "Entrez votre mot de passe actuel et choisissez-en un nouveau."
|
||||
@@ -828,11 +912,13 @@ msgstr "Épisode {episodeNumber}"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "Épisode {episodeNumber}, {episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "Épisode non visionné"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr "Erreur"
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "Échec de la déconnexion de {label}"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "Échec du chargement des paramètres de planning de sauvegarde."
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "Échec de la connexion"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "Échec du déclenchement de la tâche"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "Voici ce qui se passe dans votre bibliothèque"
|
||||
msgid "Home"
|
||||
msgstr "Accueil"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "Cache d'images"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "Cache d'images"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "Importation depuis {source}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "Dans la bibliothèque"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "Dans la bibliothèque"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "Dans la liste"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1356,10 +1456,19 @@ msgstr "Actualisation de la bibliothèque"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "Chargement…"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "Tout marquer comme visionné"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "Marquer comme visionné"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "Marquer comme visionné"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "Tous les épisodes de \"{titleName}\" marqués comme vus"
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "Marqué comme visionné"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "Membre depuis {memberSince}"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "Lundi"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "Films {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "Les nouvelles inscriptions sont fermées. Contactez l'administrateur si
|
||||
msgid "New backup"
|
||||
msgstr "Nouvelle sauvegarde"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "Épisode suivant"
|
||||
msgid "Next run"
|
||||
msgstr "Prochaine exécution"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "Non configuré"
|
||||
msgid "Not Found"
|
||||
msgstr "Introuvable"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "Dans la liste de suivi"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "Ouvrez Radarr, allez dans <0>Settings > Import Lists</0>"
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "Ouvrez Radarr, allez dans Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "Ouvrez Sonarr, allez dans <0>Settings > Import Lists</0>"
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "Ouvrez Sonarr, allez dans Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "ou"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "OU"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "Analyse..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr "Mot de passe"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Mot de passe mis à jour"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Les mots de passe ne correspondent pas"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "Personne introuvable"
|
||||
msgid "Play trailer"
|
||||
msgstr "Lire la bande-annonce"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "Séries populaires"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "Sauvegarde pré-restauration"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "Actions rapides"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "URL de liste Radarr"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "Noté {stars, plural, one {# étoile} other {# étoiles}}"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "Note"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "Note"
|
||||
msgid "Rating removed"
|
||||
msgstr "Note supprimée"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "Inscriptions fermées"
|
||||
msgid "Registration Closed"
|
||||
msgstr "Inscriptions fermées"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "Inscriptions ouvertes"
|
||||
msgid "Remove"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "Supprimer de la bibliothèque"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "Supprimer de la bibliothèque"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "Supprimer de la bibliothèque"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "Retirer de la bibliothèque ?"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "Supprimer la photo"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "Rechercher…"
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr "Serveur"
|
||||
msgid "Server Health"
|
||||
msgstr "État du serveur"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "URL du serveur"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "Définissez votre profil de qualité et dossier racine préférés"
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "Paramètres"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "Afficher moins"
|
||||
msgid "Show more"
|
||||
msgstr "Afficher plus"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "Se connecter"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "Se connecter"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "Se déconnecter"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "Se déconnecter"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "Sofa enregistrera automatiquement les films et épisodes lorsque vous au
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "Une erreur s'est produite…"
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "URL de liste Sonarr"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "Commencer à explorer"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr "Bande-annonce"
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "Tendance aujourd'hui"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "Tendances du jour"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "inconnu"
|
||||
msgid "unlimited"
|
||||
msgstr "illimité"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "Inaccessible"
|
||||
@@ -2578,6 +2800,10 @@ msgstr ""
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "Démarqué S{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "Vérifications des mises à jour activées"
|
||||
msgid "Update failed"
|
||||
msgstr "Mise à jour échouée"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "Mettre à jour le mot de passe"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "Mettre à jour le mot de passe"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "Télécharger une photo de profil"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "URL copiée dans le presse-papiers"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "Voir la version"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "Historique de visionnage"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "Regarder sur {name}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "Tout visionné de {seasonLabel}"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "Tout visionné de {seasonName}"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "Visionné S{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr "URL de webhook"
|
||||
msgid "Wednesday"
|
||||
msgstr "Mercredi"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "Votre bibliothèque est vide"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "Votre nom"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
+295
-41
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: he\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:53\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Hebrew\n"
|
||||
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
|
||||
@@ -37,6 +37,11 @@ msgstr "{0, plural, one {# תמונה} two {# תמונות} many {# תמונות
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, one {# כותרת} two {# כותרות} many {# כותרות} other {# כותרות}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, one {# כותרת} two {# כותרות} many {# כותרות
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr "{backupCount, plural, one {# גיבוי שמור} two {# גיבויים שמורים} many {# גיבויים שמורים} other {# גיבויים שמורים}}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
msgstr "{backupCount} גיבויים · אחרון <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr "{cachedImageCount} תמונות במטמון"
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr "{count, plural, one {# פרק קודם לא נצפה} two {# פרקים קודמים לא נצפו} many {# פרקים קודמים לא נצפו} other {# פרקים קודמים לא נצפו}}"
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr "{count} פרק{suffix}"
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -156,21 +173,29 @@ msgstr "{movieCount} סרטים, {episodeCount} פרקים"
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr "{ratingCount} דירוגים"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr "ל-{unresolvedCount} פריטים אין מזהים חיצוניים ויאותרו באמצעות חיפוש כותרת, שעשוי להיות פחות מדויק."
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total} פרקים"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr "{watchedCount} מתוך {episodeCount} פרקים נצפו"
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr "{watchedCount} מתוך {episodeCount} פרקים נצפו"
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedCount}/{episodeCount, plural, one {# פרק} two {# פרקים} many {# פרקים} other {# פרקים}}"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedEpisodes}/{totalEpisodes, plural, one {# פרק} two {# פרקים} many {# פרקים} other {# פרקים}}"
|
||||
@@ -198,6 +225,10 @@ msgstr "{watchlistCount} פריטים"
|
||||
msgid "Account"
|
||||
msgstr "חשבון"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr "פעולות"
|
||||
@@ -221,15 +252,20 @@ msgstr "הוסף <0>Generic Destination</0> והדבק את הכתובת למע
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "הוסף webhook חדש והדבק את הכתובת למעלה"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "הוסף לספרייה"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "הוסף לרשימת הצפייה"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "כבר יש לך חשבון? התחבר"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "אירעה שגיאה בלתי צפויה בעת טעינת הדף. תוכל לנסות שוב או לחזור ללוח הבקרה."
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "דיווח שימוש אנונימי"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr "עדכני — {count, plural, one {# פרק סומן כנצפה} two {# פרקים סומנו כנצפו} many {# פרקים סומנו כנצפו} other {# פרקים סומנו כנצפו}}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "שינוי סיסמה"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "שינוי סיסמה"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "שינוי שרת"
|
||||
msgid "Check configuration"
|
||||
msgstr "בדוק תצורה"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "בדוק עדכונים"
|
||||
@@ -530,6 +569,7 @@ msgstr "סגור"
|
||||
msgid "Completed"
|
||||
msgstr "הושלם"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "לא ניתן לטעון את פרטי האדם"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "יצירת חשבון"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "יצירת חשבון"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "צור את חשבונך"
|
||||
msgid "Creating…"
|
||||
msgstr "יוצר…"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "סיסמה נוכחית"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "נדרשת סיסמה נוכחית"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "אזור מסוכן"
|
||||
@@ -732,6 +784,10 @@ msgstr "נתק"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "נתק את {label}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "אין לך שרת?"
|
||||
@@ -745,6 +801,10 @@ msgstr "אין לך חשבון?"
|
||||
msgid "Done"
|
||||
msgstr "סיום"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "הקש פעמיים כדי לנקות את הסינון"
|
||||
@@ -753,6 +813,10 @@ msgstr "הקש פעמיים כדי לנקות את הסינון"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "הקש פעמיים לסינון לפי {label}"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "הורד גיבוי"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr "עורך"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr "דוא\"ל"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "הפעל את סוג ההתראה \"Playback Stop\""
|
||||
@@ -794,10 +869,19 @@ msgstr "הפעל את סוג ההתראה <0>Playback Stop</0>"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "הפעל את קטגוריית האירוע <0>Playback</0>"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "הזן את הקוד הבא באתר {source} כדי לאשר את Sofa."
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "הזן את סיסמתך הנוכחית ובחר סיסמה חדשה."
|
||||
@@ -828,11 +912,13 @@ msgstr "פרק {episodeNumber}"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "פרק {episodeNumber}, {episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "פרק סומן כלא נצפה"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr "שגיאה"
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr "שגיאות ({errorCount})"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "ניתוק {label} נכשל"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "טעינת הגדרות לוח הזמנים לגיבוי נכשלה."
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "הכניסה לחשבון נכשלה"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr "הפעלת החיבור ל-{sourceLabel} נכשלה"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "הפעלת המשימה נכשלה"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "הנה מה שקורה בספרייה שלך"
|
||||
msgid "Home"
|
||||
msgstr "בית"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "מטמון תמונות"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "מטמון תמונות"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "מייבא מ-{source}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "בספרייה"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "בספרייה"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "ברשימת הצפייה"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1356,10 +1456,19 @@ msgstr "רענון הספרייה"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "טוען…"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "סמן הכל כנצפה"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "סמן כנצפה"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "סמן כנצפה"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "כל פרקי \"{titleName}\" סומנו כנצפו"
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "סומן כנצפה"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "חבר מאז {memberSince}"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "שני"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "סרטים {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr "שם"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "לא מתקבלים חשבונות חדשים כרגע. פנה למנה
|
||||
msgid "New backup"
|
||||
msgstr "גיבוי חדש"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "פרק הבא"
|
||||
msgid "Next run"
|
||||
msgstr "הרצה הבאה"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "לא מוגדר"
|
||||
msgid "Not Found"
|
||||
msgstr "לא נמצא"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "ברשימת הצפייה"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "פתח את Radarr, עבור אל <0>Settings > Import Lists</0>"
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "פתח את Radarr, עבור אל Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "פתח את Sonarr, עבור אל <0>Settings > Import Lists</0>"
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "פתח את Sonarr, עבור אל Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "או"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "או"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "מנתח..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr "סיסמה"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "הסיסמה עודכנה"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "הסיסמאות אינן תואמות"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "האדם לא נמצא"
|
||||
msgid "Play trailer"
|
||||
msgstr "הפעל טריילר"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "תוכניות טלוויזיה פופולריות"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "גיבוי לפני שחזור"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "פעולות מהירות"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "כתובת רשימת Radarr"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "דורג {stars, plural, one {# כוכב} two {# כוכבים} many {#
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "דירוג"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "דירוג"
|
||||
msgid "Rating removed"
|
||||
msgstr "הדירוג הוסר"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "ההרשמה נסגרה"
|
||||
msgid "Registration Closed"
|
||||
msgstr "ההרשמה סגורה"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "ההרשמה נפתחה"
|
||||
msgid "Remove"
|
||||
msgstr "הסר"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "הסר מהספרייה"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "הסר מהספרייה"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "הסר מהספרייה"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "להסיר מהספרייה?"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "הסר תמונה"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "חיפוש…"
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr "עונה {seasonNumber}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr "שרת"
|
||||
msgid "Server Health"
|
||||
msgstr "תקינות השרת"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "כתובת השרת"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "הגדר את פרופיל האיכות המועדף ותיקיית הב
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "הגדרות"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "הצג פחות"
|
||||
msgid "Show more"
|
||||
msgstr "הצג עוד"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "התחבר"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "התחבר"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr "התחבר עם {providerName}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "התנתק"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "התנתק"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "Sofa יתעד אוטומטית סרטים ופרקים כשתסיים ל
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "משהו השתבש…"
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "כתובת רשימת Sonarr"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "התחל לגלות"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr "טריילר"
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "פופולרי היום"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "פופולרי היום"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "לא ידוע"
|
||||
msgid "unlimited"
|
||||
msgstr "ללא הגבלה"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "לא נגיש"
|
||||
@@ -2578,6 +2800,10 @@ msgstr "בוטלה צפייה בכל {seasonLabel}"
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "בוטלה צפייה ב-S{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "בדיקות עדכון הופעלו"
|
||||
msgid "Update failed"
|
||||
msgstr "העדכון נכשל"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "עדכן סיסמה"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "עדכן סיסמה"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "העלה תמונת פרופיל"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "כתובת ה-URL הועתקה ללוח"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "צפה בגרסה"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "היסטוריית צפייה"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "צפה ב-{name}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "נצפתה כל {seasonLabel}"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "נצפתה כל {seasonName}"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "נצפה S{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr "כתובת Webhook"
|
||||
msgid "Wednesday"
|
||||
msgstr "רביעי"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "הספרייה שלך ריקה"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "שמך"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
+294
-40
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: it\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:53\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Italian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -37,6 +37,11 @@ msgstr "{0, plural, one {# immagine} other {# immagini}}"
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, one {# titolo} other {# titoli}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, one {# titolo} other {# titoli}}"
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr ""
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr ""
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -156,21 +173,29 @@ msgstr ""
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total} episodi"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr ""
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr ""
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
@@ -198,6 +225,10 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr "Azioni"
|
||||
@@ -221,15 +252,20 @@ msgstr "Aggiungi una <0>Destinazione generica</0> e incolla l'URL sopra"
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "Aggiungi un nuovo webhook e incolla l'URL sopra"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "Aggiungi alla libreria"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "Aggiungi alla watchlist"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "Hai già un account? Accedi"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "Si è verificato un errore imprevisto durante il caricamento di questa pagina. Puoi riprovare o tornare alla dashboard."
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "Segnalazione anonima dell'utilizzo"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "Cambia password"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "Cambia password"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "Cambia server"
|
||||
msgid "Check configuration"
|
||||
msgstr "Verifica configurazione"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "Cerca aggiornamenti"
|
||||
@@ -530,6 +569,7 @@ msgstr "Chiudi"
|
||||
msgid "Completed"
|
||||
msgstr "Completato"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "Impossibile caricare i dettagli della persona"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "Crea account"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "Crea account"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "Crea il tuo account"
|
||||
msgid "Creating…"
|
||||
msgstr "Creazione in corso…"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Password attuale"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "La password attuale è obbligatoria"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "Zona pericolosa"
|
||||
@@ -732,6 +784,10 @@ msgstr "Disconnetti"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "Disconnetti {label}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "Non hai un server?"
|
||||
@@ -745,6 +801,10 @@ msgstr "Non hai un account?"
|
||||
msgid "Done"
|
||||
msgstr "Fatto"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "Tocca due volte per rimuovere questo filtro"
|
||||
@@ -753,6 +813,10 @@ msgstr "Tocca due volte per rimuovere questo filtro"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "Tocca due volte per filtrare per {label}"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "Scarica backup"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr "Montatore"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "Abilita il tipo di notifica \"Playback Stop\""
|
||||
@@ -794,10 +869,19 @@ msgstr "Abilita il tipo di notifica <0>Playback Stop</0>"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "Abilita la categoria evento <0>Playback</0>"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "Inserisci il codice qui sotto sul sito di {source} per autorizzare Sofa."
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "Inserisci la tua password attuale e scegline una nuova."
|
||||
@@ -828,11 +912,13 @@ msgstr "Episodio {episodeNumber}"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "Episodio {episodeNumber}, {episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "Episodio non visto"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr "Errore"
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "Impossibile disconnettere {label}"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "Impossibile caricare le impostazioni di pianificazione backup."
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "Impossibile accedere"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "Impossibile avviare il job"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "Ecco cosa sta succedendo nella tua libreria"
|
||||
msgid "Home"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "Cache immagini"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "Cache immagini"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "Importazione da {source} in corso"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "In libreria"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "In libreria"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "Nella watchlist"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1356,10 +1456,19 @@ msgstr "Aggiornamento libreria"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "Caricamento…"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "Segna tutti come visti"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "Segna come visto"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "Segna come visto"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "Tutti gli episodi di \"{titleName}\" segnati come visti"
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "Segnato come visto"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "Membro dal {memberSince}"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "Lunedì"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "Film {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "La registrazione di nuovi account non è disponibile al momento. Contatt
|
||||
msgid "New backup"
|
||||
msgstr "Nuovo backup"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "Episodio successivo"
|
||||
msgid "Next run"
|
||||
msgstr "Prossima esecuzione"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "Non configurato"
|
||||
msgid "Not Found"
|
||||
msgstr "Non trovato"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "In watchlist"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "Apri Radarr, vai su <0>Impostazioni > Liste di importazione</0>"
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "Apri Radarr, vai su Impostazioni > Liste di importazione"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "Apri Sonarr, vai su <0>Impostazioni > Liste di importazione</0>"
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "Apri Sonarr, vai su Impostazioni > Liste di importazione"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "o"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "O"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "Analisi in corso..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Password aggiornata"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Le password non corrispondono"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "Persona non trovata"
|
||||
msgid "Play trailer"
|
||||
msgstr "Riproduci trailer"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "Serie TV popolari"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "Backup pre-ripristino"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "Azioni rapide"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "URL lista Radarr"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "{stars, plural, one {# stella} other {# stelle}}"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "Valutazione"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "Valutazione"
|
||||
msgid "Rating removed"
|
||||
msgstr "Valutazione rimossa"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "Registrazione chiusa"
|
||||
msgid "Registration Closed"
|
||||
msgstr "Registrazione chiusa"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "Registrazione aperta"
|
||||
msgid "Remove"
|
||||
msgstr "Rimuovi"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "Rimuovi dalla libreria"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "Rimuovi dalla libreria"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "Rimuovi dalla libreria"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "Rimuovere dalla libreria?"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "Rimuovi foto"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "Cerca…"
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr ""
|
||||
msgid "Server Health"
|
||||
msgstr "Salute del server"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "URL server"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "Imposta il profilo di qualità e la cartella radice preferiti"
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "Mostra meno"
|
||||
msgid "Show more"
|
||||
msgstr "Mostra di più"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "Accedi"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "Accedi"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "Esci"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "Esci"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "Sofa registrerà automaticamente film ed episodi quando finisci di guard
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "Qualcosa è andato storto…"
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "URL lista Sonarr"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "Inizia a esplorare"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "In tendenza oggi"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "In tendenza oggi"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "sconosciuto"
|
||||
msgid "unlimited"
|
||||
msgstr "illimitato"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "Non raggiungibile"
|
||||
@@ -2578,6 +2800,10 @@ msgstr ""
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "Non visto S{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "Controllo aggiornamenti abilitato"
|
||||
msgid "Update failed"
|
||||
msgstr "Aggiornamento fallito"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "Aggiorna password"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "Aggiorna password"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "Carica immagine del profilo"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "URL copiato negli appunti"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "Visualizza rilascio"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "Cronologia visioni"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "Guarda su {name}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "Segnata come vista tutta la {seasonLabel}"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "Segnata come vista tutta la {seasonName}"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "Visto S{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr "URL webhook"
|
||||
msgid "Wednesday"
|
||||
msgstr "Mercoledì"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "La tua libreria è vuota"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "Il tuo nome"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
+295
-41
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ja\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:53\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Japanese\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -37,6 +37,11 @@ msgstr "{0, plural, other {# 枚の画像}}"
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, other {# 件のタイトル}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, other {# 件のタイトル}}"
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr "{backupCount, plural, other {# 件のバックアップ}}を保存済み"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
msgstr "{backupCount}件のバックアップ · 最終: <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr "{cachedImageCount}枚のキャッシュ済み画像"
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr "{count, plural, other {# 件前のエピソード}}が未視聴"
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr "{count}話{suffix}"
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -156,21 +173,29 @@ msgstr "{movieCount}本の映画、{episodeCount}件のエピソード"
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr "{ratingCount}件の評価"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr "{unresolvedCount}件の項目に外部IDがないため、タイトル検索で照合されますが、精度が低くなる場合があります。"
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total}エピソード"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr "{episodeCount}件中{watchedCount}件のエピソードを視聴済み"
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr "{episodeCount}件中{watchedCount}件のエピソードを視聴済み"
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedCount}/{episodeCount, plural, other {# エピソード}}"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedEpisodes}/{totalEpisodes, plural, other {# エピソード}}"
|
||||
@@ -198,6 +225,10 @@ msgstr "{watchlistCount}件"
|
||||
msgid "Account"
|
||||
msgstr "アカウント"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr "操作"
|
||||
@@ -221,15 +252,20 @@ msgstr "<0>Generic Destination</0>を追加し、上記のURLを貼り付けて
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "新しいWebhookを追加し、上記のURLを貼り付けてください"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "ライブラリに追加"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "ウォッチリストに追加"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "すでにアカウントをお持ちの方はサインイン"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "このページの読み込み中に予期しないエラーが発生しました。再試行するか、ダッシュボードに戻ってください。"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "匿名の使用状況レポート"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr "追いつきました — {count, plural, other {# エピソード}}を視聴済みにしました"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "パスワードを変更"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "パスワード変更"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "サーバーを変更"
|
||||
msgid "Check configuration"
|
||||
msgstr "設定を確認"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "アップデートを確認"
|
||||
@@ -530,6 +569,7 @@ msgstr "閉じる"
|
||||
msgid "Completed"
|
||||
msgstr "完了"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "人物の詳細を読み込めませんでした"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "アカウントを作成"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "アカウント作成"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "アカウントを作成する"
|
||||
msgid "Creating…"
|
||||
msgstr "作成中…"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "現在のパスワード"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "現在のパスワードは必須です"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "危険な操作"
|
||||
@@ -732,6 +784,10 @@ msgstr "切断"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "{label}を切断"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "サーバーをお持ちでないですか?"
|
||||
@@ -745,6 +801,10 @@ msgstr "アカウントをお持ちでないですか?"
|
||||
msgid "Done"
|
||||
msgstr "完了"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "ダブルタップでこのフィルターをクリア"
|
||||
@@ -753,6 +813,10 @@ msgstr "ダブルタップでこのフィルターをクリア"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "ダブルタップで{label}で絞り込む"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "バックアップをダウンロード"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr "編集"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr "メールアドレス"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "「Playback Stop」通知タイプを有効にしてください"
|
||||
@@ -794,10 +869,19 @@ msgstr "<0>Playback Stop</0>通知タイプを有効にしてください"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "<0>Playback</0>イベントカテゴリを有効にしてください"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "Sofaを認証するには、{source}のウェブサイトで以下のコードを入力してください。"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "現在のパスワードを入力し、新しいパスワードを選択してください。"
|
||||
@@ -828,11 +912,13 @@ msgstr "エピソード{episodeNumber}"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "エピソード{episodeNumber}、{episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "エピソードを未視聴にしました"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr "エラー"
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr "エラー ({errorCount})"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "{label}の切断に失敗しました"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "バックアップスケジュール設定の読み込みに失敗しました。"
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "サインインに失敗しました"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr "{sourceLabel}の接続開始に失敗しました"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "ジョブの起動に失敗しました"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "ライブラリの最新情報"
|
||||
msgid "Home"
|
||||
msgstr "ホーム"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "画像キャッシュ"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "画像キャッシュ"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "{source}からインポート中"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "ライブラリ内"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "ライブラリ内"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "ウォッチリスト内"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1356,10 +1456,19 @@ msgstr "ライブラリ更新"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "読み込み中…"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "すべて視聴済みにする"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "視聴済みにする"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "視聴済みにする"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "「{titleName}」のすべてのエピソードを視聴済みにしま
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "視聴済みにしました"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "{memberSince}から利用中"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "月曜日"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "映画 {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr "名前"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "現在、新規アカウントは受け付けていません。アクセ
|
||||
msgid "New backup"
|
||||
msgstr "新規バックアップ"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "次のエピソード"
|
||||
msgid "Next run"
|
||||
msgstr "次回実行"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "未設定"
|
||||
msgid "Not Found"
|
||||
msgstr "見つかりません"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "ウォッチリスト内"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "Radarrを開き、<0>設定 > インポートリスト</0>に移動す
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "Radarrを開き、設定 > インポートリストに移動する"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "Sonarrを開き、<0>設定 > インポートリスト</0>に移動す
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "Sonarrを開き、設定 > インポートリストに移動する"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "または"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "または"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "解析中..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr "パスワード"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "パスワードを更新しました"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "パスワードが一致しません"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "人物が見つかりません"
|
||||
msgid "Play trailer"
|
||||
msgstr "トレーラーを再生"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "人気のTVシリーズ"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "復元前バックアップ"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "クイックアクション"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "RadarrリストURL"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "{stars, plural, other {#つ星}}で評価しました"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "評価"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "評価"
|
||||
msgid "Rating removed"
|
||||
msgstr "評価を削除しました"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "登録を無効にしました"
|
||||
msgid "Registration Closed"
|
||||
msgstr "登録が締め切られています"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "登録を有効にしました"
|
||||
msgid "Remove"
|
||||
msgstr "削除"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "ライブラリから削除"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "ライブラリから削除"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "ライブラリから削除"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "ライブラリから削除しますか?"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "写真を削除"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "検索…"
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr "シーズン{seasonNumber}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr "サーバー"
|
||||
msgid "Server Health"
|
||||
msgstr "サーバーヘルス"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "サーバーURL"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "希望する品質プロファイルとルートフォルダを設定す
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "設定"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "折りたたむ"
|
||||
msgid "Show more"
|
||||
msgstr "もっと見る"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "サインイン"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "サインイン"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr "{providerName}でサインイン"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "サインアウト"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "サインアウト"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "視聴完了後、Sofaが自動的に映画やエピソードを記録
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "エラーが発生しました…"
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "SonarrリストURL"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "探索を開始"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr "トレーラー"
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "今日のトレンド"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "今日のトレンド"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "不明"
|
||||
msgid "unlimited"
|
||||
msgstr "無制限"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "接続不可"
|
||||
@@ -2578,6 +2800,10 @@ msgstr "{seasonLabel}のすべてを未視聴にしました"
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "S{seasonNum} E{epNum}を未視聴にしました"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "アップデート確認を有効にしました"
|
||||
msgid "Update failed"
|
||||
msgstr "更新に失敗しました"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "パスワードを変更"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "パスワードを変更"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "プロフィール画像をアップロード"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "URLをクリップボードにコピーしました"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "リリースを確認"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "視聴履歴"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "{name}で視聴"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "{seasonLabel}のすべてを視聴済みにしました"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "{seasonName}のすべてを視聴済みにしました"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "S{seasonNum} E{epNum}を視聴済みにしました"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr ""
|
||||
msgid "Wednesday"
|
||||
msgstr "水曜日"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "ライブラリは空です"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "お名前"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
+295
-41
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ko\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:53\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Korean\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -37,6 +37,11 @@ msgstr "{0, plural, other {# 이미지}}"
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, other {# 타이틀}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, other {# 타이틀}}"
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr "{backupCount, plural, other {백업 #개}} 저장됨"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
msgstr "{backupCount}개 백업 · 마지막 <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr "캐시된 이미지 {cachedImageCount}개"
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr "{count, plural, other {이전 에피소드 #편}} 미시청"
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr "{count}화{suffix}"
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -156,21 +173,29 @@ msgstr "영화 {movieCount}편, 에피소드 {episodeCount}편"
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr "평점 {ratingCount}개"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr "{unresolvedCount}개 항목에 외부 ID가 없어 제목 검색으로 처리되며, 정확도가 낮을 수 있습니다."
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total} 에피소드"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr "{episodeCount}개 에피소드 중 {watchedCount}개 시청"
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr "{episodeCount}개 에피소드 중 {watchedCount}개 시청"
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedCount}/{episodeCount, plural, other {# 에피소드}}"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedEpisodes}/{totalEpisodes, plural, other {# 에피소드}}"
|
||||
@@ -198,6 +225,10 @@ msgstr "{watchlistCount}개 항목"
|
||||
msgid "Account"
|
||||
msgstr "계정"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr "동작"
|
||||
@@ -221,15 +252,20 @@ msgstr "<0>Generic Destination</0>을 추가하고 위의 URL을 붙여넣으세
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "새 웹훅을 추가하고 위의 URL을 붙여넣으세요"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "라이브러리에 추가"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "찜 목록에 추가"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "이미 계정이 있으신가요? 로그인"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "페이지를 불러오는 중 예기치 못한 오류가 발생했습니다. 다시 시도하거나 대시보드로 돌아가세요."
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "익명 사용 통계 보고"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr "따라잡기 완료 — {count, plural, other {에피소드 #개}}를 시청 처리했습니다"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "비밀번호 변경"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "비밀번호 변경"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "서버 변경"
|
||||
msgid "Check configuration"
|
||||
msgstr "설정 확인"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "업데이트 확인"
|
||||
@@ -530,6 +569,7 @@ msgstr "닫기"
|
||||
msgid "Completed"
|
||||
msgstr "완료됨"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "인물 정보를 불러올 수 없습니다"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "계정 만들기"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "계정 만들기"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "계정을 만드세요"
|
||||
msgid "Creating…"
|
||||
msgstr "생성 중…"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "현재 비밀번호"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "현재 비밀번호를 입력해주세요"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "위험 구역"
|
||||
@@ -732,6 +784,10 @@ msgstr "연결 해제"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "{label} 연결 해제"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "서버가 없으신가요?"
|
||||
@@ -745,6 +801,10 @@ msgstr "계정이 없으신가요?"
|
||||
msgid "Done"
|
||||
msgstr "완료"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "두 번 탭하여 이 필터 지우기"
|
||||
@@ -753,6 +813,10 @@ msgstr "두 번 탭하여 이 필터 지우기"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "두 번 탭하여 {label} 필터 적용"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "백업 다운로드"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr "편집자"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr "이메일"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "\"Playback Stop\" 알림 유형 활성화"
|
||||
@@ -794,10 +869,19 @@ msgstr "<0>Playback Stop</0> 알림 유형을 활성화하세요"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "<0>Playback</0> 이벤트 카테고리를 활성화하세요"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "{source} 웹사이트에서 아래 코드를 입력하여 Sofa를 인증하세요."
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "현재 비밀번호를 입력하고 새 비밀번호를 설정하세요."
|
||||
@@ -828,11 +912,13 @@ msgstr "에피소드 {episodeNumber}"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "에피소드 {episodeNumber}, {episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "에피소드 시청 취소됨"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr "오류"
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr "오류 ({errorCount})"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "{label} 연결 해제 실패"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "백업 일정 설정을 불러오지 못했습니다."
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "로그인 실패"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr "{sourceLabel} 연결 시작 실패"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "작업 실행 실패"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "라이브러리의 현황입니다"
|
||||
msgid "Home"
|
||||
msgstr "홈"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "이미지 캐시"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "이미지 캐시"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "{source}에서 가져오는 중"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "라이브러리에 있음"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "라이브러리에 있음"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "찜 목록에 있음"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1356,10 +1456,19 @@ msgstr "라이브러리 새로고침"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "로딩 중…"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "모두 시청 완료로 표시"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "시청 완료로 표시"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "시청 완료 표시"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "\"{titleName}\"의 모든 에피소드를 시청 완료로 표시했습
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "시청 완료로 표시됨"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "{memberSince}부터 회원"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "월요일"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "영화 {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr "이름"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "현재 새 계정을 받고 있지 않습니다. 접근이 필요하시
|
||||
msgid "New backup"
|
||||
msgstr "새 백업"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "다음 에피소드"
|
||||
msgid "Next run"
|
||||
msgstr "다음 실행"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "구성되지 않음"
|
||||
msgid "Not Found"
|
||||
msgstr "찾을 수 없음"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "찜 목록에 있음"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "Radarr를 열고, <0>Settings > Import Lists</0>로 이동하세요"
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "Radarr를 열고, Settings > Import Lists로 이동하세요"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "Sonarr를 열고, <0>Settings > Import Lists</0>로 이동하세요"
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "Sonarr를 열고, Settings > Import Lists로 이동하세요"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "또는"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "또는"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "파싱 중..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr "비밀번호"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "비밀번호가 업데이트되었습니다"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "비밀번호가 일치하지 않습니다"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "인물을 찾을 수 없습니다"
|
||||
msgid "Play trailer"
|
||||
msgstr "예고편 재생"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "인기 TV 프로그램"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "복원 전 백업"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "빠른 실행"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "Radarr 목록 URL"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "별 {stars, plural, other {#개}}로 평가됨"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "평점"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "평점"
|
||||
msgid "Rating removed"
|
||||
msgstr "평점이 삭제되었습니다"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "회원가입이 비활성화되었습니다"
|
||||
msgid "Registration Closed"
|
||||
msgstr "회원가입 비활성화됨"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "회원가입이 활성화되었습니다"
|
||||
msgid "Remove"
|
||||
msgstr "제거"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "라이브러리에서 제거"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "라이브러리에서 제거"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "라이브러리에서 제거"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "라이브러리에서 제거하시겠습니까?"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "사진 제거"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "검색…"
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr "시즌 {seasonNumber}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr "서버"
|
||||
msgid "Server Health"
|
||||
msgstr "서버 상태"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "서버 URL"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "선호하는 품질 프로필과 루트 폴더를 설정하세요"
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "설정"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "간략히 보기"
|
||||
msgid "Show more"
|
||||
msgstr "더 보기"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "로그인"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "로그인"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr "{providerName}(으)로 로그인"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "로그아웃"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "로그아웃"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "시청을 완료하면 Sofa가 자동으로 영화와 에피소드를
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "오류가 발생했습니다…"
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "Sonarr 목록 URL"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "탐색 시작"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr "예고편"
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "오늘의 인기 콘텐츠"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "오늘의 인기 콘텐츠"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "알 수 없음"
|
||||
msgid "unlimited"
|
||||
msgstr "무제한"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "연결 불가"
|
||||
@@ -2578,6 +2800,10 @@ msgstr "{seasonLabel} 전체 시청 취소"
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "S{seasonNum} E{epNum} 시청 취소됨"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "자동 업데이트 확인이 활성화되었습니다"
|
||||
msgid "Update failed"
|
||||
msgstr "업데이트 실패"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "비밀번호 변경"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "비밀번호 변경"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "프로필 사진 업로드"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "URL이 클립보드에 복사되었습니다"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "릴리스 보기"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "시청 기록"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "{name}에서 시청"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "{seasonLabel} 전체 시청 완료"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "{seasonName} 전체 시청 완료"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "S{seasonNum} E{epNum} 시청 완료"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr "웹훅 URL"
|
||||
msgid "Wednesday"
|
||||
msgstr "수요일"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "라이브러리가 비어 있습니다"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "이름"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
+295
-41
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: nl\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:53\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Dutch\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -37,6 +37,11 @@ msgstr "{0, plural, one {# afbeelding} other {# afbeeldingen}}"
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, one {# titel} other {# titels}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, one {# titel} other {# titels}}"
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr "{backupCount, plural, one {# back-up} other {# back-ups}} opgeslagen"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
msgstr "{backupCount} back-ups · laatste <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr "{cachedImageCount} gecachede afbeeldingen"
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr "{count, plural, one {# eerdere aflevering} other {# eerdere afleveringen}} niet bekeken"
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr "{count} afl{suffix}"
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -156,21 +173,29 @@ msgstr "{movieCount} films, {episodeCount} afleveringen"
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr "{ratingCount} beoordelingen"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr "{unresolvedCount} items hebben geen externe ID's en worden gevonden via titelzoekopdracht, wat minder nauwkeurig kan zijn."
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total} afleveringen"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr "{watchedCount} van {episodeCount} afleveringen bekeken"
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr "{watchedCount} van {episodeCount} afleveringen bekeken"
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedCount}/{episodeCount, plural, one {# aflevering} other {# afleveringen}}"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedEpisodes}/{totalEpisodes, plural, one {# aflevering} other {# afleveringen}}"
|
||||
@@ -198,6 +225,10 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr "Acties"
|
||||
@@ -221,15 +252,20 @@ msgstr "Voeg een <0>Generic Destination</0> toe en plak de URL hierboven in"
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "Voeg een nieuwe webhook toe en plak de URL hierboven in"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "Toevoegen aan bibliotheek"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "Toevoegen aan kijklijst"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "Al een account? Aanmelden"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "Er is een onverwachte fout opgetreden bij het laden van deze pagina. Probeer het opnieuw of ga terug naar het dashboard."
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "Anonieme gebruiksrapportage"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr "Bijgewerkt — {count, plural, one {# aflevering} other {# afleveringen}} gemarkeerd als bekeken"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "Wachtwoord wijzigen"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "Wachtwoord wijzigen"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "Server wijzigen"
|
||||
msgid "Check configuration"
|
||||
msgstr "Configuratie controleren"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "Controleer op updates"
|
||||
@@ -530,6 +569,7 @@ msgstr "Sluiten"
|
||||
msgid "Completed"
|
||||
msgstr "Voltooid"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "Persoonsgegevens konden niet worden geladen"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "Account aanmaken"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "Account aanmaken"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "Maak je account aan"
|
||||
msgid "Creating…"
|
||||
msgstr "Aanmaken…"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Huidig wachtwoord"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "Huidig wachtwoord is verplicht"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "Gevarenzone"
|
||||
@@ -732,6 +784,10 @@ msgstr "Loskoppelen"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "{label} loskoppelen"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "Geen server?"
|
||||
@@ -745,6 +801,10 @@ msgstr "Nog geen account?"
|
||||
msgid "Done"
|
||||
msgstr "Klaar"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "Dubbel tikken om dit filter te wissen"
|
||||
@@ -753,6 +813,10 @@ msgstr "Dubbel tikken om dit filter te wissen"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "Dubbel tikken om te filteren op {label}"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "Back-up downloaden"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "Schakel het meldingstype \"Playback Stop\" in"
|
||||
@@ -794,10 +869,19 @@ msgstr "Schakel het meldingstype <0>Playback Stop</0> in"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "Schakel de gebeurteniscategorie <0>Playback</0> in"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "Voer de onderstaande code in op de website van {source} om Sofa te autoriseren."
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "Voer je huidige wachtwoord in en kies een nieuw wachtwoord."
|
||||
@@ -828,11 +912,13 @@ msgstr "Aflevering {episodeNumber}"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "Aflevering {episodeNumber}, {episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "Aflevering onbekeken"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr "Fout"
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr "Fouten ({errorCount})"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "{label} loskoppelen mislukt"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "Instellingen voor back-upschema konden niet worden geladen."
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "Aanmelden mislukt"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr "Verbinding met {sourceLabel} starten mislukt"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "Taak activeren mislukt"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "Dit is wat er in je bibliotheek gebeurt"
|
||||
msgid "Home"
|
||||
msgstr "Startpagina"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "Afbeeldingscache"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "Afbeeldingscache"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "Importeren vanuit {source}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "In bibliotheek"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "In bibliotheek"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "In kijklijst"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1356,10 +1456,19 @@ msgstr "Bibliotheekvernieuwing"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "Laden…"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "Alles als bekeken markeren"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "Markeren als bekeken"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "Als bekeken markeren"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "Alle afleveringen van \"{titleName}\" als bekeken gemarkeerd"
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "Gemarkeerd als bekeken"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "Lid sinds {memberSince}"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "Maandag"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "Films {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr "Naam"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "Er worden momenteel geen nieuwe accounts geaccepteerd. Neem contact op m
|
||||
msgid "New backup"
|
||||
msgstr "Nieuwe back-up"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "Volgende aflevering"
|
||||
msgid "Next run"
|
||||
msgstr "Volgende uitvoering"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "Niet geconfigureerd"
|
||||
msgid "Not Found"
|
||||
msgstr "Niet gevonden"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "Op kijklijst"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "Open Radarr, ga naar <0>Instellingen > Importlijsten</0>"
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "Open Radarr, ga naar Instellingen > Importlijsten"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "Open Sonarr, ga naar <0>Instellingen > Importlijsten</0>"
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "Open Sonarr, ga naar Instellingen > Importlijsten"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "of"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "OF"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "Verwerken..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr "Wachtwoord"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Wachtwoord bijgewerkt"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Wachtwoorden komen niet overeen"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "Persoon niet gevonden"
|
||||
msgid "Play trailer"
|
||||
msgstr "Trailer afspelen"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "Populaire tv-series"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "Back-up vóór herstel"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "Snelle acties"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "Radarr-lijst-URL"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "Beoordeeld met {stars, plural, one {# ster} other {# sterren}}"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "Beoordeling"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "Beoordeling"
|
||||
msgid "Rating removed"
|
||||
msgstr "Beoordeling verwijderd"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "Registratie gesloten"
|
||||
msgid "Registration Closed"
|
||||
msgstr "Registratie gesloten"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "Registratie geopend"
|
||||
msgid "Remove"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "Verwijderen uit bibliotheek"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "Verwijderen uit bibliotheek"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "Verwijderen uit bibliotheek"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "Verwijderen uit bibliotheek?"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "Foto verwijderen"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "Zoeken…"
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr "Seizoen {seasonNumber}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr ""
|
||||
msgid "Server Health"
|
||||
msgstr "Serverstatus"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "Server-URL"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "Stel je gewenste kwaliteitsprofiel en hoofdmap in"
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "Minder weergeven"
|
||||
msgid "Show more"
|
||||
msgstr "Meer weergeven"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "Aanmelden"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "Aanmelden"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr "Aanmelden met {providerName}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "Afmelden"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "Afmelden"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "Sofa registreert automatisch films en afleveringen wanneer je klaar bent
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "Er is iets misgegaan…"
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "Sonarr-lijst-URL"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "Beginnen met verkennen"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "Trending vandaag"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "Trending vandaag"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "onbekend"
|
||||
msgid "unlimited"
|
||||
msgstr "onbeperkt"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "Onbereikbaar"
|
||||
@@ -2578,6 +2800,10 @@ msgstr "Alles van {seasonLabel} als niet bekeken gemarkeerd"
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "Niet bekeken S{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "Updatecontroles ingeschakeld"
|
||||
msgid "Update failed"
|
||||
msgstr "Bijwerken mislukt"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "Wachtwoord bijwerken"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "Wachtwoord bijwerken"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "Profielfoto uploaden"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "URL gekopieerd naar klembord"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "Release bekijken"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "Kijkgeschiedenis"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "Bekijken op {name}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "Alles van {seasonLabel} als bekeken gemarkeerd"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "Alles van {seasonName} als bekeken gemarkeerd"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "Bekeken S{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr "Webhook-URL"
|
||||
msgid "Wednesday"
|
||||
msgstr "Woensdag"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "Je bibliotheek is leeg"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "Jouw naam"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
+294
-40
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: pt\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:53\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Portuguese\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -37,6 +37,11 @@ msgstr "{0, plural, one {# imagem} other {# imagens}}"
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, one {# título} other {# títulos}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, one {# título} other {# títulos}}"
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr ""
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr ""
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -156,21 +173,29 @@ msgstr ""
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total} episódios"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr ""
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr ""
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
@@ -198,6 +225,10 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Conta"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr "Ações"
|
||||
@@ -221,15 +252,20 @@ msgstr "Adicione um <0>Generic Destination</0> e cole a URL acima"
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "Adicione um novo webhook e cole a URL acima"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "Adicionar à Biblioteca"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "Adicionar à lista de desejos"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "Já tem uma conta? Entrar"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "Ocorreu um erro inesperado ao carregar esta página. Você pode tentar novamente ou voltar ao painel."
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "Relatório de uso anônimo"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "Alterar senha"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "Alterar Senha"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "Alterar Servidor"
|
||||
msgid "Check configuration"
|
||||
msgstr "Verificar configuração"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "Verificar atualizações"
|
||||
@@ -530,6 +569,7 @@ msgstr "Fechar"
|
||||
msgid "Completed"
|
||||
msgstr "Concluído"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "Não foi possível carregar os detalhes da pessoa"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "Criar conta"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "Criar Conta"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "Crie sua conta"
|
||||
msgid "Creating…"
|
||||
msgstr "Criando…"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Senha atual"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "A senha atual é obrigatória"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "Zona de Perigo"
|
||||
@@ -732,6 +784,10 @@ msgstr "Desconectar"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "Desconectar {label}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "Não tem um servidor?"
|
||||
@@ -745,6 +801,10 @@ msgstr "Não tem uma conta?"
|
||||
msgid "Done"
|
||||
msgstr "Concluído"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "Toque duas vezes para remover este filtro"
|
||||
@@ -753,6 +813,10 @@ msgstr "Toque duas vezes para remover este filtro"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "Toque duas vezes para filtrar por {label}"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "Baixar backup"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "Ative o tipo de notificação \"Playback Stop\""
|
||||
@@ -794,10 +869,19 @@ msgstr "Ative o tipo de notificação <0>Playback Stop</0>"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "Ative a categoria de evento <0>Playback</0>"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "Insira o código abaixo no site do {source} para autorizar o Sofa."
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "Insira sua senha atual e escolha uma nova."
|
||||
@@ -828,11 +912,13 @@ msgstr "Episódio {episodeNumber}"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "Episódio {episodeNumber}, {episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "Episódio não assistido"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr "Erro"
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "Falha ao desconectar {label}"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "Falha ao carregar as configurações do agendamento de backup."
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "Falha ao entrar"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "Falha ao acionar tarefa"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "Veja o que está acontecendo com sua biblioteca"
|
||||
msgid "Home"
|
||||
msgstr "Início"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "Cache de imagens"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "Cache de Imagens"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "Importando de {source}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "Na biblioteca"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "Na Biblioteca"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "Na lista"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1356,10 +1456,19 @@ msgstr "Atualização da biblioteca"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "Carregando…"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "Marcar Todos como Assistidos"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "Marcar como Assistido"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "Marcar como Assistido"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "Todos os episódios de \"{titleName}\" marcados como vistos"
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "Marcado como assistido"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "Membro desde {memberSince}"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "Segunda-feira"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "Filmes {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "Novas contas não estão sendo aceitas agora. Entre em contato com o adm
|
||||
msgid "New backup"
|
||||
msgstr "Novo backup"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "Próximo Episódio"
|
||||
msgid "Next run"
|
||||
msgstr "Próxima execução"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "Não configurado"
|
||||
msgid "Not Found"
|
||||
msgstr "Não Encontrado"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "Na Lista de Desejos"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "Abra o Radarr, vá para <0>Settings > Import Lists</0>"
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "Abra o Radarr, vá para Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "Abra o Sonarr, vá para <0>Settings > Import Lists</0>"
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "Abra o Sonarr, vá para Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "ou"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "OU"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "Analisando..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr "Senha"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Senha atualizada"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "As senhas não coincidem"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "Pessoa não encontrada"
|
||||
msgid "Play trailer"
|
||||
msgstr "Reproduzir trailer"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "Séries Populares"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "Backup pré-restauração"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "Ações Rápidas"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "URL da Lista do Radarr"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "Avaliado com {stars, plural, one {# estrela} other {# estrelas}}"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "Avaliação"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "Avaliação"
|
||||
msgid "Rating removed"
|
||||
msgstr "Avaliação removida"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "Registro fechado"
|
||||
msgid "Registration Closed"
|
||||
msgstr "Registro Fechado"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "Registro aberto"
|
||||
msgid "Remove"
|
||||
msgstr "Remover"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "Remover da biblioteca"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "Remover da biblioteca"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "Remover da Biblioteca"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "Remover da biblioteca?"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "Remover Foto"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "Pesquisar…"
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr "Servidor"
|
||||
msgid "Server Health"
|
||||
msgstr "Saúde do Servidor"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "URL do Servidor"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "Defina seu perfil de qualidade preferido e pasta raiz"
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "Configurações"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "Mostrar menos"
|
||||
msgid "Show more"
|
||||
msgstr "Mostrar mais"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "Entrar"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "Entrar"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "Sair"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "Sair"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "O Sofa registrará automaticamente filmes e episódios quando você term
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "Algo deu errado…"
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "URL da Lista do Sonarr"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "Começar a explorar"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "Em alta hoje"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "Em Alta Hoje"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "desconhecido"
|
||||
msgid "unlimited"
|
||||
msgstr "ilimitado"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "Inacessível"
|
||||
@@ -2578,6 +2800,10 @@ msgstr ""
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "Desmarcado T{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "Verificações de atualização ativadas"
|
||||
msgid "Update failed"
|
||||
msgstr "Atualização falhou"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "Atualizar senha"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "Atualizar Senha"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "Enviar foto de perfil"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "URL copiada para a área de transferência"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "Ver versão"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "Histórico de exibição"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "Assistir em {name}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "Todos os episódios de {seasonLabel} assistidos"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "Todos os episódios de {seasonName} assistidos"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "Assistido T{seasonNum} E{epNum}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr "URL do Webhook"
|
||||
msgid "Wednesday"
|
||||
msgstr "Quarta-feira"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "Sua biblioteca está vazia"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "Seu nome"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
+295
-41
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: zh\n"
|
||||
"Project-Id-Version: sofa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2026-03-21 16:52\n"
|
||||
"PO-Revision-Date: 2026-03-23 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Chinese Simplified\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -37,6 +37,11 @@ msgstr "{0, plural, other {# 张图片}}"
|
||||
msgid "{0, plural, one {# title} other {# titles}}"
|
||||
msgstr "{0, plural, other {# 部}}"
|
||||
|
||||
#. placeholder {0}: import { msg, plural } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; import { IconActivity, IconAlertTriangle, IconCalendarCheck, IconCheck, IconDatabase, IconPlayerPlay, IconRefresh, } from "@tabler/icons-react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { StatusDot } from "@/components/status-dot"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useTimeAgo } from "@/hooks/use-time-ago"; import { orpc } from "@/lib/orpc/client"; import type { CronJobName, SystemHealthData } from "@sofa/api/schemas"; import { i18n } from "@sofa/i18n"; const DIGITS_ONLY_RE = /^\d+$/; /** Convert a cron pattern to a short human-readable string */ function cronToHuman(pattern: string): string { const parts = pattern.split(" "); if (parts.length !== 5) return pattern; const [min, hour, _dom, _mon, dow] = parts; // Every N hours: "0 */6 * * *" if (hour.startsWith("*/")) { const n = Number.parseInt(hour.slice(2), 10); return i18n._(msg`Every ${n}h`); } // Twice daily: "0 1,13 * * *" if (hour.includes(",") && !hour.includes("/") && !hour.includes("-")) { const hours = hour.split(","); if (hours.length === 2) { const times = hours.map((h) => `${h.padStart(2, "0")}:${min.padStart(2, "0")}`).join(", "); return i18n._(msg`Daily at ${times}`); } } // Daily at specific time: "0 3 * * *" if (DIGITS_ONLY_RE.test(hour) && DIGITS_ONLY_RE.test(min) && dow === "*") { const time = `${hour.padStart(2, "0")}:${min.padStart(2, "0")}`; return i18n._(msg`Daily at ${time}`); } // Weekly — use Intl for locale-aware day name if (DIGITS_ONLY_RE.test(dow)) { const dayDate = new Date(2024, 0, 7 + Number(dow)); // 2024-01-07 is a Sunday const dayName = new Intl.DateTimeFormat(i18n.locale, { weekday: "short" }).format(dayDate); return i18n._(msg`Weekly on ${dayName}`); } return pattern; } function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`; } function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${Math.round(ms / 60000)}m`; } export function SkeletonCards() { return ( <div className="space-y-3"> {["status", "jobs", "storage"].map((s) => ( <Card key={s} className="border-s-primary/30 border-s-2"> <CardContent> <div className="flex items-start gap-3"> <Skeleton className="mt-0.5 h-8 w-8 rounded-lg" /> <div className="flex-1 space-y-2"> <Skeleton className="h-4 w-28" /> <Skeleton className="h-3 w-48" /> </div> </div> </CardContent> </Card> ))} </div> ); } /** Inline component that live-updates a relative timestamp */ function LiveTimeAgo({ date, fallback = "", }: { date: string | Date | null | undefined; fallback?: string; }) { const text = useTimeAgo(date, { fallback }); return <span suppressHydrationWarning>{text}</span>; } /** Hydrates system health state and renders the 3 cards */ export function SystemHealthCards() { const queryClient = useQueryClient(); const { data, isPending, isFetching } = useQuery(orpc.admin.systemHealth.queryOptions()); const isRefreshing = isFetching; const refresh = () => queryClient.invalidateQueries({ queryKey: orpc.admin.systemHealth.key() }); if (isPending || !data) return <SkeletonCards />; return ( <div className="space-y-3"> <SystemStatusCard checkedAt={data.checkedAt} database={data.database} tmdb={data.tmdb} environment={data.environment} isRefreshing={isRefreshing} onRefresh={refresh} /> <BackgroundJobsCard jobs={data.jobs} isRefreshing={isRefreshing} onRefresh={refresh} /> <StorageCard imageCache={data.imageCache} backups={data.backups} isRefreshing={isRefreshing} onRefresh={refresh} /> </div> ); } function RefreshButton({ isRefreshing, onRefresh, }: { isRefreshing: boolean; onRefresh: () => void; }) { const { t } = useLingui(); return ( <Tooltip> <TooltipTrigger render={ <Button variant="ghost" size="icon" aria-label={t`Refresh system health`} onClick={onRefresh} disabled={isRefreshing} className="text-muted-foreground" /> } > {isRefreshing ? <Spinner /> : <IconRefresh />} </TooltipTrigger> <TooltipContent> <Trans>Refresh</Trans> </TooltipContent> </Tooltip> ); } function SystemStatusCard({ checkedAt, database, tmdb, environment, isRefreshing, onRefresh, }: Pick<SystemHealthData, "checkedAt" | "database" | "tmdb" | "environment"> & { isRefreshing: boolean; onRefresh: () => void; }) { rLine truncated
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{0} · last <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#~ msgid "{0} {1, plural, one {backup} other {backups}} stored"
|
||||
#~ msgstr ""
|
||||
@@ -93,31 +98,43 @@ msgstr "{0, plural, other {# 部}}"
|
||||
#~ msgid "{0}/{1} episodes"
|
||||
#~ msgstr "{0}/{1} episodes"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "{backupCount, plural, one {# backup} other {# backups}} stored"
|
||||
msgstr "{backupCount, plural, other {# 个备份}}已存储"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{backupCount} backups · last <0/>"
|
||||
msgstr "{backupCount} 个备份 · 最近 <0/>"
|
||||
#~ msgid "{backupCount} backups · last <0/>"
|
||||
#~ msgstr "{backupCount} backups · last <0/>"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "{cachedImageCount} cached images"
|
||||
msgstr "{cachedImageCount} 张缓存图片"
|
||||
msgid "{cachedImageCount, plural, one {# cached image} other {# cached images}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{cachedImageCount} cached images"
|
||||
#~ msgstr "{cachedImageCount} cached images"
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "{count, plural, one {# earlier episode} other {# earlier episodes}} unwatched"
|
||||
msgstr "{count, plural, other {# 集}}更早的剧集未观看"
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count, plural, one {# ep} other {# eps}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#~ msgid "{count} earlier {count, plural, one {episode} other {episodes}} unwatched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/cast-carousel.tsx
|
||||
msgid "{count} ep{suffix}"
|
||||
msgstr "{count} 集{suffix}"
|
||||
#~ msgid "{count} ep{suffix}"
|
||||
#~ msgstr "{count} ep{suffix}"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#~ msgid "{healthyCount} of {0} jobs healthy"
|
||||
@@ -156,21 +173,29 @@ msgstr "{movieCount} 部电影,{episodeCount} 集"
|
||||
msgid "{ratingCount} ratings"
|
||||
msgstr "{ratingCount} 条评分"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr "{unresolvedCount} 个项目没有外部 ID,将通过标题搜索解析,结果可能不够准确。"
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "{watched}/{total} episodes"
|
||||
msgstr "{watched}/{total} 集"
|
||||
msgid "{watched}/{total, plural, one {# episode} other {# episodes}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#~ msgid "{watched}/{total} episodes"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount} of {0} episodes watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
msgstr "已观看 {watchedCount}/{episodeCount} 集"
|
||||
#~ msgid "{watchedCount} of {episodeCount} episodes watched"
|
||||
#~ msgstr "{watchedCount} of {episodeCount} episodes watched"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#~ msgid "{watchedCount}/{0} {1, plural, one {episode} other {episodes}}"
|
||||
@@ -180,10 +205,12 @@ msgstr "已观看 {watchedCount}/{episodeCount} 集"
|
||||
#~ msgid "{watchedCount}/{0} episodes"
|
||||
#~ msgstr "{watchedCount}/{0} episodes"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "{watchedCount}/{episodeCount, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedCount}/{episodeCount, plural, other {# 集}}"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "{watchedEpisodes}/{totalEpisodes, plural, one {# episode} other {# episodes}}"
|
||||
msgstr "{watchedEpisodes}/{totalEpisodes, plural, other {# 集}}"
|
||||
@@ -198,6 +225,10 @@ msgstr "{watchlistCount} 个项目"
|
||||
msgid "Account"
|
||||
msgstr "账户"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Account menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Actions"
|
||||
msgstr "操作"
|
||||
@@ -221,15 +252,20 @@ msgstr "添加 <0>Generic Destination</0> 并粘贴上方 URL"
|
||||
msgid "Add a new webhook and paste the URL above"
|
||||
msgstr "添加新 Webhook 并粘贴上方 URL"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Add profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Add to Library"
|
||||
msgstr "添加到媒体库"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
msgid "Add to watchlist"
|
||||
msgstr "添加到观看列表"
|
||||
#~ msgid "Add to watchlist"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
msgid "Add to Watchlist"
|
||||
@@ -288,6 +324,7 @@ msgstr "已有账户?立即登录"
|
||||
msgid "An unexpected error occurred while loading this page. You can try again or head back to the dashboard."
|
||||
msgstr "加载此页面时发生意外错误。您可以重试或返回主页。"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr "匿名使用报告"
|
||||
@@ -437,14 +474,15 @@ msgid "Caught up — marked {count, plural, one {# episode} other {# episodes}}
|
||||
msgstr "已追上 — 已标记 {count, plural, other {# 集}}为已观看"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Change password"
|
||||
msgstr "修改密码"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Change Password"
|
||||
msgstr "修改密码"
|
||||
#~ msgid "Change Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Change Photo"
|
||||
@@ -458,6 +496,7 @@ msgstr "更换服务器"
|
||||
msgid "Check configuration"
|
||||
msgstr "检查配置"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Check for updates"
|
||||
msgstr "检查更新"
|
||||
@@ -530,6 +569,7 @@ msgstr "关闭"
|
||||
msgid "Completed"
|
||||
msgstr "已完成"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Confirm new password"
|
||||
@@ -624,14 +664,16 @@ msgstr "无法加载人物详情"
|
||||
msgid "Could not load title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Create account"
|
||||
msgstr "创建账户"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Create Account"
|
||||
msgstr "创建账户"
|
||||
#~ msgid "Create Account"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "Create an account"
|
||||
@@ -645,15 +687,25 @@ msgstr "创建您的账户"
|
||||
msgid "Creating…"
|
||||
msgstr "创建中…"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password"
|
||||
msgstr "当前密码"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Current password is required"
|
||||
msgstr "请输入当前密码"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {time}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Daily at {times}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "Danger Zone"
|
||||
msgstr "危险区域"
|
||||
@@ -732,6 +784,10 @@ msgstr "断开连接"
|
||||
msgid "Disconnect {label}"
|
||||
msgstr "断开 {label} 的连接"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Don't have a server?"
|
||||
msgstr "没有服务器?"
|
||||
@@ -745,6 +801,10 @@ msgstr "没有账户?"
|
||||
msgid "Done"
|
||||
msgstr "完成"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to clear rating"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/genre-chip.tsx
|
||||
msgid "Double tap to clear this filter"
|
||||
msgstr "双击以清除此筛选条件"
|
||||
@@ -753,6 +813,10 @@ msgstr "双击以清除此筛选条件"
|
||||
msgid "Double tap to filter by {label}"
|
||||
msgstr "双击以按 {label} 筛选"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Double tap to rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Download"
|
||||
@@ -766,6 +830,10 @@ msgstr "下载备份"
|
||||
msgid "Download your library, watch history, and ratings as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Edit profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -773,11 +841,18 @@ msgid "Editor"
|
||||
msgstr "剪辑师"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Email"
|
||||
msgstr "邮箱"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Email is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
msgid "Enable the \"Playback Stop\" notification type"
|
||||
msgstr "启用“Playback Stop”通知类型"
|
||||
@@ -794,10 +869,19 @@ msgstr "启用 <0>Playback Stop</0> 通知类型"
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr "启用 <0>Playback</0> 事件类别"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Enter the code below on {source}'s website to authorize Sofa."
|
||||
msgstr "请在 {source} 的网站上输入以下代码以授权 Sofa。"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
msgid "Enter the full URL for your Sofa server"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Enter your current password and choose a new one."
|
||||
msgstr "输入您的当前密码并设置新密码。"
|
||||
@@ -828,11 +912,13 @@ msgstr "第 {episodeNumber} 集"
|
||||
msgid "Episode {episodeNumber}, {episodeLabel}"
|
||||
msgstr "第 {episodeNumber} 集,{episodeLabel}"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode unwatched"
|
||||
msgstr "单集已标为未观看"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Episode watched"
|
||||
@@ -882,6 +968,10 @@ msgstr "错误"
|
||||
msgid "Errors ({errorCount})"
|
||||
msgstr "错误 ({errorCount})"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Every {n}h"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/_layout.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
@@ -945,8 +1035,12 @@ msgid "Failed to disconnect {label}"
|
||||
msgstr "断开 {label} 连接失败"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Failed to load backup schedule settings."
|
||||
msgstr "加载备份计划设置失败。"
|
||||
msgid "Failed to load backup schedule settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
#~ msgid "Failed to load backup schedule settings."
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Failed to load title"
|
||||
@@ -1022,6 +1116,10 @@ msgstr "登录失败"
|
||||
msgid "Failed to start {sourceLabel} connection"
|
||||
msgstr "启动 {sourceLabel} 连接失败"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Failed to start SSO login"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Failed to trigger job"
|
||||
msgstr "触发任务失败"
|
||||
@@ -1156,14 +1254,15 @@ msgstr "以下是您的媒体库近况"
|
||||
msgid "Home"
|
||||
msgstr "首页"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache"
|
||||
msgstr "图片缓存"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Image Cache"
|
||||
msgstr "图片缓存"
|
||||
#~ msgid "Image Cache"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Image cache and backup disk usage"
|
||||
@@ -1243,17 +1342,18 @@ msgid "Importing from {source}"
|
||||
msgstr "正在从 {source} 导入"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "In library"
|
||||
msgstr "媒体库中"
|
||||
#~ msgid "In library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
msgid "In Library"
|
||||
msgstr "媒体库中"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "In Watchlist"
|
||||
msgstr "在待看列表中"
|
||||
#~ msgid "In Watchlist"
|
||||
#~ msgstr "In Watchlist"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/web/src/components/dashboard/library-section.tsx
|
||||
@@ -1356,10 +1456,19 @@ msgstr "媒体库刷新"
|
||||
msgid "Library statuses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/skeleton.tsx
|
||||
#: apps/web/src/components/ui/spinner.tsx
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Loading…"
|
||||
msgstr "加载中…"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Lost connection to import. Check status in settings."
|
||||
@@ -1390,22 +1499,32 @@ msgstr "全部标记为已观看"
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Mark as Watched"
|
||||
msgstr "标记为已观看"
|
||||
#~ msgid "Mark as Watched"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#~ msgid "Mark as Watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Mark episode {epNum} watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
msgid "Mark Episode Watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/title-actions.tsx
|
||||
msgid "Mark Watched"
|
||||
msgstr "标记为已观看"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Marked \"{name}\" as watched"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#~ msgid "Marked \"{titleName}\" as completed"
|
||||
#~ msgstr ""
|
||||
@@ -1429,6 +1548,7 @@ msgstr "已将\"{titleName}\"的所有剧集标记为已观看"
|
||||
#~ msgid "Marked as completed"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Marked as watched"
|
||||
@@ -1443,6 +1563,10 @@ msgstr "已标记为已观看"
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr "注册于 {memberSince}"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr "星期一"
|
||||
@@ -1490,11 +1614,20 @@ msgstr "电影 {select}"
|
||||
#~ msgid "Movies this month"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Name must be at least 2 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Name updated"
|
||||
@@ -1528,6 +1661,7 @@ msgstr "目前不接受新账户注册。如需访问权限,请联系管理员
|
||||
msgid "New backup"
|
||||
msgstr "新建备份"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "New password"
|
||||
@@ -1559,6 +1693,10 @@ msgstr "下一集"
|
||||
msgid "Next run"
|
||||
msgstr "下次运行"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Next: S{seasonNum} E{epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "No backups yet"
|
||||
@@ -1598,8 +1736,10 @@ msgstr "未配置"
|
||||
msgid "Not Found"
|
||||
msgstr "未找到"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "On Watchlist"
|
||||
msgstr "在待看列表中"
|
||||
|
||||
@@ -1639,6 +1779,7 @@ msgstr "打开 Radarr,前往 <0>Settings > Import Lists</0>"
|
||||
msgid "Open Radarr, go to Settings > Import Lists"
|
||||
msgstr "打开 Radarr,前往 Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Open registration"
|
||||
@@ -1652,13 +1793,26 @@ msgstr "打开 Sonarr,前往 <0>Settings > Import Lists</0>"
|
||||
msgid "Open Sonarr, go to Settings > Import Lists"
|
||||
msgstr "打开 Sonarr,前往 Settings > Import Lists"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Opens options to change or remove your photo"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Opens the trailer in YouTube"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/explore/hero-banner.tsx
|
||||
msgid "Opens title details"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "or"
|
||||
msgstr "或"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
msgid "OR"
|
||||
msgstr "或"
|
||||
#~ msgid "OR"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/+not-found.tsx
|
||||
msgid "Page Not Found"
|
||||
@@ -1673,16 +1827,28 @@ msgid "Parsing..."
|
||||
msgstr "解析中..."
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Password is required"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Password must be at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "密码已更新"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Passwords do not match"
|
||||
msgstr "两次密码不一致"
|
||||
@@ -1716,6 +1882,14 @@ msgstr "未找到该人物"
|
||||
msgid "Play trailer"
|
||||
msgstr "播放预告片"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
msgid "Play trailer for {titleName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Please confirm your password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-server-connection.ts
|
||||
msgid "Please sign in again."
|
||||
msgstr ""
|
||||
@@ -1734,6 +1908,11 @@ msgstr "热门电视剧"
|
||||
msgid "Pre-restore backup"
|
||||
msgstr "还原前备份"
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/web/src/components/people/person-hero.tsx
|
||||
@@ -1804,6 +1983,10 @@ msgstr "快捷操作"
|
||||
msgid "Radarr List URL"
|
||||
msgstr "Radarr 列表 URL"
|
||||
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rate {star, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#~ msgid "Rated {0} {1, plural, one {star} other {stars}}"
|
||||
#~ msgstr ""
|
||||
@@ -1827,6 +2010,7 @@ msgstr "已评 {stars, plural, other {# 星}}"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
msgid "Rating"
|
||||
msgstr "评分"
|
||||
|
||||
@@ -1836,6 +2020,10 @@ msgstr "评分"
|
||||
msgid "Rating removed"
|
||||
msgstr "评分已删除"
|
||||
|
||||
#: apps/native/src/components/ui/star-rating.tsx
|
||||
msgid "Rating: {rating} out of 5 stars"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -1920,6 +2108,10 @@ msgstr "注册已关闭"
|
||||
msgid "Registration Closed"
|
||||
msgstr "注册已关闭"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Registration failed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Registration opened"
|
||||
@@ -1931,7 +2123,10 @@ msgstr "注册已开放"
|
||||
msgid "Remove"
|
||||
msgstr "移除"
|
||||
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library"
|
||||
msgstr "从媒体库中移除"
|
||||
@@ -1939,14 +2134,18 @@ msgstr "从媒体库中移除"
|
||||
#: apps/native/src/components/dashboard/continue-watching-card.tsx
|
||||
#: apps/native/src/components/dashboard/upcoming-row.tsx
|
||||
#: apps/native/src/components/ui/poster-card.tsx
|
||||
msgid "Remove from Library"
|
||||
msgstr "从媒体库中移除"
|
||||
#~ msgid "Remove from Library"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Remove from library?"
|
||||
msgstr "从媒体库中移除?"
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Remove from recent searches"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Remove Photo"
|
||||
msgstr "删除照片"
|
||||
@@ -2133,6 +2332,10 @@ msgstr "搜索…"
|
||||
msgid "Season {seasonNumber}"
|
||||
msgstr "第 {seasonNumber} 季"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Season {sn}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Season watched"
|
||||
@@ -2164,6 +2367,7 @@ msgstr "服务器"
|
||||
msgid "Server Health"
|
||||
msgstr "服务器健康状态"
|
||||
|
||||
#: apps/native/src/app/(auth)/server-url.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Server URL"
|
||||
msgstr "服务器 URL"
|
||||
@@ -2188,6 +2392,7 @@ msgstr "设置您偏好的质量配置和根文件夹"
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/settings-shell.tsx
|
||||
msgid "Settings"
|
||||
msgstr "设置"
|
||||
@@ -2212,15 +2417,17 @@ msgstr "收起"
|
||||
msgid "Show more"
|
||||
msgstr "展开"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign in"
|
||||
msgstr "登录"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Sign In"
|
||||
msgstr "登录"
|
||||
#~ msgid "Sign In"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_auth/register.tsx
|
||||
msgid "Sign in instead"
|
||||
@@ -2245,6 +2452,10 @@ msgid "Sign in with {providerName}"
|
||||
msgstr "使用 {providerName} 登录"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
@@ -2255,9 +2466,10 @@ msgstr "退出登录"
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "Sign Out"
|
||||
msgstr "退出登录"
|
||||
#~ msgid "Sign Out"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Sign out of other sessions"
|
||||
@@ -2292,6 +2504,7 @@ msgstr "当您看完电影或剧集时,Sofa 将自动记录"
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/native/src/app/person/[id].tsx
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2311,6 +2524,10 @@ msgstr "出现错误…"
|
||||
msgid "Sonarr List URL"
|
||||
msgstr "Sonarr 列表 URL"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr "开始探索"
|
||||
@@ -2506,10 +2723,11 @@ msgid "Trailer"
|
||||
msgstr "预告片"
|
||||
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
msgid "Trending today"
|
||||
msgstr "今日热门"
|
||||
#~ msgid "Trending today"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(explore)/index.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/routes/_app/explore.tsx
|
||||
msgid "Trending Today"
|
||||
msgstr "今日热门"
|
||||
@@ -2554,6 +2772,10 @@ msgstr "未知"
|
||||
msgid "unlimited"
|
||||
msgstr "无限制"
|
||||
|
||||
#: apps/web/src/components/titles/title-seasons.tsx
|
||||
msgid "Unmark episode {epNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Unreachable"
|
||||
msgstr "无法访问"
|
||||
@@ -2578,6 +2800,10 @@ msgstr "已将 {seasonLabel} 全部标记为未看"
|
||||
msgid "Unwatched S{seasonNum} E{epNum}"
|
||||
msgstr "第 {seasonNum} 季第 {epNum} 集已取消标记"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Unwatched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/continue-watching-banner.tsx
|
||||
#: apps/web/src/components/dashboard/continue-watching-card.tsx
|
||||
msgid "Up next"
|
||||
@@ -2618,13 +2844,14 @@ msgstr "已开启自动更新检查"
|
||||
msgid "Update failed"
|
||||
msgstr "更新失败"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Update password"
|
||||
msgstr "修改密码"
|
||||
|
||||
#: apps/native/src/app/change-password.tsx
|
||||
msgid "Update Password"
|
||||
msgstr "修改密码"
|
||||
#~ msgid "Update Password"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/settings/backup-restore-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
@@ -2663,6 +2890,18 @@ msgstr "上传头像"
|
||||
msgid "URL copied to clipboard"
|
||||
msgstr "URL 已复制到剪贴板"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Use at least 8 characters"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/header-avatar.tsx
|
||||
msgid "User menu"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/update-toast.tsx
|
||||
msgid "View release"
|
||||
msgstr "查看发布说明"
|
||||
@@ -2699,20 +2938,26 @@ msgstr "观看历史"
|
||||
msgid "Watch on {name}"
|
||||
msgstr "在 {name} 观看"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched all of {seasonLabel}"
|
||||
msgstr "已将 {seasonLabel} 全部标记为已看"
|
||||
|
||||
#: apps/native/src/lib/title-actions.ts
|
||||
msgid "Watched all of {seasonName}"
|
||||
msgstr "已将 {seasonName} 全部标记为已看"
|
||||
#~ msgid "Watched all of {seasonName}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
#: apps/web/src/components/titles/use-title-actions.ts
|
||||
msgid "Watched S{seasonNum} E{epNum}"
|
||||
msgstr "第 {seasonNum} 季第 {epNum} 集已标记为已看"
|
||||
|
||||
#: apps/native/src/components/titles/season-accordion.tsx
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -2741,6 +2986,10 @@ msgstr ""
|
||||
msgid "Wednesday"
|
||||
msgstr "星期三"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Weekly on {dayName}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
#: apps/web/src/components/dashboard/welcome-header.tsx
|
||||
msgid "Welcome back"
|
||||
@@ -2789,3 +3038,8 @@ msgstr "您的媒体库为空"
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Your name"
|
||||
msgstr "您的姓名"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Your name…"
|
||||
msgstr ""
|
||||
|
||||
Reference in new issue
Block a user