Complete client UI i18n migration

Adds client-side i18n support, language settings, translated UI copy, and locale parity coverage.
This commit is contained in:
chyendongnhanh338
2026-06-11 14:15:35 +08:00
committed by GitHub
parent 41cf070fd8
commit 08ebe5e7e1
199 changed files with 16426 additions and 1821 deletions
+8 -5
View File
@@ -6,6 +6,7 @@ import type { HostProfile } from "@/types/host-connection";
import { buildDaemonWebSocketUrl } from "@/utils/daemon-endpoints";
import { openExternalUrl } from "@/utils/open-external-url";
import { isWeb } from "@/constants/platform";
import { i18n } from "@/i18n/i18next";
interface DownloadProgress {
percent: number;
@@ -85,12 +86,12 @@ export const useDownloadStore = create<DownloadState>()((set, get) => ({
try {
const tokenResponse = await requestFileDownloadToken(path);
if (tokenResponse.error || !tokenResponse.token) {
throw new Error(tokenResponse.error ?? "Failed to request download token.");
throw new Error(tokenResponse.error ?? i18n.t("downloads.requestTokenFailed"));
}
const downloadTarget = resolveDaemonDownloadTarget(daemonProfile);
if (!downloadTarget.baseUrl) {
throw new Error("Download host is unavailable.");
throw new Error(i18n.t("downloads.hostUnavailable"));
}
const resolvedFileName = tokenResponse.fileName ?? fileName;
@@ -140,7 +141,7 @@ export const useDownloadStore = create<DownloadState>()((set, get) => ({
const result = await downloadResumable.downloadAsync();
if (!result) {
throw new Error("Download was cancelled.");
throw new Error(i18n.t("downloads.cancelled"));
}
get().completeDownload(id);
@@ -148,11 +149,13 @@ export const useDownloadStore = create<DownloadState>()((set, get) => ({
if (await Sharing.isAvailableAsync()) {
await Sharing.shareAsync(result.uri, {
mimeType: tokenResponse.mimeType ?? undefined,
dialogTitle: resolvedFileName ? `Share ${resolvedFileName}` : "Share file",
dialogTitle: resolvedFileName
? i18n.t("downloads.shareFileNamed", { fileName: resolvedFileName })
: i18n.t("downloads.shareFile"),
});
}
} catch (error) {
const message = error instanceof Error ? error.message : "Failed to download file.";
const message = error instanceof Error ? error.message : i18n.t("downloads.failed");
if (isWeb) {
console.warn("[DownloadStore] Download failed:", message);
get().failDownload(id, message);