diff --git a/plugins/file-manager/locales/en.json b/plugins/file-manager/locales/en.json
index 04d10bddb..dc86761ce 100644
--- a/plugins/file-manager/locales/en.json
+++ b/plugins/file-manager/locales/en.json
@@ -379,7 +379,11 @@
"dragFilesToDesktop": "Dragging {{count}} files to the desktop",
"folderDragUnsupported": "Dragging folders to the desktop is not supported yet",
"saveToDesktopFailed": "Save failed: {{error}}",
- "dragFailedDetail": "Drag failed: {{error}}"
+ "dragFailedDetail": "Drag failed: {{error}}",
+ "videoUnsupported": "Your browser cannot play this video format.",
+ "downloadToPlay": "Download to play it elsewhere",
+ "cannotPreviewType": "Cannot preview this file type",
+ "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app."
},
"sftpTransfer": {
"title": "SFTP",
diff --git a/plugins/file-manager/src/frontend/components/FileViewer.tsx b/plugins/file-manager/src/frontend/components/FileViewer.tsx
index 3bc4339cb..741a3f68e 100644
--- a/plugins/file-manager/src/frontend/components/FileViewer.tsx
+++ b/plugins/file-manager/src/frontend/components/FileViewer.tsx
@@ -790,10 +790,7 @@ export function FileViewer({
-
- Your browser does not support video playback for this
- format.
-
+
{t("fileManager.videoUnsupported")}
{onDownload && (
)}
@@ -918,11 +915,10 @@ export function FileViewer({
- Cannot preview this file type
+ {t("fileManager.cannotPreviewType")}
- This file type is not supported for preview. You can download
- it to view in an external application.
+ {t("fileManager.cannotPreviewTypeHint")}
{onDownload && (
diff --git a/plugins/homepage/src/frontend/widgets/BookmarkListWidget.tsx b/plugins/homepage/src/frontend/widgets/BookmarkListWidget.tsx
index b3d573ee8..2d8212876 100644
--- a/plugins/homepage/src/frontend/widgets/BookmarkListWidget.tsx
+++ b/plugins/homepage/src/frontend/widgets/BookmarkListWidget.tsx
@@ -1,3 +1,4 @@
+import { useTranslation } from "@termix/plugin-sdk/frontend";
import { Bookmark, ExternalLink } from "lucide-react";
import { registerWidget } from "./WidgetRegistry";
import type { BookmarkListConfig, WidgetComponentProps } from "../types.js";
@@ -8,6 +9,7 @@ function BookmarkListWidget({
widget,
isReadOnly,
}: WidgetComponentProps) {
+ const { t } = useTranslation();
const { links } = config;
return (
@@ -23,7 +25,7 @@ function BookmarkListWidget({
{links.length === 0 && (
- No bookmarks
+ {t("homepage.noBookmarks")}
)}
{links.map((link, i) =>
diff --git a/plugins/homepage/src/frontend/widgets/IframeWidget.tsx b/plugins/homepage/src/frontend/widgets/IframeWidget.tsx
index 33309bc89..9b8cd8f72 100644
--- a/plugins/homepage/src/frontend/widgets/IframeWidget.tsx
+++ b/plugins/homepage/src/frontend/widgets/IframeWidget.tsx
@@ -1,3 +1,4 @@
+import { useTranslation } from "@termix/plugin-sdk/frontend";
import { Globe } from "lucide-react";
import { registerWidget } from "./WidgetRegistry";
import type { IframeConfig, WidgetComponentProps } from "../types.js";
@@ -9,13 +10,14 @@ function IframeWidget({
config,
isReadOnly,
}: WidgetComponentProps) {
+ const { t } = useTranslation();
const { url, scrolling } = config;
if (!url) {
return (
- Configure a URL in widget settings
+ {t("homepage.configureUrl")}
);
}
@@ -29,7 +31,7 @@ function IframeWidget({
sandbox="allow-scripts allow-same-origin allow-forms allow-popups"
scrolling={scrolling ? "yes" : "no"}
className="w-full h-full border-0"
- title="Embedded content"
+ title={t("homepage.embeddedContent")}
/>
{/* Block interaction in read-only mode so the canvas can still pan */}
{isReadOnly && }
diff --git a/plugins/homepage/src/frontend/widgets/LinkTreeWidget.tsx b/plugins/homepage/src/frontend/widgets/LinkTreeWidget.tsx
index 050bafc13..e53a33be1 100644
--- a/plugins/homepage/src/frontend/widgets/LinkTreeWidget.tsx
+++ b/plugins/homepage/src/frontend/widgets/LinkTreeWidget.tsx
@@ -1,3 +1,4 @@
+import { useTranslation } from "@termix/plugin-sdk/frontend";
import { useRef } from "react";
import { List, ExternalLink } from "lucide-react";
import { registerWidget } from "./WidgetRegistry";
@@ -72,12 +73,13 @@ function LinkTreeWidget({
config,
isReadOnly,
}: WidgetComponentProps) {
+ const { t } = useTranslation();
const { sections, compact } = config;
if (sections.length === 0) {
return (
- No sections configured
+ {t("homepage.noSections")}
);
}
diff --git a/plugins/homepage/src/frontend/widgets/ServiceGridWidget.tsx b/plugins/homepage/src/frontend/widgets/ServiceGridWidget.tsx
index bf02cad90..af3e2f512 100644
--- a/plugins/homepage/src/frontend/widgets/ServiceGridWidget.tsx
+++ b/plugins/homepage/src/frontend/widgets/ServiceGridWidget.tsx
@@ -1,3 +1,4 @@
+import { useTranslation } from "@termix/plugin-sdk/frontend";
import { useRef, useState, useEffect } from "react";
import { Grid3x3, ExternalLink } from "lucide-react";
import { registerWidget } from "./WidgetRegistry";
@@ -107,12 +108,13 @@ function ServiceGridWidget({
config,
isReadOnly,
}: WidgetComponentProps) {
+ const { t } = useTranslation();
const { services, columns, showLabels, iconSize } = config;
if (services.length === 0) {
return (
- No services configured
+ {t("homepage.noServices")}