Zum Inhalt

🌐 i18n & Vocabulary

B2B Professional Language - "42 Philosophy"


🎯 Language Philosophy

The 42 Principle

"Wir machen Geschäfte, keine Frühstücksbilder"

  • ✅ LinkedIn-Style Professional
  • ✅ Technisch Präzise
  • ✅ Warm aber nicht casual
  • ❌ Kein Social Media Slang
  • ❌ Keine Emojis in Verträgen

📊 Vocabulary Matrix

Universal Terms (All Instances)

Concept DE EN FR
Contract Vertrag Contract Contrat
Party A Vertragspartner A Contracting Party A Partie contractante A
Party B Vertragspartner B Contracting Party B Partie contractante B
Asset Vermögenswert Asset Actif
Payment Zahlung Payment Paiement
Document Dokument Document Document
Signature Unterschrift Signature Signature
Status Status Status Statut

🏢 Instance-Specific Vocabulary

FLO (GYM + Immobilien)

GYM Context

Concept DE EN FR
Asset Mitgliedschaft Membership Adhésion
Party A Studio Betreiber Studio Operator Exploitant du studio
Party B Mitglied Member Membre
Test Probetraining Trial Session Séance d'essai
Contract Mitgliedsvertrag Membership Agreement Contrat d'adhésion

Immobilien Context

Concept DE EN FR
Asset Immobilie Property Propriété
Party A Vermieter / Verkäufer Landlord / Seller Propriétaire / Vendeur
Party B Mieter / Käufer Tenant / Buyer Locataire / Acheteur
Test Besichtigung Viewing Visite
Contract Mietvertrag / Kaufvertrag Lease / Purchase Agreement Bail / Contrat de vente

MORELO (Wohnmobile)

Concept DE EN FR
Asset Reisemobil Motorhome Camping-car
Party A Händler Dealer Concessionnaire
Party B Kunde Customer Client
Test Probefahrt Test Drive Essai routier
Contract Kaufvertrag / Leasingvertrag Purchase / Lease Agreement Contrat de vente / Leasing
Model Line Modellreihe Model Line Gamme de modèles
Configuration Ausstattung Configuration Configuration
Dealer Händler Dealer Concessionnaire

MORELO-Spezifisch:

Term DE EN
PALACE PALACE (unchanged) PALACE
EMPIRE EMPIRE (unchanged) EMPIRE
LOFT LOFT (unchanged) LOFT
HOME HOME (unchanged) HOME

Vocabulary Rules

  • ❌ NIEMALS "Wohnwagen" (das sind Anhänger!)
  • ❌ NIEMALS "Camper" (zu casual)
  • ✅ IMMER "Reisemobil" oder "Wohnmobil"
  • ✅ IMMER korrekte Modellnamen (PALACE, nicht Palace)

Bavaria Yachts (Vision)

Concept DE EN FR
Asset Yacht Yacht Yacht
Party A Werft Shipyard Chantier naval
Party B Eigner Owner Propriétaire
Test Probefahrt Sea Trial Essai en mer
Contract Kaufvertrag / Chartervertrag Purchase / Charter Agreement Contrat de vente / Charter
Dealer Marina / Werft Marina / Dealer Marina / Concessionnaire

Porsche / Hypercars (Vision)

Concept DE EN FR
Asset Fahrzeug Vehicle Véhicule
Party A Porsche Zentrum Porsche Center Centre Porsche
Party B Käufer Buyer Acheteur
Test Probefahrt / Track Day Test Drive / Track Day Essai / Journée circuit
Contract Kaufvertrag Purchase Agreement Contrat de vente

Verge Motorcycles (Vision)

Concept DE EN FR
Asset Motorrad Motorcycle Moto
Party A Händler Dealer Concessionnaire
Party B Käufer Buyer Acheteur
Test Probefahrt Test Ride Essai
Contract Kaufvertrag Purchase Agreement Contrat de vente

🔧 Implementation

TypeScript Interface

export interface VocabularyConfig {
  instance_id: string;
  locale: 'de-DE' | 'en-US' | 'fr-FR';
  context?: string;  // 'gym' | 'immobilien' | 'wohnmobil' | 'yacht'
}

export const getVocabulary = (
  concept: string,
  config: VocabularyConfig
): string => {
  const { instance_id, locale, context } = config;

  // Instance-specific overrides
  const overrides = vocabulary.instances[instance_id];

  if (overrides && context && overrides[concept]?.[locale]?.[context]) {
    return overrides[concept][locale][context];
  }

  // Fallback to universal terms
  return vocabulary.universal[concept]?.[locale] || concept;
};

Usage Example

// MORELO Context
const term = getVocabulary('asset', {
  instance_id: 'morelo',
  locale: 'de-DE',
});
// Returns: "Reisemobil"

// FLO GYM Context
const term = getVocabulary('asset', {
  instance_id: 'flo',
  locale: 'de-DE',
  context: 'gym',
});
// Returns: "Mitgliedschaft"

// FLO Immobilien Context
const term = getVocabulary('asset', {
  instance_id: 'flo',
  locale: 'de-DE',
  context: 'immobilien',
});
// Returns: "Immobilie"

📝 Contract Templates

Template Structure

templates/
├── de-DE/
│   ├── kfz_kaufvertrag.hbs
│   ├── mietvertrag.hbs
│   ├── membership.hbs
│   └── yacht_charter.hbs
├── en-US/
│   ├── vehicle_purchase.hbs
│   ├── lease_agreement.hbs
│   ├── membership.hbs
│   └── yacht_charter.hbs
└── fr-FR/
    ├── contrat_achat_vehicule.hbs
    ├── bail.hbs
    └── adhesion.hbs

Example: MORELO Kaufvertrag

{{!-- templates/de-DE/kfz_kaufvertrag.hbs --}}

# Kaufvertrag - {{asset.manufacturer}} {{asset.model}}

**zwischen**

**{{party_a.name}}**  
{{party_a.address}}  
Steuernummer: {{party_a.tax_id}}

*nachfolgend „Verkäufer" genannt*

**und**

**{{party_b.first_name}} {{party_b.last_name}}**  
{{party_b.address}}

*nachfolgend „Käufer" genannt*

---

## § 1 Kaufgegenstand

Der Verkäufer verkauft dem Käufer das folgende Reisemobil:

- **Hersteller:** {{asset.manufacturer}}
- **Modell:** {{asset.model}}
- **Fahrgestellnummer (FIN):** {{asset.vin}}
- **Chassis:** {{asset.configuration.chassis}}
- **Motor:** {{asset.configuration.engine}}

**Ausstattung:**
{{#each asset.configuration.options}}
- {{this}}
{{/each}}

---

## § 2 Kaufpreis

Der Kaufpreis beträgt:

**{{financials.total_amount}} {{financials.currency}}**

(in Worten: {{financials.total_amount_words}})

{{#if financials.payment_terms.down_payment}}
**Anzahlung:** {{financials.payment_terms.down_payment}} {{financials.currency}}  
**Restbetrag:** {{subtract financials.total_amount financials.payment_terms.down_payment}} {{financials.currency}}
{{/if}}

---

## § 3 Unterschriften

**Ort, Datum:** ________________

**Verkäufer:**  
_________________________

**Käufer:**  
_________________________

🎨 UI Labels

Component Library

// @contractplattform/ui/src/labels.ts

export const labels = {
  'de-DE': {
    'button.sign': 'Unterschreiben',
    'button.download': 'PDF Herunterladen',
    'button.cancel': 'Abbrechen',
    'status.draft': 'Entwurf',
    'status.signed': 'Unterschrieben',
    'form.first_name': 'Vorname',
    'form.last_name': 'Nachname',
  },
  'en-US': {
    'button.sign': 'Sign',
    'button.download': 'Download PDF',
    'button.cancel': 'Cancel',
    'status.draft': 'Draft',
    'status.signed': 'Signed',
    'form.first_name': 'First Name',
    'form.last_name': 'Last Name',
  },
};

Instance Overrides

// MORELO-specific labels
export const moreloLabels = {
  'de-DE': {
    'asset.title': 'Reisemobil',
    'asset.vin': 'Fahrgestellnummer (FIN)',
    'party_a.label': 'Händler',
    'party_b.label': 'Kunde',
  },
};

// FLO GYM-specific labels
export const floGymLabels = {
  'de-DE': {
    'asset.title': 'Mitgliedschaft',
    'party_a.label': 'Studio Betreiber',
    'party_b.label': 'Mitglied',
  },
};

🌍 Supported Locales

Locale Language Priority
de-DE Deutsch ✅ Primary
en-US English (US) ✅ Primary
fr-FR Français 🟡 Secondary
it-IT Italiano 🔮 Future
es-ES Español 🔮 Future

📋 Translation Workflow

1. Add New Term

// vocabulary.ts
export const vocabulary = {
  universal: {
    // ...existing
    'new_concept': {
      'de-DE': 'Neues Konzept',
      'en-US': 'New Concept',
      'fr-FR': 'Nouveau Concept',
    },
  },
};

2. Instance Override (if needed)

vocabulary.instances.morelo = {
  'new_concept': {
    'de-DE': {
      'default': 'Morelo-spezifischer Begriff',
    },
  },
};

3. Update Templates

{{t 'new_concept'}}

Next: Scaling Guide →