- UTM-Parameter
+ {$_('uload.analytics_route.label_utm_params')}
{#if link.utmSource}
- Source:
+ {$_('uload.analytics_route.utm_source')}
{link.utmSource}
{/if}
{#if link.utmMedium}
- Medium:
+ {$_('uload.analytics_route.utm_medium')}
{link.utmMedium}
{/if}
{#if link.utmCampaign}
- Campaign:
+ {$_('uload.analytics_route.utm_campaign')}
{link.utmCampaign}
{/if}
@@ -185,20 +209,30 @@
{/if}
{#if link.expiresAt}
- Laeuft ab
+ {$_('uload.analytics_route.label_expires_at')}
{formatDate(new Date(link.expiresAt))}
{/if}
{#if link.maxClicks}
- Max Klicks
- {link.clickCount} / {link.maxClicks}
+ {$_('uload.analytics_route.label_max_clicks')}
+ {$_('uload.analytics_route.max_clicks_value', {
+ values: { used: link.clickCount, max: link.maxClicks },
+ })}
{/if}
{#if link.password}
- Passwortgeschuetzt
- Ja
+ {$_('uload.analytics_route.label_password_protected')}
+ {$_('uload.analytics_route.yes')}
{/if}
-
Clicks ueber Zeit
+
+ {$_('uload.analytics_route.section_timeline')}
+
{#each [7, 30, 90] as d}
{/each}
@@ -244,15 +280,17 @@
{:else if !serverAvailable}
- Detaillierte Analytics sind verfuegbar, wenn der uLoad-Server verbunden ist.
+ {$_('uload.analytics_route.hint_no_server')}
- Lokaler Click-Count: {link.clickCount}
+ {$_('uload.analytics_route.hint_local_count', {
+ values: { count: link.clickCount },
+ })}
{:else}
- Noch keine Daten fuer diesen Zeitraum
+ {$_('uload.analytics_route.empty_period')}
{/if}
@@ -262,13 +300,17 @@
-
Geraete
+
+ {$_('uload.analytics_route.section_devices')}
+
{#if devices.length > 0}
{#each devices as d}
- {d.deviceType || 'Unbekannt'}
+ {d.deviceType || $_('uload.analytics_route.unknown')}
{Math.round((d.count / totalDevices) * 100)}%
@@ -283,38 +325,48 @@
{/each}
{:else}
-
Keine Daten
+
+ {$_('uload.analytics_route.empty_no_data')}
+
{/if}
-
Referrer
+
+ {$_('uload.analytics_route.section_referrers')}
+
{#if referrers.length > 0}
{#each referrers.slice(0, 8) as r}
- {r.referer || 'Direkt'}
+ {r.referer || $_('uload.analytics_route.direct')}
{r.count}
{/each}
{:else}
-
Keine Daten
+
+ {$_('uload.analytics_route.empty_no_data')}
+
{/if}
-
Laender
+
+ {$_('uload.analytics_route.section_countries')}
+
{#if countries.length > 0}
{#each countries.slice(0, 8) as c}
- {c.country || 'Unbekannt'}
+ {c.country || $_('uload.analytics_route.unknown')}
{Math.round((c.count / totalCountries) * 100)}%
@@ -329,7 +381,9 @@
{/each}
{:else}
-
Keine Daten
+
+ {$_('uload.analytics_route.empty_no_data')}
+
{/if}
diff --git a/apps/mana/apps/web/src/routes/(app)/uload/links/+page.svelte b/apps/mana/apps/web/src/routes/(app)/uload/links/+page.svelte
index 05f386a00..7c85301ed 100644
--- a/apps/mana/apps/web/src/routes/(app)/uload/links/+page.svelte
+++ b/apps/mana/apps/web/src/routes/(app)/uload/links/+page.svelte
@@ -1,4 +1,5 @@
- Alle Links - uLoad - Mana
+ {$_('uload.links_route.title')}
@@ -139,13 +143,13 @@
- Alle Links
+ {$_('uload.links_route.heading')}
{#if filteredLinks.length > 0}
({filteredLinks.length})
{/if}
@@ -165,7 +169,9 @@
? 'bg-indigo-600 text-white'
: 'hover:bg-muted dark:border-border dark:hover:bg-muted'}"
>
- {selectMode ? 'Fertig' : 'Auswaehlen'}
+ {selectMode
+ ? $_('uload.links_route.action_select_done')
+ : $_('uload.links_route.action_select_start')}
@@ -180,18 +186,18 @@
{#if folders.length > 0}
{/if}
@@ -239,11 +249,11 @@
class="rounded-xl border-2 border-dashed border-border-strong p-12 text-center dark:border-border"
>
-
Keine Links gefunden
+
{$_('uload.links_route.empty_title')}
{#if searchQuery || selectedStatus !== 'all' || selectedFolderId}
-
Versuche andere Filtereinstellungen.
+
{$_('uload.links_route.empty_filtered')}
{:else}
-
Erstelle Links auf der uLoad-Hauptseite.
+
{$_('uload.links_route.empty_root')}
{/if}
{:else}
@@ -301,7 +311,7 @@
{link.clickCount}
@@ -309,14 +319,16 @@
diff --git a/apps/mana/apps/web/src/routes/(app)/uload/settings/+page.svelte b/apps/mana/apps/web/src/routes/(app)/uload/settings/+page.svelte
index 96d4a62fc..afeed4107 100644
--- a/apps/mana/apps/web/src/routes/(app)/uload/settings/+page.svelte
+++ b/apps/mana/apps/web/src/routes/(app)/uload/settings/+page.svelte
@@ -3,6 +3,7 @@
Reached via the ⚙ button in the uLoad module; not a workbench card.
-->
- uLoad-Einstellungen — Mana
+ {$_('uload.settings_route.title')}
- Daten
+ {$_('uload.settings_route.section_data')}
{links.value?.length ?? 0}
-
Links
+
{$_('uload.settings_route.stat_links')}
{tags.value?.length ?? 0}
-
Tags
+
{$_('uload.settings_route.stat_tags')}
{folders.value?.length ?? 0}
-
Ordner
+
{$_('uload.settings_route.stat_folders')}
- Daten exportieren
- Alle Links, Tags und Ordner als JSON-Datei herunterladen.
+ {$_('uload.settings_route.section_export')}
+ {$_('uload.settings_route.export_hint')}
- Gefahrenzone
+ {$_('uload.settings_route.section_danger')}
- Löscht alle lokalen uLoad-Daten (Links, Tags, Ordner). Synchronisierte Daten auf dem Server
- bleiben erhalten.
+ {$_('uload.settings_route.danger_hint')}
diff --git a/apps/mana/apps/web/src/routes/(app)/uload/tags/+page.svelte b/apps/mana/apps/web/src/routes/(app)/uload/tags/+page.svelte
index 917b2c535..db82fbde4 100644
--- a/apps/mana/apps/web/src/routes/(app)/uload/tags/+page.svelte
+++ b/apps/mana/apps/web/src/routes/(app)/uload/tags/+page.svelte
@@ -20,16 +20,17 @@
async function createTag() {
if (!newName.trim()) return;
+ const created = newName.trim();
await uloadTagTable.add({
id: crypto.randomUUID(),
- name: newName.trim(),
+ name: created,
slug: slugify(newName),
color: newColor,
icon: null,
isPublic: false,
usageCount: 0,
} as LocalTag);
- toast.success(`Tag "${newName}" erstellt`);
+ toast.success($_('uload.tags_route.toast_created', { values: { name: created } }));
newName = '';
newColor = '#6366f1';
showCreateForm = false;
@@ -37,7 +38,7 @@
async function deleteTag(tag: { id: string; name: string }) {
await uloadTagTable.delete(tag.id);
- toast.success(`Tag "${tag.name}" geloescht`);
+ toast.success($_('uload.tags_route.toast_deleted', { values: { name: tag.name } }));
}
async function updateTag() {
@@ -47,7 +48,7 @@
slug: slugify(editingTag.name),
color: editingTag.color,
});
- toast.success('Tag aktualisiert');
+ toast.success($_('uload.tags_route.toast_updated'));
editingTag = null;
}
@@ -59,13 +60,13 @@
- Tags
+ {$_('uload.tags_route.heading')}