This commit is contained in:
2024-12-05 01:33:16 +01:00
parent 9517687902
commit f2d585ed36
12 changed files with 97 additions and 68 deletions

View File

@ -213,7 +213,7 @@ export const demoLetter: plugins.tsclass.business.ILetter = {
export const demoDocumentSettings: interfaces.IDocumentSettings = {
enableTopDraftText: true,
enableDefaultHeader: false,
enableDefaultFooter: false,
enableDefaultHeader: true,
enableDefaultFooter: true,
languageCode: 'DE',
};

View File

@ -5,4 +5,5 @@ export interface IDocumentSettings {
enableDefaultHeader?: boolean;
enableDefaultFooter?: boolean;
languageCode?: translation.TLanguageCode;
vatGroupPositions?: boolean;
}

View File

@ -1,2 +1 @@
export * from './document.js';
export * from './translation.js';

View File

@ -1,19 +0,0 @@
export interface IDeDocumentTranslations {
address: string;
bankConnection: string;
contactInfo: string;
description: string;
invoice: string;
itemPos: string;
quantity: string;
registrationInfo: string;
reverseVatNote: string;
totalNetPrice: string;
unitNetPrice: string;
unitType: string;
yourCustomerId: string;
yourVatId: string;
continuesOnPage: string;
finalPageStatement: string;
page: string;
}

View File

@ -1,10 +1,7 @@
import * as interfaces from './interfaces/index.js';
type TTranslationImplementation = {
[key in keyof interfaces.IDeDocumentTranslations]: string;
}
export const EN_translations: TTranslationImplementation = {
// Define English translations without enforcing TTranslationImplementation yet
export const EN_translations = {
address: 'Address',
bankConnection: 'Bank Connection',
contactInfo: 'Contact Info',
@ -22,8 +19,17 @@ export const EN_translations: TTranslationImplementation = {
continuesOnPage: 'Continues on page',
finalPageStatement: 'This is the final page of this document.',
page: 'Page',
} as const;
// Infer keys of EN_translations
export type TTranslationKey = keyof typeof EN_translations;
// Define the type for all translations based on EN_translations keys
export type TTranslationImplementation = {
[key in TTranslationKey]: string;
};
// Define German translations
export const DE_translations: TTranslationImplementation = {
address: 'Adresse',
bankConnection: 'Bankverbindung',
@ -33,9 +39,10 @@ export const DE_translations: TTranslationImplementation = {
itemPos: 'Pos.',
quantity: 'Anzahl',
registrationInfo: 'HRA/HRB Info',
reverseVatNote: 'Umkehr der Umsatzsteuerpflicht: Der Rechnungsempfänger ist für die korrekte Abrechnung der Umsatzsteuer zuständig.',
totalNetPrice: 'Nettopreis Summe',
unitNetPrice: 'Nettopreis',
reverseVatNote:
'Umkehr der Umsatzsteuerpflicht: Der Rechnungsempfänger ist für die korrekte Abrechnung der Umsatzsteuer zuständig.',
totalNetPrice: 'Summe netto',
unitNetPrice: 'Einheit netto',
unitType: 'Einheit',
yourCustomerId: 'Ihre Kundennummer:',
yourVatId: 'Ihre Umsatzsteuer-ID:',
@ -44,6 +51,7 @@ export const DE_translations: TTranslationImplementation = {
page: 'Seite',
};
// Define Spanish translations
export const ES_translations: TTranslationImplementation = {
address: 'Dirección',
bankConnection: 'Conexión bancaria',
@ -64,6 +72,7 @@ export const ES_translations: TTranslationImplementation = {
page: 'Página',
};
// Define French translations
export const FR_translations: TTranslationImplementation = {
address: 'Adresse',
bankConnection: 'Coordonnées bancaires',
@ -72,11 +81,12 @@ export const FR_translations: TTranslationImplementation = {
invoice: 'Facture',
itemPos: 'Position',
quantity: 'Quantité',
registrationInfo: 'Informations d\'enregistrement',
reverseVatNote: 'La TVA s\'applique selon le mécanisme d\'autoliquidation et est à payer par le client.',
registrationInfo: "Informations d'enregistrement",
reverseVatNote:
"La TVA s'applique selon le mécanisme d'autoliquidation et est à payer par le client.",
totalNetPrice: 'Prix net total',
unitNetPrice: 'Prix unitaire net',
unitType: 'Type d\'unité',
unitType: "Type d'unité",
yourCustomerId: 'Votre numéro de client :',
yourVatId: 'Votre numéro de TVA :',
continuesOnPage: 'Continue sur la page',
@ -84,6 +94,7 @@ export const FR_translations: TTranslationImplementation = {
page: 'Page',
};
// Define Italian translations
export const IT_translations: TTranslationImplementation = {
address: 'Indirizzo',
bankConnection: 'Coordinate bancarie',
@ -93,7 +104,7 @@ export const IT_translations: TTranslationImplementation = {
itemPos: 'Pos.',
quantity: 'Quantità',
registrationInfo: 'Informazioni di registrazione',
reverseVatNote: 'L\'IVA è applicata con inversione contabile ed è a carico del cliente.',
reverseVatNote: "L'IVA è applicata con inversione contabile ed è a carico del cliente.",
totalNetPrice: 'Prezzo netto totale',
unitNetPrice: 'Prezzo netto unitario',
unitType: 'Tipo di unità',
@ -104,21 +115,24 @@ export const IT_translations: TTranslationImplementation = {
page: 'Pagina',
};
export const languageCodeMap = {
'DE': DE_translations,
'EN': EN_translations,
'ES': ES_translations,
'FR': FR_translations,
'IT': IT_translations,
// Language Code Map
export const languageCodeMap: Record<string, TTranslationImplementation> = {
EN: EN_translations,
DE: DE_translations,
ES: ES_translations,
FR: FR_translations,
IT: IT_translations,
};
// Language Code Type
export type TLanguageCode = keyof typeof languageCodeMap;
export const translate = (languageCode: TLanguageCode, key: string, defaultValue: string) => {
// Translate Function
export const translate = (
languageCode: TLanguageCode,
key: TTranslationKey,
defaultValue: string
): string => {
const translations = languageCodeMap[languageCode] || EN_translations;
if (translations && translations[key]) {
return translations[key];
} else {
return defaultValue;
}
return translations[key] || defaultValue;
};