@data-club/ai-hub 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/locales/cs.d.ts +16 -0
- package/dist/auth/locales/cs.d.ts.map +1 -0
- package/dist/auth/locales/cs.js +394 -0
- package/dist/auth/locales/cs.js.map +1 -0
- package/dist/auth/locales/index.d.ts +24 -0
- package/dist/auth/locales/index.d.ts.map +1 -0
- package/dist/auth/locales/index.js +31 -0
- package/dist/auth/locales/index.js.map +1 -0
- package/dist/auth/locales/sk.d.ts +16 -0
- package/dist/auth/locales/sk.d.ts.map +1 -0
- package/dist/auth/locales/sk.js +394 -0
- package/dist/auth/locales/sk.js.map +1 -0
- package/dist/auth/texts.d.ts +24 -2
- package/dist/auth/texts.d.ts.map +1 -1
- package/dist/auth/texts.js +20 -7
- package/dist/auth/texts.js.map +1 -1
- package/dist/client/AIHubClient.d.ts +11 -0
- package/dist/client/AIHubClient.d.ts.map +1 -1
- package/dist/client/AIHubClient.js +10 -0
- package/dist/client/AIHubClient.js.map +1 -1
- package/dist/components/AgentsPicker/index.d.ts.map +1 -1
- package/dist/components/AgentsPicker/index.js +3 -2
- package/dist/components/AgentsPicker/index.js.map +1 -1
- package/dist/components/ChangePassword/index.d.ts.map +1 -1
- package/dist/components/ChangePassword/index.js +3 -2
- package/dist/components/ChangePassword/index.js.map +1 -1
- package/dist/components/ChatShell/ShellHeader.d.ts.map +1 -1
- package/dist/components/ChatShell/ShellHeader.js +4 -3
- package/dist/components/ChatShell/ShellHeader.js.map +1 -1
- package/dist/components/ChatShell/UserMenu.d.ts.map +1 -1
- package/dist/components/ChatShell/UserMenu.js +13 -1
- package/dist/components/ChatShell/UserMenu.js.map +1 -1
- package/dist/components/ChatShell/index.d.ts.map +1 -1
- package/dist/components/ChatShell/index.js +3 -2
- package/dist/components/ChatShell/index.js.map +1 -1
- package/dist/components/DataClubAIHub/index.d.ts +7 -1
- package/dist/components/DataClubAIHub/index.d.ts.map +1 -1
- package/dist/components/DataClubAIHub/index.js +3 -1
- package/dist/components/DataClubAIHub/index.js.map +1 -1
- package/dist/components/DataClubAIHubAdmin/SessionsOverviewPage.d.ts.map +1 -1
- package/dist/components/DataClubAIHubAdmin/SessionsOverviewPage.js +5 -23
- package/dist/components/DataClubAIHubAdmin/SessionsOverviewPage.js.map +1 -1
- package/dist/components/DataClubAIHubAdmin/SettingsPage.d.ts.map +1 -1
- package/dist/components/DataClubAIHubAdmin/SettingsPage.js +45 -16
- package/dist/components/DataClubAIHubAdmin/SettingsPage.js.map +1 -1
- package/dist/components/DataClubAIHubAdmin/index.d.ts.map +1 -1
- package/dist/components/DataClubAIHubAdmin/index.js +3 -2
- package/dist/components/DataClubAIHubAdmin/index.js.map +1 -1
- package/dist/components/DataClubAIHubLogin/index.d.ts.map +1 -1
- package/dist/components/DataClubAIHubLogin/index.js +3 -2
- package/dist/components/DataClubAIHubLogin/index.js.map +1 -1
- package/dist/components/EffortControl/index.d.ts.map +1 -1
- package/dist/components/EffortControl/index.js +3 -2
- package/dist/components/EffortControl/index.js.map +1 -1
- package/dist/components/LanguageSwitcher/index.d.ts +25 -0
- package/dist/components/LanguageSwitcher/index.d.ts.map +1 -0
- package/dist/components/LanguageSwitcher/index.js +73 -0
- package/dist/components/LanguageSwitcher/index.js.map +1 -0
- package/dist/components/MainColumn/index.d.ts.map +1 -1
- package/dist/components/MainColumn/index.js +3 -2
- package/dist/components/MainColumn/index.js.map +1 -1
- package/dist/components/MessageInput/index.d.ts.map +1 -1
- package/dist/components/MessageInput/index.js +3 -2
- package/dist/components/MessageInput/index.js.map +1 -1
- package/dist/components/MessageList/index.d.ts.map +1 -1
- package/dist/components/MessageList/index.js +3 -2
- package/dist/components/MessageList/index.js.map +1 -1
- package/dist/components/ReasoningView/index.d.ts.map +1 -1
- package/dist/components/ReasoningView/index.js +3 -2
- package/dist/components/ReasoningView/index.js.map +1 -1
- package/dist/components/ScrollToPresentButton/index.d.ts.map +1 -1
- package/dist/components/ScrollToPresentButton/index.js +3 -2
- package/dist/components/ScrollToPresentButton/index.js.map +1 -1
- package/dist/components/SessionsPanel/index.d.ts.map +1 -1
- package/dist/components/SessionsPanel/index.js +6 -34
- package/dist/components/SessionsPanel/index.js.map +1 -1
- package/dist/components/ThemeSwitcher/index.d.ts.map +1 -1
- package/dist/components/ThemeSwitcher/index.js +3 -2
- package/dist/components/ThemeSwitcher/index.js.map +1 -1
- package/dist/components/ToolCallView/index.d.ts.map +1 -1
- package/dist/components/ToolCallView/index.js +3 -2
- package/dist/components/ToolCallView/index.js.map +1 -1
- package/dist/components/TpmBanner/index.d.ts.map +1 -1
- package/dist/components/TpmBanner/index.js +3 -2
- package/dist/components/TpmBanner/index.js.map +1 -1
- package/dist/context/AIHubContext.d.ts +23 -0
- package/dist/context/AIHubContext.d.ts.map +1 -1
- package/dist/context/AIHubContext.js.map +1 -1
- package/dist/context/AIHubProvider.d.ts +13 -0
- package/dist/context/AIHubProvider.d.ts.map +1 -1
- package/dist/context/AIHubProvider.js +39 -2
- package/dist/context/AIHubProvider.js.map +1 -1
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +1 -0
- package/dist/context/index.js.map +1 -1
- package/dist/context/language.d.ts +44 -0
- package/dist/context/language.d.ts.map +1 -0
- package/dist/context/language.js +74 -0
- package/dist/context/language.js.map +1 -0
- package/dist/context/useAIHub.d.ts +8 -0
- package/dist/context/useAIHub.d.ts.map +1 -1
- package/dist/context/useAIHub.js +4 -0
- package/dist/context/useAIHub.js.map +1 -1
- package/dist/context/useAIHubTexts.d.ts +40 -0
- package/dist/context/useAIHubTexts.d.ts.map +1 -0
- package/dist/context/useAIHubTexts.js +52 -0
- package/dist/context/useAIHubTexts.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/primitives/index.d.ts +3 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +3 -0
- package/dist/primitives/index.js.map +1 -1
- package/dist/stories/_mockProvider.d.ts.map +1 -1
- package/dist/stories/_mockProvider.js +5 -0
- package/dist/stories/_mockProvider.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/util/relativeTime.d.ts +49 -0
- package/dist/util/relativeTime.d.ts.map +1 -0
- package/dist/util/relativeTime.js +78 -0
- package/dist/util/relativeTime.js.map +1 -0
- package/package.json +1 -1
- package/src/auth/locales/cs.ts +452 -0
- package/src/auth/locales/index.ts +38 -0
- package/src/auth/locales/sk.ts +452 -0
- package/src/auth/texts.ts +45 -6
- package/src/client/AIHubClient.ts +22 -0
- package/src/components/AgentsPicker/index.tsx +3 -2
- package/src/components/ChangePassword/index.tsx +2 -2
- package/src/components/ChatShell/ShellHeader.tsx +2 -0
- package/src/components/ChatShell/UserMenu.tsx +14 -1
- package/src/components/ChatShell/index.tsx +2 -2
- package/src/components/DataClubAIHub/index.tsx +11 -1
- package/src/components/DataClubAIHubAdmin/SessionsOverviewPage.tsx +5 -19
- package/src/components/DataClubAIHubAdmin/SettingsPage.tsx +138 -13
- package/src/components/DataClubAIHubAdmin/index.tsx +2 -2
- package/src/components/DataClubAIHubLogin/index.tsx +3 -2
- package/src/components/EffortControl/index.tsx +2 -2
- package/src/components/LanguageSwitcher/index.tsx +127 -0
- package/src/components/MainColumn/index.tsx +2 -2
- package/src/components/MessageInput/index.tsx +2 -2
- package/src/components/MessageList/index.tsx +2 -2
- package/src/components/ReasoningView/index.tsx +2 -2
- package/src/components/ScrollToPresentButton/index.tsx +2 -2
- package/src/components/SessionsPanel/index.tsx +5 -27
- package/src/components/ThemeSwitcher/index.tsx +3 -2
- package/src/components/ToolCallView/index.tsx +2 -2
- package/src/components/TpmBanner/index.tsx +2 -2
- package/src/context/AIHubContext.ts +25 -0
- package/src/context/AIHubProvider.tsx +68 -1
- package/src/context/index.ts +1 -0
- package/src/context/language.ts +81 -0
- package/src/context/useAIHub.ts +12 -0
- package/src/context/useAIHubTexts.ts +64 -0
- package/src/index.ts +13 -0
- package/src/primitives/index.ts +3 -0
- package/src/stories/_mockProvider.tsx +5 -0
- package/src/styles/default.css +79 -0
- package/src/types.ts +14 -0
- package/src/util/relativeTime.ts +90 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slovak (`sk`) locale — a complete {@link AIHubTexts} surface.
|
|
3
|
+
*
|
|
4
|
+
* Typed `: AIHubTexts` (not a partial) so the compiler flags any key that is
|
|
5
|
+
* added to / renamed in the English defaults but not translated here.
|
|
6
|
+
* Placeholders (`{count}`, `{seconds}`, `{role}`, `{username}`, `{name}`,
|
|
7
|
+
* `{title}`, `{date}`, `{n}`, `{page}`, `{owner}`, `{agent}`) are preserved
|
|
8
|
+
* verbatim. Brand / technical identifiers (Letta ADE, ai-hub, cron,
|
|
9
|
+
* `agent_id`, `LETTA_API_KEY`, `AI_HUB_FILES_DIR`) are intentionally left
|
|
10
|
+
* untranslated.
|
|
11
|
+
*
|
|
12
|
+
* @see ./en defaults in `../texts.ts`
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type { AIHubTexts } from "../texts.js";
|
|
16
|
+
|
|
17
|
+
export const skTexts: AIHubTexts = {
|
|
18
|
+
login: {
|
|
19
|
+
usernameLabel: "Používateľské meno",
|
|
20
|
+
passwordLabel: "Heslo",
|
|
21
|
+
signInButton: "Prihlásiť sa",
|
|
22
|
+
signingInButton: "Prihlasovanie…",
|
|
23
|
+
forgotPasswordNote:
|
|
24
|
+
"Zabudli ste alebo stratili heslo? Obráťte sa na svojho správcu.",
|
|
25
|
+
showPasswordAriaLabel: "Zobraziť heslo",
|
|
26
|
+
hidePasswordAriaLabel: "Skryť heslo",
|
|
27
|
+
invalidCredentialsError: "Neplatné používateľské meno alebo heslo.",
|
|
28
|
+
networkError: "Server je nedostupný. Skúste to znova.",
|
|
29
|
+
},
|
|
30
|
+
changePassword: {
|
|
31
|
+
title: "Zmena hesla",
|
|
32
|
+
forcedChangePasswordIntro:
|
|
33
|
+
"Pred pokračovaním si musíte zmeniť heslo.",
|
|
34
|
+
currentPasswordLabel: "Súčasné heslo",
|
|
35
|
+
newPasswordLabel: "Nové heslo",
|
|
36
|
+
confirmPasswordLabel: "Potvrdenie nového hesla",
|
|
37
|
+
changePasswordButton: "Zmeniť heslo",
|
|
38
|
+
savingButton: "Ukladanie…",
|
|
39
|
+
cancelButton: "Zrušiť",
|
|
40
|
+
passwordsMustMatchError: "Heslá sa nezhodujú.",
|
|
41
|
+
passwordTooShortError: "Nové heslo musí mať aspoň 8 znakov.",
|
|
42
|
+
passwordTooSimpleError:
|
|
43
|
+
"Nové heslo musí obsahovať aspoň dve z troch kategórií: písmená, číslice, špeciálne znaky.",
|
|
44
|
+
invalidCurrentPasswordError: "Súčasné heslo nie je správne.",
|
|
45
|
+
networkError: "Server je nedostupný. Skúste to znova.",
|
|
46
|
+
showPasswordAriaLabel: "Zobraziť heslo",
|
|
47
|
+
hidePasswordAriaLabel: "Skryť heslo",
|
|
48
|
+
},
|
|
49
|
+
chat: {
|
|
50
|
+
agentsPickerHeading: "Vyberte agenta",
|
|
51
|
+
agentCardSessionsSubtitle: "Vaše konverzácie: {count}",
|
|
52
|
+
agentCardNoSessionsSubtitle: "Zatiaľ žiadne konverzácie",
|
|
53
|
+
agentsPickerEmptyHeading: "Nie sú dostupní žiadni agenti",
|
|
54
|
+
agentsPickerEmptyBody:
|
|
55
|
+
"Správca v tomto prostredí zatiaľ nezverejnil žiadnych agentov.",
|
|
56
|
+
agentsPickerLoading: "Načítavanie agentov…",
|
|
57
|
+
agentsPickerError: "Agentov sa nepodarilo načítať. Skúste to znova.",
|
|
58
|
+
sessionsLoading: "Načítavanie…",
|
|
59
|
+
sessionsEmpty: "Zatiaľ žiadne konverzácie.",
|
|
60
|
+
newSessionButton: "+ Nová konverzácia",
|
|
61
|
+
showArchivedToggle: "Zobraziť archivované",
|
|
62
|
+
hideArchivedToggle: "Skryť archivované",
|
|
63
|
+
editSessionTitleAriaLabel: "Upraviť názov konverzácie",
|
|
64
|
+
archiveSessionAriaLabel: "Archivovať konverzáciu",
|
|
65
|
+
unarchiveSessionAriaLabel: "Obnoviť konverzáciu z archívu",
|
|
66
|
+
archiveConfirmPrompt:
|
|
67
|
+
"Archivovať „{title}“? Neskôr ju nájdete pod filtrom Archivované.",
|
|
68
|
+
collapseSessionsPanel: "Zbaliť panel konverzácií",
|
|
69
|
+
expandSessionsPanel: "Zobraziť panel konverzácií",
|
|
70
|
+
backToAgentsLink: "← Agenti",
|
|
71
|
+
untitledSessionFallback: "(bez názvu)",
|
|
72
|
+
noActiveSessionHint:
|
|
73
|
+
"Vyberte konverzáciu vľavo alebo začnite novú.",
|
|
74
|
+
emptyConversationHint:
|
|
75
|
+
"Začnite odoslaním správy — odpoveď asistenta sa zobrazí tu.",
|
|
76
|
+
inputPlaceholder:
|
|
77
|
+
"Napíšte správu — Enter odošle, Shift+Enter vloží nový riadok.",
|
|
78
|
+
sendButton: "Odoslať",
|
|
79
|
+
stopButton: "Zastaviť",
|
|
80
|
+
stoppingButton: "Zastavovanie…",
|
|
81
|
+
sendButtonAriaLabel: "Odoslať správu",
|
|
82
|
+
stopButtonAriaLabel: "Zastaviť generovanie",
|
|
83
|
+
newSessionModalTitle: "Nová konverzácia",
|
|
84
|
+
editSessionModalTitle: "Premenovať konverzáciu",
|
|
85
|
+
sessionTitleLabel: "Názov konverzácie",
|
|
86
|
+
sessionTitlePlaceholder: "O čom je táto konverzácia?",
|
|
87
|
+
sessionTitleRequiredError: "Názov je povinný.",
|
|
88
|
+
sessionTitleTooLongError: "Názov smie mať najviac 80 znakov.",
|
|
89
|
+
modalCancelButton: "Zrušiť",
|
|
90
|
+
modalCreateButton: "Vytvoriť",
|
|
91
|
+
modalSaveButton: "Uložiť",
|
|
92
|
+
genericRequestError: "Niečo sa pokazilo. Skúste to znova.",
|
|
93
|
+
noAssistantResponseError:
|
|
94
|
+
"Agent nevytvoril žiadnu odpoveď. Ak to pretrváva, kontaktujte správcu.",
|
|
95
|
+
signOutMenuItem: "Odhlásiť sa",
|
|
96
|
+
/* Step 10 affordances. */
|
|
97
|
+
stopGenerationButton: "Zastaviť generovanie",
|
|
98
|
+
cancelToolButton: "Zrušiť nástroj",
|
|
99
|
+
systemResumedText: "Obnovené.",
|
|
100
|
+
tpmWaitText: "Poskytovateľ obmedzil rýchlosť. Pokračovanie o {seconds} s…",
|
|
101
|
+
tpmExhaustedText:
|
|
102
|
+
"Model dosiahol limit rýchlosti a nepodarilo sa ho obnoviť. Skúste to znova alebo skráťte poslednú správu.",
|
|
103
|
+
tpmRetryButton: "Skúsiť znova",
|
|
104
|
+
streamFailedText: "Prenos zlyhal.",
|
|
105
|
+
retryFailedButton: "Skúsiť znova",
|
|
106
|
+
cancelledStampText: "Zastavené",
|
|
107
|
+
scrollToPresentButton: "↓ Prejsť na najnovšie",
|
|
108
|
+
reasoningCollapsedHeader: "🧠 Uvažovanie… ({seconds} s)",
|
|
109
|
+
reasoningCollapsedHeaderNoDuration: "🧠 Uvažovanie",
|
|
110
|
+
reasoningExpandedHeader: "🧠 Uvažovanie ({seconds} s)",
|
|
111
|
+
reasoningExpandedHeaderNoDuration: "🧠 Uvažovanie",
|
|
112
|
+
reasoningExpandAriaLabel: "Zobraziť uvažovanie",
|
|
113
|
+
reasoningCollapseAriaLabel: "Skryť uvažovanie",
|
|
114
|
+
reasoningThinkingPlaceholder: "Prebieha uvažovanie…",
|
|
115
|
+
toolCallRunningStatus: "⟳ prebieha…",
|
|
116
|
+
toolCallDoneStatus: "✓ hotovo",
|
|
117
|
+
toolCallErrorStatus: "✗ chyba",
|
|
118
|
+
toolCallInputLabel: "Vstup:",
|
|
119
|
+
toolCallOutputLabel: "Výstup:",
|
|
120
|
+
toolCallErrorLabel: "Chyba:",
|
|
121
|
+
toolCallExpandAriaLabel: "Zobraziť detail volania nástroja",
|
|
122
|
+
toolCallCollapseAriaLabel: "Skryť detail volania nástroja",
|
|
123
|
+
effortLabel: "Úsilie",
|
|
124
|
+
effortNone: "Žiadne",
|
|
125
|
+
effortMinimal: "Minimálne",
|
|
126
|
+
effortLow: "Nízke",
|
|
127
|
+
effortMedium: "Stredné",
|
|
128
|
+
effortHigh: "Vysoké",
|
|
129
|
+
effortExtraHigh: "Veľmi vysoké",
|
|
130
|
+
themeDarkLabel: "Tmavý",
|
|
131
|
+
themeLightLabel: "Svetlý",
|
|
132
|
+
themeSwitchToDarkAriaLabel: "Prepnúť na tmavú tému",
|
|
133
|
+
themeSwitchToLightAriaLabel: "Prepnúť na svetlú tému",
|
|
134
|
+
/* Step 11 user menu. */
|
|
135
|
+
adminMenuItem: "Správa",
|
|
136
|
+
openLettaAdeMenuItem: "Otvoriť Letta ADE",
|
|
137
|
+
/* Language switcher. */
|
|
138
|
+
languageSwitcherAriaLabel: "Zmeniť jazyk",
|
|
139
|
+
},
|
|
140
|
+
admin: {
|
|
141
|
+
/* Shell. */
|
|
142
|
+
navHeading: "Správa",
|
|
143
|
+
navUsers: "Používatelia",
|
|
144
|
+
navAgents: "Agenti",
|
|
145
|
+
navSessionsOverview: "Prehľad konverzácií",
|
|
146
|
+
navRotatingMessages: "Rotujúce správy",
|
|
147
|
+
navSettings: "Nastavenia",
|
|
148
|
+
backToChatLink: "Späť do chatu",
|
|
149
|
+
comingInStep12Placeholder:
|
|
150
|
+
"Stránka {page} bude doplnená v ďalšom kroku implementácie.",
|
|
151
|
+
/* Users sub-page. */
|
|
152
|
+
usersHeading: "Správa používateľov",
|
|
153
|
+
createUserButton: "+ Vytvoriť používateľa",
|
|
154
|
+
userColumnUsername: "Používateľské meno",
|
|
155
|
+
userColumnDisplay: "Zobrazované meno",
|
|
156
|
+
userColumnRole: "Rola",
|
|
157
|
+
userColumnActions: "Akcie",
|
|
158
|
+
usersLoading: "Načítavanie používateľov…",
|
|
159
|
+
usersEmpty: "V tomto prostredí zatiaľ nie sú žiadni používatelia.",
|
|
160
|
+
usersGenericError: "Používateľov sa nepodarilo načítať. Skúste to znova.",
|
|
161
|
+
resetPasswordButtonLabel: "Obnoviť heslo",
|
|
162
|
+
deleteUserButtonLabel: "Odstrániť používateľa",
|
|
163
|
+
roleSelectShieldDisabledHint:
|
|
164
|
+
"Rolu iného správcu môže zmeniť iba super-správca.",
|
|
165
|
+
roleSelectMinCountDisabledHint:
|
|
166
|
+
"Posledného super-správcu nemožno degradovať.",
|
|
167
|
+
roleChangeForbiddenFallback:
|
|
168
|
+
"Nemáte oprávnenie meniť rolu tohto používateľa.",
|
|
169
|
+
roleChangeSuccessToast: "Rola zmenená na {role}.",
|
|
170
|
+
initialPasswordIndicator: "⚠ počiatočné heslo",
|
|
171
|
+
roleOptionUser: "user",
|
|
172
|
+
roleOptionPowerUser: "power_user",
|
|
173
|
+
roleOptionAdmin: "admin",
|
|
174
|
+
roleOptionSuperAdmin: "super_admin",
|
|
175
|
+
/* Create user modal. */
|
|
176
|
+
createUserModalTitle: "Vytvoriť nového používateľa",
|
|
177
|
+
createUserUsernameLabel: "Používateľské meno",
|
|
178
|
+
createUserDisplayLabel: "Zobrazované meno (nepovinné)",
|
|
179
|
+
createUserRoleLabel: "Rola",
|
|
180
|
+
createUserCancelButton: "Zrušiť",
|
|
181
|
+
createUserSubmitButton: "Vytvoriť používateľa",
|
|
182
|
+
createUserSubmittingButton: "Vytváranie…",
|
|
183
|
+
createUserUsernameRequiredError: "Používateľské meno je povinné.",
|
|
184
|
+
createUserUsernameTakenError: "Toto používateľské meno sa už používa.",
|
|
185
|
+
createUserGenericError: "Používateľa sa nepodarilo vytvoriť. Skúste to znova.",
|
|
186
|
+
/* Password reveal modal. */
|
|
187
|
+
passwordRevealCreateTitle: "Používateľ vytvorený",
|
|
188
|
+
passwordRevealResetTitle: "Heslo obnovené",
|
|
189
|
+
passwordRevealWarning:
|
|
190
|
+
"Toto heslo sa zobrazí iba raz. Odovzdajte ho používateľovi bezpečne. Pri prvom prihlásení si ho bude musieť zmeniť.",
|
|
191
|
+
passwordRevealUsernameLabel: "Používateľské meno",
|
|
192
|
+
passwordRevealPasswordLabel: "Vygenerované heslo",
|
|
193
|
+
passwordRevealCopyAriaLabel: "Skopírovať heslo do schránky",
|
|
194
|
+
passwordRevealCopiedFlash: "Skopírované!",
|
|
195
|
+
passwordRevealDoneButton: "Hotovo",
|
|
196
|
+
/* Reset confirm modal. */
|
|
197
|
+
resetPasswordModalTitle: "Obnoviť heslo používateľa „{username}“?",
|
|
198
|
+
resetPasswordModalBody:
|
|
199
|
+
"Vygeneruje sa nové náhodné heslo. Súčasné heslo prestane platiť. Používateľ si nové heslo bude musieť pri ďalšom prihlásení zmeniť.",
|
|
200
|
+
resetPasswordCancelButton: "Zrušiť",
|
|
201
|
+
resetPasswordConfirmButton: "Obnoviť heslo",
|
|
202
|
+
resetPasswordConfirmingButton: "Obnovovanie…",
|
|
203
|
+
resetPasswordGenericError: "Heslo sa nepodarilo obnoviť. Skúste to znova.",
|
|
204
|
+
/* Delete user. */
|
|
205
|
+
deleteUserConfirmPrompt:
|
|
206
|
+
"Odstrániť používateľa „{username}“? Táto akcia je nezvratná a odstráni všetky jeho konverzácie.",
|
|
207
|
+
deleteUserGenericError: "Používateľa sa nepodarilo odstrániť. Skúste to znova.",
|
|
208
|
+
/* Agents sub-page. */
|
|
209
|
+
agentsHeading: "Agenti",
|
|
210
|
+
createAgentButton: "+ Vytvoriť agenta",
|
|
211
|
+
openLettaAdeButton: "↗ Otvoriť Letta ADE",
|
|
212
|
+
agentColumnName: "Zobrazované meno",
|
|
213
|
+
agentColumnLettaId: "Letta agent_id",
|
|
214
|
+
agentColumnStatus: "Stav",
|
|
215
|
+
agentColumnActions: "Akcie",
|
|
216
|
+
agentsLoading: "Načítavanie agentov…",
|
|
217
|
+
agentsEmpty: "V tomto prostredí zatiaľ nie sú žiadni agenti.",
|
|
218
|
+
agentsGenericError: "Agentov sa nepodarilo načítať. Skúste to znova.",
|
|
219
|
+
agentStatusActive: "aktívny",
|
|
220
|
+
agentStatusArchived: "archivovaný",
|
|
221
|
+
agentEditButton: "Upraviť",
|
|
222
|
+
agentArchiveButton: "Archivovať",
|
|
223
|
+
agentUnarchiveButton: "Obnoviť z archívu",
|
|
224
|
+
agentShowArchivedToggle: "Zobraziť archivované",
|
|
225
|
+
agentsAdeFootnote:
|
|
226
|
+
"Pre zmenu modelu, poskytovateľa, systémového promptu, nástrojov alebo pamäte agenta ho upravte v Letta ADE. Zmeny sa prejavia okamžite pre všetkých používateľov ai-hubu.",
|
|
227
|
+
agentArchiveConfirmPrompt:
|
|
228
|
+
"Archivovať „{name}“? Koncoví používatelia už nebudú môcť s týmto agentom zakladať nové konverzácie. Existujúce konverzácie ďalej fungujú.",
|
|
229
|
+
createAgentModalTitle: "Vytvoriť ai-hub agenta",
|
|
230
|
+
editAgentModalTitle: "Upraviť „{name}“",
|
|
231
|
+
agentNameLabel: "Zobrazované meno",
|
|
232
|
+
agentNameHelper: "Zobrazuje sa používateľom vo výbere agentov.",
|
|
233
|
+
agentLettaIdLabel: "Letta agent_id",
|
|
234
|
+
agentLettaIdHelper:
|
|
235
|
+
"Nájdete v Letta ADE — agent v Lette už musí existovať; ai-hub agentov v Lette nevytvára.",
|
|
236
|
+
agentLettaIdReassignHelper:
|
|
237
|
+
"Zmenou sa presmerujú iba NOVÉ konverzácie na iného Letta agenta; existujúce konverzácie si ponechajú svoju pôvodnú konverzáciu a pokračujú s pôvodným Letta agentom.",
|
|
238
|
+
agentModalCancelButton: "Zrušiť",
|
|
239
|
+
agentModalCreateButton: "Vytvoriť",
|
|
240
|
+
agentModalSaveButton: "Uložiť",
|
|
241
|
+
agentModalSubmittingButton: "Ukladanie…",
|
|
242
|
+
agentNameRequiredError: "Zobrazované meno je povinné.",
|
|
243
|
+
agentLettaIdRequiredError: "Letta agent_id je povinné.",
|
|
244
|
+
agentLettaIdNotFoundError:
|
|
245
|
+
"Agent v Lette s týmto id sa nenašiel. Skontrolujte hodnotu v Letta ADE.",
|
|
246
|
+
agentSubmitGenericError: "Agenta sa nepodarilo uložiť. Skúste to znova.",
|
|
247
|
+
/* Specialized agents. */
|
|
248
|
+
agentSpecializedSectionHeading: "Špecializovaný agent (nepovinné)",
|
|
249
|
+
agentSpecializedSectionHelper:
|
|
250
|
+
"Predvyplňte každú konverzáciu súbormi a/alebo konverzáciou pripravenou správcom. Ponechajte obe prázdne pre bezstavového agenta.",
|
|
251
|
+
agentSandboxSeedLabel: "Východisková zložka sandboxu",
|
|
252
|
+
agentSandboxSeedHelper:
|
|
253
|
+
"Názov zložky pod AI_HUB_FILES_DIR/seeds/, ktorá sa skopíruje do pracovného adresára každej konverzácie. Agent získa v tejto kópii práva na čítanie aj zápis.",
|
|
254
|
+
agentSandboxSeedInvalidError:
|
|
255
|
+
"Musí zodpovedať ^[a-zA-Z0-9_-]+$ — iba písmená, číslice, pomlčky a podčiarkovníky.",
|
|
256
|
+
agentSandboxSeedNotFoundError:
|
|
257
|
+
"Pod AI_HUB_FILES_DIR/seeds/ žiadna zložka s týmto názvom neexistuje. Najprv ju na serveri vytvorte.",
|
|
258
|
+
agentForkSourceLabel: "Východisková konverzácia",
|
|
259
|
+
agentForkSourceHelper:
|
|
260
|
+
"Každá nová konverzácia vychádza z tejto základnej. Vyberte rotujúcu správu (automaticky sa obnovuje) alebo vložte id Letta konverzácie (conv-…). V oboch prípadoch musí patriť tomu istému Letta agentovi.",
|
|
261
|
+
agentForkSourceNotFoundError:
|
|
262
|
+
"Letta konverzácia s týmto id sa nenašla.",
|
|
263
|
+
agentForkSourceAgentMismatchError:
|
|
264
|
+
"Táto konverzácia patrí inému Letta agentovi. Východisková konverzácia musí byť u rovnakého agenta ako letta_agent_id vyššie.",
|
|
265
|
+
agentForkSourceModeNone: "Žiadna — každú konverzáciu začať nanovo",
|
|
266
|
+
agentForkSourceModeRotating: "Rotujúca správa",
|
|
267
|
+
agentForkSourceModeManual: "Id konverzácie",
|
|
268
|
+
agentForkSourceRotatingSearchPlaceholder: "Hľadať rotujúce správy…",
|
|
269
|
+
agentForkSourceRotatingEmpty:
|
|
270
|
+
"Zatiaľ žiadne rotujúce správy. Vytvorte jednu na stránke Rotujúce správy.",
|
|
271
|
+
agentForkSourceRotatingNotFoundError:
|
|
272
|
+
"Táto rotujúca správa už neexistuje alebo je archivovaná.",
|
|
273
|
+
agentForkSourceRotatingMismatchError:
|
|
274
|
+
"Táto rotujúca správa beží proti inému Letta agentovi. Musí zdieľať rovnakého agenta ako letta_agent_id vyššie.",
|
|
275
|
+
/* Rotating messages. */
|
|
276
|
+
rotatingHeading: "Rotujúce správy",
|
|
277
|
+
rotatingLoading: "Načítavanie rotujúcich správ…",
|
|
278
|
+
rotatingEmpty: "Zatiaľ žiadne rotujúce správy.",
|
|
279
|
+
rotatingGenericError: "Rotujúce správy sa nepodarilo načítať.",
|
|
280
|
+
rotatingCreateButton: "+ Vytvoriť rotujúcu správu",
|
|
281
|
+
rotatingColumnName: "Názov",
|
|
282
|
+
rotatingColumnAgent: "Letta agent",
|
|
283
|
+
rotatingColumnSchedule: "Plán",
|
|
284
|
+
rotatingColumnStatus: "Posledný beh",
|
|
285
|
+
rotatingColumnId: "Referenčné id",
|
|
286
|
+
rotatingColumnActions: "Akcie",
|
|
287
|
+
rotatingEditButton: "Upraviť",
|
|
288
|
+
rotatingRotateNowButton: "Rotovať teraz",
|
|
289
|
+
rotatingArchiveButton: "Archivovať",
|
|
290
|
+
rotatingUnarchiveButton: "Obnoviť z archívu",
|
|
291
|
+
rotatingArchiveConfirmPrompt:
|
|
292
|
+
"Archivovať rotujúcu správu „{name}“? Agenti, ktorí ju používajú, nebudú môcť zakladať nové konverzácie, kým nebudú presmerovaní.",
|
|
293
|
+
rotatingShowArchivedToggle: "Zobraziť archivované",
|
|
294
|
+
rotatingStatusPending: "Zatiaľ nespustené",
|
|
295
|
+
rotatingStatusOk: "OK",
|
|
296
|
+
rotatingStatusError: "Zlyhalo",
|
|
297
|
+
rotatingStatusArchived: "Archivované",
|
|
298
|
+
rotatingRotateNowRunning: "Rotovanie…",
|
|
299
|
+
createRotatingModalTitle: "Vytvoriť rotujúcu správu",
|
|
300
|
+
editRotatingModalTitle: "Upraviť „{name}“",
|
|
301
|
+
rotatingNameLabel: "Zobrazované meno",
|
|
302
|
+
rotatingNameHelper: "Označenie pre správcov. Koncovým používateľom sa nezobrazuje.",
|
|
303
|
+
rotatingNameRequiredError: "Zobrazované meno je povinné.",
|
|
304
|
+
rotatingPromptLabel: "Prompt",
|
|
305
|
+
rotatingPromptHelper:
|
|
306
|
+
"Odosiela sa agentovi pri každej rotácii. Odpoveď agenta sa stane pripravenou úvodnou správou (napr. „Zhrň dnešné počasie v Bratislave.“).",
|
|
307
|
+
rotatingPromptRequiredError: "Prompt je povinný.",
|
|
308
|
+
rotatingAgentLabel: "Letta agent id",
|
|
309
|
+
rotatingAgentHelper:
|
|
310
|
+
"Letta agent, proti ktorému sa prompt spúšťa. Agenti odkazujúci na túto rotujúcu správu musia zdieľať toto Letta agent id.",
|
|
311
|
+
rotatingAgentRequiredError: "Letta agent id je povinné.",
|
|
312
|
+
rotatingAgentNotFoundError: "Agent v Lette s týmto id sa nenašiel.",
|
|
313
|
+
rotatingScheduleLabel: "Plán rotácie",
|
|
314
|
+
rotatingScheduleEveryOption: "Každých…",
|
|
315
|
+
rotatingScheduleDailyOption: "Denne o…",
|
|
316
|
+
rotatingScheduleCronOption: "Pokročilé (cron)",
|
|
317
|
+
rotatingIntervalValueLabel: "Každých",
|
|
318
|
+
rotatingIntervalUnitHours: "hodín",
|
|
319
|
+
rotatingIntervalUnitDays: "dní",
|
|
320
|
+
rotatingDailyTimeLabel: "Čas (UTC)",
|
|
321
|
+
rotatingDailyTimeHelper: "24-hodinový formát HH:MM, v UTC.",
|
|
322
|
+
rotatingCronLabel: "Cron výraz",
|
|
323
|
+
rotatingCronHelper:
|
|
324
|
+
"5-položkový cron (minúta hodina deň-v-mesiaci mesiac deň-v-týždni), vyhodnocovaný v UTC. Napr. „0 6 * * *“ = denne o 06:00 UTC.",
|
|
325
|
+
rotatingScheduleInvalidError:
|
|
326
|
+
"Tento plán nie je platný. Skontrolujte interval / čas / cron výraz.",
|
|
327
|
+
rotatingSubmitGenericError:
|
|
328
|
+
"Rotujúcu správu sa nepodarilo uložiť. Skúste to znova.",
|
|
329
|
+
rotatingModalCancelButton: "Zrušiť",
|
|
330
|
+
rotatingModalCreateButton: "Vytvoriť",
|
|
331
|
+
rotatingModalSaveButton: "Uložiť",
|
|
332
|
+
rotatingModalSubmittingButton: "Ukladanie…",
|
|
333
|
+
/* Sessions overview. */
|
|
334
|
+
sessionsOverviewHeading: "Konverzácie",
|
|
335
|
+
sessionsOverviewSearchPlaceholder: "Hľadať v názvoch…",
|
|
336
|
+
sessionsOverviewOwnerFilterLabel: "Vlastník",
|
|
337
|
+
sessionsOverviewOwnerFilterAll: "všetci používatelia",
|
|
338
|
+
sessionsOverviewAgentFilterLabel: "Agent",
|
|
339
|
+
sessionsOverviewAgentFilterAll: "všetci agenti",
|
|
340
|
+
sessionsOverviewStatusFilterLabel: "Stav",
|
|
341
|
+
sessionsOverviewStatusActive: "aktívne",
|
|
342
|
+
sessionsOverviewStatusArchived: "archivované",
|
|
343
|
+
sessionsOverviewStatusAll: "všetko",
|
|
344
|
+
sessionsOverviewColumnTitle: "Názov",
|
|
345
|
+
sessionsOverviewColumnOwner: "Vlastník",
|
|
346
|
+
sessionsOverviewColumnAgent: "Agent",
|
|
347
|
+
sessionsOverviewColumnLastMessage: "Posledná správa",
|
|
348
|
+
sessionsOverviewColumnActions: "Akcie",
|
|
349
|
+
sessionsOverviewViewButton: "Zobraziť",
|
|
350
|
+
sessionsOverviewPrevPage: "← Predchádzajúca",
|
|
351
|
+
sessionsOverviewNextPage: "Ďalšia →",
|
|
352
|
+
sessionsOverviewPageNumber: "Strana {n}",
|
|
353
|
+
sessionsOverviewLoading: "Načítavanie konverzácií…",
|
|
354
|
+
sessionsOverviewEmpty: "Žiadne konverzácie nezodpovedajú zvoleným filtrom.",
|
|
355
|
+
sessionsOverviewGenericError: "Konverzácie sa nepodarilo načítať. Skúste to znova.",
|
|
356
|
+
sessionsOverviewBackLink: "← Späť na konverzácie",
|
|
357
|
+
sessionsOverviewDetailHeading: "{title} — {owner} — {agent}",
|
|
358
|
+
sessionsOverviewDetailLoading: "Načítavanie správ…",
|
|
359
|
+
sessionsOverviewDetailEmpty: "Táto konverzácia zatiaľ nemá žiadne správy.",
|
|
360
|
+
sessionsOverviewDetailGenericError: "Správy sa nepodarilo načítať. Skúste to znova.",
|
|
361
|
+
sessionsOverviewDetailSandboxLabel: "Sandbox:",
|
|
362
|
+
sessionsOverviewDetailSandboxPresent:
|
|
363
|
+
"na disku pod AI_HUB_FILES_DIR/sandboxes/<session-id>/",
|
|
364
|
+
sessionsOverviewDetailSandboxAbsent: "— (bez sandboxu)",
|
|
365
|
+
sessionsOverviewPurgeSandboxButton: "Vymazať sandbox",
|
|
366
|
+
sessionsOverviewPurgeSandboxConfirmPrompt:
|
|
367
|
+
"Odstrániť zložku sandboxu konverzácie a celý jej obsah? Túto akciu nemožno vrátiť.",
|
|
368
|
+
sessionsOverviewPurgeSandboxConfirming: "Mazanie…",
|
|
369
|
+
sessionsOverviewPurgeSandboxSuccessFlash: "Sandbox vymazaný.",
|
|
370
|
+
sessionsOverviewPurgeSandboxTurnRunningError:
|
|
371
|
+
"Sandbox nemožno vymazať, kým beží ťah. Počkajte na dokončenie ťahu a skúste to znova.",
|
|
372
|
+
sessionsOverviewPurgeSandboxGenericError:
|
|
373
|
+
"Sandbox sa nepodarilo vymazať. Skúste to znova.",
|
|
374
|
+
/* Settings. */
|
|
375
|
+
settingsHeading: "Nastavenia",
|
|
376
|
+
settingsLoading: "Načítavanie nastavení…",
|
|
377
|
+
settingsGenericError: "Nastavenia sa nepodarilo načítať. Skúste to znova.",
|
|
378
|
+
settingsLettaSectionHeading: "Pripojenie k Lette",
|
|
379
|
+
settingsLettaBaseUrlLabel: "Základná URL Letty",
|
|
380
|
+
settingsLettaAdeUrlLabel:
|
|
381
|
+
"URL Letta ADE (pre prehliadač — použité pre odkaz „Otvoriť Letta ADE“)",
|
|
382
|
+
settingsLettaAdeUrlHelper:
|
|
383
|
+
"Nepovinné; ak je prázdne, odvodí sa zo základnej URL bez /v1.",
|
|
384
|
+
settingsLettaApiKeyLabel: "API kľúč Letty",
|
|
385
|
+
settingsLettaApiKeyDbHelper:
|
|
386
|
+
"Aktuálne nastavené cez administráciu (prepíše premennú prostredia LETTA_API_KEY). Novú hodnotu nastavíte prepísaním, alebo override zrušte pre návrat k env.",
|
|
387
|
+
settingsLettaApiKeyEnvHelper:
|
|
388
|
+
"Aktuálne sa používa LETTA_API_KEY z prostredia servera. Tu zadanou hodnotou env prepíšete hodnotou z administrácie.",
|
|
389
|
+
settingsLettaApiKeyNoneHelper:
|
|
390
|
+
"Žiadny kľúč nie je nastavený (ani v administrácii, ani v env LETTA_API_KEY). Vložte sem heslo Letta servera, alebo nastavte LETTA_API_KEY v .env.",
|
|
391
|
+
settingsLettaApiKeyMaskedHelper:
|
|
392
|
+
"Aktuálne nastavené. Novú hodnotu nastavíte prepísaním.",
|
|
393
|
+
settingsLettaApiKeyUnsetHelper:
|
|
394
|
+
"Žiadny kľúč nie je nastavený. Vložte sem API kľúč Letta servera.",
|
|
395
|
+
settingsLettaApiKeyPlaceholder: "••••••••••••••••",
|
|
396
|
+
settingsLettaApiKeyClearOverrideButton: "Zrušiť override z administrácie (použiť env)",
|
|
397
|
+
settingsSaveLettaButton: "Uložiť pripojenie",
|
|
398
|
+
settingsSaveSavingButton: "Ukladanie…",
|
|
399
|
+
settingsSaveSuccessFlash: "Uložené.",
|
|
400
|
+
settingsSaveGenericError: "Nepodarilo sa uložiť. Skúste to znova.",
|
|
401
|
+
settingsThemeSectionHeading: "Téma",
|
|
402
|
+
settingsThemeDefaultLabel: "Predvolená téma",
|
|
403
|
+
settingsThemeDefaultLight: "Svetlá",
|
|
404
|
+
settingsThemeDefaultDark: "Tmavá",
|
|
405
|
+
settingsThemeSwitcherEnabledLabel: "Povoliť používateľom prepínať tému",
|
|
406
|
+
settingsThemeSwitcherEnabledHelper:
|
|
407
|
+
"Keď je vypnuté, prostredie má jedinú tému: prepínač témy je skrytý a všetci používatelia vidia predvolenú tému.",
|
|
408
|
+
settingsSaveThemeButton: "Uložiť tému",
|
|
409
|
+
settingsLanguageSectionHeading: "Jazyk",
|
|
410
|
+
settingsLanguageDefaultLabel: "Predvolený jazyk",
|
|
411
|
+
settingsLanguageDefaultEnglish: "Angličtina",
|
|
412
|
+
settingsLanguageDefaultCzech: "Čeština",
|
|
413
|
+
settingsLanguageDefaultSlovak: "Slovenčina",
|
|
414
|
+
settingsLanguageLockedLabel: "Uzamknúť jazyk — zabrániť používateľom v zmene",
|
|
415
|
+
settingsLanguageLockedHelper:
|
|
416
|
+
"Keď je zapnuté, prepínač jazyka je skrytý a všetci používatelia vidia predvolený jazyk. Keď je vypnuté, používatelia si môžu zvoliť vlastný jazyk a ich voľba sa zapamätá na ich zariadení.",
|
|
417
|
+
settingsSaveLanguageButton: "Uložiť jazyk",
|
|
418
|
+
settingsTogglesSectionHeading: "Prepínače funkcií UI",
|
|
419
|
+
settingsTogglesGroupSessions: "Panel konverzácií",
|
|
420
|
+
settingsTogglesGroupInput: "Vstup",
|
|
421
|
+
settingsTogglesGroupAffordances: "Funkcie chatu",
|
|
422
|
+
settingsTogglesSaveButton: "Uložiť prepínače",
|
|
423
|
+
settingsSigningKeySectionHeading: "Podpisový kľúč",
|
|
424
|
+
settingsSigningKeyLastRotated: "Naposledy rotované: {date}",
|
|
425
|
+
settingsSigningKeyNeverRotated: "Od nasadenia nikdy nerotované.",
|
|
426
|
+
settingsSigningKeyWarning:
|
|
427
|
+
"Rotácia podpisového kľúča zneplatní každú aktívnu reláciu. Každý prihlásený používateľ (vrátane vás) bude odhlásený a bude sa musieť prihlásiť znova. Túto akciu nemožno vrátiť.",
|
|
428
|
+
settingsRotateSigningKeyButton: "Rotovať podpisový kľúč",
|
|
429
|
+
settingsRotateSigningKeyModalTitle: "Rotovať podpisový kľúč?",
|
|
430
|
+
settingsRotateSigningKeyModalBody:
|
|
431
|
+
"Okamžite odhlási každého prihláseného používateľa, vrátane vás. Vy (aj oni) sa budete musieť prihlásiť znova.",
|
|
432
|
+
settingsRotateConfirmInputLabel: "Pre potvrdenie napíšte ROTATE:",
|
|
433
|
+
settingsRotateConfirmPlaceholder: "ROTATE",
|
|
434
|
+
settingsRotateConfirmKeyword: "ROTATE",
|
|
435
|
+
settingsRotateConfirmButton: "Rotovať",
|
|
436
|
+
settingsRotateConfirmingButton: "Rotovanie…",
|
|
437
|
+
settingsRotateGenericError: "Rotácia sa nepodarila. Skúste to znova.",
|
|
438
|
+
settingsMetricsSectionHeading: "Token na zber metrík",
|
|
439
|
+
settingsMetricsLastRotated: "Naposledy rotované: {date}",
|
|
440
|
+
settingsMetricsNeverRotated: "Od nasadenia nikdy nerotované.",
|
|
441
|
+
settingsMetricsWarning:
|
|
442
|
+
"Rotácia okamžite zneplatní súčasný token. Každý scraper používajúci starú hodnotu začne zlyhávať, kým do jeho konfigurácie nevložíte nový token. Nový token sa pri rotácii zobrazí RAZ — skopírujte ho pred zatvorením dialógu.",
|
|
443
|
+
settingsRotateMetricsButton: "Rotovať token metrík",
|
|
444
|
+
settingsRotateMetricsModalTitle: "Rotovať token na zber metrík?",
|
|
445
|
+
settingsRotateMetricsModalBody:
|
|
446
|
+
"Staré scrapery začnú zlyhávať, kým do ich konfigurácie nevložíte novú hodnotu. Vaša vlastná relácia NIE JE ovplyvnená.",
|
|
447
|
+
settingsMetricsRevealTitle: "Token metrík rotovaný",
|
|
448
|
+
settingsMetricsRevealTokenLabel: "Nový bearer token",
|
|
449
|
+
settingsMetricsRevealWarning:
|
|
450
|
+
"Tento token sa zobrazí iba raz. Skopírujte ho do konfigurácie svojho Prometheus / Alloy / scrapera, než tento dialóg zatvoríte.",
|
|
451
|
+
},
|
|
452
|
+
};
|
package/src/auth/texts.ts
CHANGED
|
@@ -22,6 +22,16 @@
|
|
|
22
22
|
* @see ui-sketches/02-change-password.md — the strings on the change-password card
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
+
/**
|
|
26
|
+
* The languages the library ships built-in locales for. `"en"` is the
|
|
27
|
+
* English default surface (`defaultAIHubTexts`); `"cs"` / `"sk"` are the
|
|
28
|
+
* Czech / Slovak translations under `src/auth/locales/`.
|
|
29
|
+
*
|
|
30
|
+
* Wrappers can still pass a `texts` override on top of any of these — the
|
|
31
|
+
* override wins over the selected locale (see {@link resolveAIHubTexts}).
|
|
32
|
+
*/
|
|
33
|
+
export type AIHubLanguage = "en" | "cs" | "sk";
|
|
34
|
+
|
|
25
35
|
/**
|
|
26
36
|
* User-facing strings on `<DataClubAIHubLogin />`. Every string the screen
|
|
27
37
|
* renders has a key here so wrappers can localize without forking the
|
|
@@ -290,6 +300,10 @@ export interface AIHubChatTexts {
|
|
|
290
300
|
* ADE in a new browser tab. Only rendered for `role >= power_user`.
|
|
291
301
|
*/
|
|
292
302
|
openLettaAdeMenuItem: string;
|
|
303
|
+
|
|
304
|
+
/* ── Language switcher (header, beside the user avatar) ─────────── */
|
|
305
|
+
/** `aria-label` / tooltip on the language-switcher button. */
|
|
306
|
+
languageSwitcherAriaLabel: string;
|
|
293
307
|
}
|
|
294
308
|
|
|
295
309
|
/**
|
|
@@ -770,6 +784,16 @@ export interface AIHubAdminTexts {
|
|
|
770
784
|
settingsThemeSwitcherEnabledHelper: string;
|
|
771
785
|
settingsSaveThemeButton: string;
|
|
772
786
|
|
|
787
|
+
/* Language section. */
|
|
788
|
+
settingsLanguageSectionHeading: string;
|
|
789
|
+
settingsLanguageDefaultLabel: string;
|
|
790
|
+
settingsLanguageDefaultEnglish: string;
|
|
791
|
+
settingsLanguageDefaultCzech: string;
|
|
792
|
+
settingsLanguageDefaultSlovak: string;
|
|
793
|
+
settingsLanguageLockedLabel: string;
|
|
794
|
+
settingsLanguageLockedHelper: string;
|
|
795
|
+
settingsSaveLanguageButton: string;
|
|
796
|
+
|
|
773
797
|
/* Feature toggles section. */
|
|
774
798
|
settingsTogglesSectionHeading: string;
|
|
775
799
|
settingsTogglesGroupSessions: string;
|
|
@@ -947,6 +971,8 @@ export const defaultAIHubTexts: AIHubTexts = Object.freeze({
|
|
|
947
971
|
/* Step 11 user-menu defaults. */
|
|
948
972
|
adminMenuItem: "Admin",
|
|
949
973
|
openLettaAdeMenuItem: "Open Letta ADE",
|
|
974
|
+
/* Language switcher. */
|
|
975
|
+
languageSwitcherAriaLabel: "Change language",
|
|
950
976
|
}),
|
|
951
977
|
admin: Object.freeze({
|
|
952
978
|
/* Shell. */
|
|
@@ -1215,6 +1241,15 @@ export const defaultAIHubTexts: AIHubTexts = Object.freeze({
|
|
|
1215
1241
|
settingsThemeSwitcherEnabledHelper:
|
|
1216
1242
|
"When off, the deployment is single-theme: the theme switcher is hidden and every user sees the default theme.",
|
|
1217
1243
|
settingsSaveThemeButton: "Save theme",
|
|
1244
|
+
settingsLanguageSectionHeading: "Language",
|
|
1245
|
+
settingsLanguageDefaultLabel: "Default language",
|
|
1246
|
+
settingsLanguageDefaultEnglish: "English",
|
|
1247
|
+
settingsLanguageDefaultCzech: "Čeština",
|
|
1248
|
+
settingsLanguageDefaultSlovak: "Slovenčina",
|
|
1249
|
+
settingsLanguageLockedLabel: "Lock language — prevent users from changing it",
|
|
1250
|
+
settingsLanguageLockedHelper:
|
|
1251
|
+
"When on, the language switcher is hidden and every user sees the default language. When off, users can pick their own language and their choice is remembered on their device.",
|
|
1252
|
+
settingsSaveLanguageButton: "Save language",
|
|
1218
1253
|
settingsTogglesSectionHeading: "UI feature toggles",
|
|
1219
1254
|
settingsTogglesGroupSessions: "Sessions panel",
|
|
1220
1255
|
settingsTogglesGroupInput: "Input",
|
|
@@ -1267,21 +1302,25 @@ export const defaultAIHubTexts: AIHubTexts = Object.freeze({
|
|
|
1267
1302
|
* ```
|
|
1268
1303
|
*
|
|
1269
1304
|
* @param overrides - the wrapper-supplied partial. `undefined` is fine and
|
|
1270
|
-
* returns the
|
|
1305
|
+
* returns the base unchanged.
|
|
1306
|
+
* @param base - the locale to merge over. Defaults to the English
|
|
1307
|
+
* `defaultAIHubTexts`; pass a built-in locale (e.g. `AIHUB_LOCALES.cs`)
|
|
1308
|
+
* to localize first and let the wrapper override on top.
|
|
1271
1309
|
* @returns the fully resolved `AIHubTexts`.
|
|
1272
1310
|
*/
|
|
1273
1311
|
export function resolveAIHubTexts(
|
|
1274
1312
|
overrides: DeepPartial<AIHubTexts> | undefined,
|
|
1313
|
+
base: AIHubTexts = defaultAIHubTexts,
|
|
1275
1314
|
): AIHubTexts {
|
|
1276
|
-
if (!overrides) return
|
|
1315
|
+
if (!overrides) return base;
|
|
1277
1316
|
return {
|
|
1278
|
-
login: { ...
|
|
1317
|
+
login: { ...base.login, ...(overrides.login ?? {}) },
|
|
1279
1318
|
changePassword: {
|
|
1280
|
-
...
|
|
1319
|
+
...base.changePassword,
|
|
1281
1320
|
...(overrides.changePassword ?? {}),
|
|
1282
1321
|
},
|
|
1283
|
-
chat: { ...
|
|
1284
|
-
admin: { ...
|
|
1322
|
+
chat: { ...base.chat, ...(overrides.chat ?? {}) },
|
|
1323
|
+
admin: { ...base.admin, ...(overrides.admin ?? {}) },
|
|
1285
1324
|
};
|
|
1286
1325
|
}
|
|
1287
1326
|
|
|
@@ -41,6 +41,8 @@ import type {
|
|
|
41
41
|
Session,
|
|
42
42
|
} from "../types.js";
|
|
43
43
|
|
|
44
|
+
import type { AIHubLanguage } from "../auth/texts.js";
|
|
45
|
+
|
|
44
46
|
import { parseSseStream } from "./sseParser.js";
|
|
45
47
|
import {
|
|
46
48
|
resolveTokenStorage,
|
|
@@ -576,6 +578,11 @@ export interface AdminSettingsView {
|
|
|
576
578
|
default: "light" | "dark";
|
|
577
579
|
switcher_enabled: boolean;
|
|
578
580
|
};
|
|
581
|
+
/** Language settings, stored as separate columns server-side. */
|
|
582
|
+
language: {
|
|
583
|
+
default: AIHubLanguage;
|
|
584
|
+
user_locked: boolean;
|
|
585
|
+
};
|
|
579
586
|
/** The flat §8.4 feature-toggles blob. */
|
|
580
587
|
feature_toggles: AIHubFeatureToggles;
|
|
581
588
|
/** ISO-8601 of the last signing-key rotation. `null` until first rotation. */
|
|
@@ -599,6 +606,11 @@ export interface PatchAdminSettingsBody {
|
|
|
599
606
|
default?: "light" | "dark";
|
|
600
607
|
switcherEnabled?: boolean;
|
|
601
608
|
};
|
|
609
|
+
/** Language partial — either or both fields. */
|
|
610
|
+
language?: {
|
|
611
|
+
default?: AIHubLanguage;
|
|
612
|
+
userLocked?: boolean;
|
|
613
|
+
};
|
|
602
614
|
}
|
|
603
615
|
|
|
604
616
|
/** Response from `rotateAdminMetricsToken` — the new token returned **once**. */
|
|
@@ -1483,6 +1495,16 @@ export class AIHubClient {
|
|
|
1483
1495
|
}
|
|
1484
1496
|
wire.theme = themeWire;
|
|
1485
1497
|
}
|
|
1498
|
+
if (body.language !== undefined) {
|
|
1499
|
+
const languageWire: Record<string, unknown> = {};
|
|
1500
|
+
if (body.language.default !== undefined) {
|
|
1501
|
+
languageWire.default = body.language.default;
|
|
1502
|
+
}
|
|
1503
|
+
if (body.language.userLocked !== undefined) {
|
|
1504
|
+
languageWire.user_locked = body.language.userLocked;
|
|
1505
|
+
}
|
|
1506
|
+
wire.language = languageWire;
|
|
1507
|
+
}
|
|
1486
1508
|
return this.requestJson<AdminSettingsView>("PATCH", "/admin/settings", {
|
|
1487
1509
|
body: wire,
|
|
1488
1510
|
});
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
|
|
22
22
|
import { type ReactNode } from "react";
|
|
23
23
|
|
|
24
|
-
import {
|
|
24
|
+
import { type AIHubTexts, type DeepPartial } from "../../auth/texts.js";
|
|
25
|
+
import { useResolvedTexts } from "../../context/useAIHubTexts.js";
|
|
25
26
|
import { useAIHub } from "../../context/useAIHub.js";
|
|
26
27
|
|
|
27
28
|
/**
|
|
@@ -93,7 +94,7 @@ export interface AgentsPickerProps {
|
|
|
93
94
|
*/
|
|
94
95
|
export function AgentsPicker(props: AgentsPickerProps): ReactNode {
|
|
95
96
|
const { agents, agentsLoading, setActiveAgent } = useAIHub();
|
|
96
|
-
const texts =
|
|
97
|
+
const texts = useResolvedTexts(props.texts);
|
|
97
98
|
const cls = { ...DEFAULT_CLASS_NAMES, ...(props.classNames ?? {}) };
|
|
98
99
|
const rootClass = props.className
|
|
99
100
|
? `${cls.root} ${props.className}`
|
|
@@ -33,10 +33,10 @@ import { useState, type FormEvent, type ReactNode } from "react";
|
|
|
33
33
|
import { AIHubRequestError } from "../../client/AIHubClient.js";
|
|
34
34
|
import { useAIHubAuth } from "../../context/useAIHubAuth.js";
|
|
35
35
|
import {
|
|
36
|
-
resolveAIHubTexts,
|
|
37
36
|
type AIHubTexts,
|
|
38
37
|
type DeepPartial,
|
|
39
38
|
} from "../../auth/texts.js";
|
|
39
|
+
import { useResolvedTexts } from "../../context/useAIHubTexts.js";
|
|
40
40
|
import { validatePasswordPolicyClient } from "../../auth/passwordPolicy.js";
|
|
41
41
|
import { PasswordInput } from "../internal/PasswordInput.js";
|
|
42
42
|
|
|
@@ -148,7 +148,7 @@ export function DataClubAIHubChangePassword(
|
|
|
148
148
|
const auth = useAIHubAuth();
|
|
149
149
|
const variant = props.variant ?? "forced";
|
|
150
150
|
const classes = { ...DEFAULT_CLASS_NAMES, ...(props.classNames ?? {}) };
|
|
151
|
-
const texts =
|
|
151
|
+
const texts = useResolvedTexts(props.texts).changePassword;
|
|
152
152
|
|
|
153
153
|
const [currentPassword, setCurrentPassword] = useState("");
|
|
154
154
|
const [newPassword, setNewPassword] = useState("");
|
|
@@ -19,6 +19,7 @@ import type { ReactNode } from "react";
|
|
|
19
19
|
|
|
20
20
|
import type { AIHubChatTexts } from "../../auth/texts.js";
|
|
21
21
|
|
|
22
|
+
import { LanguageSwitcher } from "../LanguageSwitcher/index.js";
|
|
22
23
|
import { UserMenu } from "./UserMenu.js";
|
|
23
24
|
|
|
24
25
|
/**
|
|
@@ -68,6 +69,7 @@ export function ShellHeader(props: ShellHeaderProps): ReactNode {
|
|
|
68
69
|
className="data-club-ai-hub__shell-header-right"
|
|
69
70
|
data-testid="shell-header-right"
|
|
70
71
|
>
|
|
72
|
+
<LanguageSwitcher />
|
|
71
73
|
<UserMenu
|
|
72
74
|
texts={props.texts}
|
|
73
75
|
{...(props.onOpenAdmin !== undefined
|