feat: add "Vertaal alles" button to translate the whole catalog on demand
Lets admins import fast with translation disabled, then build every language for the full catalog later via the existing build-languages action.
This commit is contained in:
1 parent
3a292a44f1
commit
4a95b53b02
1 file changed
+45
@@ -177,9 +177,38 @@ export function StudioClient({
|
|||||||
...ALL_LANGS,
|
...ALL_LANGS,
|
||||||
]);
|
]);
|
||||||
const [langPickerOpen, setLangPickerOpen] = useState(false);
|
const [langPickerOpen, setLangPickerOpen] = useState(false);
|
||||||
|
const [buildingLanguages, setBuildingLanguages] = useState(false);
|
||||||
const [globalTranslate, setGlobalTranslate] =
|
const [globalTranslate, setGlobalTranslate] =
|
||||||
useState<boolean>(defaultTranslate);
|
useState<boolean>(defaultTranslate);
|
||||||
|
|
||||||
|
// Build every language for the whole catalog at once (used to translate
|
||||||
|
// everything after importing with translation disabled for speed).
|
||||||
|
const buildAllLanguages = async () => {
|
||||||
|
setBuildingLanguages(true);
|
||||||
|
try {
|
||||||
|
const res = await adminFetch(
|
||||||
|
"/api/admin/import/furni?action=build-languages",
|
||||||
|
);
|
||||||
|
const data = (await res.json()) as {
|
||||||
|
languages?: Array<{ lang: string; ok: boolean }>;
|
||||||
|
error?: string;
|
||||||
|
};
|
||||||
|
if (res.ok) {
|
||||||
|
const langs = data.languages ?? [];
|
||||||
|
const okCount = langs.filter((l) => l.ok).length;
|
||||||
|
toast.success(
|
||||||
|
`Alle talen vertaald (${okCount}/${langs.length} gelukt)`,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
toast.error(data.error ?? "Vertaling mislukt");
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
toast.error("Netwerkfout bij het vertalen van alle talen");
|
||||||
|
} finally {
|
||||||
|
setBuildingLanguages(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const toggleLang = (lang: string) =>
|
const toggleLang = (lang: string) =>
|
||||||
setTranslateLangs((prev) =>
|
setTranslateLangs((prev) =>
|
||||||
prev.includes(lang) ? prev.filter((l) => l !== lang) : [...prev, lang],
|
prev.includes(lang) ? prev.filter((l) => l !== lang) : [...prev, lang],
|
||||||
@@ -995,6 +1024,22 @@ export function StudioClient({
|
|||||||
</div>
|
</div>
|
||||||
</PopoverContent>
|
</PopoverContent>
|
||||||
</Popover>
|
</Popover>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
variant="outline"
|
||||||
|
size="sm"
|
||||||
|
className="h-8 gap-1.5"
|
||||||
|
disabled={buildingLanguages}
|
||||||
|
onClick={buildAllLanguages}
|
||||||
|
title="Vertaal de hele catalogus in alle talen (achteraf)"
|
||||||
|
>
|
||||||
|
{buildingLanguages ? (
|
||||||
|
<Loader2 size={13} className="animate-spin" />
|
||||||
|
) : (
|
||||||
|
<Globe size={13} />
|
||||||
|
)}
|
||||||
|
Alles vertalen
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="flex-1" />
|
<div className="flex-1" />
|
||||||
|
|||||||
Reference in new issue
Block a user