From e71d826d13182ff17963973669e8931294963012 Mon Sep 17 00:00:00 2001 From: Satya Patel Date: Sun, 30 Aug 2026 14:03:22 -0700 Subject: [PATCH 1/2] feat(mobile): page viewer and ContentImage (SUPER-2079) A published page opens at /(authenticated)/page/ in a WebView loading viewUrl top-level, so the page's origin is first-party: its storage, CSP, and video playback work exactly as on the web, cached by WebKit, with the ticket riding the URL's path (no headers, no cookies). Navigation stays on the page's origin; anything else opens in the browser. The URL is held for the ticket's window so reopening reuses WebKit's cache. ContentImage wraps expo-image with cacheKey = storage key, so a rotated ticket URL is never a fresh download; the image disk cache gets a 512 MB bound at boot, and sign-out clears it. Error copy reuses the desktop viewer's translated messages, so no new catalog strings. Discovery UX (where pages appear on mobile) is deliberately not here. --- apps/mobile/app/(authenticated)/_layout.tsx | 4 + apps/mobile/app/(authenticated)/page/[id].tsx | 3 + apps/mobile/hooks/useSignOut/useSignOut.ts | 2 + .../components/ContentImage/ContentImage.tsx | 34 ++++++++ .../components/ContentImage/index.ts | 1 + .../OrganizationAvatar/OrganizationAvatar.tsx | 7 +- .../page/[id]/PageViewerScreen.tsx | 81 +++++++++++++++++++ .../(authenticated)/page/[id]/index.ts | 1 + apps/mobile/screens/RootLayout/RootLayout.tsx | 6 ++ 9 files changed, 134 insertions(+), 5 deletions(-) create mode 100644 apps/mobile/app/(authenticated)/page/[id].tsx create mode 100644 apps/mobile/screens/(authenticated)/components/ContentImage/ContentImage.tsx create mode 100644 apps/mobile/screens/(authenticated)/components/ContentImage/index.ts create mode 100644 apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx create mode 100644 apps/mobile/screens/(authenticated)/page/[id]/index.ts diff --git a/apps/mobile/app/(authenticated)/_layout.tsx b/apps/mobile/app/(authenticated)/_layout.tsx index 34b15a67067..7beee0e9ce3 100644 --- a/apps/mobile/app/(authenticated)/_layout.tsx +++ b/apps/mobile/app/(authenticated)/_layout.tsx @@ -104,6 +104,10 @@ export default function AuthenticatedLayout() { name="workspace/[id]/file" options={{ ...glassHeaderOptions, title: "" }} /> + {}); router.replace("/(auth)/sign-in"); } catch (error) { console.error("[auth/signOut] Failed to sign out:", error); diff --git a/apps/mobile/screens/(authenticated)/components/ContentImage/ContentImage.tsx b/apps/mobile/screens/(authenticated)/components/ContentImage/ContentImage.tsx new file mode 100644 index 00000000000..e8e05540417 --- /dev/null +++ b/apps/mobile/screens/(authenticated)/components/ContentImage/ContentImage.tsx @@ -0,0 +1,34 @@ +import { Image as ExpoImage, type ImageProps } from "expo-image"; +import { withUniwind } from "uniwind"; + +const StyledImage = withUniwind(ExpoImage); + +interface ContentImageProps extends Omit { + url: string | null | undefined; + /** + * The server's storage key for the bytes, when it names one + * (`Superset-Storage-Key`, `storageKey` in API responses). It becomes the + * disk-cache key, so a rotated ticket in the URL is never a fresh + * download. + */ + storageKey?: string | null; + className?: string; +} + +/** Every remote image the app renders goes through here, cached by identity, not URL. */ +export function ContentImage({ + url, + storageKey, + className, + ...props +}: ContentImageProps) { + if (!url) return null; + return ( + + ); +} diff --git a/apps/mobile/screens/(authenticated)/components/ContentImage/index.ts b/apps/mobile/screens/(authenticated)/components/ContentImage/index.ts new file mode 100644 index 00000000000..88f97214a52 --- /dev/null +++ b/apps/mobile/screens/(authenticated)/components/ContentImage/index.ts @@ -0,0 +1 @@ +export { ContentImage } from "./ContentImage"; diff --git a/apps/mobile/screens/(authenticated)/components/OrganizationAvatar/OrganizationAvatar.tsx b/apps/mobile/screens/(authenticated)/components/OrganizationAvatar/OrganizationAvatar.tsx index da8313e052f..1faceae600f 100644 --- a/apps/mobile/screens/(authenticated)/components/OrganizationAvatar/OrganizationAvatar.tsx +++ b/apps/mobile/screens/(authenticated)/components/OrganizationAvatar/OrganizationAvatar.tsx @@ -1,7 +1,7 @@ -import { Image } from "expo-image"; import { View } from "react-native"; import { Text } from "@/components/ui/text"; import { useTheme } from "@/hooks/useTheme"; +import { ContentImage } from "../ContentImage"; export function OrganizationAvatar({ name, @@ -20,10 +20,7 @@ export function OrganizationAvatar({ className="overflow-hidden rounded-md border border-foreground/10 bg-muted" style={{ width: size, height: size }} > - + ); } diff --git a/apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx b/apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx new file mode 100644 index 00000000000..c43ff5b1296 --- /dev/null +++ b/apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx @@ -0,0 +1,81 @@ +import { useLingui } from "@lingui/react/macro"; +import { useQuery } from "@tanstack/react-query"; +import { Stack, useLocalSearchParams } from "expo-router"; +import { ActivityIndicator, Linking, View } from "react-native"; +import { WebView } from "react-native-webview"; +import { withUniwind } from "uniwind"; +import { Text } from "@/components/ui/text"; +import { apiClient } from "@/lib/trpc/client"; + +const StyledWebView = withUniwind(WebView); + +// A ticket is stable within its window (an hour for the served alias), so +// reopening the page inside it reuses the URL — and WebKit's cache — instead +// of minting a fresh one. +const VIEW_URL_STALE_MS = 55 * 60 * 1000; + +/** + * A published page, loaded top-level from its own origin: its storage, CSP + * and video playback work exactly as on the web, cached by WebKit. The + * ticket rides the URL's path, so the WebView needs no headers and no + * cookies. Navigation stays on the page's origin; anything else opens in + * the browser. + */ +export function PageViewerScreen() { + const { t } = useLingui(); + const { id } = useLocalSearchParams<{ id: string }>(); + + const page = useQuery({ + queryKey: ["cloud", "page", "get", id], + enabled: !!id, + staleTime: VIEW_URL_STALE_MS, + networkMode: "always", + queryFn: () => apiClient.page.get.query({ id: id as string }), + }); + + const viewUrl = page.data?.viewUrl; + const pageOrigin = viewUrl ? new URL(viewUrl).origin : null; + + return ( + + + {page.isError ? ( + + + {t({ + id: "dashboard.pageViewer.pageOpenFailedTitle", + message: "This page could not be opened", + })} + + + {t({ + id: "dashboard.pageViewer.pageMissingDescription", + message: + "It may have been deleted, or it belongs to another organization.", + })} + + + ) : viewUrl ? ( + { + if (pageOrigin && request.url.startsWith(pageOrigin)) return true; + if (request.url.startsWith("about:")) return true; + void Linking.openURL(request.url).catch(() => {}); + return false; + }} + webviewDebuggingEnabled={__DEV__} + /> + ) : ( + + + + )} + + ); +} diff --git a/apps/mobile/screens/(authenticated)/page/[id]/index.ts b/apps/mobile/screens/(authenticated)/page/[id]/index.ts new file mode 100644 index 00000000000..947ebfc8d35 --- /dev/null +++ b/apps/mobile/screens/(authenticated)/page/[id]/index.ts @@ -0,0 +1 @@ +export { PageViewerScreen } from "./PageViewerScreen"; diff --git a/apps/mobile/screens/RootLayout/RootLayout.tsx b/apps/mobile/screens/RootLayout/RootLayout.tsx index c4f0228769c..3c219e4ab38 100644 --- a/apps/mobile/screens/RootLayout/RootLayout.tsx +++ b/apps/mobile/screens/RootLayout/RootLayout.tsx @@ -6,6 +6,7 @@ import { QueryClient, QueryClientProvider, } from "@tanstack/react-query"; +import { Image } from "expo-image"; import { getLocales } from "expo-localization"; import { Stack } from "expo-router"; import { ThemeProvider } from "expo-router/react-navigation"; @@ -17,6 +18,11 @@ import { NAV_THEME } from "@/lib/theme"; Uniwind.setTheme("dark"); +// Bound the image disk cache (default is unlimited) so page thumbnails and +// attachments cannot grow without limit; ContentImage keys entries by +// storage key, so rotated ticket URLs never duplicate bytes. +void Image.configureCache({ maxDiskSize: 512 * 1024 * 1024 }); + import { PostHogUserIdentifier } from "./components/PostHogUserIdentifier"; import { PostHogProvider } from "./providers/PostHogProvider"; From 57b6677f6542339892287ab08aa25fd90be0f88b Mon Sep 17 00:00:00 2001 From: Satya Patel Date: Sun, 30 Aug 2026 14:07:50 -0700 Subject: [PATCH 2/2] chore(i18n): record the mobile viewer's references in the catalogs Linux extraction on CI adds PageViewerScreen.tsx as a second reference on the two reused dashboard.pageViewer ids; regenerate so the committed catalogs match what the check produces. --- packages/i18n/locales/cs/messages.po | 2 ++ packages/i18n/locales/de/messages.po | 2 ++ packages/i18n/locales/en/messages.po | 2 ++ packages/i18n/locales/es/messages.po | 2 ++ packages/i18n/locales/fr/messages.po | 2 ++ packages/i18n/locales/id/messages.po | 2 ++ packages/i18n/locales/it/messages.po | 2 ++ packages/i18n/locales/ja/messages.po | 2 ++ packages/i18n/locales/ko/messages.po | 2 ++ packages/i18n/locales/nl/messages.po | 2 ++ packages/i18n/locales/pl/messages.po | 2 ++ packages/i18n/locales/pt-BR/messages.po | 2 ++ packages/i18n/locales/ru/messages.po | 2 ++ packages/i18n/locales/tr/messages.po | 2 ++ packages/i18n/locales/vi/messages.po | 2 ++ packages/i18n/locales/zh-CN/messages.po | 2 ++ packages/i18n/locales/zh-TW/messages.po | 2 ++ 17 files changed, 34 insertions(+) diff --git a/packages/i18n/locales/cs/messages.po b/packages/i18n/locales/cs/messages.po index 350481004a9..bae46fcfba8 100644 --- a/packages/i18n/locales/cs/messages.po +++ b/packages/i18n/locales/cs/messages.po @@ -6146,6 +6146,7 @@ msgstr "Stránky" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Mohla být smazána nebo patří jiné organizaci." @@ -6156,6 +6157,7 @@ msgstr "Tato stránka už neexistuje" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Tuto stránku se nepodařilo otevřít" diff --git a/packages/i18n/locales/de/messages.po b/packages/i18n/locales/de/messages.po index 44618611a06..fe5a9ee81da 100644 --- a/packages/i18n/locales/de/messages.po +++ b/packages/i18n/locales/de/messages.po @@ -6146,6 +6146,7 @@ msgstr "Seiten" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Sie wurde möglicherweise gelöscht oder gehört zu einer anderen Organisation." @@ -6156,6 +6157,7 @@ msgstr "Diese Seite existiert nicht mehr" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Diese Seite konnte nicht geöffnet werden" diff --git a/packages/i18n/locales/en/messages.po b/packages/i18n/locales/en/messages.po index 18e4a8cdedc..7242c94e258 100644 --- a/packages/i18n/locales/en/messages.po +++ b/packages/i18n/locales/en/messages.po @@ -6146,6 +6146,7 @@ msgstr "Pages" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "It may have been deleted, or it belongs to another organization." @@ -6156,6 +6157,7 @@ msgstr "This page no longer exists" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "This page could not be opened" diff --git a/packages/i18n/locales/es/messages.po b/packages/i18n/locales/es/messages.po index cb2289b59f8..67ebb0dc018 100644 --- a/packages/i18n/locales/es/messages.po +++ b/packages/i18n/locales/es/messages.po @@ -6146,6 +6146,7 @@ msgstr "Páginas" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Puede que se haya eliminado o que pertenezca a otra organización." @@ -6156,6 +6157,7 @@ msgstr "Esta página ya no existe" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "No se pudo abrir esta página" diff --git a/packages/i18n/locales/fr/messages.po b/packages/i18n/locales/fr/messages.po index ea8914ddf8b..9b93cd7b348 100644 --- a/packages/i18n/locales/fr/messages.po +++ b/packages/i18n/locales/fr/messages.po @@ -6146,6 +6146,7 @@ msgstr "Pages" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Elle a peut-être été supprimée, ou elle appartient à une autre organisation." @@ -6156,6 +6157,7 @@ msgstr "Cette page n'existe plus" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Impossible d'ouvrir cette page" diff --git a/packages/i18n/locales/id/messages.po b/packages/i18n/locales/id/messages.po index 6858492218a..8fff60ac564 100644 --- a/packages/i18n/locales/id/messages.po +++ b/packages/i18n/locales/id/messages.po @@ -6146,6 +6146,7 @@ msgstr "Halaman" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Mungkin sudah dihapus, atau milik organisasi lain." @@ -6156,6 +6157,7 @@ msgstr "Halaman ini sudah tidak ada" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Halaman ini tidak bisa dibuka" diff --git a/packages/i18n/locales/it/messages.po b/packages/i18n/locales/it/messages.po index 462c5734ace..e1717915f35 100644 --- a/packages/i18n/locales/it/messages.po +++ b/packages/i18n/locales/it/messages.po @@ -6146,6 +6146,7 @@ msgstr "Pagine" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Potrebbe essere stata eliminata oppure appartiene a un'altra organizzazione." @@ -6156,6 +6157,7 @@ msgstr "Questa pagina non esiste più" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Impossibile aprire questa pagina" diff --git a/packages/i18n/locales/ja/messages.po b/packages/i18n/locales/ja/messages.po index 14c31ba5024..9246cff819c 100644 --- a/packages/i18n/locales/ja/messages.po +++ b/packages/i18n/locales/ja/messages.po @@ -6146,6 +6146,7 @@ msgstr "ページ" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "削除されたか、別の組織に属している可能性があります。" @@ -6156,6 +6157,7 @@ msgstr "このページは存在しません" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "このページを開けませんでした" diff --git a/packages/i18n/locales/ko/messages.po b/packages/i18n/locales/ko/messages.po index 0c6714a674d..9945fa726d1 100644 --- a/packages/i18n/locales/ko/messages.po +++ b/packages/i18n/locales/ko/messages.po @@ -6146,6 +6146,7 @@ msgstr "페이지" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "삭제되었거나 다른 조직에 속한 페이지일 수 있습니다." @@ -6156,6 +6157,7 @@ msgstr "이 페이지는 더 이상 존재하지 않습니다" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "이 페이지를 열 수 없습니다" diff --git a/packages/i18n/locales/nl/messages.po b/packages/i18n/locales/nl/messages.po index 96ec6d80fbe..a374c8608a4 100644 --- a/packages/i18n/locales/nl/messages.po +++ b/packages/i18n/locales/nl/messages.po @@ -6146,6 +6146,7 @@ msgstr "Pagina's" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Mogelijk is die verwijderd, of hoort die bij een andere organisatie." @@ -6156,6 +6157,7 @@ msgstr "Deze pagina bestaat niet meer" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Deze pagina kon niet worden geopend" diff --git a/packages/i18n/locales/pl/messages.po b/packages/i18n/locales/pl/messages.po index 1728fa7f0ac..402997be6c7 100644 --- a/packages/i18n/locales/pl/messages.po +++ b/packages/i18n/locales/pl/messages.po @@ -6146,6 +6146,7 @@ msgstr "Strony" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Mogła zostać usunięta lub należy do innej organizacji." @@ -6156,6 +6157,7 @@ msgstr "Ta strona już nie istnieje" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Nie udało się otworzyć tej strony" diff --git a/packages/i18n/locales/pt-BR/messages.po b/packages/i18n/locales/pt-BR/messages.po index 6f80607c594..98c9a81fac2 100644 --- a/packages/i18n/locales/pt-BR/messages.po +++ b/packages/i18n/locales/pt-BR/messages.po @@ -6146,6 +6146,7 @@ msgstr "Páginas" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Ela pode ter sido excluída ou pertence a outra organização." @@ -6156,6 +6157,7 @@ msgstr "Esta página não existe mais" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Não foi possível abrir esta página" diff --git a/packages/i18n/locales/ru/messages.po b/packages/i18n/locales/ru/messages.po index 356ec0dcaaa..97162df2834 100644 --- a/packages/i18n/locales/ru/messages.po +++ b/packages/i18n/locales/ru/messages.po @@ -6146,6 +6146,7 @@ msgstr "Страницы" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Возможно, она удалена или принадлежит другой организации." @@ -6156,6 +6157,7 @@ msgstr "Этой страницы больше нет" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Не удалось открыть эту страницу" diff --git a/packages/i18n/locales/tr/messages.po b/packages/i18n/locales/tr/messages.po index 00f362ea7cb..a9bbc3fba50 100644 --- a/packages/i18n/locales/tr/messages.po +++ b/packages/i18n/locales/tr/messages.po @@ -6146,6 +6146,7 @@ msgstr "Sayfalar" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Silinmiş olabilir veya başka bir kuruluşa ait olabilir." @@ -6156,6 +6157,7 @@ msgstr "Bu sayfa artık mevcut değil" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Bu sayfa açılamadı" diff --git a/packages/i18n/locales/vi/messages.po b/packages/i18n/locales/vi/messages.po index f7721d8d21f..bb87d6983a3 100644 --- a/packages/i18n/locales/vi/messages.po +++ b/packages/i18n/locales/vi/messages.po @@ -6146,6 +6146,7 @@ msgstr "Trang" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "Có thể nó đã bị xóa, hoặc thuộc về một tổ chức khác." @@ -6156,6 +6157,7 @@ msgstr "Trang này không còn tồn tại" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "Không thể mở trang này" diff --git a/packages/i18n/locales/zh-CN/messages.po b/packages/i18n/locales/zh-CN/messages.po index d464acffb28..d11a767ebf3 100644 --- a/packages/i18n/locales/zh-CN/messages.po +++ b/packages/i18n/locales/zh-CN/messages.po @@ -6146,6 +6146,7 @@ msgstr "页面" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "它可能已被删除,或属于另一个组织。" @@ -6156,6 +6157,7 @@ msgstr "这个页面已不存在" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "无法打开这个页面" diff --git a/packages/i18n/locales/zh-TW/messages.po b/packages/i18n/locales/zh-TW/messages.po index 6a0ee87691b..aec5cf3ca63 100644 --- a/packages/i18n/locales/zh-TW/messages.po +++ b/packages/i18n/locales/zh-TW/messages.po @@ -6146,6 +6146,7 @@ msgstr "頁面" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageMissingDescription" msgstr "它可能已被刪除,或屬於另一個組織。" @@ -6156,6 +6157,7 @@ msgstr "這個頁面已不存在" #. js-lingui-explicit-id #: ../../apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/PageViewer/PageViewer.tsx +#: ../../apps/mobile/screens/(authenticated)/page/[id]/PageViewerScreen.tsx msgid "dashboard.pageViewer.pageOpenFailedTitle" msgstr "無法開啟這個頁面"