fix: translate leftover hardcoded ui text

This commit is contained in:
LukeGus committed 2026-09-30 14:39:28 -05:00
1 parent 1b342322dc
commit 20f19ff13b
26 files changed
+80 -41

No files matched your search

@@ -39,7 +39,7 @@ export function ServiceLinkEditForm({
<Input
value={config.description ?? ""}
onChange={(e) => onChange({ ...config, description: e.target.value })}
placeholder="My service"
placeholder={t("homepage.serviceNamePlaceholder")}
className="h-8 text-sm"
/>
</div>
@@ -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<BookmarkListConfig>) {
const { t } = useTranslation();
const { links } = config;
return (
@@ -23,7 +25,7 @@ function BookmarkListWidget({
<div className="flex-1 overflow-auto p-3 gap-1 flex flex-col">
{links.length === 0 && (
<span className="text-xs text-muted-foreground italic">
No bookmarks
{t("homepage.noBookmarks")}
</span>
)}
{links.map((link, i) =>
@@ -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<IframeConfig>) {
const { t } = useTranslation();
const { url, scrolling } = config;
if (!url) {
return (
<div className="flex flex-col items-center justify-center w-full h-full gap-2 text-muted-foreground/50">
<Globe size={24} />
<span className="text-xs">Configure a URL in widget settings</span>
<span className="text-xs">{t("homepage.configureUrl")}</span>
</div>
);
}
@@ -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 && <div className="absolute inset-0 pointer-events-none" />}
@@ -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<LinkTreeConfig>) {
const { t } = useTranslation();
const { sections, compact } = config;
if (sections.length === 0) {
return (
<div className="flex items-center justify-center w-full h-full text-xs text-muted-foreground">
No sections configured
{t("homepage.noSections")}
</div>
);
}
@@ -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<ServiceGridConfig>) {
const { t } = useTranslation();
const { services, columns, showLabels, iconSize } = config;
if (services.length === 0) {
return (
<div className="flex items-center justify-center w-full h-full text-xs text-muted-foreground">
No services configured
{t("homepage.noServices")}
</div>
);
}
@@ -1,3 +1,4 @@
import { useTranslation } from "@termix/plugin-sdk/frontend";
import { Type } from "lucide-react";
import { registerWidget } from "./WidgetRegistry";
import type { TextBannerConfig, WidgetComponentProps } from "../types.js";
@@ -23,6 +24,7 @@ const TEXT_ALIGN_MAP = {
};
function TextBannerWidget({ config }: WidgetComponentProps<TextBannerConfig>) {
const { t } = useTranslation();
const { text, fontSize, textAlign, fontWeight, backgroundColor } = config;
return (
@@ -31,7 +33,7 @@ function TextBannerWidget({ config }: WidgetComponentProps<TextBannerConfig>) {
style={backgroundColor ? { background: backgroundColor } : undefined}
>
<span className="whitespace-pre-wrap break-words w-full text-foreground leading-tight">
{text || "Banner text"}
{text || t("homepage.bannerTextPlaceholder")}
</span>
</div>
);
@@ -1,3 +1,4 @@
import { useTranslation } from "@termix/plugin-sdk/frontend";
import { useEffect, useState } from "react";
import {
Cloud,
@@ -54,6 +55,7 @@ function WeatherWidget({
widget,
config,
}: WidgetComponentProps<WeatherConfig>) {
const { t } = useTranslation();
const { location, unit, showForecast } = config;
const [data, setData] = useState<WttrResponse | null>(null);
const [error, setError] = useState(false);
@@ -90,7 +92,7 @@ function WeatherWidget({
if (!location) {
return (
<div className="flex items-center justify-center w-full h-full text-xs text-muted-foreground/60 p-3 text-center">
Configure a location in widget settings
{t("homepage.configureLocation")}
</div>
);
}