fix(native): recover from render errors and let Close leave deep-linked titles

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
jakeandClaude Sonnet 5.5 committed 2026-10-05 13:40:39 -04:00
1 parent 9d0bede536
commit 851a188f00
15 files changed
+201 -6

No files matched your search

+15 -3
View File
@@ -12,7 +12,7 @@ import { ThemeProvider } from "expo-router/react-navigation";
import * as SplashScreen from "expo-splash-screen";
import { StatusBar } from "expo-status-bar";
import * as Updates from "expo-updates";
import { PostHogErrorBoundary, PostHogProvider } from "posthog-react-native";
import { PostHogProvider } from "posthog-react-native";
import { useEffect, useRef, useState, useSyncExternalStore } from "react";
import { GestureHandlerRootView } from "react-native-gesture-handler";
import { KeyboardProvider } from "react-native-keyboard-controller";
@@ -20,6 +20,7 @@ import { SafeAreaProvider } from "react-native-safe-area-context";
import { enableFreeze } from "react-native-screens";
import { Uniwind, useResolveClassNames } from "uniwind";
import { RootErrorFallback } from "@/components/root-error-fallback";
import { OfflineBanner } from "@/components/ui/offline-banner";
import { ServerUnreachableBanner } from "@/components/ui/server-unreachable-banner";
import { useFollowDeviceLocale } from "@/hooks/use-follow-device-locale";
@@ -221,11 +222,22 @@ function RootLayout() {
</I18nProvider>
);
if (!posthog) return inner;
const guarded = (
<Sentry.ErrorBoundary
fallback={({ resetError }) => <RootErrorFallback resetError={resetError} />}
onError={(error) => {
posthog?.captureException(error, { source: "error-boundary" });
}}
>
{inner}
</Sentry.ErrorBoundary>
);
if (!posthog) return guarded;
return (
<PostHogProvider client={posthog} autocapture={{ captureScreens: false }}>
<PostHogErrorBoundary>{inner}</PostHogErrorBoundary>
{guarded}
</PostHogProvider>
);
}
@@ -12,7 +12,14 @@ import { useSafeAreaInsets } from "react-native-safe-area-context";
* - Android: floating close button with safe-area offset
*/
export function ModalLayout({ children }: { children: ReactNode }) {
const { dismissAll } = useRouter();
const router = useRouter();
const close = () => {
if (router.canDismiss()) {
router.dismissAll();
} else {
router.replace("/");
}
};
const { t } = useLingui();
const insets = useSafeAreaInsets();
@@ -21,7 +28,7 @@ export function ModalLayout({ children }: { children: ReactNode }) {
<Stack.Header hidden={process.env.EXPO_OS !== "ios"} transparent blurEffect="none" />
{process.env.EXPO_OS === "ios" && (
<Stack.Toolbar placement="right">
<Stack.Toolbar.Button onPress={() => dismissAll()}>
<Stack.Toolbar.Button onPress={close}>
<Stack.Toolbar.Icon sf="xmark" />
<Stack.Toolbar.Label>{t`Close`}</Stack.Toolbar.Label>
</Stack.Toolbar.Button>
@@ -33,7 +40,7 @@ export function ModalLayout({ children }: { children: ReactNode }) {
{process.env.EXPO_OS !== "ios" && (
<Pressable
onPress={() => dismissAll()}
onPress={close}
accessibilityRole="button"
accessibilityLabel={t`Close`}
hitSlop={8}
@@ -0,0 +1,56 @@
import { msg } from "@lingui/core/macro";
import { reloadAppAsync } from "expo";
import * as SplashScreen from "expo-splash-screen";
import { useEffect } from "react";
import { Pressable, StyleSheet, Text, View } from "react-native";
import { i18n } from "@sofa/i18n";
/**
* Rendered by the app-wide error boundary, outside every provider — so it uses
* only react-native primitives and literal colors.
*/
export function RootErrorFallback({ resetError }: { resetError: () => void }) {
useEffect(() => {
void SplashScreen.hideAsync();
}, []);
return (
<View style={styles.container}>
<Text style={styles.title}>{i18n._(msg`Something went wrong`)}</Text>
<Text style={styles.body}>{i18n._(msg`Sofa hit an unexpected error.`)}</Text>
<Pressable accessibilityRole="button" onPress={resetError} style={styles.button}>
<Text style={styles.buttonLabel}>{i18n._(msg`Try again`)}</Text>
</Pressable>
<Pressable
accessibilityRole="button"
onPress={() => void reloadAppAsync()}
style={styles.button}
>
<Text style={styles.buttonLabel}>{i18n._(msg`Restart app`)}</Text>
</Pressable>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: "center",
justifyContent: "center",
gap: 12,
padding: 24,
backgroundColor: "#101010",
},
title: { color: "#ffffff", fontSize: 20, fontWeight: "600", textAlign: "center" },
body: { color: "#a1a1a1", fontSize: 15, textAlign: "center", marginBottom: 12 },
button: {
minWidth: 180,
alignItems: "center",
paddingVertical: 12,
paddingHorizontal: 20,
borderRadius: 10,
backgroundColor: "#fba952",
},
buttonLabel: { color: "#1a1208", fontSize: 16, fontWeight: "600" },
});
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "يتطلب Emby Server 4.7.9+ وترخيصاً نشطاً لـ Emby Prem
#~ msgid "Restart"
#~ msgstr "إعادة التشغيل"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "إعادة التشغيل مطلوبة"
@@ -3041,6 +3045,10 @@ msgstr "تخطي في الوقت الحالي"
msgid "Skipped"
msgstr "تم التخطي"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "يحتاج Sofa إلى إعادة التشغيل لتطبيق اتجاه التخطيط الجديد."
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "حاول تعديل الفلاتر"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "Erfordert Emby Server 4.7.9+ und eine aktive Emby Premiere-Lizenz."
#~ msgid "Restart"
#~ msgstr "Neu starten"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "Neustart erforderlich"
@@ -3041,6 +3045,10 @@ msgstr "Vorerst überspringen"
msgid "Skipped"
msgstr "Übersprungen"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "Sofa muss neu gestartet werden, um die neue Layoutrichtung anzuwenden."
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "Passe deine Filter an"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr ""
#~ msgid "Restart"
#~ msgstr "Restart"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr "Restart app"
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "Restart Required"
@@ -3041,6 +3045,10 @@ msgstr "Skip for now"
msgid "Skipped"
msgstr ""
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr "Sofa hit an unexpected error."
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "Sofa needs to restart to apply the new layout direction."
@@ -3069,6 +3077,7 @@ msgstr ""
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "Try adjusting your filters"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "Requiere Emby Server 4.7.9+ y una licencia activa de Emby Premiere."
#~ msgid "Restart"
#~ msgstr "Reiniciar"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "Reinicio requerido"
@@ -3041,6 +3045,10 @@ msgstr "Omitir por ahora"
msgid "Skipped"
msgstr "Omitido"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "Sofa necesita reiniciarse para aplicar la nueva dirección del diseño."
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "Prueba a ajustar tus filtros"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "Nécessite Emby Server 4.7.9+ et une licence Emby Premiere active."
#~ msgid "Restart"
#~ msgstr "Redémarrer"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "Redémarrage requis"
@@ -3041,6 +3045,10 @@ msgstr "Passer pour l'instant"
msgid "Skipped"
msgstr "Ignoré"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "Sofa doit redémarrer pour appliquer la nouvelle direction de mise en page."
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "Essayez d'ajuster vos filtres"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "דורש Emby Server 4.7.9+ ורישיון Emby Premiere פעיל."
#~ msgid "Restart"
#~ msgstr "הפעל מחדש"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "נדרשת הפעלה מחדש"
@@ -3041,6 +3045,10 @@ msgstr "דלג לעת עתה"
msgid "Skipped"
msgstr "דולג"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "יש להפעיל מחדש את Sofa כדי להחיל את כיוון הפריסה החדש."
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "נסה לשנות את המסננים"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "Richiede Emby Server 4.7.9+ e una licenza Emby Premiere attiva."
#~ msgid "Restart"
#~ msgstr "Riavvia"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "Riavvio necessario"
@@ -3041,6 +3045,10 @@ msgstr "Salta per ora"
msgid "Skipped"
msgstr "Ignorati"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "Sofa deve essere riavviato per applicare la nuova direzione del layout."
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "Prova a modificare i filtri"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "Emby Server 4.7.9+と有効なEmby Premiereライセンスが必要で
#~ msgid "Restart"
#~ msgstr "再起動"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "再起動が必要です"
@@ -3041,6 +3045,10 @@ msgstr "今はスキップ"
msgid "Skipped"
msgstr "スキップ済み"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "Sofaは新しいレイアウト方向を適用するために再起動が必要です。"
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "フィルターを調整してみてください"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "Emby Server 4.7.9+ 및 활성 Emby Premiere 라이선스가 필요합니
#~ msgid "Restart"
#~ msgstr "재시작"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "재시작 필요"
@@ -3041,6 +3045,10 @@ msgstr "지금은 건너뛰기"
msgid "Skipped"
msgstr "건너뜀"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "Sofa를 재시작해야 새 레이아웃 방향이 적용됩니다."
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "필터를 조정해 보세요"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "Vereist Emby Server 4.7.9+ en een actieve Emby Premiere-licentie."
#~ msgid "Restart"
#~ msgstr "Herstarten"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "Herstart vereist"
@@ -3041,6 +3045,10 @@ msgstr "Nu overslaan"
msgid "Skipped"
msgstr "Overgeslagen"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "Sofa moet herstarten om de nieuwe lay-outrichting toe te passen."
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "Probeer je filters aan te passen"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "Requer Emby Server 4.7.9+ e uma licença ativa do Emby Premiere."
#~ msgid "Restart"
#~ msgstr "Reiniciar"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "Reinício Necessário"
@@ -3041,6 +3045,10 @@ msgstr "Ignorar por agora"
msgid "Skipped"
msgstr "Ignorado"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "O Sofa precisa de reiniciar para aplicar a nova direção do layout."
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "Tente ajustar os seus filtros"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"
+10
View File
@@ -2714,6 +2714,10 @@ msgstr "需要 Emby Server 4.7.9+ 以及有效的 Emby Premiere 授权。"
#~ msgid "Restart"
#~ msgstr "重启"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Restart app"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Restart Required"
#~ msgstr "需要重启"
@@ -3041,6 +3045,10 @@ msgstr "暂时跳过"
msgid "Skipped"
msgstr "已跳过"
#: apps/native/src/components/root-error-fallback.tsx
msgid "Sofa hit an unexpected error."
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#~ msgid "Sofa needs to restart to apply the new layout direction."
#~ msgstr "Sofa 需要重启以应用新的布局方向。"
@@ -3069,6 +3077,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/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/auth-form.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/components/settings/account-section.tsx
@@ -3406,6 +3415,7 @@ msgid "Try adjusting your filters"
msgstr "请尝试调整筛选条件"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/root-error-fallback.tsx
#: apps/web/src/components/route-error.tsx
#: apps/web/src/routes/__root.tsx
msgid "Try again"