-
{t('parcelInfoPanel.gesamtflaeche')}
+
{t('Gesamtfläche')}
{selectionSummary.total_area_m2.toFixed(2)} m²
{selectionSummary.total_area_m2 >= 10000 && (
@@ -266,7 +266,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
@@ -317,7 +317,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
)}
{parcelData.parcel.area_m2 !== undefined && (
-
{t('parcelInfoPanel.flaeche')}
+
{t('Fläche')}
{parcelData.parcel.area_m2.toFixed(2)} m²
{parcelData.parcel.area_m2 >= 10000 && (
@@ -330,7 +330,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
)}
{parcelData.parcel.realestate_type && (
- {t('parcelInfoPanel.grundstueckstyp')}
+ {t('Grundstückstyp')}
{parcelData.parcel.realestate_type}
)}
@@ -344,7 +344,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
Bauzonenverordnung
{docsLoading[parcelData.parcel.id] && (
-
{t('parcelInfoPanel.dokumenteWerdenGeladen')}
+
{t('Dokumente werden geladen')}
)}
{docsError[parcelData.parcel.id] && (
{docsError[parcelData.parcel.id]}
@@ -362,7 +362,7 @@ const ParcelInfoPanel: React.FC
= ({ isOpen,
fileName: doc.fileName,
mimeType: doc.mimeType
})}
- title={t('parcelInfoPanel.dokumentOeffnen')}
+ title={t('Dokument öffnen')}
>
Öffnen
@@ -380,7 +380,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
areaForMach
)}
disabled={extractLoading[parcelData.parcel.id]}
- title={t('parcelInfoPanel.inhaltMitLanggraphExtrahierenInkl')}
+ title={t('Inhalt mit Langgraph extrahieren inkl.')}
>
{extractLoading[parcelData.parcel.id] ? (
@@ -404,7 +404,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
<>
{fakten.length > 0 && (
-
{t('parcelInfoPanel.faktenAusBzo')}
+
{t('Fakten aus BZO')}
{fakten.map((row: { item: string; value: string; source?: string }, i: number) => (
-
@@ -421,7 +421,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
)}
{vorschlaege.length > 0 && (
-
{t('parcelInfoPanel.vorschlaege')}
+
{t('Vorschläge')}
{vorschlaege.map((row: { item: string; value: string; is_section?: boolean } | string, i: number) => {
if (typeof row === 'string') return - {row}
;
@@ -440,7 +440,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
)}
{zusatzinfo.length > 0 && (
-
{t('parcelInfoPanel.weiterfuehrendeBestimmungen')}
+
{t('Weiterführende Bestimmungen')}
{zusatzinfo.map((art: { article_label: string; article_title: string; text: string; source?: string }, i: number) => (
@@ -491,7 +491,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
})()}
{import.meta.env.DEV && (
- {t('parcelInfoPanel.detailsAnzeigen')}
+ {t('Details anzeigen')}
{JSON.stringify(parcelData.parcel.zone, null, 2)}
@@ -532,7 +532,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
@@ -583,7 +583,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
)}
{parcelData.parcel.area_m2 !== undefined && (
-
{t('parcelInfoPanel.flaeche')}
+
{t('Fläche')}
{parcelData.parcel.area_m2.toFixed(2)} m²
{parcelData.parcel.area_m2 >= 10000 && (
@@ -596,7 +596,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
)}
{parcelData.parcel.realestate_type && (
- {t('parcelInfoPanel.grundstueckstyp')}
+ {t('Grundstückstyp')}
{parcelData.parcel.realestate_type}
)}
@@ -610,7 +610,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
Bauzonenverordnung
{docsLoading[parcelData.parcel.id] && (
-
{t('parcelInfoPanel.dokumenteWerdenGeladen')}
+
{t('Dokumente werden geladen')}
)}
{docsError[parcelData.parcel.id] && (
{docsError[parcelData.parcel.id]}
@@ -628,7 +628,7 @@ const ParcelInfoPanel: React.FC
= ({ isOpen,
fileName: doc.fileName,
mimeType: doc.mimeType
})}
- title={t('parcelInfoPanel.dokumentOeffnen')}
+ title={t('Dokument öffnen')}
>
Öffnen
@@ -646,7 +646,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
areaForMachFlat
)}
disabled={extractLoading[parcelData.parcel.id]}
- title={t('parcelInfoPanel.inhaltMitLanggraphExtrahierenInkl')}
+ title={t('Inhalt mit Langgraph extrahieren inkl.')}
>
{extractLoading[parcelData.parcel.id] ? (
@@ -670,7 +670,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
<>
{fakten.length > 0 && (
-
{t('parcelInfoPanel.faktenAusBzo')}
+
{t('Fakten aus BZO')}
{fakten.map((row: { item: string; value: string; source?: string }, i: number) => (
-
@@ -687,7 +687,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
)}
{vorschlaege.length > 0 && (
-
{t('parcelInfoPanel.vorschlaege')}
+
{t('Vorschläge')}
{vorschlaege.map((row: { item: string; value: string; is_section?: boolean } | string, i: number) => {
if (typeof row === 'string') return - {row}
;
@@ -706,7 +706,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
)}
{zusatzinfo.length > 0 && (
-
{t('parcelInfoPanel.weiterfuehrendeBestimmungen')}
+
{t('Weiterführende Bestimmungen')}
{zusatzinfo.map((art: { article_label: string; article_title: string; text: string; source?: string }, i: number) => (
@@ -755,7 +755,7 @@ const ParcelInfoPanel: React.FC = ({ isOpen,
})()}
{import.meta.env.DEV && (
- {t('parcelInfoPanel.detailsAnzeigen')}
+ {t('Details anzeigen')}
{JSON.stringify(parcelData.parcel.zone, null, 2)}
@@ -843,7 +843,7 @@ export const BZOInformationDisplay: React.FC = ({ da
{/* Summary Section */}
{data.ai_summary && (
-
{t('parcelInfoPanel.zusammenfassung')}
+
{t('Zusammenfassung')}
= ({ da
{/* Statistics */}
{data.extracted_content && (
-
{t('parcelInfoPanel.statistiken')}
+
{t('Statistiken')}
Zonen:
diff --git a/src/components/UiComponents/Popup/Popup.tsx b/src/components/UiComponents/Popup/Popup.tsx
index 4017ff2..fbdbe7f 100644
--- a/src/components/UiComponents/Popup/Popup.tsx
+++ b/src/components/UiComponents/Popup/Popup.tsx
@@ -108,7 +108,7 @@ export function Popup({
diff --git a/src/components/UiComponents/Toast/Toast.tsx b/src/components/UiComponents/Toast/Toast.tsx
index ac3b6ff..4829c45 100644
--- a/src/components/UiComponents/Toast/Toast.tsx
+++ b/src/components/UiComponents/Toast/Toast.tsx
@@ -53,7 +53,7 @@ export const Toast: React.FC
= ({ toast, onClose }) => {
diff --git a/src/components/UiComponents/ViewForm/ViewForm.tsx b/src/components/UiComponents/ViewForm/ViewForm.tsx
index f761210..9f64827 100644
--- a/src/components/UiComponents/ViewForm/ViewForm.tsx
+++ b/src/components/UiComponents/ViewForm/ViewForm.tsx
@@ -50,7 +50,7 @@ export function ViewForm>({
if (field.type) {
// Boolean/Checkbox types
if (isCheckboxType(field.type)) {
- return value ? t('viewForm.yes') : t('viewForm.no');
+ return value ? t('Ja') : t('Nein');
}
// Select/Enum types
diff --git a/src/components/UiComponents/WorkflowStatus/WorkflowStatus.tsx b/src/components/UiComponents/WorkflowStatus/WorkflowStatus.tsx
index a43168f..b400967 100644
--- a/src/components/UiComponents/WorkflowStatus/WorkflowStatus.tsx
+++ b/src/components/UiComponents/WorkflowStatus/WorkflowStatus.tsx
@@ -69,7 +69,7 @@ const WorkflowStatus: React.FC = ({
{/* Status and Round Badges */}
{showSpinner && (
-
+
)}
{workflowStatus.status && (
diff --git a/src/components/UnifiedDataBar/ChatsTab.tsx b/src/components/UnifiedDataBar/ChatsTab.tsx
index ef751e5..225a5ff 100644
--- a/src/components/UnifiedDataBar/ChatsTab.tsx
+++ b/src/components/UnifiedDataBar/ChatsTab.tsx
@@ -309,7 +309,7 @@ const ChatsTab: React.FC = ({ context,
@@ -331,7 +331,7 @@ const ChatsTab: React.FC = ({ context,
return labels[code] || code;
};
- if (loading) return {t('chatsTab.ladeChats')}
;
+ if (loading) return {t('Chats werden geladen…')}
;
return (
diff --git a/src/components/UnifiedDataBar/FilesTab.tsx b/src/components/UnifiedDataBar/FilesTab.tsx
index 93510ac..df87e91 100644
--- a/src/components/UnifiedDataBar/FilesTab.tsx
+++ b/src/components/UnifiedDataBar/FilesTab.tsx
@@ -233,7 +233,7 @@ const FilesTab: React.FC = ({ context, onFileSelect }) => {
}
}, [_loadFiles]);
- if (loading) return {t('filesTab.ladeDateien')}
;
+ if (loading) return {t('Dateien laden')}
;
return (
= ({ context, onFileSelect }) => {
onClick={() => fileInputRef.current?.click()}
disabled={uploading}
style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: 12, color: '#F25843' }}
- title={t('filesTab.uploadFiles')}
+ title={t('Dateien hochladen')}
>
{uploading ? '...' : '+'}
@@ -284,7 +284,7 @@ const FilesTab: React.FC
= ({ context, onFileSelect }) => {
setSearchQuery(e.target.value)}
style={{
@@ -325,7 +325,7 @@ const FilesTab: React.FC = ({ context, onFileSelect }) => {
{_fileNodes.length === 0 && (
- {searchQuery ? t('filesTab.keineDateienGefunden') : t('filesTab.keineDateienDragDropZum')}
+ {searchQuery ? t('Keine Dateien gefunden') : t('Keine Dateien. Drag & Drop zum Hochladen.')}
)}
diff --git a/src/components/UnifiedDataBar/SourcesTab.tsx b/src/components/UnifiedDataBar/SourcesTab.tsx
index f2c627a..b050d89 100644
--- a/src/components/UnifiedDataBar/SourcesTab.tsx
+++ b/src/components/UnifiedDataBar/SourcesTab.tsx
@@ -853,14 +853,14 @@ const SourcesTab: React.FC = ({ context, onSourcesChanged }) =>
fontSize: 13, padding: '0 2px', lineHeight: 1,
opacity: ds.neutralize ? 1 : 0.35,
}}
- title={ds.neutralize ? t('sourcesTab.neutralizeOnClickToDeactivate') : t('sourcesTab.neutralizeOffClickToActivate')}
+ title={ds.neutralize ? t('Neutralisierung: Klick zum Deaktivieren') : t('Neutralisierung aus: Klick zum Aktivieren')}
>
{'\uD83D\uDD12'}
@@ -956,7 +956,7 @@ const SourcesTab: React.FC = ({ context, onSourcesChanged }) =>
@@ -986,14 +986,14 @@ const SourcesTab: React.FC = ({ context, onSourcesChanged }) =>
@@ -1029,14 +1029,14 @@ const SourcesTab: React.FC = ({ context, onSourcesChanged }) =>
@@ -1167,13 +1167,13 @@ const _TreeNodeView: React.FC<_TreeNodeViewProps> = ({
opacity: isAdding ? 0.5 : 1,
flexShrink: 0,
}}
- title={t('sourcesTab.addAsDataSource')}
+ title={t('Als Datenquelle hinzufügen')}
>
{isAdding ? '...' : '+ Add'}
)}
{canAdd && alreadyAdded && (
-
+
{'\u2713'}
)}
@@ -1431,13 +1431,13 @@ const _FeatureTableRow: React.FC<_FeatureTableRowProps> = ({
fontSize: 10, color: '#7b1fa2', padding: '1px 5px',
opacity: isAdding ? 0.5 : 1, flexShrink: 0,
}}
- title={t('sourcesTab.addAsFeatureDataSource')}
+ title={t('Als Feature-Datenquelle hinzufügen')}
>
{isAdding ? '...' : '+ Add'}
)}
{isAdded && (
-
+
{'\u2713'}
)}
@@ -1578,13 +1578,13 @@ const _ParentRecordRow: React.FC<_ParentRecordRowProps> = ({
fontSize: 10, color: '#7b1fa2', padding: '1px 5px',
opacity: isAdding ? 0.5 : 1, flexShrink: 0,
}}
- title={t('sourcesTab.addAllTablesForThis')}
+ title={t('Alle Tabellen für diese Quelle hinzufügen')}
>
{isAdding ? '...' : '+ Add'}
)}
{isAdded && (
-
+
{'\u2713'}
)}
diff --git a/src/hooks/useAccessRules.tsx b/src/hooks/useAccessRules.tsx
index 2ed1423..7b19dec 100644
--- a/src/hooks/useAccessRules.tsx
+++ b/src/hooks/useAccessRules.tsx
@@ -21,10 +21,10 @@ export type AccessLevel = 'n' | 'm' | 'g' | 'a' | null;
export function _getAccessLevelOptions(t: (key: string) => string): { value: 'n' | 'm' | 'g' | 'a'; label: string; color: string }[] {
return [
- { value: 'n', label: t('useAccessRules.keine'), color: '#e53e3e' },
- { value: 'm', label: t('useAccessRules.eigene'), color: '#d69e2e' },
- { value: 'g', label: t('useAccessRules.gruppe'), color: '#3182ce' },
- { value: 'a', label: t('useAccessRules.alle'), color: '#38a169' },
+ { value: 'n', label: t('Keine'), color: '#e53e3e' },
+ { value: 'm', label: t('Eigene'), color: '#d69e2e' },
+ { value: 'g', label: t('Gruppe'), color: '#3182ce' },
+ { value: 'a', label: t('Alle'), color: '#38a169' },
];
}
diff --git a/src/hooks/useConfirm.tsx b/src/hooks/useConfirm.tsx
index 0bb27dc..c886561 100644
--- a/src/hooks/useConfirm.tsx
+++ b/src/hooks/useConfirm.tsx
@@ -29,9 +29,9 @@ export function useConfirm() {
const resolveRef = useRef<((v: boolean) => void) | null>(null);
const _defaults: Required = useMemo(() => ({
- title: t('confirm.title'),
- confirmLabel: t('confirm.confirmLabel'),
- cancelLabel: t('confirm.cancelLabel'),
+ title: t('Bestätigung'),
+ confirmLabel: t('Bestätigen'),
+ cancelLabel: t('Abbrechen'),
variant: 'primary' as const,
}), [t]);
diff --git a/src/hooks/usePrompt.tsx b/src/hooks/usePrompt.tsx
index 86edbe2..3324ef3 100644
--- a/src/hooks/usePrompt.tsx
+++ b/src/hooks/usePrompt.tsx
@@ -33,9 +33,9 @@ export function usePrompt() {
const inputRef = useRef(null);
const _defaults: Required = useMemo(() => ({
- title: t('prompt.title'),
- confirmLabel: t('prompt.confirmLabel'),
- cancelLabel: t('prompt.cancelLabel'),
+ title: t('Titel'),
+ confirmLabel: t('Bestätigen'),
+ cancelLabel: t('Abbrechen'),
placeholder: '',
defaultValue: '',
variant: 'primary' as const,
diff --git a/src/layouts/FeatureLayout.tsx b/src/layouts/FeatureLayout.tsx
index 0520f23..ef442b5 100644
--- a/src/layouts/FeatureLayout.tsx
+++ b/src/layouts/FeatureLayout.tsx
@@ -22,7 +22,7 @@ const LoadingScreen: React.FC = () => {
return (
-
{t('ui.ladeFeaturedaten')}
+
{t('Lade Featuredaten')}
);
};
@@ -41,7 +41,7 @@ const ErrorScreen: React.FC = ({ message, returnPath = '/' })
return (
⚠️
-
{t('ui.zugriffNichtMoeglich')}
+
{t('Zugriff nicht möglich')}
{message}
Zurück zur Übersicht
diff --git a/src/layouts/MainLayout.tsx b/src/layouts/MainLayout.tsx
index 6e0a4ce..9b6cc2c 100644
--- a/src/layouts/MainLayout.tsx
+++ b/src/layouts/MainLayout.tsx
@@ -67,7 +67,7 @@ const MainLayoutInner: React.FC = () => {