taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 9a3feb091ec646415aa9a41c5d2eb6dc25705e21
parent d721479ff8711953de3684f3a4b8682003e33d58
Author: Florian Dold <dold@taler.net>
Date:   Mon, 31 Aug 2026 22:13:42 +0200

web-util: distinguish binding and unofficial VQF translations

Diffstat:
Mpackages/web-util/src/forms/forms-types.ts | 18+++++++++++++++---
Mpackages/web-util/src/forms/forms-ui.test.tsx | 50++++++++++++++++++++++++++++++++++++++++++++++++--
Mpackages/web-util/src/forms/forms-ui.tsx | 130+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------
Mpackages/web-util/src/forms/gana/VQF_902_11_customer.ts | 7+++++--
Mpackages/web-util/src/forms/gana/VQF_902_11_officer.ts | 7+++++--
Mpackages/web-util/src/forms/gana/VQF_902_14.ts | 5++++-
Mpackages/web-util/src/forms/gana/VQF_902_1_customer.ts | 9++++++---
Mpackages/web-util/src/forms/gana/VQF_902_1_officer.ts | 3+++
Mpackages/web-util/src/forms/gana/VQF_902_4.ts | 35+++++++++++++++++++----------------
Mpackages/web-util/src/forms/gana/VQF_902_5.ts | 7+++++--
Mpackages/web-util/src/forms/gana/VQF_902_9_customer.ts | 5++++-
Mpackages/web-util/src/forms/gana/VQF_902_9_officer.ts | 5++++-
Apackages/web-util/src/forms/gana/vqf.ts | 389+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
13 files changed, 621 insertions(+), 49 deletions(-)

diff --git a/packages/web-util/src/forms/forms-types.ts b/packages/web-util/src/forms/forms-types.ts @@ -26,6 +26,18 @@ export type FormDesign = | SingleColumnFormDesign | AcceptTosFormDesign; +export type FormLanguagePolicy = { + officialLanguages: readonly string[]; + legallyBindingLanguages: readonly string[]; + fallbackLanguage: string; + legallyBindingLanguageLabel: string; + fallbackLanguageLabel: string; +}; + +type FormDesignBase = { + languagePolicy?: FormLanguagePolicy; +}; + /** * Purpose-built terms-of-service form. This is a form design rather than a * collection of generic fields so that reading and accepting a legal document @@ -37,7 +49,7 @@ export type AcceptTosFormDesign = { tosVersion: string; providerName?: string; linkOnly?: boolean; -}; +} & FormDesignBase; /** * Form with multiple sections. @@ -46,7 +58,7 @@ export type DoubleColumnFormDesign = { type: "double-column"; title?: string; sections: DoubleColumnFormSection[]; -}; +} & FormDesignBase; /** * Single section form. @@ -54,7 +66,7 @@ export type DoubleColumnFormDesign = { export type SingleColumnFormDesign = { type: "single-column"; fields: UIFormElementConfig[]; -}; +} & FormDesignBase; export type DoubleColumnFormSection = { title: string; diff --git a/packages/web-util/src/forms/forms-ui.test.tsx b/packages/web-util/src/forms/forms-ui.test.tsx @@ -20,11 +20,57 @@ import { setupI18n, TranslatedString } from "@gnu-taler/taler-util"; import { Window } from "happy-dom"; import { h } from "preact"; import { useForm } from "../hooks/useForm.js"; -import { FormUI, redactFileContents } from "./forms-ui.js"; -import { FormDesign } from "./forms-types.js"; +import { TranslationProvider } from "../context/translation.js"; +import { + FormLanguageNotice, + FormUI, + getFormLanguageStatus, + redactFileContents, +} from "./forms-ui.js"; +import { FormDesign, FormLanguagePolicy } from "./forms-types.js"; setupI18n("en", {}); +const vqfLanguagePolicy: FormLanguagePolicy = { + officialLanguages: ["de", "en"], + legallyBindingLanguages: ["de"], + fallbackLanguage: "en", + legallyBindingLanguageLabel: "German", + fallbackLanguageLabel: "English", +}; + +test("form language policy distinguishes binding, official, and unsupported locales", () => { + assert.equal( + getFormLanguageStatus(vqfLanguagePolicy, "de-CH"), + "legally-binding", + ); + assert.equal( + getFormLanguageStatus(vqfLanguagePolicy, "en_GB"), + "official-non-binding", + ); + assert.equal(getFormLanguageStatus(vqfLanguagePolicy, "fr"), "unofficial"); +}); + +test("unsupported form languages show a persistent legal warning", async () => { + const window = installDom(); + const { cleanup, render } = await import("@testing-library/preact"); + + const view = render( + <TranslationProvider source={{}} forceLang__testing="fr"> + <FormLanguageNotice policy={vqfLanguagePolicy} /> + </TranslationProvider>, + ); + + const notice = view.getByRole("status"); + assert.equal(notice.classList.contains("attention-warning"), true); + assert.match(notice.textContent, /not officially supported/i); + assert.match(notice.textContent, /may be incomplete/i); + assert.match(notice.textContent, /only the German text is legally binding/i); + + cleanup(); + await window.happyDOM.abort(); +}); + test("raw form data redacts nested file contents without changing other values", () => { assert.deepEqual( redactFileContents({ diff --git a/packages/web-util/src/forms/forms-ui.tsx b/packages/web-util/src/forms/forms-ui.tsx @@ -20,6 +20,96 @@ import { } from "./forms-types.js"; import { convertFormConfigToUiField } from "./forms-utils.js"; import { AcceptTosForm, AcceptTosFormValues } from "./AcceptTosForm.js"; +import { Attention } from "../components/Attention.js"; +import { FormLanguagePolicy } from "./forms-types.js"; + +export type FormLanguageStatus = + | "legally-binding" + | "official-non-binding" + | "unofficial"; + +export function getFormLanguageStatus( + policy: FormLanguagePolicy, + language: string, +): FormLanguageStatus { + const baseLanguage = language + .replace("_", "-") + .toLowerCase() + .split("-", 1)[0]; + const hasLanguage = (candidate: string): boolean => + candidate.replace("_", "-").toLowerCase().split("-", 1)[0] === baseLanguage; + if (policy.legallyBindingLanguages.some(hasLanguage)) { + return "legally-binding"; + } + if (policy.officialLanguages.some(hasLanguage)) { + return "official-non-binding"; + } + return "unofficial"; +} + +export function FormLanguageNotice({ + policy, +}: { + policy: FormLanguagePolicy | undefined; +}): VNode | null { + const { i18n, lang } = useTranslationContext(); + if (!policy) return null; + const status = getFormLanguageStatus(policy, lang); + switch (status) { + case "legally-binding": + return ( + <Attention + type="info" + title={i18n.fixed({ + en: "Official form language", + de: "Offizielle Formularsprache", + })} + > + {i18n.fixed({ + en: "This form is shown in an official, legally binding language.", + de: "Dieses Formular wird in einer offiziellen, rechtsverbindlichen Sprache angezeigt.", + })} + </Attention> + ); + case "official-non-binding": + return ( + <Attention + type="warning" + title={i18n.fixed({ + en: "Official translation", + de: "Offizielle Übersetzung", + })} + > + {i18n.fixed( + { + en: "This form is shown in an official translation, but it is not legally binding. Only the %1$s text is legally binding.", + de: "Dieses Formular wird in einer offiziellen Übersetzung angezeigt, die jedoch nicht rechtsverbindlich ist. Nur der Text in %1$s ist rechtsverbindlich.", + }, + policy.legallyBindingLanguageLabel, + )} + </Attention> + ); + case "unofficial": + return ( + <Attention + type="warning" + title={i18n.fixed({ + en: "Unofficial form translation", + de: "Inoffizielle Formularübersetzung", + })} + > + {i18n.fixed( + { + en: "This form is not officially supported in the selected language. The translation may be incomplete, and some text may be shown in %1$s. Only the %2$s text is legally binding.", + de: "Dieses Formular wird in der ausgewählten Sprache nicht offiziell unterstützt. Die Übersetzung kann unvollständig sein, und Teile des Textes können in %1$s angezeigt werden. Nur der Text in %2$s ist rechtsverbindlich.", + }, + policy.fallbackLanguageLabel, + policy.legallyBindingLanguageLabel, + )} + </Attention> + ); + } +} export function DefaultForm<T>({ design, @@ -107,17 +197,21 @@ export function FormUI<T>({ disabled?: boolean; onSubmit?: () => void; }): VNode { + const languageNotice = <FormLanguageNotice policy={design.languagePolicy} />; switch (design.type) { case "accept-tos": { return ( - <AcceptTosForm - name={name} - design={design} - model={model as unknown as FormModel<AcceptTosFormValues>} - focus={focus} - onSubmit={onSubmit} - disabled={disabled} - /> + <Fragment> + {languageNotice} + <AcceptTosForm + name={name} + design={design} + model={model as unknown as FormModel<AcceptTosFormValues>} + focus={focus} + onSubmit={onSubmit} + disabled={disabled} + /> + </Fragment> ); } case "double-column": { @@ -138,6 +232,7 @@ export function FormUI<T>({ }); return ( <Fragment> + {languageNotice} {design.title ? ( <h1 class="text-lg font-bold">{design.title}</h1> ) : ( @@ -149,14 +244,17 @@ export function FormUI<T>({ } case "single-column": { return ( - <SingleColumnFormSectionUI - name={name} - fields={design.fields} - model={model} - focus={focus} - onSubmit={onSubmit} - disabled={disabled} - /> + <Fragment> + {languageNotice} + <SingleColumnFormSectionUI + name={name} + fields={design.fields} + model={model} + focus={focus} + onSubmit={onSubmit} + disabled={disabled} + /> + </Fragment> ); } } diff --git a/packages/web-util/src/forms/gana/VQF_902_11_customer.ts b/packages/web-util/src/forms/gana/VQF_902_11_customer.ts @@ -2,6 +2,7 @@ import { TalerFormAttributes } from "@gnu-taler/taler-util"; import { format } from "date-fns"; import { InternationalizationAPI } from "../../context/translation.js"; import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js"; +import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js"; export const form_vqf_902_11_customer = ( i18n: InternationalizationAPI, @@ -16,14 +17,16 @@ export const form_vqf_902_11_customer = ( export function VQF_902_11_customer( i18n: InternationalizationAPI, ): DoubleColumnFormDesign { + i18n = withVqfTranslations(i18n); const today = format(new Date(), "yyyy-MM-dd"); return { type: "double-column", + languagePolicy: vqfLanguagePolicy(i18n), title: i18n.str`Establishment of the controlling person (submitted by customer)`, sections: [ { - title: "Identity of the contracting partner", - description: "Name and address", + title: i18n.str`Identity of the contracting partner`, + description: i18n.str`Name and address`, fields: [ { id: TalerFormAttributes.IDENTITY_CONTRACTING_PARTNER, diff --git a/packages/web-util/src/forms/gana/VQF_902_11_officer.ts b/packages/web-util/src/forms/gana/VQF_902_11_officer.ts @@ -2,6 +2,7 @@ import { TalerFormAttributes } from "@gnu-taler/taler-util"; import { InternationalizationAPI } from "../../context/translation.js"; import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js"; import { format } from "date-fns"; +import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js"; export const form_vqf_902_11_officer = ( i18n: InternationalizationAPI, @@ -16,15 +17,17 @@ export const form_vqf_902_11_officer = ( export function VQF_902_11_officer( i18n: InternationalizationAPI, ): DoubleColumnFormDesign { + i18n = withVqfTranslations(i18n); const today = format(new Date(), "yyyy-MM-dd"); return { type: "double-column", + languagePolicy: vqfLanguagePolicy(i18n), title: i18n.str`Establishment of the controlling person (submitted by AML officer)`, sections: [ { - title: "Identity of the contracting partner", - description: "Name and address", + title: i18n.str`Identity of the contracting partner`, + description: i18n.str`Name and address`, fields: [ { id: TalerFormAttributes.IDENTITY_CONTRACTING_PARTNER, diff --git a/packages/web-util/src/forms/gana/VQF_902_14.ts b/packages/web-util/src/forms/gana/VQF_902_14.ts @@ -2,6 +2,7 @@ import { TalerFormAttributes } from "@gnu-taler/taler-util"; import { InternationalizationAPI } from "../../context/translation.js"; import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js"; import { Descr } from "./VQF_902_1_customer.js"; +import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js"; export const form_vqf_902_14 = ( i18n: InternationalizationAPI, @@ -16,9 +17,11 @@ export const form_vqf_902_14 = ( export function VQF_902_14( i18n: InternationalizationAPI, ): DoubleColumnFormDesign { + i18n = withVqfTranslations(i18n); return { type: "double-column", - title: "Special Clarifications", + languagePolicy: vqfLanguagePolicy(i18n), + title: i18n.str`Special Clarifications`, sections: [ { title: i18n.str`Information on customer`, diff --git a/packages/web-util/src/forms/gana/VQF_902_1_customer.ts b/packages/web-util/src/forms/gana/VQF_902_1_customer.ts @@ -19,6 +19,7 @@ import { format, intervalToDuration, isFuture, isValid, parse } from "date-fns"; import { InternationalizationAPI } from "../../context/translation.js"; import { DoubleColumnFormDesign, UIFormElementConfig } from "../forms-types.js"; import { countryNationalityList } from "../../utils/select-ui-lists.js"; +import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js"; export const Descr = { CUSTOMER_INFO_TYPE: ( @@ -68,10 +69,12 @@ const fieldCorrespondenceLanguage = ( export function design_VQF_902_1_customer( i18n: InternationalizationAPI, ): DoubleColumnFormDesign { + i18n = withVqfTranslations(i18n); const today = format(new Date(), "yyyy-MM-dd"); return { type: "double-column", + languagePolicy: vqfLanguagePolicy(i18n), title: i18n.str`Identification form (basic customer information)`, sections: [ { @@ -346,15 +349,15 @@ export function design_VQF_902_1_customer( required: true, choices: [ { - label: "Sole signature authority", + label: i18n.str`Sole signature authority`, value: "SINGLE", }, { - label: "Collective authority with two signatures", + label: i18n.str`Collective authority with two signatures`, value: "COLLECTIVE_TWO", }, { - label: "Other (please specify)", + label: i18n.str`Other (please specify)`, value: "OTHER", }, ], diff --git a/packages/web-util/src/forms/gana/VQF_902_1_officer.ts b/packages/web-util/src/forms/gana/VQF_902_1_officer.ts @@ -25,6 +25,7 @@ import { } from "date-fns"; import { InternationalizationAPI } from "../../context/translation.js"; import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js"; +import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js"; export const form_vqf_902_1_officer = ( i18n: InternationalizationAPI, @@ -42,10 +43,12 @@ export const form_vqf_902_1_officer = ( export function VQF_902_1_officer( i18n: InternationalizationAPI, ): DoubleColumnFormDesign { + i18n = withVqfTranslations(i18n); const today = format(new Date(), "yyyy-MM-dd"); return { type: "double-column", + languagePolicy: vqfLanguagePolicy(i18n), sections: [ { title: i18n.str`Acceptance of business relationship`, diff --git a/packages/web-util/src/forms/gana/VQF_902_4.ts b/packages/web-util/src/forms/gana/VQF_902_4.ts @@ -3,6 +3,7 @@ import { InternationalizationAPI } from "../../context/translation.js"; import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js"; import { Descr } from "./VQF_902_1_customer.js"; import { intervalToDuration, parse, isFuture, isValid } from "date-fns"; +import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js"; export const form_vqf_902_4 = ( i18n: InternationalizationAPI, @@ -16,8 +17,10 @@ export const form_vqf_902_4 = ( export function VQF_902_4( i18n: InternationalizationAPI, ): DoubleColumnFormDesign { + i18n = withVqfTranslations(i18n); return { type: "double-column", + languagePolicy: vqfLanguagePolicy(i18n), sections: [ { title: i18n.str`Information on customer`, @@ -45,11 +48,11 @@ export function VQF_902_4( choices: [ { value: true, - label: `Yes`, + label: i18n.str`Yes`, }, { value: false, - label: `No`, + label: i18n.str`No`, }, ], }, @@ -62,11 +65,11 @@ export function VQF_902_4( choices: [ { value: true, - label: `Yes`, + label: i18n.str`Yes`, }, { value: false, - label: `No`, + label: i18n.str`No`, }, ], }, @@ -79,11 +82,11 @@ export function VQF_902_4( choices: [ { value: true, - label: `Yes`, + label: i18n.str`Yes`, }, { value: false, - label: `No`, + label: i18n.str`No`, }, ], }, @@ -136,11 +139,11 @@ export function VQF_902_4( choices: [ { value: true, - label: `Yes`, + label: i18n.str`Yes`, }, { value: false, - label: `No`, + label: i18n.str`No`, }, ], }, @@ -305,27 +308,27 @@ export function VQF_902_4( type: "choiceStacked", choices: [ { - label: `Transparent (Risk Level 0)`, + label: i18n.str`Transparent (Risk Level 0)`, description: i18n.str`Clearly defined, transparent, easily comprehensible business activity well known to the member.`, value: "TRANSPARENT", }, { - label: `High cash transactions (Risk Level 1)`, + label: i18n.str`High cash transactions (Risk Level 1)`, description: i18n.str`Business activity with a high level of cash transactions.`, value: "HIGH_CASH_TRANSACTION", }, { - label: `Not well known (Risk Level 1)`, + label: i18n.str`Not well known (Risk Level 1)`, description: i18n.str`Business activity not well known to the member.`, value: "NOT_WELL_KNOWN", }, { - label: `High-risk trade (Risk Level 2)`, + label: i18n.str`High-risk trade (Risk Level 2)`, description: i18n.str`Trade in munitions/arms, raw gem stones/diamonds, jewellery, international trade in exotic animals, casino and lottery business, trade in erotic wares.`, value: "HIGH_RISK_TRADE", }, { - label: `Unknown industry (Risk Level 2)`, + label: i18n.str`Unknown industry (Risk Level 2)`, description: i18n.str`Member has no personal knowledge of the customer’s industry.`, value: "UNKNOWN_INDUSTRY", }, @@ -343,17 +346,17 @@ export function VQF_902_4( label: i18n.str`Contact risk level`, choices: [ { - label: "Low contact risk", + label: i18n.str`Low contact risk`, description: i18n.str`Personal acquaintance between member and customer/beneficial owner of the assets over several years (at least 2) prior to entering into the business relationship`, value: "LOW", }, { - label: "Medium contact risk", + label: i18n.str`Medium contact risk`, description: i18n.str`The customer/beneficial owner was not personally known to the member for several years (at least 2) prior to entering into the business relationship; however (a) no business was entered into in the absence of the customer/beneficial owner, or (b) the customer was at least introduced/brokered by a trusted third party.`, value: "MEDIUM", }, { - label: "High contact risk", + label: i18n.str`High contact risk`, description: i18n.str`The customer/beneficial owner was not personally known to the member and business was entered into in the absence of the former (relationship by correspondence) and the customer was not introduced/brokered by a trusted third party.`, value: "HIGH", }, diff --git a/packages/web-util/src/forms/gana/VQF_902_5.ts b/packages/web-util/src/forms/gana/VQF_902_5.ts @@ -2,6 +2,7 @@ import { InternationalizationAPI } from "../../context/translation.js"; import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js"; import { Descr } from "./VQF_902_1_customer.js"; import { TalerFormAttributes } from "@gnu-taler/taler-util"; +import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js"; export const form_vqf_902_5 = ( i18n: InternationalizationAPI, @@ -16,8 +17,10 @@ export const form_vqf_902_5 = ( export function VQF_902_5( i18n: InternationalizationAPI, ): DoubleColumnFormDesign { + i18n = withVqfTranslations(i18n); return { type: "double-column", + languagePolicy: vqfLanguagePolicy(i18n), sections: [ { title: i18n.str`Information on customer`, @@ -64,11 +67,11 @@ export function VQF_902_5( required: true, choices: [ { - label: "Yes", + label: i18n.str`Yes`, value: true, }, { - label: "No", + label: i18n.str`No`, value: false, }, ], diff --git a/packages/web-util/src/forms/gana/VQF_902_9_customer.ts b/packages/web-util/src/forms/gana/VQF_902_9_customer.ts @@ -3,6 +3,7 @@ import { InternationalizationAPI } from "../../context/translation.js"; import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js"; import { countryNationalityList } from "../../utils/select-ui-lists.js"; import { format, intervalToDuration, isFuture, isValid, parse } from "date-fns"; +import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js"; export const form_vqf_902_9_customer = ( i18n: InternationalizationAPI, @@ -17,14 +18,16 @@ export const form_vqf_902_9_customer = ( export function VQF_902_9_customer( i18n: InternationalizationAPI, ): DoubleColumnFormDesign { + i18n = withVqfTranslations(i18n); const today = format(new Date(), "yyyy-MM-dd"); return { type: "double-column", + languagePolicy: vqfLanguagePolicy(i18n), title: i18n.str`Declaration of identity of the beneficial owner`, sections: [ { - title: "Identity of the contracting partner", + title: i18n.str`Identity of the contracting partner`, fields: [ { id: TalerFormAttributes.IDENTITY_CONTRACTING_PARTNER, diff --git a/packages/web-util/src/forms/gana/VQF_902_9_officer.ts b/packages/web-util/src/forms/gana/VQF_902_9_officer.ts @@ -3,6 +3,7 @@ import { InternationalizationAPI } from "../../context/translation.js"; import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js"; import { countryNationalityList } from "../../utils/select-ui-lists.js"; import { intervalToDuration, isFuture, isValid, parse } from "date-fns"; +import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js"; export const form_vqf_902_9_officer = ( i18n: InternationalizationAPI, @@ -17,12 +18,14 @@ export const form_vqf_902_9_officer = ( export function VQF_902_9_officer( i18n: InternationalizationAPI, ): DoubleColumnFormDesign { + i18n = withVqfTranslations(i18n); return { type: "double-column", + languagePolicy: vqfLanguagePolicy(i18n), title: i18n.str`Declaration of identity of the beneficial owner`, sections: [ { - title: "Identity of the contracting partner", + title: i18n.str`Identity of the contracting partner`, fields: [ { id: TalerFormAttributes.IDENTITY_CONTRACTING_PARTNER, diff --git a/packages/web-util/src/forms/gana/vqf.ts b/packages/web-util/src/forms/gana/vqf.ts @@ -0,0 +1,389 @@ +/* + This file is part of GNU Taler + (C) 2026 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. +*/ + +import { InternationalizationAPI } from "../../context/translation.js"; +import { FormLanguagePolicy } from "../forms-types.js"; + +const fixedGermanByEnglish: Readonly<Record<string, string>> = { + "Can't be empty": "Darf nicht leer sein", + "Collective authority with two signatures": + "Kollektivzeichnungsberechtigung zu zweien", + "High contact risk": "Hohes Kontaktrisiko", + "High cash transactions (Risk Level 1)": + "Hoher Anteil an Bargeldtransaktionen (Risikostufe 1)", + "High-risk trade (Risk Level 2)": "Handel mit hohem Risiko (Risikostufe 2)", + "Identity of the contracting partner": "Identität des Vertragspartners", + "Low contact risk": "Tiefes Kontaktrisiko", + "Medium contact risk": "Mittleres Kontaktrisiko", + "Name and address": "Name und Adresse", + "Not well known (Risk Level 1)": "Nicht gut bekannt (Risikostufe 1)", + "Other (please specify)": "Andere (bitte angeben)", + "Sole signature authority": "Einzelzeichnungsberechtigung", + "Transparent (Risk Level 0)": "Transparent (Risikostufe 0)", + "Unknown industry (Risk Level 2)": "Unbekannte Branche (Risikostufe 2)", + "A foundation (or a similar construct; incl. underlying companies)": + "Eine Stiftung (oder ein ähnliches Konstrukt; inkl. Underlying Companies)", + "A life insurance policy with separately managed accounts / securities accounts (so-called insurance wrappers)": + "Eine Lebensversicherung mit separater Konto-/Depotführung (sog. Insurance Wrapper)", + "A natural person and there are no doubts that this person is the sole beneficial owner of the assets": + "Eine natürliche Person und es bestehen keine Zweifel, dass diese selber an den Vermögenswerten wirtschaftlich berechtigt ist", + "A trust (incl. underlying companies)": + "Ein Trust (inkl. Underlying Companies)", + "Acceptance date": "Datum der Annahme", + "Acceptance of business relationship": "Annahme der Geschäftsbeziehung", + "Accepted via:": "Angenommen über:", + "Actual address of domicile": "Effektive Wohnsitzadresse", + "An operational legal entity or partnership": + "Eine operative juristische Person oder Personengesellschaft", + "Applicable country risk types": "Anwendbare Arten von Länderrisiken", + "Applicable if customer is a legal entity": + "Anwendbar, wenn der Kunde eine juristische Person ist", + "Applicable if customer is a natural person": + "Anwendbar, wenn der Kunde eine natürliche Person ist", + "Applicable only if customer is a sole proprietor": + "Nur anwendbar, wenn der Kunde ein Einzelunternehmen ist", + "Authenticated copy of identification document": + "Beglaubigte Kopie des Ausweisdokuments", + "Beneficial owner": "Wirtschaftlich Berechtigte(r)", + "Beneficial owner details": "Angaben zum wirtschaftlich Berechtigten", + "Beneficial owner of the assets": + "Wirtschaftlich Berechtigter der Vermögenswerte", + "Beneficial owner(s)": "Wirtschaftlich Berechtigte(r)", + "Business activity": "Geschäftstätigkeit", + "Business activity not well known to the member.": + "Geschäftstätigkeit, die dem Mitglied nicht gut bekannt ist.", + "Business activity with a high level of cash transactions.": + "Geschäftstätigkeit mit einem hohen Anteil an Bartransaktionen.", + Category: "Kategorie", + "Category clarification": "Erläuterung der Kategorie", + "Classification for the establishment of the beneficial owner of the assets and/or controlling person": + "Klassifizierung zur Feststellung des wirtschaftlich Berechtigten der Vermögenswerte und/oder des Kontrollinhabers", + "Clearly defined, transparent, easily comprehensible business activity well known to the member.": + "Klar definierte, transparente, leicht nachvollziehbare Geschäftstätigkeit, die dem Mitglied gut bekannt ist.", + "Company identification document": "Identifikationsdokument des Unternehmens", + "Company name": "Firmenname", + "Company register extract": "Handelsregisterauszug", + "Company share registry file": "Aktienbuchauszug", + "Conclusion whether the business relationship is with or without increased risk.": + "Schlussfolgerung, ob die Geschäftsbeziehung mit oder ohne erhöhtes Risiko verbunden ist.", + "Consultation of generally accessible sources and databases": + "Konsultation allgemein zugänglicher Quellen und Datenbanken", + "Contact person": "Kontaktperson", + "Contact risk": "Kontaktrisiko", + "Contact risk level": "Kontaktrisikostufe", + "Contracting partner": "Vertragspartner", + "Controlling person(s)": "Kontrollinhaber", + "Copy of document that serves as evidence of signing authority:": + "Kopie des Dokuments, das als Nachweis der Zeichnungsberechtigung dient:", + "Copy of identification document": "Kopie des Ausweisdokuments", + "Copy of identification document (not older than 12 months)": + "Kopie des Ausweisdokuments (nicht älter als 12 Monate)", + "Correspondence Preferences": "Korrespondenzpräferenzen", + "Correspondence language:": "Korrespondenzsprache:", + "Country risk": "Länderrisiko", + "Country risk level (business activity)": + "Länderrisikostufe (Geschäftstätigkeit)", + "Country risk level (nationality)": "Länderrisikostufe (Staatsangehörigkeit)", + "Country risk type (place of business activity)": + "Art des Länderrisikos (Ort der Geschäftstätigkeit)", + Customer: "Kunde", + "Customer Profile": "Kundenprofil", + "Customer classification": "Kundenklassifizierung", + "Customer type": "Kundentyp", + Date: "Datum", + "Date (conclusion of contract):": "Datum (Vertragsabschluss):", + "Date of birth": "Geburtsdatum", + "Declaration of identity of the beneficial owner": + "Feststellung des wirtschaftlich Berechtigten", + "Declaration of identity of the beneficial owner (A) — AML officer": + "Feststellung des wirtschaftlich Berechtigten (A) — GwG-Beauftragter", + "Declaration of identity of the beneficial owner (A) — customer": + "Feststellung des wirtschaftlich Berechtigten (A) — Kunde", + Description: "Beschreibung", + "Description of the circumstances/transactions, which triggered the special clarifications": + "Beschreibung der Umstände/Transaktionen, welche die besonderen Abklärungen ausgelöst haben", + "Detailed description of the origins/economic background of the assets involved in the business relationship": + "Detaillierte Beschreibung der Herkunft/des wirtschaftlichen Hintergrunds der in die Geschäftsbeziehung eingebrachten Vermögenswerte", + "Details on usual business volume": "Angaben zum üblichen Geschäftsvolumen", + "Domestic PEP": "Inländische PEP", + Domicile: "Sitz", + "Domicile address": "Sitzadresse", + "Domicile/residential address of the beneficial owner of the assets": + "Sitz/Wohnsitzadresse des wirtschaftlich Berechtigten der Vermögenswerte", + "Domicile/residential address of the controlling person": + "Sitz/Wohnsitzadresse des Kontrollinhabers", + "Domicile/residential address of the customer": + "Sitz/Wohnsitzadresse des Kunden", + Email: "E-Mail", + "Embargo/terrorism information:": "Embargo-/Terror-Angaben:", + "Embargo/terrorism status:": "Embargo-/Terror-Status:", + English: "Englisch", + "Enquiries with trustworthy persons": + "Erkundigungen bei vertrauenswürdigen Personen", + "Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)": + "Feststellung des Kontrollinhabers an nicht börsenkotierten, operativ tätigen juristischen Personen und Personengesellschaften (K)", + "Establishment of the controlling person (submitted by AML officer)": + "Feststellung des Kontrollinhabers (durch den AML-Beauftragten eingereicht)", + "Establishment of the controlling person (submitted by customer)": + "Feststellung des Kontrollinhabers (durch den Kunden eingereicht)", + 'Evaluation "high risk" or non-cooperative country': + "Beurteilung „Hochrisikoland“ oder nicht kooperatives Land", + "Evaluation of business relationship risk": + "Beurteilung des Risikos der Geschäftsbeziehung", + "Evaluation of politically exposed persons (PEP-Check)": + "Beurteilung politisch exponierter Personen (PEP-Check)", + "Evaluation with regard to embargo procedures/terrorism lists on establishing the business relationship": + "Prüfung im Hinblick auf Embargomassnahmen/Terrorlisten bei Aufnahme der Geschäftsbeziehung", + "Evidence of signing authority:": "Nachweis der Zeichnungsberechtigung:", + "Face to face": "Persönlich", + "Fiduciary holding assets": "Treuhänderisches Halten von Vermögenswerten", + "File (PDF)": "Datei (PDF)", + "Financial circumstances": "Finanzielle Verhältnisse", + "For legal entities and partnerships the identity of the natural persons who establish the business relationship must be verified.": + "Bei juristischen Personen und Personengesellschaften ist die Identität der natürlichen Personen, welche die Geschäftsbeziehung eröffnen, zu überprüfen.", + "Foreign PEP": "Ausländische PEP", + French: "Französisch", + "Full name": "Vollständiger Name", + "Further information": "Weitere Angaben", + "Further information:": "Weitere Angaben:", + "Gathered/Consulted documents": "Eingeholte/konsultierte Dokumente", + "Gathering of information from the customer, beneficial owner of the assets, controlling person": + "Einholung von Informationen beim Kunden, wirtschaftlich Berechtigten der Vermögenswerte, dem Kontrollinhaber", + German: "Deutsch", + "High (Risk 2)": "Hoch (Risiko 2)", + "High risk": "Hohes Risiko", + "High-risk or non-cooperative country": + "Hochrisikoland oder nicht kooperatives Land", + "Holding 25% or more": "Halten von 25% oder mehr", + "Identification Form (acceptance)": "Identifikationsformular (Annahme)", + "Identification Form (customer)": "Identifikationsformular (Kunde)", + "Identification form (basic customer information)": + "Identifikationsformular (Basisangaben zum Kunden)", + "If the capital shares or voting rights cannot be determined or in case there are no capital shares or voting rights 25% or more, the contracting partner hereby declares that the person(s) listed below is/are controlling the contracting partner in other ways": + "Falls die Kapital- oder Stimmrechtsanteile nicht festgestellt werden können oder falls keine Kapital- oder Stimmrechtsanteile von 25% oder mehr bestehen, erklärt der Vertragspartner hiermit, dass die nachfolgend aufgeführte(n) Person(en) auf andere Weise die Kontrolle über den Vertragspartner ausübt/ausüben", + "In case this/these person(s) cannot be determined or this/these person(s) does/do not exist, the contracting partner hereby declares that the person(s) listed below is/are the managing director(s)": + "Falls auch diese Person(en) nicht festgestellt werden kann/können oder diese Person(en) nicht besteht/bestehen, erklärt der Vertragspartner hiermit, dass die nachfolgend aufgeführte(n) Person(en) die Geschäftsführung ausübt/ausüben", + "Income and assets, liabilities (estimated)": + "Einkommen und Vermögen, Verbindlichkeiten (geschätzt)", + "Industry risk": "Branchenrisiko", + "Industry risk level": "Branchenrisikostufe", + "Industry risk source": "Quelle des Branchenrisikos", + "Information on customer": "Angaben zum Kunden", + "Information on customer (legal entity)": + "Angaben zum Kunden (juristische Person)", + "Information on customer (sole proprietor)": + "Angaben zum Kunden (Einzelunternehmen)", + "Information on the natural persons who establish the business relationship for legal entities and partnerships": + "Angaben zu den natürlichen Personen, die für juristische Personen und Personengesellschaften die Geschäftsbeziehung eröffnen (Eröffner)", + "Information on the planned development of the business relationship and the assets": + "Angaben zur geplanten Entwicklung der Geschäftsbeziehung und der Vermögenswerte", + Inheritance: "Erbschaft", + "Introducer / agents / references": "Vermittler / Beauftragte / Referenzen", + "Is a third person the beneficial owner of the assets held in the account/securities account?": + "Ist eine Drittperson an den auf dem Konto/Depot liegenden Vermögenswerten wirtschaftlich berechtigt?", + "Is the customer, the beneficial owner or the controlling person or authorised representative a PEP in International Organisations or closely related to such a person?": + "Ist der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter eine PEP einer internationalen Organisation oder steht in einer engen Beziehung zu einer solchen Person?", + "Is the customer, the beneficial owner or the controlling person or authorised representative a domestic PEP or closely related to such a person?": + "Ist der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter eine inländische PEP oder steht in einer engen Beziehung zu einer solchen Person?", + "Is the customer, the beneficial owner or the controlling person or authorised representative a foreign PEP or closely related to such a person?": + "Ist der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter eine ausländische PEP oder steht in einer engen Beziehung zu einer solchen Person?", + "Is the customer, the beneficial owner or the controlling person or authorised representative in a country considered by the FATF as high-risk or non-cooperative and for which FATF requires increased diligence?": + "Befindet sich der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter in einem Land, das von der FATF als Hochrisikoland oder nicht kooperatives Land eingestuft wird und für welches die FATF erhöhte Sorgfaltspflichten verlangt?", + "It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)": + "Die vorsätzliche Angabe falscher Informationen in diesem Formular ist eine strafbare Handlung (Urkundenfälschung gemäss Artikel 251 des Schweizerischen Strafgesetzbuchs).", + Italian: "Italienisch", + "Justification for risk assessment": "Begründung der Risikobeurteilung", + "Legal entity": "Juristische Person", + "Listed on embargo/terrorism list.": + "Auf einer Embargo-/Terrorliste aufgeführt.", + "Low (Risk 0)": "Niedrig (Risiko 0)", + "Managing director": "Geschäftsführer", + Mandate: "Mandat", + Means: "Mittel", + "Medium (Risk 1)": "Mittel (Risiko 1)", + "Member has no personal knowledge of the customer’s industry.": + "Das Mitglied verfügt über keine persönliche Kenntnis der Branche des Kunden.", + Nationality: "Staatsangehörigkeit", + "Nationality of the beneficial owner of the assets": + "Staatsangehörigkeit des wirtschaftlich Berechtigten der Vermögenswerte", + "Nationality of the customer": "Staatsangehörigkeit des Kunden", + "Natural person (incl. sole proprietors)": + "Natürliche Person (inkl. Einzelunternehmen)", + "Nature and purpose of the business relationship": + "Art und Zweck der Geschäftsbeziehung", + "Nature, amount and currency of deposited assets.": + "Art, Betrag und Währung der eingebrachten Vermögenswerte.", + No: "Nein", + "No high risk": "Kein hohes Risiko", + "No suspicion": "Kein Verdacht", + "Not listed on embargo/terrorism list.": + "Nicht auf einer Embargo-/Terrorliste aufgeführt.", + "Only official government IDs (incl. passports) are accepted. Please scan both sides if applicable.": + "Es werden nur amtliche Ausweise (inkl. Pässe) akzeptiert. Bitte scannen Sie gegebenenfalls beide Seiten.", + "Optional supplemental information for the establishment of the business relationship with the customer.": + "Optionale zusätzliche Informationen zur Begründung der Geschäftsbeziehung mit dem Kunden.", + "Optional supplemental information for the special clarifications.": + "Optionale ergänzende Angaben zu den besonderen Abklärungen.", + "Origin of the deposited assets involved": + "Herkunft der betroffenen eingebrachten Vermögenswerte", + Other: "Andere", + "Other means of clarification:": "Andere Abklärungsmittel:", + "Other relevant information": "Weitere relevante Angaben", + "Other type of signing authority": "Andere Art der Zeichnungsberechtigung", + "Other way": "Andere Art", + "Other, what?": "Andere, was?", + "Other, which?": "Andere, welche?", + "Own business operations": "Eigene Geschäftstätigkeit", + "PEP of International Organisations": "PEP internationaler Organisationen", + "Personal acquaintance between member and customer/beneficial owner of the assets over several years (at least 2) prior to entering into the business relationship": + "Persönliche Bekanntschaft zwischen Mitglied und Kunde/wirtschaftlich Berechtigtem der Vermögenswerte über mehrere Jahre (mindestens 2) vor Aufnahme der Geschäftsbeziehung", + "Persons establishing the legal relationship": + "Personen, welche die Geschäftsbeziehung begründen", + "Power of attorney arrangements": "Vollmachtregelung", + "Profession, business activities, etc. (former, current, potentially planned)": + "Beruf, Geschäftstätigkeiten usw. (frühere, aktuelle, allenfalls geplante)", + "Purpose of the business relationship": "Zweck der Geschäftsbeziehung", + Reason: "Grund", + "Reason for control": "Grund der Kontrolle", + "Reason for special clarifications": "Grund für besondere Abklärungen", + "Reasonable suspicion": "Begründeter Verdacht", + "Reasonable suspicion pursuant to Art. 9 AMLA, duty to file a report with MROS": + "Begründeter Verdacht gemäss Art. 9 GwG, Meldepflicht bei der MROS", + "Registered office": "Sitz", + "Relation of the customer to the beneficial owner, controlling persons, authorised signatories and other persons involved in the business relationship": + "Beziehung des Kunden zum wirtschaftlich Berechtigten, den Kontrollinhabern, den Zeichnungsberechtigten und anderen an der Geschäftsbeziehung beteiligten Personen", + "Relation to other AMLA-Files": "Bezug zu anderen GwG-Dossiers", + "Relationship with third parties": "Beziehung zu Dritten", + "Residential address": "Wohnsitzadresse", + "Residential address in Switzerland": "Wohnsitzadresse in der Schweiz", + "Residential address validated": "Wohnsitzadresse überprüft", + Result: "Ergebnis", + "Result clarification": "Erläuterung des Ergebnisses", + "Result of the special clarification": "Ergebnis der besonderen Abklärung", + "Risk 0 acc. to VQF country list (VQF doc. no. 902.4.1)": + "Risiko 0 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)", + "Risk 1 acc. to VQF country list (VQF doc. no. 902.4.1)": + "Risiko 1 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)", + "Risk 2 acc. to VQF country list (VQF doc. no. 902.4.1)": + "Risiko 2 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)", + "Risk Profile AMLA": "Risikoprofil GwG", + "Risk category according to VQF country list (VQF doc. no. 902.4.1)": + "Risikokategorie gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)", + "Risk classification": "Risikoklassifizierung", + Savings: "Ersparnisse", + "Signature(s)": "Unterschrift(en)", + "Signed Declaration": "Unterzeichnete Erklärung", + "Signed Document": "Unterzeichnetes Dokument", + "Signed declaration by the customer": "Vom Kunden unterzeichnete Erklärung", + "Signing authority of the person": "Zeichnungsberechtigung der Person", + "Simple suspicion": "Einfacher Verdacht", + "Simple suspicion pursuant to Art. 305ter Para. 2 StGB, right to notify MROS": + "Einfacher Verdacht gemäss Art. 305ter Abs. 2 StGB, Melderecht gegenüber der MROS", + "Sole proprietor": "Einzelunternehmen", + "Special Clarifications": "Besondere Abklärungen", + "Specify other way of establishing signing authority:": + "Andere Art des Nachweises der Zeichnungsberechtigung angeben:", + Summary: "Zusammenfassung", + "Summary and plausibility check of the gathered information": + "Zusammenfassung und Plausibilitätsprüfung der eingeholten Informationen", + "Summary evaluation": "Zusammenfassende Beurteilung", + "Supplemental File Upload": "Hochladen zusätzlicher Dokumente", + "Supplemental Files": "Zusätzliche Dokumente", + "Supplemental files": "Ergänzende Dokumente", + Telephone: "Telefon", + "The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.": + "Der Vertragspartner verpflichtet sich, Änderungen jeweils unaufgefordert mitzuteilen.", + "The customer has to be identified on entering into a permanent business relationship or on concluding a cash transaction, which meets the according threshold.": + "Die Vertragspartei muss identifiziert werden bei allen dauernden Geschäftsbeziehungen sowie bei Kassageschäften, bei welchen der entsprechende Schwellenwert erreicht wird.", + "The customer completes the declaration directly in the form.": + "Der Kunde füllt die Erklärung direkt im Formular aus.", + "The customer is the person with whom the member concludes the contract with regard to the financial service provided (civil law). If the\n member acts as the director of a domiciliary company, then that domiciliary company is the customer.": + "Kunde ist die Person, mit welcher das Mitglied den Vertrag über die erbrachte Finanzdienstleistung abschliesst (Zivilrecht). Handelt das\n Mitglied als Organ einer Sitzgesellschaft, so ist diese Sitzgesellschaft der Kunde.", + "The customer is:": "Der Kunde ist:", + "The customer/beneficial owner was not personally known to the member and business was entered into in the absence of the former (relationship by correspondence) and the customer was not introduced/brokered by a trusted third party.": + "Der Kunde/wirtschaftlich Berechtigte war dem Mitglied nicht persönlich bekannt, und die Geschäftsbeziehung wurde in dessen Abwesenheit eingegangen (Korrespondenzbeziehung), wobei der Kunde nicht von einem vertrauenswürdigen Dritten eingeführt/vermittelt wurde.", + "The customer/beneficial owner was not personally known to the member for several years (at least 2) prior to entering into the business relationship; however (a) no business was entered into in the absence of the customer/beneficial owner, or (b) the customer was at least introduced/brokered by a trusted third party.": + "Der Kunde/wirtschaftlich Berechtigte war dem Mitglied nicht während mehrerer Jahre (mindestens 2) vor Aufnahme der Geschäftsbeziehung persönlich bekannt; jedoch wurde (a) keine Geschäftsbeziehung in Abwesenheit des Kunden/wirtschaftlich Berechtigten eingegangen, oder (b) der Kunde wurde zumindest von einem vertrauenswürdigen Dritten eingeführt/vermittelt.", + "The information below has to refer to the persons from whom the assets originate ultimately (e.g. beneficial owner of the assets, founder/creator of a trust or foundation). Is the customer an operational legal entity or partnership the information may refer to the entity itself (not to the controlling person), unless the entity holds the assets in trust for a third party.": + "Die nachstehenden Angaben müssen sich auf die Personen beziehen, von denen die Vermögenswerte letztlich stammen (z. B. wirtschaftlich Berechtigter der Vermögenswerte, Gründer/Errichter eines Trusts oder einer Stiftung). Ist der Kunde eine operativ tätige juristische Person oder Personengesellschaft, können sich die Angaben auf die Gesellschaft selbst (nicht auf den Kontrollinhaber) beziehen, sofern die Gesellschaft die Vermögenswerte nicht treuhänderisch für einen Dritten hält.", + "The AML officer records the declaration and uploads the customer's signed PDF.": + "Der GwG-Beauftragte erfasst die Erklärung und lädt das vom Kunden unterzeichnete PDF hoch.", + "The person(s) listed below is/are holding 25% or more of the contracting partner's shares (capital shares or voting rights)": + "Die nachfolgend aufgeführte(n) Person(en) hält/halten am Vertragspartner Anteile (Kapital- oder Stimmrechtsanteile) von 25% oder mehr", + "The person(s) listed below is/are the beneficial owner(s) of the assets involved in the business relationship. If the contracting partner is also the sole beneficial owner of the assets, the contracting partner's detail must be set out below": + "Die nachfolgend aufgeführte(n) Person(en) ist/sind an den in die Geschäftsbeziehung eingebrachten Vermögenswerten wirtschaftlich berechtigt. Ist der Vertragspartner selber allein an diesen Vermögenswerten wirtschaftlich berechtigt, so sind nachstehend seine Personalien festzuhalten", + "The plausibility of the circumstances could be checked, no reasonable suspicion pursuant to Art. 9 AMLA (possibly update of customer profile and/or risk profile)": + "Die Plausibilität der Umstände konnte überprüft werden, kein begründeter Verdacht gemäss Art. 9 GwG (gegebenenfalls Aktualisierung des Kundenprofils und/oder Risikoprofils)", + "The results of the clarifications have to be documented and their plausibility has to be checked.": + "Die Ergebnisse der Abklärungen sind zu dokumentieren und auf ihre Plausibilität zu prüfen.", + "The uploaded document must contain the customer's signature on the beneficial owner declaration.": + "Das hochgeladene Dokument muss die Unterschrift des Kunden auf der Erklärung zum wirtschaftlich Berechtigten enthalten.", + "This evaluation has to be completed by all members for every business relationship.": + "Diese Beurteilung ist von allen Mitgliedern für jede Geschäftsbeziehung durchzuführen.", + "Trade in munitions/arms, raw gem stones/diamonds, jewellery, international trade in exotic animals, casino and lottery business, trade in erotic wares.": + "Handel mit Munition/Waffen, Rohedelsteinen/Diamanten, Schmuck, internationaler Handel mit exotischen Tieren, Casino- und Lotteriegeschäft, Handel mit Erotikartikeln.", + "Type of contact to the customer/beneficial owner of the assets.": + "Art des Kontakts zum Kunden/wirtschaftlich Berechtigten der Vermögenswerte.", + "Used means of clarification": "Verwendete Abklärungsmittel", + "Verification date": "Datum der Überprüfung", + "Verification whether the customer, beneficial owners of the assets, controlling persons, authorized representatives or other involved persons are listed on an embargo/terrorism list.": + "Überprüfung, ob der Kunde, die wirtschaftlich Berechtigten der Vermögenswerte, die Kontrollinhaber, bevollmächtigten Vertreter oder andere beteiligte Personen auf einer Embargo-/Terrorliste aufgeführt sind.", + "When a business relationship or transaction is associated with increased risk, appears unusual or evidence exists that the assets are the proceeds of a felony or a qualified tax offence, the member has to perform additional clarifications.": + "Wenn eine Geschäftsbeziehung oder Transaktion mit einem erhöhten Risiko verbunden ist, ungewöhnlich erscheint oder Anhaltspunkte dafür bestehen, dass die Vermögenswerte aus einem Verbrechen oder einem qualifizierten Steuervergehen stammen, hat das Mitglied zusätzliche Abklärungen durchzuführen.", + "When the decision of the Senior executive body on the acceptance of a business relationship with a PEP was obtained on.": + "Datum, an dem der Entscheid des obersten Geschäftsführungsorgans über die Annahme einer Geschäftsbeziehung mit einer PEP eingeholt wurde.", + "When the decision of the Senior executive body on the acceptance of a business relationship with increased risk was obtained on.": + "Datum, an dem der Entscheid des obersten Geschäftsführungsorgans über die Annahme einer Geschäftsbeziehung mit erhöhtem Risiko eingeholt wurde.", + "When the decision of the Senior executive body on the acceptance of such a business relationship was obtained on.": + "Datum, an dem der Entscheid des obersten Geschäftsführungsorgans über die Annahme einer solchen Geschäftsbeziehung eingeholt wurde.", + "Will the customer deposit assets with Taler Operations AG?": + "Wird der Kunde Vermögenswerte bei der Taler Operations AG einbringen?", + Yes: "Ja", + "can't be empty": "darf nicht leer sein", + "for operating legal entities and partnerships that are contracting partner as well as analogously for operating legal entities and partnership that are beneficial owners": + "bei operativ tätigen juristischen Personen und Personengesellschaften als Vertragspartner sowie sinngemäss bei operativ tätigen juristischen Personen und Personengesellschaften als wirtschaftlich Berechtigte", + "invalid format": "ungültiges Format", + "it can't be greater than 120 years": "darf nicht größer als 120 Jahre sein", + "it can't be in the future": "darf nicht in der Zukunft liegen", +}; + +function templateMessageId(parts: readonly string[]): string { + let result = ""; + for (let index = 0; index < parts.length; index++) { + result += parts[index]; + if (index < parts.length - 1) result += `%${index + 1}$s`; + } + return result; +} + +export function withVqfTranslations( + base: InternationalizationAPI, +): InternationalizationAPI { + return { + ...base, + str(parts: TemplateStringsArray, ...values: any[]) { + const english = templateMessageId(parts); + const german = fixedGermanByEnglish[english]; + if (german === undefined) return base.str(parts, ...values); + return base.fixed({ en: english, de: german }, ...values); + }, + }; +} + +export function vqfLanguagePolicy( + i18n: InternationalizationAPI, +): FormLanguagePolicy { + return { + officialLanguages: ["de", "en"], + legallyBindingLanguages: ["de"], + fallbackLanguage: "en", + legallyBindingLanguageLabel: i18n.fixed({ en: "German", de: "Deutsch" }), + fallbackLanguageLabel: i18n.fixed({ en: "English", de: "Englisch" }), + }; +}