Files
AOS/src/lib/i18n.ts
T

187 lines
5.6 KiB
TypeScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// AOS i18n — German (default), English, Turkish (PRD §5.5)
// All UI strings keyed, no literals in components.
export type Locale = 'de' | 'en' | 'tr'
export const LOCALES: { id: Locale; label: string; flag: string }[] = [
{ id: 'de', label: 'Deutsch', flag: '🇩🇪' },
{ id: 'en', label: 'English', flag: '🇬🇧' },
{ id: 'tr', label: 'Türkçe', flag: '🇹🇷' },
]
type Dict = Record<string, string>
const de: Dict = {
// Nav groups
'nav.overview': 'Übersicht',
'nav.sales': 'Vertrieb',
'nav.delivery': 'Lieferung',
'nav.operations': 'Betrieb',
'nav.system': 'System',
// Nav items
'nav.dashboard': 'Dashboard',
'nav.calendar': 'Fristen',
'nav.reporting': 'Reporting',
'nav.crm': 'CRM',
'nav.leads': 'Leads Finder',
'nav.estimates': 'Angebote',
'nav.projects': 'Projekte',
'nav.support': 'Support',
'nav.licenses': 'Lizenzen',
'nav.agency': 'Reseller',
'nav.instances': 'Instanzen',
'nav.contracts': 'Verträge',
'nav.expenses': 'Ausgaben',
'nav.finance': 'Finanzen',
'nav.accounting': 'Buchhaltung',
'nav.audit': 'Audit-Protokoll',
'nav.kb': 'Wissensdatenbank',
'nav.api': 'API & Webhooks',
'nav.settings': 'Erweiterungen',
'nav.setup': 'Setup-Wizard',
'nav.settings_global': 'Einstellungen',
// Common
'common.search': 'Suchen…',
'common.new': 'Neu',
'common.save': 'Speichern',
'common.cancel': 'Abbrechen',
'common.close': 'Schließen',
'common.all': 'Alle',
'common.status': 'Status',
'common.actions': 'Aktion',
'common.date': 'Datum',
'common.amount': 'Betrag',
'common.customer': 'Kunde',
'common.loading': 'Lädt…',
// KPIs
'kpi.pipelineValue': 'Offene Pipeline',
'kpi.wonDeals': 'Gewonnene Deals',
'kpi.pendingLeads': 'Leads in Review',
'kpi.openProjects': 'Aktive Projekte',
'kpi.activeLicenses': 'Aktive Lizenzen',
'kpi.outstanding': 'Offene Forderungen',
'kpi.team': 'Team',
// Footer
'footer.compliance': 'GoBD / DSGVO',
'footer.selfHosted': 'self-hosted',
'footer.version': 'Version',
// Portal
'portal.title': 'Client-Portal',
'portal.selectCompany': 'Wähle dein Unternehmen',
'portal.isolated': 'projektbezogener Zugriff',
}
const en: Dict = {
'nav.overview': 'Overview',
'nav.sales': 'Sales',
'nav.delivery': 'Delivery',
'nav.operations': 'Operations',
'nav.system': 'System',
'nav.dashboard': 'Dashboard',
'nav.calendar': 'Fristen',
'nav.reporting': 'Reporting',
'nav.crm': 'CRM',
'nav.leads': 'Leads Finder',
'nav.estimates': 'Estimates',
'nav.projects': 'Projects',
'nav.support': 'Support',
'nav.licenses': 'Licenses',
'nav.agency': 'Resellers',
'nav.instances': 'Instances',
'nav.contracts': 'Contracts',
'nav.expenses': 'Expenses',
'nav.finance': 'Finance',
'nav.accounting': 'Accounting',
'nav.audit': 'Audit Log',
'nav.kb': 'Knowledge Base',
'nav.api': 'API & Webhooks',
'nav.settings': 'Extensions',
'nav.setup': 'Setup Wizard',
'nav.settings_global': 'Settings',
'common.search': 'Search…',
'common.new': 'New',
'common.save': 'Save',
'common.cancel': 'Cancel',
'common.close': 'Close',
'common.all': 'All',
'common.status': 'Status',
'common.actions': 'Action',
'common.date': 'Date',
'common.amount': 'Amount',
'common.customer': 'Customer',
'common.loading': 'Loading…',
'kpi.pipelineValue': 'Open Pipeline',
'kpi.wonDeals': 'Won Deals',
'kpi.pendingLeads': 'Leads in Review',
'kpi.openProjects': 'Active Projects',
'kpi.activeLicenses': 'Active Licenses',
'kpi.outstanding': 'Outstanding',
'kpi.team': 'Team',
'footer.compliance': 'GoBD / GDPR',
'footer.selfHosted': 'self-hosted',
'footer.version': 'Version',
'portal.title': 'Client Portal',
'portal.selectCompany': 'Select your company',
'portal.isolated': 'project-scoped access',
}
const tr: Dict = {
'nav.overview': 'Genel Bakış',
'nav.sales': 'Satış',
'nav.delivery': 'Teslimat',
'nav.operations': 'Operasyon',
'nav.system': 'Sistem',
'nav.dashboard': 'Panel',
'nav.calendar': 'Son Tarihler',
'nav.reporting': 'Raporlama',
'nav.crm': 'CRM',
'nav.leads': 'Müşteri Adayı Bulucu',
'nav.estimates': 'Teklifler',
'nav.projects': 'Projeler',
'nav.support': 'Destek',
'nav.licenses': 'Lisanslar',
'nav.agency': 'Bayiler',
'nav.instances': 'Sunucular',
'nav.contracts': 'Sözleşmeler',
'nav.expenses': 'Giderler',
'nav.finance': 'Finans',
'nav.accounting': 'Muhasebe',
'nav.audit': 'Denetim Günlüğü',
'nav.kb': 'Bilgi Bankası',
'nav.api': 'API & Webhook',
'nav.settings': 'Eklentiler',
'nav.setup': 'Kurulum Sihirbazı',
'nav.settings_global': 'Ayarlar',
'common.search': 'Ara…',
'common.new': 'Yeni',
'common.save': 'Kaydet',
'common.cancel': 'İptal',
'common.close': 'Kapat',
'common.all': 'Tümü',
'common.status': 'Durum',
'common.actions': 'İşlem',
'common.date': 'Tarih',
'common.amount': 'Tutar',
'common.customer': 'Müşteri',
'common.loading': 'Yükleniyor…',
'kpi.pipelineValue': 'Açık Pipeline',
'kpi.wonDeals': 'Kazanılan Anlaşmalar',
'kpi.pendingLeads': 'İncelemede Adaylar',
'kpi.openProjects': 'Aktif Projeler',
'kpi.activeLicenses': 'Aktif Lisanslar',
'kpi.outstanding': 'Açık Alacaklar',
'kpi.team': 'Ekip',
'footer.compliance': 'GoBD / KVKK',
'footer.selfHosted': 'self-hosted',
'footer.version': 'Sürüm',
'portal.title': 'Müşteri Portalı',
'portal.selectCompany': 'Şirketinizi seçin',
'portal.isolated': 'proje kapsamlı erişim',
}
const DICTS: Record<Locale, Dict> = { de, en, tr }
export function translate(key: string, locale: Locale): string {
return DICTS[locale]?.[key] ?? DICTS.de[key] ?? key
}