commit 6e90585334346fee433de72689780e9ba3d68519
parent d9437ccfe338af2fd2bae1bcc8b86a3203d78b6e
Author: Sebastian <sebasjm@taler-systems.com>
Date: Mon, 9 Feb 2026 11:26:26 -0300
fix #11033
Diffstat:
6 files changed, 38 insertions(+), 68 deletions(-)
diff --git a/packages/aml-backoffice-ui/src/App.tsx b/packages/aml-backoffice-ui/src/App.tsx
@@ -55,13 +55,7 @@ export function App(): VNode {
const baseUrl = getInitialBackendBaseURL(settings.backendBaseURL);
return (
<UiSettingsProvider value={settings}>
- <TranslationProvider
- source={strings}
- completeness={{
- es: strings["es"].completeness ?? 0,
- de: strings["de"].completeness ?? 0,
- }}
- >
+ <TranslationProvider source={strings}>
<ExchangeApiProvider
baseUrl={new URL("/", baseUrl)}
frameOnError={ExchangeAmlFrame}
diff --git a/packages/bank-ui/src/app.tsx b/packages/bank-ui/src/app.tsx
@@ -61,19 +61,7 @@ export function App() {
const baseUrl = getInitialBackendBaseURL(settings.backendBaseURL);
return (
<SettingsProvider value={settings}>
- <TranslationProvider
- source={strings}
- completeness={{
- uk: strings["uk"].completeness,
- // tr: strings["tr"].completeness,
- ru: strings["ru"].completeness,
- // sv: strings["sv"].completeness,
- it: strings["it"].completeness,
- fr: strings["fr"].completeness,
- es: strings["es"].completeness,
- de: strings["de"].completeness,
- }}
- >
+ <TranslationProvider source={strings}>
<SubApp baseUrl={baseUrl} />
</TranslationProvider>
</SettingsProvider>
diff --git a/packages/kyc-ui/src/app.tsx b/packages/kyc-ui/src/app.tsx
@@ -58,13 +58,7 @@ export function App(): VNode {
const baseUrl = getInitialBackendBaseURL(settings.backendBaseURL);
return (
<SettingsProvider value={settings}>
- <TranslationProvider
- source={strings}
- completeness={{
- es: strings["es"].completeness,
- de: strings["de"].completeness,
- }}
- >
+ <TranslationProvider source={strings}>
<ExchangeApiProvider
baseUrl={new URL("/", baseUrl)}
frameOnError={Frame}
diff --git a/packages/merchant-backoffice-ui/src/Application.tsx b/packages/merchant-backoffice-ui/src/Application.tsx
@@ -91,7 +91,10 @@ import {
revalidateInstanceConfirmedTransfers,
revalidateInstanceIncomingTransfers,
} from "./hooks/transfer.js";
-import { revalidateInstanceMoneyPots, revalidateMoneyPotDetails } from "./hooks/pots.js";
+import {
+ revalidateInstanceMoneyPots,
+ revalidateMoneyPotDetails,
+} from "./hooks/pots.js";
import { revalidateInstanceGroups } from "./hooks/groups.js";
import { revalidateInstanceScheduledReports } from "./hooks/reports.js";
@@ -108,19 +111,7 @@ export function Application(): VNode {
const baseUrl = getInitialBackendBaseURL(settings.backendBaseURL);
return (
<SettingsProvider value={settings}>
- <TranslationProvider
- source={strings}
- completeness={{
- uk: strings["uk"].completeness,
- tr: strings["tr"].completeness,
- // ru: strings["ru"].completeness,
- sv: strings["sv"].completeness,
- it: strings["it"].completeness,
- fr: strings["fr"].completeness,
- es: strings["es"].completeness,
- de: strings["de"].completeness,
- }}
- >
+ <TranslationProvider source={strings}>
<MerchantApiProvider
baseUrl={new URL("./", baseUrl)}
frameOnError={OnConfigError}
@@ -437,7 +428,10 @@ const swrCacheEvictor = new (class
return;
}
case TalerMerchantInstanceCacheEviction.UPDATE_POTS: {
- await Promise.all([revalidateInstanceMoneyPots(), revalidateMoneyPotDetails()]);
+ await Promise.all([
+ revalidateInstanceMoneyPots(),
+ revalidateMoneyPotDetails(),
+ ]);
return;
}
case TalerMerchantInstanceCacheEviction.DELETE_POTS: {
diff --git a/packages/web-util/src/context/translation.ts b/packages/web-util/src/context/translation.ts
@@ -30,25 +30,25 @@ export type InternationalizationAPI = typeof i18n;
interface Type {
lang: string;
- supportedLang: { [id in keyof typeof supportedLang]: string };
+ supportedLang: { [id in keyof typeof SUPPORTED_LANGS]: string };
changeLanguage: (l: string) => void;
i18n: InternationalizationAPI;
dateLocale: Locale;
- completeness: { [id in keyof typeof supportedLang]: number };
+ completeness: Record<string, number>;
}
-const supportedLang = {
+const SUPPORTED_LANGS = {
es: "Espanol [es]",
en: "English [en]",
fr: "Francais [fr]",
de: "Deutsch [de]",
- sv: "Svenska [sv]",
- it: "Italiane [it]",
+ // sv: "Svenska [sv]",
+ // it: "Italiane [it]",
};
const initial: Type = {
lang: "en",
- supportedLang,
+ supportedLang: SUPPORTED_LANGS,
changeLanguage: () => {
// do not change anything
},
@@ -59,19 +59,20 @@ const initial: Type = {
en: 0,
es: 0,
fr: 0,
- it: 0,
- sv: 0,
},
};
const Context = createContext<Type>(initial);
+interface LangInfo {
+ lang: string;
+ completeness: number;
+}
interface Props {
initial?: string;
children: ComponentChildren;
/** ONLY USER FOR TESTING */
forceLang__testing?: string;
- source: Record<string, any>;
- completeness?: Record<string, number>;
+ source: Record<string, LangInfo>;
}
// Outmost UI wrapper.
@@ -80,21 +81,15 @@ export const TranslationProvider = ({
children,
forceLang__testing: forceLang,
source,
- completeness: completenessProp,
}: Props): VNode => {
- const completeness = {
- en: 100,
- de:
- !completenessProp || !completenessProp["de"] ? 0 : completenessProp["de"],
- es:
- !completenessProp || !completenessProp["es"] ? 0 : completenessProp["es"],
- fr:
- !completenessProp || !completenessProp["fr"] ? 0 : completenessProp["fr"],
- it:
- !completenessProp || !completenessProp["it"] ? 0 : completenessProp["it"],
- sv:
- !completenessProp || !completenessProp["sv"] ? 0 : completenessProp["sv"],
- };
+
+ const completeness = Object.keys(SUPPORTED_LANGS).reduce((map, lang) => {
+ if (lang !== "en" && source[lang] && source[lang].completeness ) {
+ map[lang] = source[lang].completeness
+ }
+ return map
+ }, { en: 100 } as Record<string,number>)
+
const { value: lang, update: changeLanguage } = useLang(
initial,
completeness,
@@ -127,7 +122,7 @@ export const TranslationProvider = ({
value: {
lang,
changeLanguage,
- supportedLang,
+ supportedLang: SUPPORTED_LANGS,
i18n,
dateLocale,
completeness,
diff --git a/packages/web-util/src/hooks/useLang.ts b/packages/web-util/src/hooks/useLang.ts
@@ -20,7 +20,12 @@ import {
useLocalStorage,
} from "./useLocalStorage.js";
-const MIN_LANG_COVERAGE_THRESHOLD = 90;
+/**
+ * If the translation is under this threshold then
+ * browser won't automatically switch to default lang.
+ *
+ */
+const MIN_LANG_COVERAGE_THRESHOLD = 85;
/**
* choose the best from the browser config based on the completeness
* on the translation