mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 23:41:08 +02:00
feat(profile): translate ContextOverview into all 5 locales
ContextOverview ("Freundebuch" profile cards) was the single biggest
hardcoded-string hot-spot at 35 strings — every user sees this on their
profile. Extended `profile.context.*` namespace with section titles,
field labels (routine/social/leisure), placeholders, weekday short
names, and empty-state hints across DE/EN/ES/FR/IT.
Bonus: ratchet i18n-hardcoded baseline from 1879 → 1817 (settings
namespace + ContextOverview together cleared 62 violations).
- validate:i18n-parity: 39 namespaces × 5 locales — 3381 keys aligned
- svelte-check: 7647 files, 0 errors
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7766ea5021
commit
6c942e3ab2
7 changed files with 302 additions and 81 deletions
|
|
@ -12,5 +12,46 @@
|
|||
"new_password": "Neues Passwort",
|
||||
"confirm_password": "Passwort bestätigen",
|
||||
"password_changed": "Passwort erfolgreich geändert",
|
||||
"profile_updated": "Profil erfolgreich aktualisiert"
|
||||
"profile_updated": "Profil erfolgreich aktualisiert",
|
||||
"context": {
|
||||
"unknown_user": "Unbekannt",
|
||||
"avatar_alt": "Avatar",
|
||||
"nudge_pre": "Profil zu {percent}% ausgefüllt — ",
|
||||
"nudge_action": "Interview starten",
|
||||
"section_about": "Über mich",
|
||||
"section_interests": "Interessen",
|
||||
"section_routine": "Tagesablauf",
|
||||
"section_nutrition": "Ernährung",
|
||||
"section_leisure": "Freizeit",
|
||||
"section_goals": "Ziele",
|
||||
"section_work": "Arbeitsstil",
|
||||
"section_languages": "Sprachen",
|
||||
"routine_wake": "Aufstehen",
|
||||
"routine_work": "Arbeit",
|
||||
"routine_bedtime": "Schlafenszeit",
|
||||
"routine_workdays": "Arbeitstage",
|
||||
"leisure_sports": "Sport",
|
||||
"leisure_media": "Medien",
|
||||
"leisure_pets": "Haustiere",
|
||||
"social_workstyle": "Arbeitsweise",
|
||||
"social_communication": "Kommunikation",
|
||||
"social_living": "Wohnsituation",
|
||||
"empty_routine": "Tagesablauf im Interview ausfüllen",
|
||||
"empty_nutrition": "Ernährung im Interview ausfüllen",
|
||||
"empty_work": "Arbeitsstil im Interview ausfüllen",
|
||||
"add_interests": "Interessen hinzufügen",
|
||||
"add_goals": "Ziele hinzufügen",
|
||||
"add_languages": "Sprachen hinzufügen",
|
||||
"ph_interest": "Neues Interesse + Enter",
|
||||
"ph_allergy": "Allergie + Enter",
|
||||
"ph_goal": "Neues Ziel + Enter",
|
||||
"ph_language": "Sprache + Enter",
|
||||
"weekday_0": "So",
|
||||
"weekday_1": "Mo",
|
||||
"weekday_2": "Di",
|
||||
"weekday_3": "Mi",
|
||||
"weekday_4": "Do",
|
||||
"weekday_5": "Fr",
|
||||
"weekday_6": "Sa"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,5 +12,46 @@
|
|||
"new_password": "New password",
|
||||
"confirm_password": "Confirm password",
|
||||
"password_changed": "Password changed successfully",
|
||||
"profile_updated": "Profile updated successfully"
|
||||
"profile_updated": "Profile updated successfully",
|
||||
"context": {
|
||||
"unknown_user": "Unknown",
|
||||
"avatar_alt": "Avatar",
|
||||
"nudge_pre": "Profile {percent}% complete — ",
|
||||
"nudge_action": "Start interview",
|
||||
"section_about": "About me",
|
||||
"section_interests": "Interests",
|
||||
"section_routine": "Daily routine",
|
||||
"section_nutrition": "Nutrition",
|
||||
"section_leisure": "Leisure",
|
||||
"section_goals": "Goals",
|
||||
"section_work": "Work style",
|
||||
"section_languages": "Languages",
|
||||
"routine_wake": "Wake up",
|
||||
"routine_work": "Work",
|
||||
"routine_bedtime": "Bedtime",
|
||||
"routine_workdays": "Work days",
|
||||
"leisure_sports": "Sports",
|
||||
"leisure_media": "Media",
|
||||
"leisure_pets": "Pets",
|
||||
"social_workstyle": "Work style",
|
||||
"social_communication": "Communication",
|
||||
"social_living": "Living setup",
|
||||
"empty_routine": "Fill out routine in the interview",
|
||||
"empty_nutrition": "Fill out nutrition in the interview",
|
||||
"empty_work": "Fill out work style in the interview",
|
||||
"add_interests": "Add interests",
|
||||
"add_goals": "Add goals",
|
||||
"add_languages": "Add languages",
|
||||
"ph_interest": "New interest + Enter",
|
||||
"ph_allergy": "Allergy + Enter",
|
||||
"ph_goal": "New goal + Enter",
|
||||
"ph_language": "Language + Enter",
|
||||
"weekday_0": "Sun",
|
||||
"weekday_1": "Mon",
|
||||
"weekday_2": "Tue",
|
||||
"weekday_3": "Wed",
|
||||
"weekday_4": "Thu",
|
||||
"weekday_5": "Fri",
|
||||
"weekday_6": "Sat"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,5 +12,46 @@
|
|||
"new_password": "Nueva contraseña",
|
||||
"confirm_password": "Confirmar contraseña",
|
||||
"password_changed": "Contraseña cambiada correctamente",
|
||||
"profile_updated": "Perfil actualizado correctamente"
|
||||
"profile_updated": "Perfil actualizado correctamente",
|
||||
"context": {
|
||||
"unknown_user": "Desconocido",
|
||||
"avatar_alt": "Avatar",
|
||||
"nudge_pre": "Perfil completado al {percent}% — ",
|
||||
"nudge_action": "Empezar entrevista",
|
||||
"section_about": "Sobre mí",
|
||||
"section_interests": "Intereses",
|
||||
"section_routine": "Rutina diaria",
|
||||
"section_nutrition": "Alimentación",
|
||||
"section_leisure": "Tiempo libre",
|
||||
"section_goals": "Objetivos",
|
||||
"section_work": "Estilo de trabajo",
|
||||
"section_languages": "Idiomas",
|
||||
"routine_wake": "Levantarse",
|
||||
"routine_work": "Trabajo",
|
||||
"routine_bedtime": "Hora de dormir",
|
||||
"routine_workdays": "Días laborables",
|
||||
"leisure_sports": "Deporte",
|
||||
"leisure_media": "Medios",
|
||||
"leisure_pets": "Mascotas",
|
||||
"social_workstyle": "Forma de trabajar",
|
||||
"social_communication": "Comunicación",
|
||||
"social_living": "Vivienda",
|
||||
"empty_routine": "Rellena la rutina en la entrevista",
|
||||
"empty_nutrition": "Rellena la alimentación en la entrevista",
|
||||
"empty_work": "Rellena el estilo de trabajo en la entrevista",
|
||||
"add_interests": "Añadir intereses",
|
||||
"add_goals": "Añadir objetivos",
|
||||
"add_languages": "Añadir idiomas",
|
||||
"ph_interest": "Nuevo interés + Enter",
|
||||
"ph_allergy": "Alergia + Enter",
|
||||
"ph_goal": "Nuevo objetivo + Enter",
|
||||
"ph_language": "Idioma + Enter",
|
||||
"weekday_0": "Dom",
|
||||
"weekday_1": "Lun",
|
||||
"weekday_2": "Mar",
|
||||
"weekday_3": "Mié",
|
||||
"weekday_4": "Jue",
|
||||
"weekday_5": "Vie",
|
||||
"weekday_6": "Sáb"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,5 +12,46 @@
|
|||
"new_password": "Nouveau mot de passe",
|
||||
"confirm_password": "Confirmer le mot de passe",
|
||||
"password_changed": "Mot de passe modifié avec succès",
|
||||
"profile_updated": "Profil mis à jour avec succès"
|
||||
"profile_updated": "Profil mis à jour avec succès",
|
||||
"context": {
|
||||
"unknown_user": "Inconnu",
|
||||
"avatar_alt": "Avatar",
|
||||
"nudge_pre": "Profil rempli à {percent}% — ",
|
||||
"nudge_action": "Démarrer l'entretien",
|
||||
"section_about": "À propos de moi",
|
||||
"section_interests": "Centres d'intérêt",
|
||||
"section_routine": "Routine quotidienne",
|
||||
"section_nutrition": "Alimentation",
|
||||
"section_leisure": "Loisirs",
|
||||
"section_goals": "Objectifs",
|
||||
"section_work": "Style de travail",
|
||||
"section_languages": "Langues",
|
||||
"routine_wake": "Lever",
|
||||
"routine_work": "Travail",
|
||||
"routine_bedtime": "Coucher",
|
||||
"routine_workdays": "Jours travaillés",
|
||||
"leisure_sports": "Sport",
|
||||
"leisure_media": "Médias",
|
||||
"leisure_pets": "Animaux",
|
||||
"social_workstyle": "Façon de travailler",
|
||||
"social_communication": "Communication",
|
||||
"social_living": "Logement",
|
||||
"empty_routine": "Remplis la routine dans l'entretien",
|
||||
"empty_nutrition": "Remplis l'alimentation dans l'entretien",
|
||||
"empty_work": "Remplis le style de travail dans l'entretien",
|
||||
"add_interests": "Ajouter des intérêts",
|
||||
"add_goals": "Ajouter des objectifs",
|
||||
"add_languages": "Ajouter des langues",
|
||||
"ph_interest": "Nouvel intérêt + Entrée",
|
||||
"ph_allergy": "Allergie + Entrée",
|
||||
"ph_goal": "Nouvel objectif + Entrée",
|
||||
"ph_language": "Langue + Entrée",
|
||||
"weekday_0": "Dim",
|
||||
"weekday_1": "Lun",
|
||||
"weekday_2": "Mar",
|
||||
"weekday_3": "Mer",
|
||||
"weekday_4": "Jeu",
|
||||
"weekday_5": "Ven",
|
||||
"weekday_6": "Sam"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,5 +12,46 @@
|
|||
"new_password": "Nuova password",
|
||||
"confirm_password": "Conferma password",
|
||||
"password_changed": "Password cambiata con successo",
|
||||
"profile_updated": "Profilo aggiornato con successo"
|
||||
"profile_updated": "Profilo aggiornato con successo",
|
||||
"context": {
|
||||
"unknown_user": "Sconosciuto",
|
||||
"avatar_alt": "Avatar",
|
||||
"nudge_pre": "Profilo completato al {percent}% — ",
|
||||
"nudge_action": "Avvia intervista",
|
||||
"section_about": "Su di me",
|
||||
"section_interests": "Interessi",
|
||||
"section_routine": "Routine quotidiana",
|
||||
"section_nutrition": "Alimentazione",
|
||||
"section_leisure": "Tempo libero",
|
||||
"section_goals": "Obiettivi",
|
||||
"section_work": "Stile di lavoro",
|
||||
"section_languages": "Lingue",
|
||||
"routine_wake": "Sveglia",
|
||||
"routine_work": "Lavoro",
|
||||
"routine_bedtime": "Ora di dormire",
|
||||
"routine_workdays": "Giorni lavorativi",
|
||||
"leisure_sports": "Sport",
|
||||
"leisure_media": "Media",
|
||||
"leisure_pets": "Animali",
|
||||
"social_workstyle": "Modo di lavorare",
|
||||
"social_communication": "Comunicazione",
|
||||
"social_living": "Abitazione",
|
||||
"empty_routine": "Compila la routine nell'intervista",
|
||||
"empty_nutrition": "Compila l'alimentazione nell'intervista",
|
||||
"empty_work": "Compila lo stile di lavoro nell'intervista",
|
||||
"add_interests": "Aggiungi interessi",
|
||||
"add_goals": "Aggiungi obiettivi",
|
||||
"add_languages": "Aggiungi lingue",
|
||||
"ph_interest": "Nuovo interesse + Invio",
|
||||
"ph_allergy": "Allergia + Invio",
|
||||
"ph_goal": "Nuovo obiettivo + Invio",
|
||||
"ph_language": "Lingua + Invio",
|
||||
"weekday_0": "Dom",
|
||||
"weekday_1": "Lun",
|
||||
"weekday_2": "Mar",
|
||||
"weekday_3": "Mer",
|
||||
"weekday_4": "Gio",
|
||||
"weekday_5": "Ven",
|
||||
"weekday_6": "Sab"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
-->
|
||||
<script lang="ts">
|
||||
import { onMount } from 'svelte';
|
||||
import { _ } from 'svelte-i18n';
|
||||
import { useUserContext } from './queries';
|
||||
import { userContextStore } from './stores/user-context.svelte';
|
||||
import { getProgress } from './questions';
|
||||
|
|
@ -56,15 +57,15 @@
|
|||
if (Array.isArray(editValue)) editValue = editValue.filter((t) => t !== tag);
|
||||
}
|
||||
|
||||
const WEEKDAY_NAMES: Record<number, string> = {
|
||||
0: 'So',
|
||||
1: 'Mo',
|
||||
2: 'Di',
|
||||
3: 'Mi',
|
||||
4: 'Do',
|
||||
5: 'Fr',
|
||||
6: 'Sa',
|
||||
};
|
||||
const WEEKDAY_NAMES = $derived<Record<number, string>>({
|
||||
0: $_('profile.context.weekday_0'),
|
||||
1: $_('profile.context.weekday_1'),
|
||||
2: $_('profile.context.weekday_2'),
|
||||
3: $_('profile.context.weekday_3'),
|
||||
4: $_('profile.context.weekday_4'),
|
||||
5: $_('profile.context.weekday_5'),
|
||||
6: $_('profile.context.weekday_6'),
|
||||
});
|
||||
|
||||
// Enter / Space on a non-button click-target counts as activation, same
|
||||
// as a button would. Used to make the "tap a section to edit" surfaces
|
||||
|
|
@ -82,13 +83,17 @@
|
|||
<div class="overview">
|
||||
<div class="identity-card">
|
||||
<div class="avatar-area">
|
||||
{#if user?.image}<img src={user.image} alt="Avatar" class="avatar" />
|
||||
{#if user?.image}<img
|
||||
src={user.image}
|
||||
alt={$_('profile.context.avatar_alt')}
|
||||
class="avatar"
|
||||
/>
|
||||
{:else}<div class="avatar-placeholder">
|
||||
{(user?.name ?? 'U').slice(0, 2).toUpperCase()}
|
||||
{(user?.name ?? '?').slice(0, 2).toUpperCase()}
|
||||
</div>{/if}
|
||||
</div>
|
||||
<div class="identity-info">
|
||||
<h2 class="user-name">{user?.name ?? 'Unbekannt'}</h2>
|
||||
<h2 class="user-name">{user?.name ?? $_('profile.context.unknown_user')}</h2>
|
||||
<p class="user-email">{user?.email ?? ''}</p>
|
||||
{#if ctx?.about?.occupation}<p class="user-meta">{ctx.about.occupation}</p>{/if}
|
||||
{#if ctx?.about?.location}<p class="user-meta">{ctx.about.location}</p>{/if}
|
||||
|
|
@ -99,7 +104,9 @@
|
|||
<button class="nudge-card" onclick={onStartInterview}>
|
||||
<div class="nudge-bar"><div class="nudge-fill" style:width="{progress.percent}%"></div></div>
|
||||
<p class="nudge-text">
|
||||
Profil zu {progress.percent}% ausgefüllt — <strong>Interview starten</strong>
|
||||
{$_('profile.context.nudge_pre', { values: { percent: progress.percent } })}<strong
|
||||
>{$_('profile.context.nudge_action')}</strong
|
||||
>
|
||||
</p>
|
||||
</button>
|
||||
{/if}
|
||||
|
|
@ -107,7 +114,7 @@
|
|||
<div class="sections">
|
||||
{#if ctx?.about?.bio || editingField === 'about.bio'}
|
||||
<section class="section-card">
|
||||
<h3 class="section-title">Über mich</h3>
|
||||
<h3 class="section-title">{$_('profile.context.section_about')}</h3>
|
||||
{#if editingField === 'about.bio'}
|
||||
<textarea
|
||||
class="edit-textarea"
|
||||
|
|
@ -116,8 +123,9 @@
|
|||
rows="3"
|
||||
></textarea>
|
||||
<div class="edit-actions">
|
||||
<button class="edit-btn" onclick={cancelEdit}>Abbrechen</button>
|
||||
<button class="edit-btn primary" onclick={() => saveEdit('about.bio')}>Speichern</button
|
||||
<button class="edit-btn" onclick={cancelEdit}>{$_('profile.cancel')}</button>
|
||||
<button class="edit-btn primary" onclick={() => saveEdit('about.bio')}
|
||||
>{$_('profile.save')}</button
|
||||
>
|
||||
</div>
|
||||
{:else}<div
|
||||
|
|
@ -133,7 +141,7 @@
|
|||
{/if}
|
||||
|
||||
<section class="section-card">
|
||||
<h3 class="section-title">Interessen</h3>
|
||||
<h3 class="section-title">{$_('profile.context.section_interests')}</h3>
|
||||
{#if editingField === 'interests'}
|
||||
<div class="tags-edit">
|
||||
<div class="tags-list">
|
||||
|
|
@ -146,7 +154,7 @@
|
|||
type="text"
|
||||
class="edit-input"
|
||||
bind:value={tagInput}
|
||||
placeholder="Neues Interesse + Enter"
|
||||
placeholder={$_('profile.context.ph_interest')}
|
||||
onkeydown={(e) => {
|
||||
if (e.key === 'Enter' || e.key === ',') {
|
||||
e.preventDefault();
|
||||
|
|
@ -156,8 +164,9 @@
|
|||
onblur={addEditTag}
|
||||
/>
|
||||
<div class="edit-actions">
|
||||
<button class="edit-btn" onclick={cancelEdit}>Abbrechen</button>
|
||||
<button class="edit-btn primary" onclick={() => saveEdit('interests')}>Speichern</button
|
||||
<button class="edit-btn" onclick={cancelEdit}>{$_('profile.cancel')}</button>
|
||||
<button class="edit-btn primary" onclick={() => saveEdit('interests')}
|
||||
>{$_('profile.save')}</button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -177,14 +186,14 @@
|
|||
onclick={() => {
|
||||
editValue = [];
|
||||
editingField = 'interests';
|
||||
}}>Interessen hinzufügen</button
|
||||
}}>{$_('profile.context.add_interests')}</button
|
||||
>
|
||||
{/if}
|
||||
</section>
|
||||
|
||||
<!-- Routine -->
|
||||
<section class="section-card">
|
||||
<h3 class="section-title">Tagesablauf</h3>
|
||||
<h3 class="section-title">{$_('profile.context.section_routine')}</h3>
|
||||
{#if ctx?.routine && (ctx.routine.wakeUp || ctx.routine.workStart || ctx.routine.bedtime)}
|
||||
<div
|
||||
class="routine-grid"
|
||||
|
|
@ -194,36 +203,37 @@
|
|||
onkeydown={onActivate(() => onStartInterview())}
|
||||
>
|
||||
{#if ctx.routine.wakeUp}<div class="routine-item">
|
||||
<span class="routine-label">Aufstehen</span><span class="routine-value"
|
||||
>{ctx.routine.wakeUp}</span
|
||||
<span class="routine-label">{$_('profile.context.routine_wake')}</span><span
|
||||
class="routine-value">{ctx.routine.wakeUp}</span
|
||||
>
|
||||
</div>{/if}
|
||||
{#if ctx.routine.workStart && ctx.routine.workEnd}<div class="routine-item">
|
||||
<span class="routine-label">Arbeit</span><span class="routine-value"
|
||||
>{ctx.routine.workStart} – {ctx.routine.workEnd}</span
|
||||
<span class="routine-label">{$_('profile.context.routine_work')}</span><span
|
||||
class="routine-value">{ctx.routine.workStart} – {ctx.routine.workEnd}</span
|
||||
>
|
||||
</div>{/if}
|
||||
{#if ctx.routine.bedtime}<div class="routine-item">
|
||||
<span class="routine-label">Schlafenszeit</span><span class="routine-value"
|
||||
>{ctx.routine.bedtime}</span
|
||||
<span class="routine-label">{$_('profile.context.routine_bedtime')}</span><span
|
||||
class="routine-value">{ctx.routine.bedtime}</span
|
||||
>
|
||||
</div>{/if}
|
||||
{#if ctx.routine.workDays?.length}<div class="routine-item">
|
||||
<span class="routine-label">Arbeitstage</span><span class="routine-value"
|
||||
<span class="routine-label">{$_('profile.context.routine_workdays')}</span><span
|
||||
class="routine-value"
|
||||
>{ctx.routine.workDays.map((d: number) => WEEKDAY_NAMES[d]).join(', ')}</span
|
||||
>
|
||||
</div>{/if}
|
||||
</div>
|
||||
{:else}
|
||||
<button class="empty-hint" onclick={onStartInterview}
|
||||
>Tagesablauf im Interview ausfüllen</button
|
||||
>{$_('profile.context.empty_routine')}</button
|
||||
>
|
||||
{/if}
|
||||
</section>
|
||||
|
||||
<!-- Nutrition -->
|
||||
<section class="section-card">
|
||||
<h3 class="section-title">Ernährung</h3>
|
||||
<h3 class="section-title">{$_('profile.context.section_nutrition')}</h3>
|
||||
{#if ctx?.nutrition && (ctx.nutrition.diet || ctx.nutrition.allergies?.length)}
|
||||
<div>
|
||||
{#if ctx.nutrition.diet}<div
|
||||
|
|
@ -249,7 +259,7 @@
|
|||
type="text"
|
||||
class="edit-input"
|
||||
bind:value={tagInput}
|
||||
placeholder="Allergie + Enter"
|
||||
placeholder={$_('profile.context.ph_allergy')}
|
||||
onkeydown={(e) => {
|
||||
if (e.key === 'Enter' || e.key === ',') {
|
||||
e.preventDefault();
|
||||
|
|
@ -259,9 +269,9 @@
|
|||
onblur={addEditTag}
|
||||
/>
|
||||
<div class="edit-actions">
|
||||
<button class="edit-btn" onclick={cancelEdit}>Abbrechen</button>
|
||||
<button class="edit-btn" onclick={cancelEdit}>{$_('profile.cancel')}</button>
|
||||
<button class="edit-btn primary" onclick={() => saveEdit('nutrition.allergies')}
|
||||
>Speichern</button
|
||||
>{$_('profile.save')}</button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -285,7 +295,7 @@
|
|||
</div>
|
||||
{:else}
|
||||
<button class="empty-hint" onclick={onStartInterview}
|
||||
>Ernährung im Interview ausfüllen</button
|
||||
>{$_('profile.context.empty_nutrition')}</button
|
||||
>
|
||||
{/if}
|
||||
</section>
|
||||
|
|
@ -293,10 +303,10 @@
|
|||
<!-- Leisure -->
|
||||
{#if ctx?.leisure && (ctx.leisure.media?.length || ctx.leisure.sports?.length || ctx.leisure.pets)}
|
||||
<section class="section-card">
|
||||
<h3 class="section-title">Freizeit</h3>
|
||||
<h3 class="section-title">{$_('profile.context.section_leisure')}</h3>
|
||||
{#if ctx.leisure.sports?.length}
|
||||
<div class="sub-section">
|
||||
<span class="routine-label">Sport</span>
|
||||
<span class="routine-label">{$_('profile.context.leisure_sports')}</span>
|
||||
<div
|
||||
class="tags-list"
|
||||
role="button"
|
||||
|
|
@ -310,7 +320,7 @@
|
|||
{/if}
|
||||
{#if ctx.leisure.media?.length}
|
||||
<div class="sub-section">
|
||||
<span class="routine-label">Medien</span>
|
||||
<span class="routine-label">{$_('profile.context.leisure_media')}</span>
|
||||
<div
|
||||
class="tags-list"
|
||||
role="button"
|
||||
|
|
@ -324,7 +334,7 @@
|
|||
{/if}
|
||||
{#if ctx.leisure.pets}
|
||||
<div class="sub-section">
|
||||
<span class="routine-label">Haustiere</span>
|
||||
<span class="routine-label">{$_('profile.context.leisure_pets')}</span>
|
||||
<span
|
||||
class="section-text"
|
||||
role="button"
|
||||
|
|
@ -340,7 +350,7 @@
|
|||
|
||||
<!-- Goals -->
|
||||
<section class="section-card">
|
||||
<h3 class="section-title">Ziele</h3>
|
||||
<h3 class="section-title">{$_('profile.context.section_goals')}</h3>
|
||||
{#if editingField === 'goals'}
|
||||
<div class="tags-edit">
|
||||
<div class="tags-list">
|
||||
|
|
@ -353,7 +363,7 @@
|
|||
type="text"
|
||||
class="edit-input"
|
||||
bind:value={tagInput}
|
||||
placeholder="Neues Ziel + Enter"
|
||||
placeholder={$_('profile.context.ph_goal')}
|
||||
onkeydown={(e) => {
|
||||
if (e.key === 'Enter' || e.key === ',') {
|
||||
e.preventDefault();
|
||||
|
|
@ -363,8 +373,10 @@
|
|||
onblur={addEditTag}
|
||||
/>
|
||||
<div class="edit-actions">
|
||||
<button class="edit-btn" onclick={cancelEdit}>Abbrechen</button>
|
||||
<button class="edit-btn primary" onclick={() => saveEdit('goals')}>Speichern</button>
|
||||
<button class="edit-btn" onclick={cancelEdit}>{$_('profile.cancel')}</button>
|
||||
<button class="edit-btn primary" onclick={() => saveEdit('goals')}
|
||||
>{$_('profile.save')}</button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
{:else if ctx?.goals?.length}
|
||||
|
|
@ -383,14 +395,14 @@
|
|||
onclick={() => {
|
||||
editValue = [];
|
||||
editingField = 'goals';
|
||||
}}>Ziele hinzufügen</button
|
||||
}}>{$_('profile.context.add_goals')}</button
|
||||
>
|
||||
{/if}
|
||||
</section>
|
||||
|
||||
<!-- Social / Work style -->
|
||||
<section class="section-card">
|
||||
<h3 class="section-title">Arbeitsstil</h3>
|
||||
<h3 class="section-title">{$_('profile.context.section_work')}</h3>
|
||||
{#if ctx?.social && (ctx.social.workStyle || ctx.social.communication || ctx.social.livingSetup)}
|
||||
<div
|
||||
class="routine-grid"
|
||||
|
|
@ -400,31 +412,31 @@
|
|||
onkeydown={onActivate(() => onStartInterview())}
|
||||
>
|
||||
{#if ctx.social.workStyle}<div class="routine-item">
|
||||
<span class="routine-label">Arbeitsweise</span><span class="routine-value"
|
||||
>{ctx.social.workStyle}</span
|
||||
<span class="routine-label">{$_('profile.context.social_workstyle')}</span><span
|
||||
class="routine-value">{ctx.social.workStyle}</span
|
||||
>
|
||||
</div>{/if}
|
||||
{#if ctx.social.communication}<div class="routine-item">
|
||||
<span class="routine-label">Kommunikation</span><span class="routine-value"
|
||||
>{ctx.social.communication}</span
|
||||
<span class="routine-label">{$_('profile.context.social_communication')}</span><span
|
||||
class="routine-value">{ctx.social.communication}</span
|
||||
>
|
||||
</div>{/if}
|
||||
{#if ctx.social.livingSetup}<div class="routine-item">
|
||||
<span class="routine-label">Wohnsituation</span><span class="routine-value"
|
||||
>{ctx.social.livingSetup}</span
|
||||
<span class="routine-label">{$_('profile.context.social_living')}</span><span
|
||||
class="routine-value">{ctx.social.livingSetup}</span
|
||||
>
|
||||
</div>{/if}
|
||||
</div>
|
||||
{:else}
|
||||
<button class="empty-hint" onclick={onStartInterview}
|
||||
>Arbeitsstil im Interview ausfüllen</button
|
||||
>{$_('profile.context.empty_work')}</button
|
||||
>
|
||||
{/if}
|
||||
</section>
|
||||
|
||||
<!-- Languages -->
|
||||
<section class="section-card">
|
||||
<h3 class="section-title">Sprachen</h3>
|
||||
<h3 class="section-title">{$_('profile.context.section_languages')}</h3>
|
||||
{#if editingField === 'about.languages'}
|
||||
<div class="tags-edit">
|
||||
<div class="tags-list">
|
||||
|
|
@ -437,7 +449,7 @@
|
|||
type="text"
|
||||
class="edit-input"
|
||||
bind:value={tagInput}
|
||||
placeholder="Sprache + Enter"
|
||||
placeholder={$_('profile.context.ph_language')}
|
||||
onkeydown={(e) => {
|
||||
if (e.key === 'Enter' || e.key === ',') {
|
||||
e.preventDefault();
|
||||
|
|
@ -447,9 +459,9 @@
|
|||
onblur={addEditTag}
|
||||
/>
|
||||
<div class="edit-actions">
|
||||
<button class="edit-btn" onclick={cancelEdit}>Abbrechen</button>
|
||||
<button class="edit-btn" onclick={cancelEdit}>{$_('profile.cancel')}</button>
|
||||
<button class="edit-btn primary" onclick={() => saveEdit('about.languages')}
|
||||
>Speichern</button
|
||||
>{$_('profile.save')}</button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -469,7 +481,7 @@
|
|||
onclick={() => {
|
||||
editValue = [];
|
||||
editingField = 'about.languages';
|
||||
}}>Sprachen hinzufügen</button
|
||||
}}>{$_('profile.context.add_languages')}</button
|
||||
>
|
||||
{/if}
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -27,13 +27,7 @@
|
|||
"apps/mana/apps/web/src/lib/components/profile/ChangePasswordModal.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/components/profile/DeleteAccountModal.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/components/profile/EditProfileModal.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/components/settings/AiSettings.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/components/settings/ByokKeysManager.svelte": 9,
|
||||
"apps/mana/apps/web/src/lib/components/settings/sections/GeneralSection.svelte": 13,
|
||||
"apps/mana/apps/web/src/lib/components/settings/sections/MyDataSection.svelte": 16,
|
||||
"apps/mana/apps/web/src/lib/components/settings/sections/SyncSection.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/components/settings/sections/TagPresetsSection.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/components/settings/sections/VaultSection.svelte": 10,
|
||||
"apps/mana/apps/web/src/lib/components/settings/sections/VaultSection.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/components/shell/ModuleShell.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/components/SuggestionToast.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/components/voice/VoiceCaptureBar.svelte": 1,
|
||||
|
|
@ -62,6 +56,7 @@
|
|||
"apps/mana/apps/web/src/lib/modules/articles/views/DetailView.svelte": 9,
|
||||
"apps/mana/apps/web/src/lib/modules/articles/views/HighlightsView.svelte": 4,
|
||||
"apps/mana/apps/web/src/lib/modules/articles/widgets/ArticlesUnreadWidget.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/augur/SharedAugurEntryView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/automations/ListView.svelte": 12,
|
||||
"apps/mana/apps/web/src/lib/modules/body/components/CalorieWeightChart.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/body/components/ExercisePicker.svelte": 6,
|
||||
|
|
@ -84,12 +79,13 @@
|
|||
"apps/mana/apps/web/src/lib/modules/calendar/components/CustomRecurrenceBuilder.svelte": 8,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/components/DateStrip.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/components/EventCard.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/components/EventDetailModal.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/components/EventDetailModal.svelte": 4,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/components/EventForm.svelte": 10,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/components/MiniCalendar.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/components/QuickEventPopover.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/components/SlotSuggestions.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/ListView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/SharedEventView.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/calendar/views/DetailView.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/modules/cards/components/CreateDeckModal.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/cards/views/DetailView.svelte": 6,
|
||||
|
|
@ -97,7 +93,10 @@
|
|||
"apps/mana/apps/web/src/lib/modules/chat/views/DetailView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/citycorners/views/DetailView.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/BatchPanelEditor.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/CharacterBuilder.svelte": 4,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/CharacterCard.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/CharacterPicker.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/CharacterRefPicker.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/PanelEditor.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/PanelModelPicker.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/PanelStrip.svelte": 1,
|
||||
|
|
@ -105,8 +104,12 @@
|
|||
"apps/mana/apps/web/src/lib/modules/comic/components/StoryboardSuggester.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/StoryCard.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/StoryForm.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/components/VariantTile.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/ListView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/views/CharactersView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/views/DetailCharacterView.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/views/DetailView.svelte": 7,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/views/ListView.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/comic/views/ListView.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/companion/components/CompanionChat.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/companion/components/RitualRunner.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/modules/companion/ListView.svelte": 1,
|
||||
|
|
@ -138,14 +141,14 @@
|
|||
"apps/mana/apps/web/src/lib/modules/events/components/RsvpSummary.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/events/components/SourceManager.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/modules/events/ListView.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/events/views/DetailView.svelte": 12,
|
||||
"apps/mana/apps/web/src/lib/modules/events/views/DetailView.svelte": 13,
|
||||
"apps/mana/apps/web/src/lib/modules/finance/ListView.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/modules/firsts/ListView.svelte": 15,
|
||||
"apps/mana/apps/web/src/lib/modules/goals/GoalEditor.svelte": 15,
|
||||
"apps/mana/apps/web/src/lib/modules/goals/ListView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/guides/ListView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/guides/views/DetailView.svelte": 7,
|
||||
"apps/mana/apps/web/src/lib/modules/habits/components/HabitDetail.svelte": 4,
|
||||
"apps/mana/apps/web/src/lib/modules/habits/components/HabitDetail.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/modules/habits/components/HabitForm.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/habits/ListView.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/modules/inventory/ListView.svelte": 1,
|
||||
|
|
@ -163,13 +166,13 @@
|
|||
"apps/mana/apps/web/src/lib/modules/library/components/EntryForm.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/modules/library/components/ProgressControls.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/library/ListView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/library/views/DetailView.svelte": 15,
|
||||
"apps/mana/apps/web/src/lib/modules/library/views/DetailView.svelte": 16,
|
||||
"apps/mana/apps/web/src/lib/modules/library/views/GridView.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/mail/ListView.svelte": 8,
|
||||
"apps/mana/apps/web/src/lib/modules/meditate/components/SessionPlayer.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/meditate/components/StatsOverview.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/meditate/ListView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/memoro/views/DetailView.svelte": 7,
|
||||
"apps/mana/apps/web/src/lib/modules/memoro/views/DetailView.svelte": 8,
|
||||
"apps/mana/apps/web/src/lib/modules/mood/components/QuickLog.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/modules/mood/ListView.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/modules/moodlit/components/mood/CreateMoodDialog.svelte": 3,
|
||||
|
|
@ -184,10 +187,11 @@
|
|||
"apps/mana/apps/web/src/lib/modules/photos/components/filters/FilterBar.svelte": 8,
|
||||
"apps/mana/apps/web/src/lib/modules/photos/components/gallery/PhotoDetailModal.svelte": 9,
|
||||
"apps/mana/apps/web/src/lib/modules/photos/ListView.svelte": 4,
|
||||
"apps/mana/apps/web/src/lib/modules/picture/components/ImageLightbox.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/picture/components/ReferenceImagePicker.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/picture/ListView.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/modules/places/ListView.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/places/views/DetailView.svelte": 7,
|
||||
"apps/mana/apps/web/src/lib/modules/places/views/DetailView.svelte": 8,
|
||||
"apps/mana/apps/web/src/lib/modules/plants/views/DetailView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/playground/ListView.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/presi/ListView.svelte": 1,
|
||||
|
|
@ -196,12 +200,11 @@
|
|||
"apps/mana/apps/web/src/lib/modules/profile/components/MeImageTile.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/profile/ContextFreeform.svelte": 7,
|
||||
"apps/mana/apps/web/src/lib/modules/profile/ContextInterview.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/modules/profile/ContextOverview.svelte": 35,
|
||||
"apps/mana/apps/web/src/lib/modules/profile/ListView.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/modules/profile/MeImagesView.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/questions/ListView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/questions/views/DetailView.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/modules/quiz/EditView.svelte": 12,
|
||||
"apps/mana/apps/web/src/lib/modules/quiz/EditView.svelte": 13,
|
||||
"apps/mana/apps/web/src/lib/modules/quiz/ListView.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/modules/quiz/PlayView.svelte": 6,
|
||||
"apps/mana/apps/web/src/lib/modules/quotes/views/DetailView.svelte": 2,
|
||||
|
|
@ -250,7 +253,7 @@
|
|||
"apps/mana/apps/web/src/lib/modules/wardrobe/components/TryOnButton.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/wardrobe/components/TryOnModelPicker.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/wardrobe/ListView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/wardrobe/views/DetailGarmentView.svelte": 12,
|
||||
"apps/mana/apps/web/src/lib/modules/wardrobe/views/DetailGarmentView.svelte": 13,
|
||||
"apps/mana/apps/web/src/lib/modules/wardrobe/views/DetailOutfitView.svelte": 5,
|
||||
"apps/mana/apps/web/src/lib/modules/wardrobe/views/GridView.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/wardrobe/views/OutfitsView.svelte": 3,
|
||||
|
|
@ -284,7 +287,7 @@
|
|||
"apps/mana/apps/web/src/lib/modules/writing/components/RefinementPanel.svelte": 12,
|
||||
"apps/mana/apps/web/src/lib/modules/writing/components/StyleForm.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/writing/components/VersionEditor.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/writing/components/VersionHistory.svelte": 1,
|
||||
"apps/mana/apps/web/src/lib/modules/writing/components/VersionHistory.svelte": 2,
|
||||
"apps/mana/apps/web/src/lib/modules/writing/views/DetailView.svelte": 7,
|
||||
"apps/mana/apps/web/src/lib/modules/writing/views/ListView.svelte": 3,
|
||||
"apps/mana/apps/web/src/lib/modules/writing/views/StylesView.svelte": 4,
|
||||
|
|
@ -372,7 +375,7 @@
|
|||
"apps/mana/apps/web/src/routes/(app)/onboarding/+layout.svelte": 3,
|
||||
"apps/mana/apps/web/src/routes/(app)/onboarding/look/+page.svelte": 6,
|
||||
"apps/mana/apps/web/src/routes/(app)/onboarding/name/+page.svelte": 2,
|
||||
"apps/mana/apps/web/src/routes/(app)/onboarding/templates/+page.svelte": 4,
|
||||
"apps/mana/apps/web/src/routes/(app)/onboarding/templates/+page.svelte": 2,
|
||||
"apps/mana/apps/web/src/routes/(app)/organizations/[id]/+page.svelte": 6,
|
||||
"apps/mana/apps/web/src/routes/(app)/organizations/+page.svelte": 1,
|
||||
"apps/mana/apps/web/src/routes/(app)/photos/+page.svelte": 3,
|
||||
|
|
@ -425,6 +428,7 @@
|
|||
"apps/mana/apps/web/src/routes/auth/reset-password/+page.svelte": 1,
|
||||
"apps/mana/apps/web/src/routes/g/[code]/+page.svelte": 6,
|
||||
"apps/mana/apps/web/src/routes/rsvp/[token]/+page.svelte": 1,
|
||||
"apps/mana/apps/web/src/routes/share/[token]/+layout.svelte": 1,
|
||||
"apps/mana/apps/web/src/routes/status/+page.svelte": 1,
|
||||
"apps/mana/apps/web/src/routes/welcome/+page.svelte": 6
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue