diff --git a/app/src/components/LanguageSelect.tsx b/app/src/components/LanguageSelect.tsx index a6e68579a..2fc93e245 100644 --- a/app/src/components/LanguageSelect.tsx +++ b/app/src/components/LanguageSelect.tsx @@ -19,6 +19,7 @@ const LOCALE_OPTIONS: Array<{ value: Locale; flag: string; label: string }> = [ { value: 'ru', flag: '🇷🇺', label: 'Русский' }, { value: 'id', flag: '🇮🇩', label: 'Bahasa Indonesia' }, { value: 'it', flag: '🇮🇹', label: 'Italiano' }, + { value: 'pl', flag: '🇵🇱', label: 'Polski' }, ]; interface LanguageSelectProps { diff --git a/app/src/lib/i18n/I18nContext.tsx b/app/src/lib/i18n/I18nContext.tsx index 01a600aa4..3ee190700 100644 --- a/app/src/lib/i18n/I18nContext.tsx +++ b/app/src/lib/i18n/I18nContext.tsx @@ -11,6 +11,7 @@ import hi from './hi'; import id from './id'; import it from './it'; import ko from './ko'; +import pl from './pl'; import pt from './pt'; import ru from './ru'; import type { Locale } from './types'; @@ -39,6 +40,7 @@ const translations: Record> = { ru, id, it, + pl, }; // Locales rendered right-to-left. diff --git a/app/src/lib/i18n/chunks/pl-1.ts b/app/src/lib/i18n/chunks/pl-1.ts new file mode 100644 index 000000000..a11cb119d --- /dev/null +++ b/app/src/lib/i18n/chunks/pl-1.ts @@ -0,0 +1,1217 @@ +import type { TranslationMap } from '../types'; +import en1 from './en-1'; + +// Polish chunk 1/5. Spreads the English source-of-truth chunk so every key is +// present (i18n parity gate); Polish values below override EN where translated. +// Missing/untranslated keys fall back to English via the spread. +const pl1: TranslationMap = { + ...en1, + // Navigation + 'nav.home': 'Start', + 'nav.human': 'Człowiek', + 'nav.chat': 'Czat', + 'nav.connections': 'Połączenia', + 'nav.memory': 'Inteligencja', + 'nav.alerts': 'Alerty', + 'nav.rewards': 'Nagrody', + 'nav.settings': 'Ustawienia', + // Common + 'common.cancel': 'Anuluj', + 'common.save': 'Zapisz', + 'common.confirm': 'Potwierdź', + 'common.delete': 'Usuń', + 'common.edit': 'Edytuj', + 'common.create': 'Utwórz', + 'common.search': 'Szukaj', + 'common.loading': 'ładowanie…', + 'common.error': 'Błąd', + 'common.success': 'Sukces', + 'common.back': 'Wstecz', + 'common.next': 'Dalej', + 'common.finish': 'Zakończ', + 'common.close': 'Zamknij', + 'common.enabled': 'Włączone', + 'common.disabled': 'Wyłączone', + 'common.on': 'Wł.', + 'common.off': 'Wył.', + 'common.yes': 'Tak', + 'common.no': 'Nie', + 'common.ok': 'OK', + 'common.name': 'Nazwa', + 'common.retry': 'Spróbuj ponownie', + 'common.copy': 'Kopiuj', + 'common.copied': 'Skopiowano', + 'common.learnMore': 'Dowiedz się więcej', + 'common.seeAll': 'Zobacz', + 'common.dismiss': 'Odrzuć', + 'common.clear': 'Wyczyść', + 'common.reset': 'Zresetuj', + 'common.refresh': 'Odśwież', + 'common.export': 'Eksportuj', + 'common.import': 'Importuj', + 'common.upload': 'Wgraj', + 'common.download': 'Pobierz', + 'common.add': 'Dodaj', + 'common.remove': 'Usuń', + 'common.showMore': 'Pokaż więcej', + 'common.showLess': 'Pokaż mniej', + 'common.submit': 'Wyślij', + 'common.continue': 'Kontynuuj', + 'common.comingSoon': 'Wkrótce', + // Welcome + 'welcome.title': 'Witaj w OpenHuman', + 'welcome.subtitle': 'Twoja osobista superinteligencja AI. Prywatna, prosta i niezwykle potężna.', + 'welcome.connectPrompt': 'Skonfiguruj URL RPC (zaawansowane)', + 'welcome.selectRuntime': 'Wybierz środowisko', + 'welcome.clearingAppData': 'Czyszczenie danych aplikacji...', + 'welcome.clearAppDataAndRestart': 'Wyczyść dane i uruchom ponownie', + 'welcome.signingIn': 'Logowanie...', + 'welcome.termsIntro': 'Kontynuując akceptujesz', + 'welcome.termsOfUse': 'Regulamin', + 'welcome.termsJoiner': 'oraz', + 'welcome.privacyPolicy': 'Politykę prywatności', + 'welcome.termsOutro': '.', + 'welcome.invalidUrl': 'Wpisz poprawny adres HTTP lub HTTPS', + 'welcome.connecting': 'Testowanie', + 'welcome.connect': 'Testuj', + // Home + 'home.greeting': 'Dzień dobry', + 'home.greetingAfternoon': 'Dobre popołudnie', + 'home.greetingEvening': 'Dobry wieczór', + 'home.askAssistant': 'Zapytaj asystenta o cokolwiek...', + 'home.restartCore': 'Uruchom ponownie rdzeń', + 'home.restartingCore': 'Restartowanie rdzenia…', + 'home.themeToggle.toLight': 'Przełącz na tryb jasny', + 'home.themeToggle.toDark': 'Przełącz na tryb ciemny', + 'home.usageExhaustedTitle': 'Wykorzystałeś swój limit', + 'home.usageExhaustedCta': 'Wykup subskrypcję', + // Chat + 'chat.newThread': 'Nowy wątek', + 'chat.typeMessage': 'Napisz wiadomość...', + 'chat.send': 'Wyślij wiadomość', + 'chat.thinking': 'Myślę...', + 'chat.noMessages': 'Brak wiadomości', + 'chat.startConversation': 'Rozpocznij rozmowę', + 'chat.regenerate': 'Wygeneruj ponownie', + 'chat.copyResponse': 'Skopiuj odpowiedź', + 'chat.citations': 'Cytowania', + 'chat.toolUsed': 'Użyte narzędzie', + 'chat.addReaction': 'Dodaj reakcję', + // Settings (top-level) + 'settings.general': 'Ogólne', + 'settings.featuresAndAI': 'Funkcje i AI', + 'settings.billingAndRewards': 'Rozliczenia i nagrody', + 'settings.support': 'Wsparcie', + 'settings.advanced': 'Zaawansowane', + 'settings.dangerZone': 'Strefa niebezpieczna', + 'settings.account': 'Konto', + 'settings.accountDesc': 'Fraza odzyskiwania, zespół, połączenia i prywatność', + 'settings.notifications': 'Powiadomienia', + 'settings.notificationsDesc': 'Tryb Nie przeszkadzać i ustawienia powiadomień dla każdego konta', + 'settings.features': 'Funkcje', + 'settings.featuresDesc': 'Świadomość ekranu, wiadomości i narzędzia', + 'settings.aiModels': 'AI i modele', + 'settings.aiModelsDesc': 'Konfiguracja lokalnych modeli AI, pobierania i dostawcy LLM', + 'settings.ai': 'Konfiguracja AI', + 'settings.aiDesc': 'Dostawcy chmurowi, modele Ollama lokalnie i routing per obciążenie', + 'settings.billingUsage': 'Rozliczenia i zużycie', + 'settings.billingUsageDesc': 'Plan subskrypcji, kredyty i metody płatności', + 'settings.rewards': 'Nagrody', + 'settings.rewardsDesc': 'Polecenia, kupony i zdobyte kredyty', + 'settings.restartTour': 'Uruchom przewodnik ponownie', + 'settings.restartTourDesc': 'Odtwórz wprowadzenie po produkcie od początku', + 'settings.about': 'O aplikacji', + 'settings.aboutDesc': 'Wersja aplikacji i aktualizacje oprogramowania', + 'settings.developerOptions': 'Zaawansowane', + 'settings.developerOptionsDesc': + 'Konfiguracja AI, kanały wiadomości, narzędzia, diagnostyka i panele debugowania', + 'settings.clearAppData': 'Wyczyść dane aplikacji', + 'settings.clearAppDataDesc': 'Wyloguj się i trwale wyczyść wszystkie lokalne dane aplikacji', + 'settings.logOut': 'Wyloguj się', + 'settings.logOutDesc': 'Wyloguj się ze swojego konta', + 'settings.exitLocalSession': 'Zakończ sesję lokalną', + 'settings.exitLocalSessionDesc': 'Wróć do ekranu logowania', + 'settings.language': 'Język', + 'settings.languageDesc': 'Język wyświetlania interfejsu aplikacji', + 'settings.alerts': 'Alerty', + 'settings.alertsDesc': 'Zobacz ostatnie alerty i aktywność w skrzynce odbiorczej', + 'settings.appearance': 'Wygląd', + 'settings.appearanceDesc': 'Wybierz tryb jasny, ciemny lub zgodny z systemem', + 'settings.mascot': 'Maskotka', + 'settings.mascotDesc': 'Wybierz kolor maskotki używany w aplikacji', + // Scope + 'scope.legacy': 'Legacy', + 'scope.user': 'Użytkownik', + 'scope.project': 'Projekt', + // Skills / Connections + 'skills.title': 'Połączenia', + 'skills.search': 'Szukaj połączeń...', + 'skills.noResults': 'Nie znaleziono połączeń', + 'skills.connect': 'Połącz', + 'skills.disconnect': 'Rozłącz', + 'skills.configure': 'Zarządzaj', + 'skills.connected': 'Połączone', + 'skills.available': 'Dostępne', + 'skills.addAccount': 'Dodaj konto', + 'skills.channels': 'Kanały', + 'skills.integrations': 'Integracje Composio', + 'skills.integrationsSubtitle': + 'Chmurowe połączenia OAuth — zaloguj się swoim kontem, a Composio pośredniczy w tokenach, dzięki czemu agenci mogą czytać i działać w Twoim imieniu. Bez kluczy API do utrzymywania.', + 'skills.composio.noApiKeyTitle': 'Brak skonfigurowanego klucza API Composio', + 'skills.composio.noApiKeyDescription': + 'W trybie lokalnym używany jest Twój własny klucz API Composio. Otwórz Ustawienia → Zaawansowane → Composio, aby dodać klucz przed podłączeniem tutaj integracji.', + 'skills.composio.noApiKeyCta': 'Otwórz ustawienia', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'Kanały', + 'skills.tabs.mcp': 'Serwery MCP', + 'skills.mcpComingSoon.title': 'Serwery MCP', + 'skills.mcpComingSoon.description': + 'Zarządzanie serwerami MCP pojawi się wkrótce. Ta zakładka będzie służyć do wyszukiwania, łączenia i monitorowania integracji z serwerami MCP.', + // Memory + 'memory.title': 'Pamięć', + 'memory.search': 'Szukaj w pamięci...', + 'memory.noResults': 'Nie znaleziono wspomnień', + 'memory.empty': + 'Brak wspomnień. Wspomnienia powstają automatycznie podczas korzystania z aplikacji.', + 'memory.tab.memory': 'Pamięć', + 'memory.tab.subconscious': 'Podświadomość', + 'memory.tab.dreams': 'Marzenia senne', + 'memory.tab.calls': 'Połączenia', + 'memory.tab.settings': 'Ustawienia', + 'memory.analyzeNow': 'Analizuj teraz', + // Alerts + 'alerts.title': 'Alerty', + 'alerts.empty': 'Brak alertów', + 'alerts.markAllRead': 'Oznacz wszystkie jako przeczytane', + 'alerts.unread': 'nieprzeczytane', + // Rewards + 'rewards.title': 'Nagrody', + 'rewards.referrals': 'Polecenia', + 'rewards.coupons': 'Wykorzystaj', + 'rewards.localUnavailable': + 'Logowanie lokalne nie zbiera nagród, kuponów ani środków z poleceń. Aby zdobywać nagrody, wyloguj się i kontynuuj logując się kontem OpenHuman.', + 'rewards.localUnavailableCta': 'Otwórz ustawienia konta', + 'rewards.credits': 'Kredyty', + 'rewards.referralCode': 'Twój kod polecający', + 'rewards.copyCode': 'Skopiuj kod', + 'rewards.share': 'Udostępnij', + // Accounts + 'accounts.addAccount': 'Dodaj konto', + 'accounts.manageAccounts': 'Zarządzaj kontami', + 'accounts.noAccounts': 'Brak podłączonych kont', + 'accounts.connectAccount': 'Podłącz konto, aby zacząć', + 'accounts.agent': 'Agent', + 'accounts.respondQueue': 'Kolejka odpowiedzi', + 'accounts.disconnect': 'Rozłącz', + 'accounts.disconnectConfirm': 'Czy na pewno rozłączyć to konto?', + 'accounts.disconnectClearMemory': 'Usuń też pamięć z tego źródła', + 'accounts.disconnectClearMemoryHint': + 'Trwale usuwa lokalne fragmenty pamięci powiązane z tym połączeniem.', + 'accounts.searchAccounts': 'Szukaj kont...', + // Channels + 'channels.title': 'Kanały', + 'channels.configure': 'Skonfiguruj kanał', + 'channels.setup': 'Konfiguracja', + 'channels.noChannels': 'Brak skonfigurowanych kanałów', + 'channels.localManagedUnavailable': + 'Kanały zarządzane są niedostępne dla użytkowników lokalnych.', + 'channels.addChannel': 'Dodaj kanał', + 'channels.status.connected': 'Połączony', + 'channels.status.disconnected': 'Rozłączony', + 'channels.status.error': 'Błąd', + 'channels.status.configuring': 'Konfigurowanie', + 'channels.defaultMessaging': 'Domyślny kanał wiadomości', + 'channels.fieldRequired': 'Pole {field} jest wymagane', + 'channels.authMode.managed_dm': 'Zaloguj się z OpenHuman', + 'channels.authMode.oauth': 'Logowanie OAuth', + 'channels.authMode.bot_token': 'Użyj własnego tokena bota', + 'channels.authMode.api_key': 'Użyj własnego klucza API', + 'channels.mcp.title': 'Serwery MCP', + 'channels.mcp.description': + 'Przeglądaj serwery Model Context Protocol i zarządzaj nimi, aby rozszerzyć AI o nowe narzędzia.', + // Webhooks + 'webhooks.title': 'Webhooki', + 'webhooks.create': 'Utwórz webhook', + 'webhooks.noWebhooks': 'Brak skonfigurowanych webhooków', + 'webhooks.url': 'URL', + 'webhooks.secret': 'Sekret', + 'webhooks.events': 'Zdarzenia', + 'webhooks.archiveDirectory': 'Katalog archiwum', + 'webhooks.todayFile': 'Dzisiejszy plik', + // Invites + 'invites.title': 'Zaproszenia', + 'invites.create': 'Utwórz zaproszenie', + 'invites.noInvites': 'Brak oczekujących zaproszeń', + 'invites.code': 'Kod zaproszenia', + 'invites.copyLink': 'Skopiuj link', + 'invites.generate': 'Wygeneruj zaproszenie', + 'invites.generating': 'Generowanie...', + 'invites.refreshing': 'Odświeżanie zaproszeń...', + 'invites.loading': 'Ładowanie zaproszeń...', + 'invites.copyCodeAria': 'Skopiuj kod zaproszenia', + 'invites.revokeAria': 'Unieważnij zaproszenie', + 'invites.usedUp': 'Wykorzystane', + 'invites.uses': 'Wykorzystania: {current}{max}', + 'invites.expiresOn': 'Wygasa {date}', + 'invites.empty': 'Brak zaproszeń', + 'invites.emptyHint': 'Wygeneruj kod zaproszenia, aby udostępnić go innym', + 'invites.revokeTitle': 'Unieważnij kod zaproszenia', + 'invites.revokePromptPrefix': 'Czy na pewno unieważnić kod zaproszenia', + 'invites.revokeWarning': + 'Ten kod nie będzie już ważny i nie można go będzie użyć, aby dołączyć do zespołu.', + 'invites.revoking': 'Unieważnianie...', + 'invites.revokeAction': 'Unieważnij zaproszenie', + 'invites.failedGenerate': 'Nie udało się wygenerować zaproszenia', + 'invites.failedRevoke': 'Nie udało się unieważnić zaproszenia', + // Team + 'team.members': 'Członkowie', + 'team.membersDesc': 'Zarządzaj członkami zespołu i ich rolami', + 'team.invites': 'Zaproszenia', + 'team.invitesDesc': 'Generuj kody zaproszeń i zarządzaj nimi', + 'team.settings': 'Ustawienia zespołu', + 'team.settingsDesc': 'Edytuj nazwę i ustawienia zespołu', + 'team.editSettings': 'Edytuj ustawienia zespołu', + 'team.enterName': 'Wpisz nazwę zespołu', + 'team.saving': 'Zapisywanie...', + 'team.saveChanges': 'Zapisz zmiany', + 'team.delete': 'Usuń zespół', + 'team.deleteDesc': 'Trwale usuń ten zespół', + 'team.deleting': 'Usuwanie...', + 'team.failedToUpdate': 'Nie udało się zaktualizować zespołu', + 'team.failedToDelete': 'Nie udało się usunąć zespołu', + 'team.manageTitle': 'Zarządzaj zespołem {name}', + 'team.planCreated': 'Plan {plan} • Utworzono {date}', + 'team.confirmDelete': 'Czy na pewno usunąć {name}?', + 'team.deleteWarning': + 'Tej operacji nie można cofnąć. Wszystkie dane zespołu zostaną trwale usunięte.', + 'team.refreshingMembers': 'Odświeżanie członków...', + 'team.loadingMembers': 'Ładowanie członków...', + 'team.memberCount': '{count} członek', + 'team.memberCountPlural': '{count} członków', + 'team.you': '(Ty)', + 'team.removeAria': 'Usuń {name}', + 'team.noMembers': 'Nie znaleziono członków', + 'team.removeTitle': 'Usuń członka zespołu', + 'team.removePromptPrefix': 'Czy na pewno usunąć', + 'team.removePromptSuffix': 'z zespołu?', + 'team.removeWarning': 'Utracą dostęp do zespołu i wszystkich jego zasobów.', + 'team.removing': 'Usuwanie...', + 'team.removeAction': 'Usuń członka', + 'team.changeRoleTitle': 'Zmień rolę członka', + 'team.changeRolePrompt': 'Zmienić rolę użytkownika {name} z {oldRole} na {newRole}?', + 'team.changeRoleAdminGrant': + 'Nadasz pełne uprawnienia administratora, w tym możliwość zarządzania członkami zespołu.', + 'team.changeRoleAdminRemove': + 'Odbierzesz uprawnienia administratora i osoba ta nie będzie mogła zarządzać zespołem.', + 'team.changing': 'Zmienianie...', + 'team.changeRoleAction': 'Zmień rolę', + 'team.failedChangeRole': 'Nie udało się zmienić roli', + 'team.failedRemoveMember': 'Nie udało się usunąć członka', + // Onboarding + 'onboarding.welcome': 'Cześć. Jestem OpenHuman.', + 'onboarding.welcomeDesc': + 'Twój superinteligentny asystent AI uruchomiony na Twoim komputerze. Prywatny, prosty i niezwykle potężny.', + 'onboarding.context': 'Zbieranie kontekstu', + 'onboarding.contextDesc': 'Połącz narzędzia i usługi, z których korzystasz na co dzień.', + 'onboarding.localAI': 'Lokalne AI', + 'onboarding.localAIDesc': 'Skonfiguruj lokalny model AI uruchomiony na Twoim komputerze.', + 'onboarding.chatProvider': 'Dostawca czatu', + 'onboarding.chatProviderDesc': 'Wybierz, jak chcesz wchodzić w interakcje z asystentem.', + 'onboarding.referral': 'Polecenie', + 'onboarding.referralDesc': 'Wpisz kod polecający, jeśli go masz.', + 'onboarding.finish': 'Zakończ konfigurację', + 'onboarding.finishDesc': 'Gotowe! Zacznij korzystać z OpenHuman.', + 'onboarding.skip': 'Pomiń', + 'onboarding.getStarted': 'Rozpocznij', + 'onboarding.runtimeChoice.title': 'Jak chcesz uruchomić OpenHuman?', + 'onboarding.runtimeChoice.subtitle': + 'Wybierz, jak dużą część OpenHuman ma obsłużyć za Ciebie. Możesz to zmienić później w Ustawieniach.', + 'onboarding.runtimeChoice.cloud.title': 'Prosto', + 'onboarding.runtimeChoice.cloud.tagline': + 'Korzystaj z logowania OpenHuman, routingu modeli, wyszukiwarki i zarządzanych integracji.', + 'onboarding.runtimeChoice.cloud.f1': 'OAuth i routing modeli pośredniczone przez backend', + 'onboarding.runtimeChoice.cloud.f2': 'Kompresja tokenów, aby wydłużyć Twój limit', + 'onboarding.runtimeChoice.cloud.f3': 'Jedna subskrypcja, każdy model w komplecie', + 'onboarding.runtimeChoice.cloud.f4': + 'Brak kluczy modeli, wyszukiwarki i Composio do utrzymywania', + 'onboarding.runtimeChoice.cloud.f5': 'Lokalne drzewo pamięci, zarządzane usługi sieciowe', + 'onboarding.runtimeChoice.custom.title': 'Niestandardowo', + 'onboarding.runtimeChoice.custom.tagline': + 'Przynieś własne klucze. Wybierz, które usługi OpenHuman ma wywoływać.', + 'onboarding.runtimeChoice.custom.f1': 'Będziesz potrzebować kluczy API do prawie wszystkiego', + 'onboarding.runtimeChoice.custom.f2': 'Korzysta z usług, za które już płacisz', + 'onboarding.runtimeChoice.custom.f3': 'Trzyma obsługiwane obciążenia na Twoim komputerze', + 'onboarding.runtimeChoice.custom.f4': 'Więcej konfiguracji, więcej pokręteł', + 'onboarding.runtimeChoice.custom.f5': 'Najlepsze dla zaawansowanych użytkowników i deweloperów', + 'onboarding.runtimeChoice.cloud.creditHighlight': '1 USD darmowych kredytów na start', + 'onboarding.runtimeChoice.continueCloud': 'Kontynuuj w trybie Prosto', + 'onboarding.runtimeChoice.continueCustom': 'Kontynuuj w trybie Niestandardowo', + 'onboarding.runtimeChoice.recommended': 'Polecane', + 'onboarding.apiKeys.title': 'Dodajmy Twoje klucze API', + 'onboarding.apiKeys.subtitle': + 'Możesz wkleić je teraz lub pominąć i dodać później w Ustawieniach › AI. Klucze są przechowywane na tym urządzeniu, zaszyfrowane w spoczynku.', + 'onboarding.apiKeys.openaiLabel': 'Klucz API OpenAI', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.anthropicLabel': 'Klucz API Anthropic', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': + 'Nie udało się zapisać tego klucza. Sprawdź go i spróbuj ponownie.', + 'onboarding.apiKeys.skipForNow': 'Pomiń na razie', + 'onboarding.apiKeys.continue': 'Zapisz i kontynuuj', + 'onboarding.apiKeys.saving': 'Zapisywanie…', + 'onboarding.custom.stepperInference': 'Inferencja', + 'onboarding.custom.stepperVoice': 'Głos', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'Wyszukiwarka', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'Pamięć', + 'onboarding.custom.stepCounter': 'Krok {n} z {total}', + 'onboarding.custom.defaultTitle': 'Domyślnie', + 'onboarding.custom.defaultSubtitle': 'Niech OpenHuman zarządza tym za Ciebie.', + 'onboarding.custom.configureTitle': 'Skonfiguruj', + 'onboarding.custom.configureSubtitle': 'Wybiorę sam, co użyć.', + 'onboarding.custom.progressAriaLabel': 'Postęp konfiguracji', + 'onboarding.custom.continue': 'Kontynuuj', + 'onboarding.custom.back': 'Wstecz', + 'onboarding.custom.finish': 'Zakończ konfigurację', + 'onboarding.custom.configureLater': + 'Możesz dokończyć konfigurację po wprowadzeniu. Przeniesiemy Cię na odpowiednią stronę Ustawień, kiedy skończysz.', + 'onboarding.custom.openSettings': 'Otwórz w Ustawieniach', + 'onboarding.custom.inference.title': 'Inferencja (tekst)', + 'onboarding.custom.inference.subtitle': + 'Który model językowy ma odpowiadać na pytania i uruchamiać agentów?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman domyślnie kieruje obciążenia przez zarządzany backend. Bez kluczy, bez konfiguracji.', + 'onboarding.custom.inference.configureDesc': + 'Przynieś własny klucz OpenAI lub Anthropic. Użyjemy go do każdego obciążenia tekstowego.', + 'onboarding.custom.voice.title': 'Głos', + 'onboarding.custom.voice.subtitle': 'Mowa na tekst i tekst na mowę dla trybu głosowego.', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman dostarcza zarządzanych dostawców STT/TTS, którzy mogą wysyłać audio/tekst do usług hostowanych.', + 'onboarding.custom.voice.configureDesc': + 'Użyj własnego ElevenLabs / OpenAI Whisper itp. Skonfiguruj w Ustawieniach › Głos.', + 'onboarding.custom.oauth.title': 'Połączenia (OAuth)', + 'onboarding.custom.oauth.subtitle': + 'Gmail, Slack, Notion i inne podłączone usługi, które wymagają OAuth.', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman pośredniczy w OAuth i wywołaniach narzędzi przez zarządzaną przestrzeń Composio.', + 'onboarding.custom.oauth.configureDesc': + 'Przynieś własne konto / klucz API Composio. Skonfiguruj w Ustawieniach › Połączenia.', + 'onboarding.custom.search.title': 'Wyszukiwanie w sieci', + 'onboarding.custom.search.subtitle': 'Jak OpenHuman wyszukuje w sieci w Twoim imieniu.', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman domyślnie używa zarządzanego proxy wyszukiwarki. Klucz API niepotrzebny.', + 'onboarding.custom.search.configureDesc': + 'Przynieś własny klucz dostawcy (Tavily, Brave itp.). Skonfiguruj w Ustawieniach › Narzędzia.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'Jak OpenHuman generuje wektory embeddings na potrzeby wyszukiwania semantycznego.', + 'onboarding.custom.embeddings.defaultDesc': + 'OpenHuman używa zarządzanej usługi embeddings. Klucz API niepotrzebny.', + 'onboarding.custom.embeddings.configureDesc': + 'Przynieś własnego dostawcę embeddings (OpenAI, Voyage, Ollama itp.).', + 'onboarding.custom.memory.title': 'Pamięć', + 'onboarding.custom.memory.subtitle': + 'Jak OpenHuman zapamiętuje Twój kontekst, preferencje i wcześniejsze rozmowy.', + 'onboarding.custom.memory.defaultDesc': + 'OpenHuman zarządza pamięcią automatycznie. Nic do skonfigurowania.', + 'onboarding.custom.memory.configureDesc': + 'Przeglądaj, eksportuj lub czyść pamięć samodzielnie. Skonfiguruj w Ustawieniach › Pamięć.', + 'onboarding.skipForNow': 'Pomiń na razie', + 'onboarding.localAI.continueWithCloud': 'Kontynuuj z chmurą', + 'onboarding.localAI.useLocalAnyway': + 'Użyj lokalnego AI mimo to (niezalecane dla Twojego urządzenia)', + 'onboarding.localAI.useLocalInstead': 'Użyj lokalnego AI (połącz Ollama teraz)', + 'onboarding.localAI.setupIssue': 'Konfiguracja lokalnego AI napotkała problem', + // Clear data + 'clearData.title': 'Wyczyść dane aplikacji', + 'clearData.warning': 'To wyloguje Cię i trwale usunie lokalne dane aplikacji, w tym:', + 'clearData.bulletSettings': 'Ustawienia aplikacji i rozmowy', + 'clearData.bulletCache': 'Wszystkie lokalne dane cache integracji', + 'clearData.bulletWorkspace': 'Dane przestrzeni roboczej', + 'clearData.bulletOther': 'Wszystkie pozostałe dane lokalne', + 'clearData.irreversible': 'Tej operacji nie można cofnąć.', + 'clearData.clearing': 'Czyszczenie danych aplikacji...', + 'clearData.failed': 'Nie udało się wyczyścić danych i wylogować. Spróbuj ponownie.', + 'clearData.failedLogout': 'Nie udało się wylogować. Spróbuj ponownie.', + 'clearData.failedPersist': + 'Nie udało się wyczyścić utrwalonego stanu aplikacji. Spróbuj ponownie.', + // Mnemonic + 'mnemonic.title': 'Fraza odzyskiwania', + 'mnemonic.warning': 'Zapisz te słowa w kolejności i przechowuj je w bezpiecznym miejscu.', + 'mnemonic.copyWarning': + 'Nigdy nie udostępniaj swojej frazy odzyskiwania. Każdy, kto ma te słowa, może uzyskać dostęp do Twojego konta.', + 'mnemonic.copied': 'Fraza odzyskiwania skopiowana do schowka', + 'mnemonic.reveal': 'Pokaż frazę', + 'mnemonic.revealPhrase': 'Pokaż frazę odzyskiwania', + 'mnemonic.hidden': 'Fraza odzyskiwania jest ukryta', + // Privacy + 'privacy.title': 'Prywatność i bezpieczeństwo', + 'privacy.description': 'Raport o danych wysyłanych do usług zewnętrznych.', + 'privacy.empty': 'Nie wykryto żadnych zewnętrznych transferów danych.', + 'privacy.whatLeavesComputer': 'Co opuszcza Twój komputer', + 'privacy.loading': 'Ładowanie szczegółów prywatności...', + 'privacy.loadError': + 'Nie udało się załadować listy prywatności. Kontrolki analityki poniżej nadal działają.', + 'privacy.noCapabilities': 'Żadna funkcja obecnie nie ujawnia ruchu danych.', + 'privacy.sentTo': 'Wysłano do', + 'privacy.leavesDevice': 'Opuszcza urządzenie', + 'privacy.staysLocal': 'Zostaje lokalnie', + 'privacy.anonymizedAnalytics': 'Anonimowa analityka', + 'privacy.shareAnonymizedData': 'Udostępniaj anonimowe dane o użytkowaniu', + 'privacy.shareAnonymizedDataDesc': + 'Pomóż ulepszać OpenHuman, udostępniając anonimowe raporty awarii i analitykę użytkowania. Wszystkie dane są w pełni anonimowe — nigdy nie zbieramy danych osobowych, wiadomości, kluczy portfela ani informacji o sesji.', + 'privacy.meetingFollowUps': 'Działania po spotkaniach', + 'privacy.autoHandoffMeet': 'Automatycznie przekazuj transkrypcje Google Meet do orchestratora', + 'privacy.autoHandoffMeetDesc': + 'Gdy spotkanie Google Meet się kończy, orchestrator OpenHuman może odczytać transkrypcję i wykonać akcje, np. przygotować wiadomości, zaplanować działania lub opublikować podsumowanie w podłączonym workspace Slack. Domyślnie wyłączone.', + 'privacy.analyticsDisclaimer': + 'Wszystkie raporty analityczne i błędów są w pełni anonimowe. Po włączeniu zbieramy informacje o awariach i typie urządzenia (Sentry) oraz anonimową analitykę (Google Analytics — odsłony, używane funkcje). Nigdy nie uzyskujemy dostępu do Twoich wiadomości, danych sesji, kluczy portfela, kluczy API ani danych osobowych. Możesz zmienić to ustawienie w dowolnym momencie.', + // Misc + 'misc.rehydrating': 'Ładowanie danych...', + 'misc.checkingServices': 'Sprawdzanie usług...', + 'misc.serviceUnavailable': 'Usługa niedostępna', + 'misc.somethingWentWrong': 'Coś poszło nie tak', + 'misc.tryAgainLater': 'Spróbuj ponownie później.', + 'misc.restartApp': 'Uruchom ponownie aplikację', + 'misc.updateAvailable': 'Dostępna aktualizacja', + 'misc.updateNow': 'Aktualizuj teraz', + 'misc.updateLater': 'Później', + 'misc.downloading': 'Pobieranie...', + 'misc.installing': 'Instalowanie...', + 'misc.beta': + 'OpenHuman jest we wczesnej fazie beta. Chętnie poznamy Twoje uwagi — każdy zgłoszony błąd pomaga nam szybciej wydać poprawki.', + 'misc.betaFeedback': 'Wyślij uwagi', + // Dev options + 'devOptions.title': 'Zaawansowane', + 'devOptions.diagnostics': 'Diagnostyka', + 'devOptions.diagnosticsDesc': 'Zdrowie systemu, logi i metryki wydajności', + 'devOptions.debugPanels': 'Panele debugowania', + 'devOptions.debugPanelsDesc': 'Feature flagi, inspekcja stanu i narzędzia debugowania', + 'devOptions.webhooks': 'Webhooki', + 'devOptions.webhooksDesc': 'Konfiguruj i testuj integracje webhooków', + 'devOptions.memoryInspection': 'Inspekcja pamięci', + 'devOptions.memoryInspectionDesc': 'Przeglądaj, odpytuj i zarządzaj wpisami pamięci', + // Settings about + 'settings.about.version': 'Wersja', + 'settings.about.updateAvailable': 'jest dostępna', + 'settings.about.softwareUpdates': 'Aktualizacje oprogramowania', + 'settings.about.lastChecked': 'Ostatnio sprawdzone', + 'settings.about.checking': 'Sprawdzanie...', + 'settings.about.checkForUpdates': 'Sprawdź aktualizacje', + 'settings.about.releases': 'Wydania', + 'settings.about.releasesDesc': + 'Przeglądaj notatki o wydaniach i wcześniejsze buildy na GitHubie.', + 'settings.about.openReleases': 'Otwórz wydania na GitHubie', + 'settings.about.connection': 'Połączenie', + 'settings.about.connectionMode': 'Tryb', + 'settings.about.connectionModeLocal': 'Lokalny', + 'settings.about.connectionModeCloud': 'Chmura', + 'settings.about.connectionModeUnset': 'Nie wybrano', + 'settings.about.serverUrl': 'URL serwera', + 'settings.about.serverUrlUnavailable': 'Niedostępny', + 'settings.about.connectionHelperLocal': + 'Uruchomiony w procesie przez powłokę Tauri przy starcie aplikacji. Port wybierany jest przy każdym starcie, więc URL zmienia się między uruchomieniami.', + 'settings.about.connectionHelperCloud': + 'Połączono ze zdalnym rdzeniem. Zmień to w BootCheck lub w wyborze trybu chmury.', + // Devices + 'devices.betaBadge': 'Beta', + 'devices.betaText': + 'Ta funkcja jest obecnie w fazie beta. Sparuj iPhone z tą instalacją OpenHuman, aby używać go jako zdalnego klienta.', + 'devices.comingSoonDescription': + 'Parowanie urządzeń pojawi się wkrótce. Ta strona będzie służyć do parowania iPhone’ów i zarządzania połączonymi urządzeniami.', + 'devices.title': 'Urządzenia', + 'devices.pairIphone': 'Sparuj iPhone', + 'devices.noPaired': 'Brak sparowanych urządzeń', + 'devices.emptyState': 'Zeskanuj kod QR w aplikacji iPhone, aby połączyć go z tą sesją OpenHuman.', + 'devices.devicePairedTitle': 'Urządzenie sparowane', + 'devices.devicePairedMessage': 'iPhone został pomyślnie podłączony.', + 'devices.deviceRevokedTitle': 'Urządzenie unieważnione', + 'devices.deviceRevokedMessage': 'Usunięto {label}.', + 'devices.revokeFailedTitle': 'Nie udało się unieważnić', + 'devices.online': 'Online', + 'devices.offline': 'Offline', + 'devices.lastSeenNever': 'Nigdy', + 'devices.lastSeenNow': 'Przed chwilą', + 'devices.lastSeenMinutes': '{count} min temu', + 'devices.lastSeenHours': '{count} godz. temu', + 'devices.lastSeenDays': '{count} dni temu', + 'devices.revoke': 'Unieważnij', + 'devices.revokeAria': 'Unieważnij {label}', + 'devices.confirmRevokeTitle': 'Unieważnić urządzenie?', + 'devices.confirmRevokeBody': + '{label} nie będzie już mogło się łączyć. Tej operacji nie można cofnąć.', + 'devices.loadFailed': 'Nie udało się załadować urządzeń: {message}', + 'devices.pairModal.title': 'Sparuj iPhone', + 'devices.pairModal.loading': 'Generowanie kodu parowania…', + 'devices.pairModal.instructions': 'Otwórz aplikację OpenHuman na iPhone i zeskanuj ten kod.', + 'devices.pairModal.expiresIn': 'Kod wygasa za ~{count} minutę', + 'devices.pairModal.expiresInPlural': 'Kod wygasa za ~{count} minut', + 'devices.pairModal.showDetails': 'Pokaż szczegóły', + 'devices.pairModal.hideDetails': 'Ukryj szczegóły', + 'devices.pairModal.channelId': 'ID kanału', + 'devices.pairModal.pairingUrl': 'URL parowania', + 'devices.pairModal.expiredTitle': 'Kod QR wygasł', + 'devices.pairModal.expiredBody': 'Wygeneruj nowy kod, aby kontynuować parowanie.', + 'devices.pairModal.generateNewCode': 'Wygeneruj nowy kod', + 'devices.pairModal.successTitle': 'Sparowano z iPhone', + 'devices.pairModal.autoClose': 'Automatyczne zamykanie…', + 'devices.pairModal.errorPrefix': 'Nie udało się utworzyć parowania: {message}', + 'devices.pairModal.errorTitle': 'Coś poszło nie tak', + 'devices.pairModal.copyUrl': 'Skopiuj', + // Autonomy + 'autonomy.title': 'Autonomia agenta', + 'autonomy.maxActionsLabel': 'Maks. akcji na godzinę', + 'autonomy.maxActionsHelp': + 'Maksymalna liczba akcji narzędzi, którą agent może uruchomić w ciągu kolejnej godziny. Nowa wartość obowiązuje od następnego czatu. Zadania cron i nasłuchy kanałów zachowują dotychczasowy limit do restartu OpenHuman.', + 'autonomy.statusSaving': 'Zapisywanie…', + 'autonomy.statusSaved': 'Zapisano.', + 'autonomy.statusFailed': 'Niepowodzenie', + 'autonomy.unlimitedNote': 'Bez limitu — ograniczenia tempa wyłączone.', + 'autonomy.invalidIntegerMsg': + 'Musi być dodatnią liczbą całkowitą (użyj presetu Bez limitu, aby usunąć limit).', + 'autonomy.presetUnlimited': 'Bez limitu (domyślnie)', + // Triggers + 'triggers.toggleFailed': 'Nie udało się: {action} dla {trigger}: {message}', + // iOS Pair + 'iosPair.title': 'Sparuj z komputerem', + 'iosPair.instructions': + 'Otwórz OpenHuman na komputerze, przejdź do Ustawienia > Urządzenia i kliknij „Sparuj telefon”, aby pokazać kod QR.', + 'iosPair.scanQrCode': 'Zeskanuj kod QR', + 'iosPair.scannerOpening': 'Otwieranie skanera...', + 'iosPair.connecting': 'Łączenie z komputerem...', + 'iosPair.connectedLoading': 'Połączono! Ładowanie...', + 'iosPair.expired': 'Kod QR wygasł. Poproś komputer o wygenerowanie nowego.', + 'iosPair.desktopLabel': 'Komputer', + 'iosPair.retryScan': 'Skanuj ponownie', + 'iosPair.step.openDesktop': 'Otwórz OpenHuman na komputerze', + 'iosPair.step.openSettings': 'Przejdź do Ustawienia > Urządzenia', + 'iosPair.step.showQr': 'Kliknij „Sparuj telefon”, aby pokazać kod QR', + 'iosPair.error.camera': + 'Skanowanie kamerą nieudane. Sprawdź uprawnienia do kamery i spróbuj ponownie.', + 'iosPair.error.invalidQr': + 'Nieprawidłowy kod QR. Upewnij się, że skanujesz kod parowania OpenHuman.', + 'iosPair.error.unreachableDesktop': + 'Nie udało się dotrzeć do komputera. Upewnij się, że oba urządzenia są online i spróbuj ponownie.', + 'iosPair.error.connectionFailed': + 'Połączenie nieudane. Upewnij się, że aplikacja na komputerze działa i spróbuj ponownie.', + // iOS Mascot + 'iosMascot.defaultPairedLabel': 'Komputer', + 'iosMascot.connectedTo': 'Połączono z', + 'iosMascot.disconnect': 'Rozłącz', + 'iosMascot.pushToTalk': 'Naciśnij i mów', + 'iosMascot.thinking': 'Myślę...', + 'iosMascot.typeMessage': 'Napisz wiadomość...', + 'iosMascot.sendMessage': 'Wyślij wiadomość', + 'iosMascot.error.generic': 'Coś poszło nie tak. Spróbuj ponownie.', + 'iosMascot.error.sendFailed': 'Nie udało się wysłać. Sprawdź połączenie.', + // Voice + 'voice.pushToTalk': 'Naciśnij i mów', + 'voice.recording': 'Nagrywanie...', + 'voice.processing': 'Przetwarzanie...', + 'voice.languageHint': 'Język', + 'voice.failedToLoadSettings': 'Nie udało się załadować ustawień głosu', + 'voice.failedToSaveSettings': 'Nie udało się zapisać ustawień głosu', + 'voice.failedToStartServer': 'Nie udało się uruchomić serwera głosu', + 'voice.failedToStopServer': 'Nie udało się zatrzymać serwera głosu', + 'voice.sttDisabledPrefix': + 'Dyktowanie głosem jest wyłączone, dopóki nie zostanie pobrany lokalny model STT. Użyj sekcji', + 'voice.sttDisabledSuffix': 'powyżej, aby zainstalować Whisper.', + 'voice.providers.title': 'Dostawcy głosu', + 'voice.providers.desc': + 'Wybierz, gdzie ma działać transkrypcja i synteza. Użyj przycisków „Zainstaluj lokalnie”, aby pobrać binarki i modele do przestrzeni roboczej. Lokalnych dostawców można zapisać przed zakończeniem instalacji — bez ręcznego ustawiania WHISPER_BIN czy PIPER_BIN.', + 'voice.providers.sttProvider': 'Dostawca mowy na tekst', + 'voice.providers.cloudWhisperProxy': 'Chmura (proxy Whisper)', + 'voice.providers.localWhisper': 'Whisper lokalnie', + 'voice.providers.installRequired': ' (wymagana instalacja)', + 'voice.providers.whisperInstalledTitle': + 'Whisper jest zainstalowany. Kliknij, aby zainstalować ponownie.', + 'voice.providers.whisperDownloadTitle': + 'Pobierz whisper.cpp i model GGML do przestrzeni roboczej.', + 'voice.providers.installed': 'Zainstalowano', + 'voice.providers.installFailed': 'Instalacja nieudana', + 'voice.providers.notInstalled': 'Nie zainstalowano', + 'voice.providers.whisperModel': 'Model Whisper', + 'voice.providers.whisperModelTiny': 'Tiny (39 MB, najszybszy)', + 'voice.providers.whisperModelBase': 'Base (74 MB)', + 'voice.providers.whisperModelSmall': 'Small (244 MB)', + 'voice.providers.whisperModelMedium': 'Medium (769 MB, polecany)', + 'voice.providers.whisperModelLargeTurbo': 'Large v3 Turbo (1.5 GB, najlepsza dokładność)', + 'voice.providers.ttsProvider': 'Dostawca tekstu na mowę', + 'voice.providers.cloudElevenLabsProxy': 'Chmura (proxy ElevenLabs)', + 'voice.providers.localPiper': 'Piper lokalnie', + 'voice.providers.piperInstalledTitle': + 'Piper jest zainstalowany. Kliknij, aby zainstalować ponownie.', + 'voice.providers.piperDownloadTitle': + 'Pobierz Piper i głos en_US-lessac-medium do przestrzeni roboczej.', + 'voice.providers.piperVoice': 'Głos Piper', + 'voice.providers.customVoiceOption': 'Inny (wpisz poniżej)…', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + 'Głosy pochodzą z huggingface.co/rhasspy/piper-voices. Zmiana głosu może wymagać kliknięcia Zainstaluj / Zainstaluj ponownie, aby pobrać nowy plik .onnx.', + 'voice.providers.mascotVoice': 'Głos maskotki', + 'voice.providers.mascotVoiceDescPrefix': + 'Głos ElevenLabs, którego maskotka używa do mówionych odpowiedzi, konfiguruje się w', + 'voice.providers.mascotSettings': 'Ustawienia maskotki', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.installing': 'Instalowanie', + 'voice.providers.installingBusy': 'Instalowanie…', + 'voice.providers.reinstallLocally': 'Zainstaluj ponownie lokalnie', + 'voice.providers.repair': 'Napraw', + 'voice.providers.retryLocally': 'Spróbuj ponownie lokalnie', + 'voice.providers.installLocally': 'Zainstaluj lokalnie', + 'voice.providers.whisperReady': 'Whisper jest gotowy.', + 'voice.providers.whisperInstallStarted': 'Instalacja Whisper rozpoczęta', + 'voice.providers.queued': 'w kolejce', + 'voice.providers.failedToInstallWhisper': 'Nie udało się zainstalować Whisper', + 'voice.providers.piperReady': 'Piper jest gotowy.', + 'voice.providers.piperInstallStarted': 'Instalacja Piper rozpoczęta', + 'voice.providers.failedToInstallPiper': 'Nie udało się zainstalować Piper', + 'voice.providers.saved': 'Zapisano dostawców głosu.', + 'voice.providers.failedToSave': 'Nie udało się zapisać dostawców głosu', + 'voice.providers.chip.cloud': 'OpenHuman (zarządzany)', + 'voice.providers.chip.cloudAria': 'Zarządzany dostawca OpenHuman jest zawsze włączony', + 'voice.providers.chip.whisper': 'Whisper (lokalnie)', + 'voice.providers.chip.enableWhisper': 'Włącz lokalny Whisper STT', + 'voice.providers.chip.disableWhisper': 'Wyłącz lokalny Whisper STT', + 'voice.providers.chip.piper': 'Piper (lokalnie)', + 'voice.providers.chip.enablePiper': 'Włącz lokalny Piper TTS', + 'voice.providers.chip.disablePiper': 'Wyłącz lokalny Piper TTS', + 'voice.providers.chip.enableProvider': 'Włącz', + 'voice.providers.chip.disableProvider': 'Wyłącz', + 'voice.providers.chip.apiKeyLabel': 'Klucz API', + 'voice.providers.chip.comingSoon': 'wkrótce', + 'voice.modal.title': 'Skonfiguruj', + 'voice.modal.desc': + 'Wpisz swój klucz API, aby włączyć tego dostawcę. Możesz przetestować połączenie przed zapisem.', + 'voice.modal.testKey': 'Przetestuj klucz', + 'voice.modal.testing': 'Testowanie…', + 'voice.modal.saveAndEnable': 'Zapisz i włącz', + 'voice.modal.enable': 'Włącz', + 'voice.modal.whisperDesc': + 'Wybierz rozmiar modelu i zainstaluj binarkę Whisper oraz model GGML w przestrzeni roboczej. Większe modele są dokładniejsze, ale wolniejsze.', + 'voice.modal.piperDesc': + 'Wybierz głos i zainstaluj binarkę Piper oraz model ONNX w przestrzeni roboczej. Piper działa w pełni offline z niskim opóźnieniem.', + 'voice.routing.title': 'Routing głosu', + 'voice.routing.desc': 'Wybierz, którzy włączeni dostawcy obsługują STT i TTS.', + 'voice.routing.save': 'Zapisz', + 'voice.routing.testStt': 'Test STT', + 'voice.routing.testTts': 'Test TTS', + 'voice.routing.elevenlabsVoice': 'Głos ElevenLabs', + 'voice.routing.elevenlabsVoiceDesc': + 'Wybierz wybrany głos lub wklej własne ID głosu z panelu ElevenLabs.', + 'voice.externalProviders.title': 'Zewnętrzni dostawcy głosu', + 'voice.externalProviders.desc': + 'Podłącz API STT/TTS innych firm, np. Deepgram, ElevenLabs lub OpenAI, bezpośrednio.', + 'voice.externalProviders.keySet': 'Klucz ustawiony', + 'voice.externalProviders.noKey': 'Brak klucza API', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'Testowanie…', + 'voice.externalProviders.remove': 'Usuń', + 'voice.externalProviders.provider': 'Dostawca', + 'voice.externalProviders.selectProvider': 'Wybierz dostawcę…', + 'voice.externalProviders.apiKey': 'Klucz API', + 'voice.externalProviders.add': 'Dodaj', + // Screen Awareness debug + 'screenAwareness.debug.debugAndDiagnostics': 'Debug i diagnostyka', + 'screenAwareness.debug.collapse': 'Zwiń', + 'screenAwareness.debug.expand': 'Rozwiń', + 'screenAwareness.debug.failedToSave': 'Nie udało się zapisać świadomości ekranu', + 'screenAwareness.debug.policyTitle': 'Polityka świadomości ekranu', + 'screenAwareness.debug.baselineFps': 'Bazowe FPS', + 'screenAwareness.debug.useVisionModel': 'Użyj modelu wizji', + 'screenAwareness.debug.useVisionModelDesc': + 'Wysyłaj zrzuty ekranu do LLM wizyjnego po bogatszy kontekst. Gdy wyłączone, używany jest tylko tekst OCR z LLM tekstowym — szybciej i bez modelu wizji.', + 'screenAwareness.debug.keepScreenshots': 'Zachowuj zrzuty ekranu', + 'screenAwareness.debug.keepScreenshotsDesc': + 'Zapisuj zrzuty ekranu w przestrzeni roboczej zamiast usuwać po przetworzeniu', + 'screenAwareness.debug.allowlist': 'Lista dozwolonych (jedna reguła na linię)', + 'screenAwareness.debug.denylist': 'Lista blokowanych (jedna reguła na linię)', + 'screenAwareness.debug.saveSettings': 'Zapisz ustawienia świadomości ekranu', + 'screenAwareness.debug.sessionStats': 'Statystyki sesji', + 'screenAwareness.debug.framesEphemeral': 'Klatki (ulotne)', + 'screenAwareness.debug.panicStop': 'Awaryjne zatrzymanie', + 'screenAwareness.debug.vision': 'Wizja', + 'screenAwareness.debug.idle': 'bezczynne', + 'screenAwareness.debug.visionQueue': 'Kolejka wizji', + 'screenAwareness.debug.lastVision': 'Ostatnia wizja', + 'screenAwareness.debug.notAvailable': 'n/d', + 'screenAwareness.debug.visionSummaries': 'Podsumowania wizji', + 'screenAwareness.debug.refreshing': 'Odświeżanie…', + 'screenAwareness.debug.noSummaries': 'Brak podsumowań.', + 'screenAwareness.debug.unknownApp': 'Nieznana aplikacja', + 'screenAwareness.debug.macosOnly': + 'Świadomość ekranu V1 jest obecnie obsługiwana tylko na macOS.', + // MCP + 'mcp.alphaBadge': 'Alpha', + 'mcp.alphaBannerText': + 'Obsługa serwerów MCP jest we wczesnej fazie alpha. Rejestr Smithery, instalacja i podpinanie narzędzi mogą się zmieniać między wydaniami.', + 'mcp.toolList.noTools': 'Brak dostępnych narzędzi.', + 'mcp.toolList.availableSingular': 'Dostępne {count} narzędzie', + 'mcp.toolList.availablePlural': 'Dostępnych narzędzi: {count}', + 'mcp.catalog.searchPlaceholder': 'Szukaj w katalogu Smithery...', + 'mcp.catalog.loadFailed': 'Nie udało się załadować katalogu', + 'mcp.catalog.noResults': 'Nie znaleziono serwerów.', + 'mcp.catalog.noResultsFor': 'Nie znaleziono serwerów dla „{query}”.', + 'mcp.catalog.loadMore': 'Załaduj więcej', + 'mcp.catalog.deployed': 'Wdrożono', + 'mcp.catalog.installCount': 'Instalacji: {count}', + 'mcp.installed.title': 'Zainstalowane', + 'mcp.installed.browseCatalog': 'Przeglądaj katalog', + 'mcp.installed.empty': 'Brak zainstalowanych serwerów MCP.', + 'mcp.installed.toolSingular': '{count} narzędzie', + 'mcp.installed.toolPlural': 'Narzędzia: {count}', + 'mcp.tab.loading': 'Ładowanie serwerów MCP...', + 'mcp.tab.emptyDetail': 'Wybierz serwer lub przeglądaj katalog.', + 'mcp.install.loadingDetail': 'Ładowanie szczegółów serwera...', + 'mcp.install.back': 'Wstecz', + 'mcp.install.title': 'Zainstaluj {name}', + 'mcp.install.requiredEnv': 'Wymagane zmienne środowiskowe', + 'mcp.install.enterValue': 'Wpisz wartość dla {key}', + 'mcp.install.show': 'Pokaż', + 'mcp.install.hide': 'Ukryj', + 'mcp.install.configLabel': 'Konfiguracja (opcjonalny JSON)', + 'mcp.install.missingRequired': 'Pole „{key}” jest wymagane', + 'mcp.install.invalidJson': 'Konfiguracja nie jest poprawnym JSON-em', + 'mcp.install.failedDetail': 'Nie udało się załadować szczegółów serwera', + 'mcp.install.failedInstall': 'Instalacja nieudana', + 'mcp.install.button': 'Zainstaluj', + 'mcp.install.installing': 'Instalowanie...', + 'mcp.detail.suggestedEnvReady': 'Gotowe sugerowane wartości środowiska', + 'mcp.detail.connect': 'Połącz', + 'mcp.detail.connecting': 'Łączenie...', + 'mcp.detail.disconnect': 'Rozłącz', + 'mcp.detail.hideAssistant': 'Ukryj asystenta', + 'mcp.detail.helpConfigure': 'Pomóż skonfigurować', + 'mcp.detail.confirmUninstall': 'Potwierdzić odinstalowanie?', + 'mcp.detail.confirmUninstallAction': 'Tak, odinstaluj', + 'mcp.detail.uninstall': 'Odinstaluj', + 'mcp.detail.envVars': 'Zmienne środowiskowe', + 'mcp.detail.tools': 'Narzędzia', + 'mcp.configAssistant.title': 'Asystent konfiguracji', + 'mcp.configAssistant.empty': 'Zapytaj o konfigurację, wymagane zmienne lub kroki instalacji.', + 'mcp.configAssistant.suggestedValues': 'Sugerowane wartości:', + 'mcp.configAssistant.valueHidden': '(wartość ukryta)', + 'mcp.configAssistant.applySuggested': 'Zastosuj sugerowane wartości', + 'mcp.configAssistant.reinstallHint': 'Aby je zastosować, zainstaluj ponownie z tymi wartościami.', + 'mcp.configAssistant.thinking': 'Myślę...', + 'mcp.configAssistant.inputPlaceholder': + 'Zadaj pytanie (Enter aby wysłać, Shift+Enter nowa linia)', + 'mcp.configAssistant.send': 'Wyślij', + 'mcp.configAssistant.failedResponse': 'Nie udało się uzyskać odpowiedzi', + 'mcp.setup.secretDialog.title': 'Konfiguracja MCP — wpisz sekret', + 'mcp.setup.secretDialog.bodyPrefix': 'Asystent konfiguracji MCP potrzebuje', + 'mcp.setup.secretDialog.bodySuffix': + '. Wartość jest wysyłana bezpośrednio do procesu rdzenia i nigdy nie trafia do rozmowy AI.', + 'mcp.setup.secretDialog.inputLabel': 'Wartość', + 'mcp.setup.secretDialog.inputPlaceholder': 'Wklej tutaj', + 'mcp.setup.secretDialog.show': 'Pokaż', + 'mcp.setup.secretDialog.hide': 'Ukryj', + 'mcp.setup.secretDialog.submit': 'Wyślij', + 'mcp.setup.secretDialog.cancel': 'Anuluj', + 'mcp.setup.secretDialog.submitting': 'Wysyłanie…', + 'mcp.setup.secretDialog.errorPrefix': 'Nie udało się wysłać:', + 'mcp.setup.secretDialog.privacyNote': + 'Przechowywane zaszyfrowane w lokalnej tabeli sekretów MCP. Nigdy nie są logowane ani wysyłane do modelu.', + // Vault + 'vault.title': 'Skarbce wiedzy (Eksperymentalne)', + 'vault.description': + 'Wskaż lokalny folder; pliki zostaną podzielone i odzwierciedlone w pamięci.', + 'vault.add': 'Dodaj skarbiec', + 'vault.added': 'Skarbiec dodany', + 'vault.createdMessage': 'Utworzono „{name}”. Kliknij {sync}, aby zaindeksować.', + 'vault.couldNotAdd': 'Nie udało się dodać skarbca', + 'vault.syncFailed': 'Synchronizacja nieudana', + 'vault.syncFailedFor': 'Synchronizacja „{name}” nieudana', + 'vault.syncFailedFiles': 'Nieudane pliki: {count}', + 'vault.syncedTitle': 'Zsynchronizowano „{name}”', + 'vault.syncSummary': 'Zaindeksowano: {ingested}, bez zmian: {unchanged}, usunięto: {removed}', + 'vault.syncSummaryFailed': ', nieudane: {count}', + 'vault.syncSummarySkipped': ', pominięte: {count}', + 'vault.syncSummaryDuration': ' · {seconds} s', + 'vault.confirmRemovePurge': + 'Usunąć skarbiec „{name}”?\n\nKliknij OK, aby również wyczyścić jego pamięć (usunąć wszystkie {count} zaindeksowane dokumenty).\nKliknij Anuluj, aby zachować dokumenty w pamięci.', + 'vault.confirmRemove': 'Na pewno usunąć skarbiec „{name}”?', + 'vault.removed': 'Skarbiec usunięty', + 'vault.removedPurgedMessage': 'Usunięto „{name}” i wyczyszczono pamięć.', + 'vault.removedKeptMessage': 'Usunięto „{name}”. Dokumenty pozostają w pamięci.', + 'vault.couldNotRemove': 'Nie udało się usunąć skarbca', + 'vault.name': 'Nazwa', + 'vault.namePlaceholder': 'Moje notatki badawcze', + 'vault.folderPath': 'Ścieżka folderu (bezwzględna)', + 'vault.folderPathPlaceholder': '/Users/ty/Documents/notatki', + 'vault.excludes': 'Wykluczenia (po przecinku, opcjonalnie)', + 'vault.excludesPlaceholder': 'wersje robocze/, .sekret', + 'vault.creating': 'Tworzenie…', + 'vault.create': 'Utwórz skarbiec', + 'vault.loading': 'Ładowanie skarbców…', + 'vault.failedToLoad': 'Nie udało się załadować skarbców: {error}', + 'vault.empty': 'Brak skarbców. Dodaj jeden powyżej, aby zacząć indeksować folder.', + 'vault.fileCount': 'Plików: {count}', + 'vault.syncedRelative': 'zsynchronizowano {time}', + 'vault.neverSynced': 'nigdy nie synchronizowano', + 'vault.syncingProgress': 'Synchronizowanie… {ingested}/{total}', + 'vault.removing': 'Usuwanie…', + 'vault.relative.sec': '{count} s temu', + 'vault.relative.min': '{count} min temu', + 'vault.relative.hr': '{count} godz. temu', + 'vault.relative.day': '{count} dni temu', + // WhatsApp + 'whatsapp.title': 'WhatsApp', + // Subconscious + 'subconscious.interval.fiveMinutes': '5 min', + 'subconscious.interval.tenMinutes': '10 min', + 'subconscious.interval.fifteenMinutes': '15 min', + 'subconscious.interval.thirtyMinutes': '30 min', + 'subconscious.interval.oneHour': '1 godz.', + 'subconscious.interval.sixHours': '6 godz.', + 'subconscious.interval.twelveHours': '12 godz.', + 'subconscious.interval.oneDay': '1 dzień', + 'subconscious.priority.critical': 'krytyczne', + 'subconscious.priority.important': 'ważne', + 'subconscious.priority.normal': 'normalne', + 'subconscious.durationSeconds': '{seconds} s', + 'subconscious.durationMilliseconds': '{milliseconds} ms', + // Settings heartbeat / ledger / search / embeddings + 'settings.heartbeat.title': 'Heartbeat i pętle', + 'settings.heartbeat.desc': 'Steruj częstotliwością harmonogramu tła i podglądaj mapę pętli.', + 'settings.ledgerUsage.title': 'Księga zużycia', + 'settings.ledgerUsage.desc': + 'Ostatnie wydatki kredytów, matematyka budżetu i budżet odczytów API w tle.', + 'settings.search.title': 'Wyszukiwarka', + 'settings.search.menuDesc': + 'Użyj domyślnie wyszukiwarki zarządzanej przez OpenHuman lub podłącz własnego dostawcę z kluczem API.', + 'settings.search.description': + 'Wybierz wyszukiwarkę używaną przez agenta. Zarządzana korzysta z backendu OpenHuman (bez konfiguracji). Parallel i Brave działają bezpośrednio z Twojego urządzenia, używając Twojego klucza API.', + 'settings.search.engineManagedLabel': 'OpenHuman zarządzane', + 'settings.search.engineManagedDesc': 'Domyślnie. Przez backend OpenHuman — bez klucza API.', + 'settings.search.localManagedUnavailable': + 'Wyszukiwarka zarządzana przez OpenHuman jest niedostępna dla użytkowników lokalnych. Dodaj własny klucz API Parallel lub Brave, aby włączyć wyszukiwanie w sieci.', + 'settings.search.engineParallelLabel': 'Parallel', + 'settings.search.engineParallelDesc': + 'Bezpośrednie API Parallel: szukaj, wyciąg, czat, badania, wzbogacenie, narzędzia datasetowe.', + 'settings.search.engineBraveLabel': 'Brave Search', + 'settings.search.engineBraveDesc': + 'Bezpośrednie API Brave Search: web, wiadomości, obrazy i wideo.', + 'settings.search.statusConfigured': 'Skonfigurowano', + 'settings.search.statusNeedsKey': 'Wymaga klucza API', + 'settings.search.fallbackToManaged': + 'Brak klucza — do czasu jego zapisania wyszukiwarka przejdzie w tryb zarządzany.', + 'settings.search.getApiKey': 'Pobierz klucz API', + 'settings.search.save': 'Zapisz', + 'settings.search.clear': 'Wyczyść', + 'settings.search.show': 'Pokaż', + 'settings.search.hide': 'Ukryj', + 'settings.search.statusSaving': 'Zapisywanie…', + 'settings.search.statusSaved': 'Zapisano.', + 'settings.search.statusError': 'Niepowodzenie', + 'settings.search.parallelKeyLabel': 'Klucz API Parallel', + 'settings.search.braveKeyLabel': 'Klucz API Brave Search', + 'settings.search.placeholderStored': '•••••••• (zapisane)', + // Settings embeddings + 'settings.embeddings.title': 'Embeddings', + 'settings.embeddings.description': + 'Wybierz, który dostawca embeddings konwertuje pamięć na wektory do wyszukiwania semantycznego. Zmiana dostawcy, modelu lub wymiarów unieważnia zapisane wektory i wymaga pełnego resetu pamięci.', + 'settings.embeddings.statusConfigured': 'Skonfigurowano', + 'settings.embeddings.statusNeedsKey': 'Wymaga klucza API', + 'settings.embeddings.apiKeyLabel': 'Klucz API {provider}', + 'settings.embeddings.placeholderStored': '•••••••• (zapisane)', + 'settings.embeddings.placeholderKey': 'Wklej swój klucz API…', + 'settings.embeddings.keyStoredEncrypted': 'Twój klucz API jest zaszyfrowany na tym urządzeniu.', + 'settings.embeddings.show': 'Pokaż', + 'settings.embeddings.hide': 'Ukryj', + 'settings.embeddings.save': 'Zapisz', + 'settings.embeddings.clear': 'Wyczyść', + 'settings.embeddings.model': 'Model', + 'settings.embeddings.dimensions': 'Wymiary', + 'settings.embeddings.customEndpoint': 'Niestandardowy endpoint', + 'settings.embeddings.customModelPlaceholder': 'Nazwa modelu', + 'settings.embeddings.customDimsPlaceholder': 'Wymiary', + 'settings.embeddings.applyCustom': 'Zastosuj', + 'settings.embeddings.testConnection': 'Przetestuj połączenie', + 'settings.embeddings.testing': 'Testowanie…', + 'settings.embeddings.testSuccess': 'Połączono — wymiarów: {dims}', + 'settings.embeddings.testFailed': 'Niepowodzenie: {error}', + 'settings.embeddings.saving': 'Zapisywanie…', + 'settings.embeddings.saved': 'Zapisano.', + 'settings.embeddings.errorPrefix': 'Niepowodzenie', + 'settings.embeddings.wipeTitle': 'Zresetować wektory pamięci?', + 'settings.embeddings.wipeBody': + 'Zmiana dostawcy, modelu lub wymiarów embeddings usunie wszystkie zapisane wektory pamięci. Pamięć trzeba odbudować, zanim wyszukiwanie znów zadziała. Tej operacji nie można cofnąć.', + 'settings.embeddings.cancel': 'Anuluj', + 'settings.embeddings.confirmWipe': 'Wyczyść i zastosuj', + 'settings.embeddings.setupTitle': 'Skonfiguruj {provider}', + 'settings.embeddings.saveAndSwitch': 'Zapisz i przełącz', + 'settings.embeddings.optional': 'opcjonalne', + 'settings.embeddings.vectorSearchDisabled': + 'Wyszukiwanie wektorowe jest wyłączone. Pamięć będzie używać tylko dopasowania słów kluczowych i świeżości — bez rankingu semantycznego.', + 'settings.embeddings.clearKey': 'Wyczyść klucz API', + // Settings companion + 'settings.companion.title': 'Towarzysz komputerowy', + 'settings.companion.session': 'Sesja', + 'settings.companion.activeLabel': 'Aktywna', + 'settings.companion.inactiveStatus': 'Nieaktywna', + 'settings.companion.stopping': 'Zatrzymywanie…', + 'settings.companion.stopSession': 'Zatrzymaj sesję', + 'settings.companion.starting': 'Uruchamianie…', + 'settings.companion.startSession': 'Uruchom sesję', + 'settings.companion.sessionId': 'ID sesji', + 'settings.companion.turns': 'Tury', + 'settings.companion.remaining': 'Pozostało', + 'settings.companion.configuration': 'Konfiguracja', + 'settings.companion.hotkey': 'Skrót klawiszowy', + 'settings.companion.activationMode': 'Tryb aktywacji', + 'settings.companion.sessionTtl': 'TTL sesji', + 'settings.companion.screenCapture': 'Przechwytywanie ekranu', + 'settings.companion.appContext': 'Kontekst aplikacji', + // Settings composio + 'settings.composio.title': 'Composio', + 'composio.integrationSlugsHelp': 'Slugi integracji rozdzielone przecinkami, np.', + 'composio.integrationSlugsExample': 'gmail, slack', + 'composio.integrationSlugsCaseInsensitive': 'Bez rozróżniania wielkości liter.', + 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', + // Migration + 'migration.title': 'Importuj z innego asystenta', + 'migration.description': + 'Przenieś pamięć i notatki z innego lokalnego asystenta do tej przestrzeni roboczej. Zacznij od Podglądu, aby zobaczyć, co dokładnie się zmieni, potem Zastosuj, aby skopiować dane. Twoja obecna pamięć jest najpierw archiwizowana.', + 'migration.vendorLabel': 'Dostawca źródłowy', + 'migration.sourceLabel': 'Ścieżka źródłowej przestrzeni roboczej (opcjonalne)', + 'migration.sourcePlaceholder': + 'Zostaw puste, aby wykryć automatycznie (np. ~/.openclaw/workspace)', + 'migration.sourceHint': + 'Domyślnie używa standardowej lokalizacji dostawcy, gdy puste. Wpisz konkretną ścieżkę, jeśli przeniosłeś przestrzeń roboczą.', + 'migration.previewAction': 'Podgląd', + 'migration.previewRunning': 'Podgląd…', + 'migration.applyAction': 'Zastosuj import', + 'migration.applyRunning': 'Importowanie…', + 'migration.applyDisclaimer': + 'Zastosuj odblokowuje się po udanym Podglądzie tego samego źródła. Istniejąca pamięć jest archiwizowana przed importem.', + 'migration.reportTitlePreview': 'Podgląd — jeszcze nic nie zaimportowano', + 'migration.reportTitleApplied': 'Import ukończony', + 'migration.report.source': 'Źródłowa przestrzeń robocza', + 'migration.report.target': 'Docelowa przestrzeń robocza', + 'migration.report.fromSqlite': 'Ze SQLite (brain.db)', + 'migration.report.fromMarkdown': 'Z Markdown', + 'migration.report.imported': 'Zaimportowano', + 'migration.report.skippedUnchanged': 'Pominięto (bez zmian)', + 'migration.report.renamedConflicts': 'Zmieniono nazwę przy konflikcie', + 'migration.report.warnings': 'Ostrzeżenia', + 'migration.report.previewHint': + 'Jeszcze nic nie zostało zaimportowane. Kliknij Zastosuj import, aby skopiować.', + 'migration.report.appliedHint': + 'Zaimportowane wpisy są teraz w pamięci. Uruchom Podgląd ponownie, aby porównać.', + 'migration.hermesComingSoonPrefix': 'Importer Hermes jest w planach — zobacz ', + 'migration.hermesComingSoonSuffix': + ' po kontekst. Wybierz OpenClaw, aby migrować teraz; Hermes pojawi się później.', + 'migration.hermesLinkText': '#1440', + 'migration.confirmImport.singular': + 'Zaimportować {count} wpis do obecnej przestrzeni roboczej?\n\nŹródło: {source}\nCel: {target}\n\nIstniejąca pamięć zostanie zarchiwizowana przed uruchomieniem importu.', + 'migration.confirmImport.plural': + 'Zaimportować {count} wpisów do obecnej przestrzeni roboczej?\n\nŹródło: {source}\nCel: {target}\n\nIstniejąca pamięć zostanie zarchiwizowana przed uruchomieniem importu.', + // Settings notifications top + 'settings.notifications.doNotDisturb': 'Tryb Nie przeszkadzać', + 'settings.notifications.doNotDisturbDesc': 'Wstrzymaj wszystkie powiadomienia na określony czas', + 'settings.notifications.channelControls': 'Sterowanie per kanał', + 'settings.notifications.channelControlsDesc': + 'Skonfiguruj preferencje powiadomień dla każdego kanału', + 'settings.notifications.tabs.preferences': 'Preferencje', + 'settings.notifications.tabs.routing': 'Routing', + // Settings features + 'settings.features.screenAwareness': 'Świadomość ekranu', + 'settings.features.screenAwarenessDesc': 'Pozwól asystentowi widzieć Twoje aktywne okno', + 'settings.features.messaging': 'Wiadomości', + 'settings.features.messagingDesc': 'Ustawienia kanałów i integracji wiadomości', + 'settings.features.tools': 'Narzędzia', + 'settings.features.toolsDesc': 'Zarządzaj podłączonymi narzędziami i integracjami', + 'settings.ai.localSetup': 'Konfiguracja lokalnego AI', + 'settings.ai.localSetupDesc': 'Pobierz i skonfiguruj lokalne modele AI', + 'settings.ai.llmProvider': 'Dostawca LLM', + 'settings.ai.llmProviderDesc': 'Wybierz i skonfiguruj dostawcę AI', + // Settings account + 'settings.account.recoveryPhrase': 'Fraza odzyskiwania', + 'settings.account.recoveryPhraseDesc': 'Wyświetl i zabezpiecz swoją frazę odzyskiwania', + 'settings.account.team': 'Zespół', + 'settings.account.teamDesc': 'Zarządzaj członkami i uprawnieniami zespołu', + 'settings.account.connections': 'Połączenia', + 'settings.account.connectionsDesc': 'Zarządzaj połączonymi kontami i usługami', + 'settings.account.privacy': 'Prywatność', + 'settings.account.privacyDesc': 'Kontroluj, jakie dane opuszczają Twój komputer', + // Provider setup + 'providerSetup.error.defaultDetails': 'Konfiguracja dostawcy nieudana.', + 'providerSetup.error.providerFallback': 'Dostawca', + 'providerSetup.error.credentialsRejected': + 'Dostawca {provider} odrzucił dane logowania. Sprawdź klucz API i spróbuj ponownie.', + 'providerSetup.error.endpointNotRecognized': + 'Dostawca {provider} nie rozpoznał endpointu. Sprawdź URL bazowy i spróbuj ponownie.', + 'providerSetup.error.providerUnavailable': + 'Dostawca {provider} jest teraz niedostępny. Spróbuj ponownie lub sprawdź status dostawcy.', + 'providerSetup.error.unreachable': + 'Nie udało się połączyć z {provider}. Sprawdź URL endpointu i połączenie sieciowe, potem spróbuj ponownie.', + 'providerSetup.error.couldNotReachWithMessage': 'Nie udało się połączyć z {provider}: {message}', + 'providerSetup.error.technicalDetails': 'Szczegóły techniczne', + // Notifications routing + 'notifications.routingTitle': 'Routing powiadomień', + 'notifications.routing.pipelineStats': 'Statystyki pipeline', + 'notifications.routing.total': 'Razem', + 'notifications.routing.unread': 'Nieprzeczytane', + 'notifications.routing.unscored': 'Niezocenione', + 'notifications.routing.intelligenceTitle': 'Inteligencja powiadomień', + 'notifications.routing.intelligenceDesc': + 'Każde powiadomienie z Twoich podłączonych kont jest oceniane przez lokalny model AI. Powiadomienia o wysokiej wadze są automatycznie kierowane do agenta orchestratora, by nic ważnego nie umknęło.', + 'notifications.routing.howItWorks': 'Jak to działa', + 'notifications.routing.level.drop': 'Odrzuć', + 'notifications.routing.level.dropDesc': 'Szum / spam — zapisane, ale nie pokazywane', + 'notifications.routing.level.acknowledge': 'Potwierdź', + 'notifications.routing.level.acknowledgeDesc': 'Niski priorytet — widoczne w centrum powiadomień', + 'notifications.routing.level.react': 'Reaguj', + 'notifications.routing.level.reactDesc': + 'Średni priorytet — uruchamia ukierunkowaną odpowiedź agenta', + 'notifications.routing.level.escalate': 'Eskaluj', + 'notifications.routing.level.escalateDesc': 'Wysoki priorytet — przekierowane do orchestratora', + 'notifications.routing.perProvider': 'Routing per dostawca', + 'notifications.routing.threshold': 'Próg', + 'notifications.routing.routeToOrchestrator': 'Kieruj do orchestratora', + 'notifications.routing.loadSettingsError': + 'Nie udało się załadować ustawień. Otwórz panel ponownie.', + // Settings billing inference budget + 'settings.billing.inferenceBudget.title': 'Budżet inferencji', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Brak cyklicznego budżetu planu', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + 'Twój obecny plan nie zawiera cyklicznego tygodniowego budżetu inferencji. Zużycie jest opłacane z dostępnych kredytów.', + 'settings.billing.inferenceBudget.remainingSummary': 'Pozostało {remaining} / {budget}', + 'settings.billing.inferenceBudget.spentThisCycle': 'Wydano {amount} w tym cyklu', + 'settings.billing.inferenceBudget.cycleEndsOn': 'Cykl kończy się {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + 'Subskrypcyjne zużycie zostało wyczerpane. Doładuj kredyty, aby korzystać dalej bez czekania na nowy cykl.', + 'settings.billing.inferenceBudget.discountVsPayg': + 'O {pct}% taniej za wywołanie niż w pay-as-you-go.', + 'settings.billing.inferenceBudget.cycleSpend': 'Wydatki w cyklu', + 'settings.billing.inferenceBudget.totalAmount': '{amount} łącznie', + 'settings.billing.inferenceBudget.inference': 'Inferencja', + 'settings.billing.inferenceBudget.integrations': 'Integracje', + 'settings.billing.inferenceBudget.calls': '{count} wywołań', + 'settings.billing.inferenceBudget.dailySpend': 'Wydatki dzienne', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'Najczęstsze modele', + 'settings.billing.inferenceBudget.noInferenceUsage': 'Brak zużycia inferencji w tym cyklu.', + 'settings.billing.inferenceBudget.topIntegrations': 'Najczęstsze integracje', + 'settings.billing.inferenceBudget.noIntegrationUsage': 'Brak zużycia integracji w tym cyklu.', + 'settings.billing.inferenceBudget.unableToLoad': 'Nie udało się załadować danych zużycia', + 'settings.billing.inferenceBudget.notAvailable': 'n/d', + // Memory debug + webhooks debug (high-level) + 'memory.sourceFilterAria': 'Filtruj po źródle', + 'calls.comingSoonDescription': 'Połączenia wspierane AI pojawią się wkrótce. Bądź na bieżąco.', + 'memory.debugTitle': 'Debug pamięci', + 'memory.documents': 'Dokumenty', + 'memory.filterByNamespace': 'Filtruj po przestrzeni nazw...', + 'memory.refresh': 'Odśwież', + 'memory.noDocumentsFound': 'Nie znaleziono dokumentów.', + 'memory.delete': 'Usuń', + 'memory.rawResponse': 'Surowa odpowiedź', + 'memory.namespaces': 'Przestrzenie nazw', + 'memory.noNamespacesFound': 'Nie znaleziono przestrzeni nazw.', + 'memory.queryRecall': 'Zapytanie i przywołanie', + 'memory.namespace': 'Przestrzeń nazw', + 'memory.queryText': 'Tekst zapytania...', + 'memory.maxChunks': 'maks. fragmentów', + 'memory.query': 'Zapytaj', + 'memory.recall': 'Przywołaj', + 'memory.queryLabel': 'Zapytanie', + 'memory.recallLabel': 'Przywołanie', + 'memory.queryResult': 'Wynik zapytania', + 'memory.recallResult': 'Wynik przywołania', + 'memory.clearNamespace': 'Wyczyść przestrzeń nazw', + 'memory.clearNamespaceDescription': 'Trwale usuń wszystkie dokumenty w przestrzeni nazw.', + 'memory.selectNamespace': 'Wybierz przestrzeń nazw...', + 'memory.exampleNamespace': 'np. skill:gmail:user@example.com', + 'memory.clear': 'Wyczyść', + 'memory.deleteConfirm': 'Usunąć dokument „{documentId}” w przestrzeni „{namespace}”?', + 'memory.clearNamespaceConfirm': + 'To trwale usunie WSZYSTKIE dokumenty w przestrzeni „{namespace}”. Kontynuować?', + 'memory.clearNamespaceSuccess': 'Wyczyszczono przestrzeń „{namespace}”.', + 'memory.clearNamespaceEmpty': 'Nic do wyczyszczenia w „{namespace}”.', + 'webhooks.debugTitle': 'Debug webhooków', + 'webhooks.failedToLoadDebugData': 'Nie udało się załadować danych debugowania webhooków', + 'webhooks.clearLogsConfirm': 'Wyczyścić wszystkie zebrane logi debugowania webhooków?', + 'webhooks.failedToClearLogs': 'Nie udało się wyczyścić logów webhooków', + 'webhooks.loading': 'Ładowanie...', + 'webhooks.refresh': 'Odśwież', + 'webhooks.clearing': 'Czyszczenie...', + 'webhooks.clearLogs': 'Wyczyść logi', + 'webhooks.registered': 'zarejestrowane', + 'webhooks.captured': 'przechwycone', + 'webhooks.live': 'na żywo', + 'webhooks.disconnected': 'rozłączone', + 'webhooks.lastEvent': 'Ostatnie zdarzenie', + 'webhooks.at': 'o', + 'webhooks.registeredWebhooks': 'Zarejestrowane webhooki', + 'webhooks.noActiveRegistrations': 'Brak aktywnych rejestracji.', + 'webhooks.resolvingBackendUrl': 'Rozpoznawanie URL backendu…', + 'webhooks.capturedRequests': 'Przechwycone żądania', + 'webhooks.noRequestsCaptured': 'Nie przechwycono jeszcze żądań webhooków.', + 'webhooks.unrouted': 'nierozesłane', + 'webhooks.pending': 'oczekujące', + 'webhooks.requestHeaders': 'Nagłówki żądania', + 'webhooks.queryParams': 'Parametry zapytania', + 'webhooks.requestBody': 'Treść żądania', + 'webhooks.responseHeaders': 'Nagłówki odpowiedzi', + 'webhooks.responseBody': 'Treść odpowiedzi', + 'webhooks.rawPayload': 'Surowy ładunek', + 'webhooks.empty': '[puste]', + // App update + 'app.update.dismissNotification': 'Odrzuć powiadomienie o aktualizacji', + 'bootCheck.rpcAuthSuffix': 'przy każdym RPC.', + // Chat agent profile / extras + 'chat.agentProfile.create': 'Utwórz profil agenta', + 'chat.agentProfile.createFailed': 'Nie udało się utworzyć profilu agenta.', + 'chat.agentProfile.customDescription': 'Niestandardowy profil agenta', + 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', + 'chat.agentProfile.exists': 'Profil agenta „{name}” już istnieje.', + 'chat.agentProfile.label': 'Profil agenta', + 'chat.agentProfile.namePlaceholder': 'Nazwa profilu', + 'chat.agentProfile.promptStylePlaceholder': 'Styl promptu', + 'chat.agentProfile.allowedToolsPlaceholder': 'Dozwolone narzędzia', + 'chat.backToThread': 'wróć do {title}', + 'chat.parentThread': 'wątek nadrzędny', + 'chat.removeReaction': 'Usuń {emoji}', + 'kbd.ariaLabel': 'Skrót klawiszowy: {shortcut}', + // Settings ai (high-level) + 'settings.ai.overview': 'Przegląd systemu AI', + 'settings.ai.routing.managed': 'Zarządzane', + 'settings.ai.routing.useYourOwn': 'Użyj własnych modeli', + 'settings.ai.routing.advanced': 'Zaawansowane', + 'settings.ai.routing.chatAndConversations': 'Czat i rozmowy', + 'settings.ai.routing.backgroundTasks': 'Zadania w tle', + 'settings.ai.routing.addCustomProvider': 'Dodaj własnego dostawcę', + 'settings.ai.globalModel.title': 'Wybierz jeden model do wszystkiego', + 'settings.ai.globalModel.provider': 'Dostawca', + 'settings.ai.globalModel.model': 'Model', + 'settings.ai.globalModel.loadingModels': 'Ładowanie modeli…', + 'settings.ai.globalModel.enterModelId': 'Wpisz ID modelu', + 'settings.ai.globalModel.saving': 'Zapisywanie…', + 'settings.ai.globalModel.saved': 'Zapisano', + 'settings.ai.workload.noModel': 'Nie wybrano modelu', + 'settings.ai.workload.changeModel': 'Zmień model', + 'settings.ai.workload.chooseModel': 'Wybierz model', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.ai.disconnectProvider': 'Rozłącz {label}', + 'settings.ai.connectProviderLabel': 'Połącz {label}', + 'settings.ai.endpointUrlLabel': 'URL endpointu', + 'settings.ai.endpointUrlRequired': 'URL endpointu jest wymagany.', + 'settings.ai.endpointProtocolRequired': 'Endpoint musi zaczynać się od http:// lub https://.', + 'settings.ai.connectProviderDialog': 'Połącz {label}', + 'settings.ai.or': 'lub', + 'settings.ai.connecting': 'Łączenie...', + 'settings.ai.test': 'Test', + 'settings.ai.testing': 'Testowanie...', + 'settings.ai.signInWithOpenRouter': 'Zaloguj się z OpenRouter', + 'settings.ai.openhumanDefault': 'OpenHuman (domyślny)', + 'settings.ai.selectModel': 'Wybierz model...', + 'settings.ai.loadingModels': 'Ładowanie modeli...', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.on': 'wł.', + 'settings.ai.off': 'wył.', + 'settings.ai.running': 'Działa...', +}; + +export default pl1; diff --git a/app/src/lib/i18n/chunks/pl-2.ts b/app/src/lib/i18n/chunks/pl-2.ts new file mode 100644 index 000000000..30c94e571 --- /dev/null +++ b/app/src/lib/i18n/chunks/pl-2.ts @@ -0,0 +1,463 @@ +import type { TranslationMap } from '../types'; +import en2 from './en-2'; + +// Polish chunk 2/5. Spreads the English source-of-truth chunk so every key is +// present (i18n parity gate); Polish values below override EN where translated. +const pl2: TranslationMap = { + ...en2, + // settings.ai (continued) + 'settings.ai.configStatus': 'Stan konfiguracji', + 'settings.ai.fallbackMode': 'Tryb awaryjny', + 'settings.ai.loadedFromRuntime': 'Wczytane ze środowiska', + 'settings.ai.loadingDuration': 'Czas wczytywania', + 'settings.ai.localRuntime': 'Lokalne środowisko modelu', + 'settings.ai.openManager': 'Otwórz menedżera', + 'settings.ai.retryDownload': 'Ponów pobieranie', + 'settings.ai.state': 'Stan', + 'settings.ai.targetModel': 'Model docelowy', + 'settings.ai.download': 'Pobierz', + 'settings.ai.localModelUnavailable': 'Stan modelu lokalnego niedostępny.', + 'settings.ai.soulConfig': 'Konfiguracja persony SOUL', + 'settings.ai.refreshing': 'Odświeżanie...', + 'settings.ai.refreshSoul': 'Odśwież SOUL', + 'settings.ai.loadingSoul': 'Wczytywanie konfiguracji SOUL...', + 'settings.ai.identity': 'Tożsamość', + 'settings.ai.personality': 'Osobowość', + 'settings.ai.safetyRules': 'Zasady bezpieczeństwa', + 'settings.ai.source': 'Źródło', + 'settings.ai.loaded': 'Wczytano', + 'settings.ai.toolsConfig': 'Konfiguracja TOOLS', + 'settings.ai.refreshTools': 'Odśwież TOOLS', + 'settings.ai.toolsAvailable': 'Dostępne narzędzia', + 'settings.ai.tools': 'narzędzia', + 'settings.ai.activeSkills': 'Aktywne umiejętności', + 'settings.ai.skills': 'umiejętności', + 'settings.ai.skillsOverview': 'Przegląd umiejętności', + 'settings.ai.refreshingAll': 'Odświeżanie wszystkiego...', + 'settings.ai.refreshAll': 'Odśwież całą konfigurację AI', + // settings.notifications + 'settings.notifications.suppressAll': 'Wycisz wszystkie powiadomienia', + 'settings.notifications.suppressAllDesc': + 'Blokuj wszystkie systemowe powiadomienia z osadzonych aplikacji niezależnie od fokusa.', + 'settings.notifications.toggleDnd': 'Przełącz tryb Nie przeszkadzać', + 'settings.notifications.categories': 'Kategorie', + 'settings.notifications.categoryFooter': + 'Wyłączenie kategorii zatrzymuje nowe powiadomienia tego typu w centrum powiadomień. Istniejące pozostają do czasu wyczyszczenia.', + // settings.billing + 'settings.billing.movedToWeb': 'Rozliczenia przeniesione do sieci', + 'settings.billing.openDashboard': 'Otwórz panel rozliczeń', + 'settings.billing.movedToWebDesc': + 'Zmiany subskrypcji, metody płatności, kredyty i faktury są teraz zarządzane w TinyHumans w sieci.', + 'settings.billing.backToSettings': 'Powrót do ustawień', + 'settings.billing.openingBrowser': 'Otwieranie przeglądarki...', + 'settings.billing.browserNotOpen': + 'Jeśli przeglądarka się nie otworzyła, użyj przycisku powyżej.', + 'settings.billing.browserOpenFailed': + 'Nie udało się otworzyć przeglądarki automatycznie. Użyj przycisku powyżej.', + // settings.tools + 'settings.tools.chooseCapabilities': + 'Wybierz, z jakich możliwości OpenHuman może korzystać w Twoim imieniu.', + 'settings.tools.saveChanges': 'Zapisz zmiany', + 'settings.tools.preferencesSaved': 'Preferencje zapisane', + 'settings.tools.saveFailed': 'Nie udało się zapisać preferencji. Spróbuj ponownie.', + // settings.screenAwareness + 'settings.screenAwareness.mode': 'Tryb', + 'settings.screenAwareness.allExceptBlacklist': 'Wszystko oprócz czarnej listy', + 'settings.screenAwareness.whitelistOnly': 'Tylko biała lista', + 'settings.screenAwareness.screenMonitoring': 'Monitorowanie ekranu', + 'settings.screenAwareness.saveSettings': 'Zapisz ustawienia', + 'settings.screenAwareness.session': 'Sesja', + 'settings.screenAwareness.status': 'Stan', + 'settings.screenAwareness.active': 'Aktywna', + 'settings.screenAwareness.stopped': 'Zatrzymana', + 'settings.screenAwareness.remaining': 'Pozostało', + 'settings.screenAwareness.startSession': 'Rozpocznij sesję', + 'settings.screenAwareness.stopSession': 'Zatrzymaj sesję', + 'settings.screenAwareness.analyzeNow': 'Analizuj teraz', + 'settings.screenAwareness.macosOnly': + 'Przechwytywanie ekranu i zarządzanie uprawnieniami są obecnie obsługiwane tylko na macOS.', + // connections + 'connections.comingSoon': 'Wkrótce', + 'connections.setUp': 'Skonfiguruj', + 'connections.configured': 'Skonfigurowano', + 'connections.unavailable': 'Niedostępne', + 'connections.checking': 'Sprawdzanie…', + 'connections.walletConfigured': + 'Lokalne tożsamości EVM, BTC, Solana i Tron są skonfigurowane z Twojej frazy odzyskiwania.', + 'connections.walletReady': + 'Skonfiguruj lokalne tożsamości EVM, BTC, Solana i Tron z jednej frazy odzyskiwania.', + 'connections.walletError': + 'Nie można sprawdzić stanu portfela. Dotknij, aby ponowić z panelu Frazy odzyskiwania.', + 'connections.walletChecking': 'Sprawdzanie stanu portfela...', + 'connections.walletIdentities': 'Tożsamości portfela', + 'connections.walletDerived': + 'Wyprowadzone lokalnie z Twojej frazy odzyskiwania i przechowywane tylko jako bezpieczne metadane.', + 'connections.privacySecurity': 'Prywatność i bezpieczeństwo', + 'connections.privacySecurityDesc': + 'Wszystkie dane i poświadczenia są przechowywane lokalnie z polityką zerowego retencji. Twoje informacje są szyfrowane i nigdy nie są udostępniane stronom trzecim.', + // channels + 'channels.status.connecting': 'Łączenie', + 'channels.status.notConfigured': 'Nieskonfigurowany', + 'channels.noActiveRoute': 'Brak aktywnej trasy', + 'channels.activeRoute': 'Aktywna trasa', + 'channels.loadingDefinitions': 'Wczytywanie definicji kanałów...', + 'channels.channelConnections': 'Połączenia kanałów', + 'channels.configureAuthModes': 'Skonfiguruj tryby uwierzytelniania dla każdego kanału.', + 'channels.configNotAvailable': 'Konfiguracja dla', + 'channels.channel': 'kanał', + // devOptions + 'devOptions.coreModeNotSet': 'Tryb rdzenia: nie ustawiony', + 'devOptions.coreModeNotSetDesc': + 'Wybór trybu uruchamiania nie został jeszcze potwierdzony. Użyj „Przełącz tryb”, aby wybrać Lokalny lub Chmurowy.', + 'devOptions.local': 'Lokalny', + 'devOptions.embeddedCoreSidecar': 'Wbudowany sidecar rdzenia', + 'devOptions.sidecarSpawned': 'Uruchamiany w procesie powłoki Tauri przy starcie aplikacji.', + 'devOptions.cloud': 'Chmura', + 'devOptions.remoteCoreRpc': 'Zdalne RPC rdzenia', + 'devOptions.token': 'Token', + 'devOptions.tokenNotSet': 'nie ustawiony — RPC zwróci 401', + 'devOptions.triggerSentryTest': 'Wyzwól test Sentry (staging)', + 'devOptions.triggerSentryTestDesc': + 'Wysyła oznaczony błąd, aby zweryfikować potok Sentry. Issue #1072 — usuń po weryfikacji.', + 'devOptions.sendTestEvent': 'Wyślij zdarzenie testowe', + 'devOptions.sending': 'Wysyłanie…', + 'devOptions.eventSent': 'Zdarzenie wysłane', + 'devOptions.failed': 'Niepowodzenie', + 'devOptions.appLogs': 'Dzienniki aplikacji', + 'devOptions.appLogsDesc': + 'Otwórz folder z rotacyjnymi dziennikami dziennymi. Dołącz najnowszy plik podczas zgłaszania błędu.', + 'devOptions.openLogsFolder': 'Otwórz folder dzienników', + // mnemonic + 'mnemonic.phraseSaved': 'Fraza odzyskiwania zapisana', + 'mnemonic.walletReady': 'Wielołańcuchowe tożsamości portfela są gotowe. Powrót do ustawień...', + 'mnemonic.writeDownWords': 'Zapisz te', + 'mnemonic.wordsInOrder': + 'słów w kolejności i przechowuj je w bezpiecznym miejscu. Ta fraza zabezpiecza Twój lokalny klucz szyfrowania oraz tożsamości portfeli EVM, BTC, Solana i Tron.', + 'mnemonic.cannotRecover': + 'Tej frazy nie da się odzyskać, jeśli ją utracisz, i powinna pozostać wyłącznie lokalna na Twoim urządzeniu.', + 'mnemonic.copyToClipboard': 'Skopiuj do schowka', + 'mnemonic.alreadyHavePhrase': 'Mam już frazę odzyskiwania', + 'mnemonic.consentSaved': + 'Zapisałem(am) tę frazę i wyrażam zgodę na jej użycie do konfiguracji lokalnego portfela', + 'mnemonic.enterPhraseToRestore': + 'Wprowadź swoją frazę odzyskiwania poniżej, aby przywrócić lokalne tożsamości portfela, lub wklej pełną frazę w dowolne pole (12 słów dla nowych kopii zapasowych; 24-słowne frazy ze starszych wersji nadal działają).', + 'mnemonic.words': 'Słowa', + 'mnemonic.validPhrase': 'Prawidłowa fraza odzyskiwania', + 'mnemonic.generateNewPhrase': 'Wygeneruj zamiast tego nową frazę odzyskiwania', + 'mnemonic.securingData': 'Zabezpieczanie Twoich danych...', + 'mnemonic.saveRecoveryPhrase': 'Zapisz frazę odzyskiwania', + 'mnemonic.userNotLoaded': 'Użytkownik nie wczytany. Zaloguj się ponownie lub odśwież stronę.', + 'mnemonic.invalidPhrase': 'Nieprawidłowa fraza odzyskiwania. Sprawdź słowa i spróbuj ponownie.', + 'mnemonic.somethingWentWrong': 'Coś poszło nie tak. Spróbuj ponownie.', + // team + 'team.failedToCreate': 'Nie udało się utworzyć zespołu', + 'team.invalidInviteCode': 'Nieprawidłowy lub wygasły kod zaproszenia', + 'team.failedToSwitch': 'Nie udało się przełączyć zespołu', + 'team.failedToLeave': 'Nie udało się opuścić zespołu', + 'team.role.owner': 'Właściciel', + 'team.role.admin': 'Administrator', + 'team.role.billingManager': 'Menedżer rozliczeń', + 'team.role.member': 'Członek', + 'team.active': 'Aktywny', + 'team.personalTeam': 'Zespół osobisty', + 'team.manageTeam': 'Zarządzaj zespołem', + 'team.switching': 'Przełączanie...', + 'team.switch': 'Przełącz', + 'team.leaving': 'Opuszczanie...', + 'team.leave': 'Opuść', + 'team.yourTeams': 'Twoje zespoły', + 'team.createNewTeam': 'Utwórz nowy zespół', + 'team.teamName': 'Nazwa zespołu', + 'team.creating': 'Tworzenie...', + 'team.joinExistingTeam': 'Dołącz do istniejącego zespołu', + 'team.inviteCode': 'Kod zaproszenia', + 'team.joining': 'Dołączanie...', + 'team.join': 'Dołącz', + 'team.leaveTeam': 'Opuść zespół', + 'team.confirmLeave': 'Czy na pewno chcesz opuścić', + 'team.leaveWarning': + 'Stracisz dostęp do zespołu i wszystkich jego zasobów. Aby wrócić, będziesz potrzebować nowego zaproszenia.', + 'team.management': 'Zarządzanie zespołem', + 'team.notFound': 'Nie znaleziono zespołu', + 'team.accessDenied': 'Brak dostępu', + 'team.members': 'Członkowie', + // voice + 'voice.title': 'Dyktowanie głosowe', + 'voice.settings': 'Ustawienia głosu', + 'voice.settingsDesc': 'Przytrzymaj skrót, aby dyktować i wstawiać tekst do aktywnego pola.', + 'voice.hotkey': 'Skrót klawiszowy', + 'voice.activationMode': 'Tryb aktywacji', + 'voice.tapToToggle': 'Dotknij, aby przełączyć', + 'voice.writingStyle': 'Styl pisania', + 'voice.verbatimTranscription': 'Transkrypcja dosłowna', + 'voice.naturalCleanup': 'Naturalne porządkowanie', + 'voice.autoStart': 'Uruchamiaj serwer głosowy automatycznie z rdzeniem', + 'voice.customDictionary': 'Słownik użytkownika', + 'voice.customDictionaryDesc': + 'Dodaj nazwy, terminy techniczne i słowa branżowe, aby poprawić dokładność rozpoznawania.', + 'voice.addWord': 'Dodaj słowo...', + 'voice.sttDisabled': + 'Dyktowanie głosowe jest wyłączone do czasu pobrania i przygotowania lokalnego modelu STT.', + 'voice.openLocalAiModel': 'Otwórz lokalny model AI', + 'voice.serverRestarted': 'Serwer głosowy uruchomiony ponownie z nowymi ustawieniami.', + 'voice.settingsSaved': 'Ustawienia głosu zapisane.', + 'voice.serverStarted': 'Serwer głosowy uruchomiony.', + 'voice.serverStopped': 'Serwer głosowy zatrzymany.', + 'voice.saveVoiceSettings': 'Zapisz ustawienia głosu', + 'voice.startVoiceServer': 'Uruchom serwer głosowy', + 'voice.stopVoiceServer': 'Zatrzymaj serwer głosowy', + 'voice.debugTitle': 'Debug głosu', + // autocomplete + 'autocomplete.title': 'Autouzupełnianie', + 'autocomplete.settings': 'Ustawienia', + 'autocomplete.acceptWithTab': 'Akceptuj Tabem', + 'autocomplete.stylePreset': 'Styl', + 'autocomplete.style.balanced': 'Zrównoważony', + 'autocomplete.style.concise': 'Zwięzły', + 'autocomplete.style.formal': 'Formalny', + 'autocomplete.style.casual': 'Swobodny', + 'autocomplete.style.custom': 'Własny', + 'autocomplete.disabledApps': + 'Wyłączone aplikacje (jeden identyfikator pakietu/aplikacji w wierszu)', + 'autocomplete.saveSettings': 'Zapisz ustawienia', + 'autocomplete.saving': 'Zapisywanie…', + 'autocomplete.runtime': 'Środowisko', + 'autocomplete.running': 'Działa', + 'autocomplete.start': 'Uruchom', + 'autocomplete.stop': 'Zatrzymaj', + 'autocomplete.settingsSaved': 'Ustawienia autouzupełniania zapisane.', + 'autocomplete.started': 'Autouzupełnianie uruchomione.', + 'autocomplete.didNotStart': 'Autouzupełnianie nie wystartowało. Sprawdź, czy jest włączone.', + 'autocomplete.stopped': 'Autouzupełnianie zatrzymane.', + 'autocomplete.advancedSettings': 'Ustawienia zaawansowane', + 'autocomplete.debugTitle': 'Debug autouzupełniania', + // chat (extras) + 'chat.agentChat': 'Czat z agentem', + 'chat.overrides': 'Nadpisania', + 'chat.model': 'Model', + 'chat.temperature': 'Temperatura', + 'chat.conversation': 'Rozmowa', + 'chat.startAgentConversation': 'Rozpocznij rozmowę z agentem.', + 'chat.you': 'Ty', + 'chat.agent': 'Agent', + 'chat.askAgent': 'Zapytaj agenta o cokolwiek...', + 'chat.sendMessage': 'Wyślij wiadomość', + // composio + 'composio.triageTitle': 'Wyzwalacze integracji', + 'composio.triageDesc': + 'Gdy włączone, każdy przychodzący wyzwalacz Composio przechodzi przez krok klasyfikacji AI — jedna tura lokalnego LLM na wyzwalacz. Wyłącz globalnie lub dla wybranych integracji, jeśli wolisz ręczny przegląd. Jeśli zmienna środowiskowa', + 'composio.disableAllTriage': 'Wyłącz klasyfikację AI dla wszystkich wyzwalaczy', + 'composio.triggersStillRecorded': + 'Wyzwalacze są nadal zapisywane do historii — żadna tura LLM nie jest uruchamiana.', + 'composio.disableSpecificIntegrations': 'Wyłącz klasyfikację AI dla konkretnych integracji', + 'composio.settingsSaved': 'Ustawienia zapisane', + 'composio.saveFailed': 'Nie udało się zapisać. Spróbuj ponownie.', + // cron + 'cron.title': 'Zadania cron', + 'cron.scheduledJobs': 'Zaplanowane zadania', + 'cron.manageCronJobs': 'Zarządzaj zadaniami cron z poziomu harmonogramu rdzenia.', + 'cron.refreshCronJobs': 'Odśwież zadania cron', + // localModel + 'localModel.modelStatus': 'Stan modelu', + 'localModel.downloadModels': 'Pobierz modele', + 'localModel.usage': 'Użycie', + 'localModel.usageDesc': + 'Wybierz, które podsystemy korzystają z modelu lokalnego. Wszystko wyłączone używa chmury.', + 'localModel.enableRuntime': 'Włącz lokalne środowisko AI', + 'localModel.enableRuntimeDesc': + 'Główny przełącznik. Domyślnie wyłączony — Ollama pozostaje bezczynna. Gdy włączony, podsumowywanie drzewa, inteligencja ekranu i autouzupełnianie zawsze korzystają z modelu lokalnego.', + 'localModel.advancedSettings': 'Ustawienia zaawansowane', + 'localModel.debugTitle': 'Debug modelu lokalnego', + 'localModel.ollamaServer.helperText': 'Przykład: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'Adres URL serwera Ollama', + 'localModel.ollamaServer.modelCount': 'modele', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'Dostępny', + 'localModel.ollamaServer.resetButton': 'Przywróć domyślne', + 'localModel.ollamaServer.saveButton': 'Zapisz', + 'localModel.ollamaServer.testButton': 'Testuj połączenie', + 'localModel.ollamaServer.unreachable': 'Niedostępny', + 'localModel.ollamaServer.validationError': 'Musi być poprawnym adresem http:// lub https://', + // debug titles + 'screenAwareness.debugTitle': 'Debug świadomości ekranu', + 'memory.debugTitle': 'Debug pamięci', + 'webhooks.debugTitle': 'Debug webhooków', + 'notifications.routingTitle': 'Trasowanie powiadomień', + // common (extras) + 'common.reload': 'Odśwież', + 'common.skip': 'Pomiń', + 'common.disable': 'Wyłącz', + 'common.enable': 'Włącz', + // chat (more) + 'chat.safetyTimeout': + 'Brak odpowiedzi agenta po 2 minutach. Spróbuj ponownie lub sprawdź połączenie.', + 'chat.filter.all': 'Wszystkie', + 'chat.filter.work': 'Praca', + 'chat.filter.briefing': 'Briefing', + 'chat.filter.notification': 'Powiadomienia', + 'chat.filter.workers': 'Workery', + 'chat.selectThread': 'Wybierz wątek', + 'chat.threads': 'Wątki', + 'chat.noThreads': 'Brak wątków', + 'chat.noLabelThreads': 'Brak wątków „{label}”', + 'chat.noWorkerThreads': 'Brak wątków workerów', + 'chat.deleteThread': 'Usuń wątek', + 'chat.deleteThreadConfirm': 'Czy na pewno chcesz usunąć „{title}”?', + 'chat.untitledThread': 'Wątek bez tytułu', + 'chat.editThreadTitle': 'Edytuj tytuł wątku', + 'chat.hideSidebar': 'Ukryj panel boczny', + 'chat.showSidebar': 'Pokaż panel boczny', + 'chat.newThreadShortcut': 'Nowy wątek (/new)', + 'chat.new': 'Nowy', + 'chat.failedToLoadMessages': 'Nie udało się wczytać wiadomości', + 'chat.thinkingIteration': 'Myślę... ({n})', + 'chat.thinkingDots': 'Myślę...', + 'chat.approachingLimit': 'Zbliżasz się do limitu', + 'chat.approachingLimitMsg': 'Wykorzystano {pct}% dostępnego limitu.', + 'chat.upgrade': 'Podnieś plan', + 'chat.weeklyLimitHit': 'Wykorzystano przewidziany budżet cyklu.', + 'chat.resets': 'Reset', + 'chat.topUpToContinue': 'Doładuj, aby kontynuować.', + 'chat.budgetComplete': 'Twój budżet jest wyczerpany. Doładuj kredyty lub zmień plan.', + 'chat.topUp': 'Doładuj', + 'chat.cycle': 'Cykl', + 'chat.cycleSpent': 'Wydane w tym cyklu', + 'chat.cycleRemaining': 'Pozostało', + 'chat.left': 'pozostało', + 'chat.setup': 'Skonfiguruj', + 'chat.switchToText': 'Przełącz na tekst', + 'chat.transcribing': 'Transkrypcja...', + 'chat.stopAndSend': 'Zatrzymaj i wyślij', + 'chat.startTalking': 'Zacznij mówić', + 'chat.playingVoiceReply': 'Odtwarzanie odpowiedzi głosowej', + 'chat.voiceHint': 'Użyj mikrofonu, aby mówić', + 'chat.micUnavailable': 'Mikrofon niedostępny', + 'chat.turn': 'tura', + 'chat.turns': 'tury', + 'chat.openWorkerThread': 'Otwórz wątek workera', + // memory + 'memory.searchAria': 'Szukaj w pamięci', + 'memory.searchPlaceholder': 'Szukaj wpisów pamięci...', + 'memory.sourceFilter.all': 'Wszystkie źródła', + 'memory.sourceFilter.email': 'E-mail', + 'memory.sourceFilter.calendar': 'Kalendarz', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'Wniosek AI', + 'memory.sourceFilter.system': 'System', + 'memory.sourceFilter.trading': 'Handel', + 'memory.sourceFilter.security': 'Bezpieczeństwo', + 'memory.ingestionActivity': 'Aktywność pobierania', + 'memory.events': 'zdarzenia', + 'memory.event': 'zdarzenie', + 'memory.overTheLast': 'w ciągu ostatnich', + 'memory.months': 'miesięcy', + 'memory.peak': 'Szczyt', + 'memory.perDay': '/dzień', + 'memory.less': 'Mniej', + 'memory.more': 'Więcej', + 'memory.on': 'w', + 'memory.loading': 'Wczytywanie pamięci', + 'memory.fetching': 'Pobieranie wpisów pamięci...', + 'memory.analyzing': 'Analiza pamięci', + 'memory.analyzingHint': 'Przetwarzanie wspomnień w celu wydobycia wniosków...', + 'memory.noMatches': 'Brak dopasowań', + 'memory.noMatchesHint': 'Spróbuj zmienić wyszukiwane słowa lub filtry.', + 'memory.allCaughtUp': 'Wszystko nadrobione', + 'memory.allCaughtUpHint': 'Brak nowych wpisów do przetworzenia.', + 'memory.noAnalysis': 'Brak analizy', + 'memory.noAnalysisHint': 'Uruchom analizę, aby odkryć wzorce w swoich wspomnieniach.', + 'memory.emptyHint': 'Zacznij używać aplikacji, aby utworzyć pierwsze wspomnienia.', + // mic + 'mic.unavailable': 'Mikrofon niedostępny', + 'mic.permissionDenied': 'Odmowa dostępu do mikrofonu', + 'mic.failedToStartRecorder': 'Nie udało się uruchomić rejestratora', + 'mic.transcribing': 'Transkrypcja...', + 'mic.tapToSend': 'Dotknij, aby wysłać', + 'mic.waitingForAgent': 'Czekam na agenta...', + 'mic.tapAndSpeak': 'Dotknij i mów', + 'mic.stopRecording': 'Zatrzymaj nagrywanie i wyślij', + 'mic.startRecording': 'Rozpocznij nagrywanie', + 'mic.deviceSelector': 'Urządzenie mikrofonowe', + // token + 'token.usageLimitReached': 'Osiągnięto limit użycia', + 'token.approachingLimit': 'Zbliżasz się do limitu', + 'token.planClickForDetails': 'plan — kliknij, aby zobaczyć szczegóły', + 'token.sessionTokens': 'Wej: {in} | Wyj: {out} | Tury: {turns}', + 'token.limit': 'Limit osiągnięty', + // catalog + 'catalog.noCapabilityBinding': 'Brak powiązanej możliwości', + 'catalog.downloadFailed': 'Pobieranie nie powiodło się', + 'catalog.active': 'Aktywny', + 'catalog.installed': 'Zainstalowany', + 'catalog.notDownloaded': 'Nie pobrany', + 'catalog.inUse': 'W użyciu', + 'catalog.use': 'Użyj', + 'catalog.deleteModel': 'Usuń model', + 'catalog.download': 'Pobierz', + // navigator + 'navigator.recent': 'Ostatnie', + 'navigator.today': 'Dziś', + 'navigator.thisWeek': 'Ten tydzień', + 'navigator.sources': 'Źródła', + 'navigator.email': 'E-mail', + 'navigator.slack': 'Slack', + 'navigator.chat': 'Czat', + 'navigator.documents': 'Dokumenty', + 'navigator.people': 'Ludzie', + 'navigator.topics': 'Tematy', + // dreams + 'dreams.description': + 'Sny to refleksje generowane przez AI, syntetyzujące wzorce z Twoich wspomnień.', + 'dreams.comingSoon': 'Wkrótce', + // assignment + 'assignment.memoryLlm': 'LLM pamięci', + 'assignment.memoryLlmAria': 'Wybór LLM pamięci', + 'assignment.embedder': 'Embedder', + 'assignment.loaded': 'Wczytano', + 'assignment.notDownloaded': 'Nie pobrano', + 'assignment.usedForExtractSummarise': 'Używany do ekstrakcji i podsumowywania', + // insights + 'insights.knownFacts': 'Znane fakty', + 'insights.preferences': 'Preferencje', + 'insights.relationships': 'Relacje', + 'insights.skills': 'Umiejętności', + 'insights.opinions': 'Opinie', + // devOptions menu (#2225) + 'devOptions.menuAi': 'Konfiguracja AI', + 'devOptions.menuAiDesc': 'Dostawcy chmurowi, lokalne modele Ollama i trasowanie per workload', + 'devOptions.menuScreenAware': 'Świadomość ekranu', + 'devOptions.menuScreenAwareDesc': + 'Uprawnienia do przechwytywania ekranu, polityka monitorowania i kontrola sesji', + 'devOptions.menuMessaging': 'Kanały komunikacji', + 'devOptions.menuMessagingDesc': + 'Konfiguruj tryby uwierzytelniania Telegram/Discord i domyślne trasowanie', + 'devOptions.menuTools': 'Narzędzia', + 'devOptions.menuToolsDesc': + 'Włącz lub wyłącz możliwości, z których OpenHuman może korzystać w Twoim imieniu', + 'devOptions.menuAgentChat': 'Czat z agentem', + 'devOptions.menuAgentChatDesc': 'Testuj rozmowę z agentem z nadpisaniem modelu i temperatury', + 'devOptions.menuCronJobs': 'Zadania cron', + 'devOptions.menuCronJobsDesc': + 'Przeglądaj i konfiguruj zaplanowane zadania dla umiejętności runtime', + 'devOptions.menuLocalModelDebug': 'Debug modelu lokalnego', + 'devOptions.menuLocalModelDebugDesc': + 'Konfiguracja Ollama, pobieranie zasobów, testy modeli i diagnostyka', + 'devOptions.menuWebhooksDebug': 'Webhooks', + 'devOptions.menuWebhooksDebugDesc': + 'Sprawdź rejestracje webhooków w runtime i logi przechwyconych żądań', + 'devOptions.menuIntelligence': 'Inteligencja', + 'devOptions.menuIntelligenceDesc': 'Przestrzeń pamięci, silnik podświadomości, sny i ustawienia', + 'devOptions.menuNotificationRouting': 'Trasowanie powiadomień', + 'devOptions.menuNotificationRoutingDesc': + 'Punktacja ważności AI i eskalacja przez orkiestrator dla alertów integracji', + 'devOptions.menuComposeIOTriggers': 'Wyzwalacze ComposeIO', + 'devOptions.menuComposeIOTriggersDesc': 'Przeglądaj historię i archiwum wyzwalaczy ComposeIO', + 'devOptions.menuComposioRouting': 'Trasowanie Composio (tryb bezpośredni)', + 'devOptions.menuComposioRoutingDesc': + 'Użyj własnego klucza API Composio i kieruj wywołania bezpośrednio do backend.composio.dev', + 'devOptions.menuComposioTriggers': 'Wyzwalacze integracji', + 'devOptions.menuComposioTriggersDesc': + 'Konfiguruj ustawienia klasyfikacji AI dla wyzwalaczy integracji Composio', +}; + +export default pl2; diff --git a/app/src/lib/i18n/chunks/pl-3.ts b/app/src/lib/i18n/chunks/pl-3.ts new file mode 100644 index 000000000..594c04a69 --- /dev/null +++ b/app/src/lib/i18n/chunks/pl-3.ts @@ -0,0 +1,493 @@ +import type { TranslationMap } from '../types'; +import en3 from './en-3'; + +// Polish chunk 3/5. Spreads the English source-of-truth chunk so every key is +// present (i18n parity gate); Polish values below override EN where translated. +const pl3: TranslationMap = { + ...en3, + // insights + 'insights.other': 'Inne', + 'insights.title': 'Wnioski', + 'insights.empty': 'Brak wniosków. Wnioski są generowane wraz ze wzrostem pamięci.', + 'insights.description': 'Na podstawie {count} relacji w Twoim grafie pamięci.', + 'insights.items': 'elementów', + 'insights.more': 'więcej', + // calls + 'calls.joiningCall': 'Dołączanie do rozmowy', + 'calls.meetWindowOpening': 'Otwieranie okna Meet...', + 'calls.failedToStart': 'Nie udało się uruchomić rozmowy Meet', + 'calls.couldNotStart': 'Nie można rozpocząć rozmowy', + 'calls.failedToClose': 'Nie udało się zakończyć rozmowy', + 'calls.couldNotClose': 'Nie można zamknąć rozmowy', + 'calls.joinMeet': 'Dołącz do rozmowy Google Meet', + 'calls.joinMeetDescription': 'Wprowadź link Google Meet, aby dołączyć.', + 'calls.meetLink': 'Link Meet', + 'calls.displayName': 'Wyświetlana nazwa', + 'calls.openingMeet': 'Otwieranie Meet...', + 'calls.joinCall': 'Dołącz do rozmowy', + 'calls.activeCalls': 'Aktywne rozmowy', + 'calls.leave': 'Opuść', + // workspace + 'workspace.wipeConfirm': + 'Czy na pewno chcesz wyczyścić całą pamięć? Tej operacji nie można cofnąć.', + 'workspace.resetTreeConfirm': 'Czy na pewno chcesz przebudować drzewo pamięci?', + 'workspace.wipeTitle': 'Wyczyść pamięć', + 'workspace.resetting': 'Resetowanie...', + 'workspace.resetMemory': 'Zresetuj pamięć', + 'workspace.resetTreeTitle': 'Przebuduj drzewo pamięci', + 'workspace.rebuilding': 'Przebudowa...', + 'workspace.resetMemoryTree': 'Zresetuj drzewo pamięci', + 'workspace.building': 'Budowanie...', + 'workspace.buildSummaryTrees': 'Zbuduj drzewa podsumowań', + 'workspace.viewVault': 'Pokaż sejf', + 'workspace.openingVaultTitle': 'Otwieranie sejfu w Obsidianie', + 'workspace.openingVaultMessage': + 'Jeśli Obsidian się nie otworzy, zainstaluj go z obsidian.md lub użyj „Pokaż folder”. Ścieżka sejfu:', + 'workspace.openVaultFailedTitle': 'Nie udało się otworzyć sejfu w Obsidianie', + 'workspace.openVaultFailedMessage': + 'Użyj „Pokaż folder”, aby otworzyć katalog sejfu bezpośrednio. Ścieżka sejfu:', + 'workspace.revealVaultFailed': 'Nie udało się pokazać folderu sejfu', + 'workspace.revealFolder': 'Pokaż folder', + 'workspace.checkingVault': 'Sprawdzanie…', + 'workspace.vaultNotRegisteredHelp': + 'Obsidian otwiera tylko foldery dodane jako sejf. W Obsidianie wybierz „Otwórz folder jako sejf” i wskaż folder poniżej — wystarczy to zrobić raz. Następnie ponownie kliknij Pokaż sejf.', + 'workspace.obsidianNotFoundHelp': + 'Nie znaleziono Obsidiana na tym urządzeniu. Zainstaluj go lub — jeśli jest zainstalowany w niestandardowym miejscu — ustaw jego folder konfiguracyjny w sekcji Zaawansowane.', + 'workspace.openAnyway': 'Otwórz w Obsidianie mimo to', + 'workspace.installObsidian': 'Zainstaluj Obsidiana', + 'workspace.obsidianAdvanced': 'Obsidian zainstalowany gdzie indziej?', + 'workspace.obsidianConfigDirLabel': 'Folder konfiguracji Obsidiana', + 'workspace.obsidianConfigDirHint': + 'Ścieżka do folderu zawierającego obsidian.json (np. ~/.config/obsidian). Zostaw puste, aby wykryć automatycznie.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'Nie udało się wczytać grafu pamięci', + 'workspace.loadingGraph': 'Wczytywanie grafu pamięci...', + 'workspace.graphViewMode': 'Tryb widoku grafu pamięci', + 'workspace.trees': 'Drzewa', + 'workspace.contacts': 'Kontakty', + // graph + 'graph.noContactMentions': 'Brak wzmianek o kontakcie', + 'graph.noMemory': 'Brak pamięci', + 'graph.source': 'Źródło', + 'graph.topic': 'Temat', + 'graph.global': 'Globalne', + 'graph.document': 'Dokument', + 'graph.contact': 'Kontakt', + 'graph.nodes': 'węzły', + 'graph.parentChild': 'rodzic-dziecko', + 'graph.documentContact': 'dokument-kontakt', + 'graph.link': 'powiązanie', + 'graph.links': 'powiązania', + 'graph.children': 'dzieci', + 'graph.clickToOpenObsidian': 'Kliknij, aby otworzyć w Obsidianie', + 'graph.person': 'Osoba', + // modal + 'modal.dontShowAgain': 'Nie pokazuj podobnych sugestii', + // reflections + 'reflections.loading': 'Wczytywanie refleksji...', + 'reflections.empty': 'Brak refleksji', + 'reflections.title': 'Refleksje', + 'reflections.proposedAction': 'Proponowane działanie', + 'reflections.act': 'Wykonaj', + 'reflections.dismiss': 'Odrzuć', + // whatsapp + 'whatsapp.chatsSynced': 'rozmów zsynchronizowano', + 'whatsapp.chatSynced': 'rozmowa zsynchronizowana', + // sync + 'sync.active': 'Aktywna', + 'sync.recent': 'Ostatnia', + 'sync.idle': 'Bezczynna', + 'sync.memorySources': 'Źródła pamięci', + 'sync.noConnectedSources': 'Brak połączonych źródeł', + 'sync.chunks': 'fragmentów', + 'sync.lastChunk': 'Ostatni fragment:', + 'sync.pending': 'oczekujące', + 'sync.processed': 'przetworzone', + 'sync.syncing': 'Synchronizacja…', + 'sync.sync': 'Synchronizuj', + 'sync.failedToLoad': 'Nie udało się wczytać stanu synchronizacji', + 'sync.noContent': + 'Żadna treść nie została jeszcze zsynchronizowana do pamięci. Podłącz integrację, aby zacząć.', + // backend + 'backend.aiBackend': 'Backend AI', + 'backend.cloud': 'Chmura', + 'backend.recommended': 'Zalecane', + 'backend.cloudDescription': + 'Szybkie, mocne modele kierowane przez backend OpenHuman. Gotowe do użycia od razu.', + 'backend.privacyNote': + 'Prompty i wybrany kontekst mogą być wysyłane do skonfigurowanego backendu/dostawcy. Użyj trybu lokalnego dla obsługiwanych workloadów na urządzeniu.', + 'backend.local': 'Lokalny', + 'backend.advanced': 'Zaawansowane', + 'backend.localDescription': + 'Uruchom modele na własnej maszynie z Ollamą. Pełna prywatność, wymaga konfiguracji.', + 'backend.ramRecommended': 'Zalecane 16 GB+ RAM', + // subconscious + 'subconscious.tasks': 'zadań', + 'subconscious.ticks': 'tików', + 'subconscious.last': 'Ostatnio', + 'subconscious.failed': 'nieudane', + 'subconscious.tickInterval': 'Interwał tików', + 'subconscious.runNow': 'Uruchom teraz', + 'subconscious.providerUnavailableTitle': 'Podświadomość wstrzymana', + 'subconscious.providerSettings': 'Ustawienia AI', + 'subconscious.approvalNeeded': 'Wymagana zgoda', + 'subconscious.requiresApproval': 'Wymaga zgody', + 'subconscious.fixInConnections': 'Napraw w Połączeniach', + 'subconscious.goAhead': 'Działaj', + 'subconscious.activeTasks': 'Aktywne zadania', + 'subconscious.noActiveTasks': 'Brak aktywnych zadań', + 'subconscious.default': 'Domyślne', + 'subconscious.addTaskPlaceholder': 'Dodaj nowe zadanie...', + 'subconscious.activityLog': 'Dziennik aktywności', + 'subconscious.noActivity': 'Brak aktywności', + 'subconscious.decision.nothingNew': 'Nic nowego', + 'subconscious.decision.completed': 'Ukończone', + 'subconscious.decision.evaluating': 'Ocena', + 'subconscious.decision.waitingApproval': 'Oczekiwanie na zgodę', + 'subconscious.decision.failed': 'Niepowodzenie', + 'subconscious.decision.cancelled': 'Anulowane', + 'subconscious.decision.skipped': 'Pominięte', + // actionable + 'actionable.complete': 'Zakończ', + 'actionable.dismiss': 'Odrzuć', + 'actionable.snooze': 'Odłóż', + 'actionable.new': 'Nowe', + // stats + 'stats.storage': 'Pamięć', + 'stats.files': 'plików', + 'stats.documents': 'Dokumenty', + 'stats.today': 'dziś', + 'stats.namespaces': 'Przestrzenie nazw', + 'stats.relations': 'Relacje', + 'stats.firstMemory': 'Pierwsze wspomnienie', + 'stats.latest': 'Ostatnie', + 'stats.sessions': 'Sesje', + 'stats.tokens': 'tokenów', + // bootCheck + 'bootCheck.invalidUrl': 'Wprowadź adres URL środowiska.', + 'bootCheck.urlMustStartWith': 'Adres musi zaczynać się od http:// lub https://', + 'bootCheck.validUrlRequired': + 'To nie wygląda na prawidłowy adres URL (spróbuj https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'Aby się połączyć, potrzebujemy tokenu uwierzytelniania.', + 'bootCheck.chooseCoreMode': 'Wybierz środowisko', + 'bootCheck.connectToCore': 'Połącz się ze swoim środowiskiem', + 'bootCheck.desktopDescription': + 'OpenHuman potrzebuje środowiska do działania. Wybierz, gdzie ma się znajdować.', + 'bootCheck.webDescription': + 'W przeglądarce OpenHuman łączy się ze środowiskiem, którym zarządzasz. Wpisz jego URL i token poniżej lub pobierz aplikację desktopową, aby uruchomić środowisko bezpośrednio na komputerze.', + 'bootCheck.preferDesktop': 'Wolisz wszystko trzymać na własnym urządzeniu?', + 'bootCheck.downloadDesktop': 'Pobierz aplikację desktopową', + 'bootCheck.localRecommended': 'Uruchom lokalnie (zalecane)', + 'bootCheck.localDescription': + 'Działa bezpośrednio na Twoim komputerze. Najszybsze, w pełni prywatne, bez konfiguracji.', + 'bootCheck.cloudMode': 'Uruchom w chmurze (zaawansowane)', + 'bootCheck.cloudDescription': + 'Połącz się ze środowiskiem hostowanym w innym miejscu. Działa 24×7, więc nie musisz trzymać tego urządzenia włączonego.', + 'bootCheck.coreRpcUrl': 'URL środowiska', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'Token uwierzytelniania', + 'bootCheck.bearerTokenPlaceholder': 'Token bearer ze zdalnego środowiska', + 'bootCheck.storedLocally': 'Przechowywany wyłącznie na tym urządzeniu. Wysyłany jako ', + 'bootCheck.testing': 'Testowanie…', + 'bootCheck.testConnection': 'Testuj połączenie', + 'bootCheck.connectedOk': 'Połączono. Możesz działać.', + 'bootCheck.authFailed': 'Ten token nie zadziałał. Sprawdź go i spróbuj ponownie.', + 'bootCheck.unreachablePrefix': 'Nie udało się połączyć:', + 'bootCheck.checkingCore': 'Budzenie środowiska…', + 'bootCheck.cannotReach': 'Nie można połączyć się ze środowiskiem', + 'bootCheck.cannotReachDesc': 'Nie udało się połączyć z Twoim środowiskiem. Spróbować innego?', + 'bootCheck.switchMode': 'Wybierz inne środowisko', + 'bootCheck.quit': 'Zakończ', + 'bootCheck.legacyDetected': 'Wykryto starsze środowisko w tle', + 'bootCheck.legacyDescription': + 'Osobno zainstalowany daemon OpenHuman już działa na tym urządzeniu. Musimy go usunąć, zanim wbudowane środowisko przejmie kontrolę.', + 'bootCheck.removing': 'Usuwanie…', + 'bootCheck.removeContinue': 'Usuń i kontynuuj', + 'bootCheck.localNeedsRestart': 'Lokalne środowisko wymaga restartu', + 'bootCheck.localNeedsRestartDesc': + 'Twoje lokalne środowisko jest w innej wersji niż ta aplikacja. Szybki restart przywróci zgodność.', + 'bootCheck.restarting': 'Restartowanie…', + 'bootCheck.restartCore': 'Zrestartuj środowisko', + 'bootCheck.cloudNeedsUpdate': 'Środowisko chmurowe wymaga aktualizacji', + 'bootCheck.cloudNeedsUpdateDesc': + 'Twoje środowisko chmurowe jest w innej wersji niż ta aplikacja. Uruchom aktualizację, aby przywrócić zgodność.', + 'bootCheck.updating': 'Aktualizowanie…', + 'bootCheck.updateCloudCore': 'Zaktualizuj środowisko chmurowe', + 'bootCheck.versionCheckFailed': 'Sprawdzenie wersji środowiska nie powiodło się', + 'bootCheck.versionCheckFailedDesc': + 'Środowisko działa, ale nie raportuje wersji. Może być nieaktualne. Zrestartuj lub zaktualizuj, aby kontynuować.', + 'bootCheck.working': 'Pracuję…', + 'bootCheck.restartUpdateCore': 'Zrestartuj / zaktualizuj środowisko', + 'bootCheck.unexpectedError': 'Nieoczekiwany błąd sprawdzania uruchamiania', + 'bootCheck.actionFailed': 'Coś poszło nie tak. Spróbuj ponownie.', + 'bootCheck.portConflictTitle': 'Nie udało się uruchomić silnika aplikacji', + 'bootCheck.portConflictBody': + 'Inny proces używa portu sieciowego potrzebnego OpenHumanowi. Spróbujemy to naprawić automatycznie.', + 'bootCheck.portConflictFixButton': 'Napraw automatycznie', + 'bootCheck.portConflictFixing': 'Naprawianie…', + 'bootCheck.portConflictFixFailed': + 'Automatyczna naprawa się nie powiodła. Zrestartuj komputer i spróbuj ponownie.', + // notifications + 'notifications.justNow': 'przed chwilą', + 'notifications.minAgo': '{n} min temu', + 'notifications.hrAgo': '{n} godz. temu', + 'notifications.dayAgo': '{n} dni temu', + 'notifications.category.messages': 'Wiadomości', + 'notifications.category.agents': 'Agenci', + 'notifications.category.skills': 'Umiejętności', + 'notifications.category.system': 'System', + 'notifications.category.meetings': 'Spotkania', + 'notifications.category.reminders': 'Przypomnienia', + 'notifications.category.important': 'Ważne', + // about.update + 'about.update.status.checking': 'Sprawdzanie...', + 'about.update.status.available': 'Dostępna wersja {version}', + 'about.update.status.availableNoVersion': 'Dostępna aktualizacja', + 'about.update.status.downloading': 'Pobieranie...', + 'about.update.status.readyToInstall': 'Wersja {version} gotowa do instalacji', + 'about.update.status.readyToInstallNoVersion': + 'Nowa wersja została pobrana i jest gotowa. Zrestartuj, aby zastosować.', + 'about.update.status.installing': 'Instalowanie...', + 'about.update.status.restarting': 'Restartowanie...', + 'about.update.status.upToDate': 'Używasz najnowszej wersji.', + 'about.update.status.error': 'Sprawdzenie aktualizacji nie powiodło się', + 'about.update.status.default': 'Sprawdź aktualizacje', + // welcome + 'welcome.connectionFailed': 'Połączenie nie powiodło się: {status} {statusText}', + 'welcome.connectionFailedMsg': 'Połączenie nie powiodło się: {message}', + 'welcome.continueLocally': 'Kontynuuj lokalnie', + 'welcome.continueLocallyExperimental': 'Kontynuuj lokalnie (eksperymentalnie)', + 'welcome.localSessionStarting': 'Rozpoczynanie sesji lokalnej...', + 'welcome.localSessionDesc': + 'Używa lokalnego profilu offline i pomija logowanie OAuth TinyHumans.', + // chat (extras) + 'chat.agentChatDesc': 'Otwórz bezpośrednią sesję czatu z agentem.', + 'channels.activeRouteValue': '{channel} przez {authMode}', + // privacy + 'privacy.dataKind.messages': 'Wiadomości', + 'privacy.dataKind.agents': 'Agenci', + 'privacy.dataKind.skills': 'Umiejętności', + 'privacy.dataKind.system': 'System', + 'privacy.dataKind.meetings': 'Spotkania', + 'privacy.dataKind.reminders': 'Przypomnienia', + 'privacy.dataKind.important': 'Ważne', + // onboarding + 'onboarding.enableLocalAI': 'Włącz lokalne AI', + 'onboarding.skills.status.available': 'Dostępne', + 'onboarding.skills.status.connected': 'Połączone', + 'onboarding.skills.status.connecting': 'Łączenie', + 'onboarding.skills.status.error': 'Błąd', + 'onboarding.skills.status.unavailable': 'Niedostępne', + // composio + 'composio.statusUnavailable': 'Status niedostępny', + 'composio.envVarOverrides': 'jest ustawiona, nadpisuje to ustawienie.', + // memory.day + 'memory.day.sun': 'nd.', + 'memory.day.mon': 'pn.', + 'memory.day.tue': 'wt.', + 'memory.day.wed': 'śr.', + 'memory.day.thu': 'cz.', + 'memory.day.fri': 'pt.', + 'memory.day.sat': 'sb.', + 'memory.ingesting': 'Pobieranie', + 'memory.ingestionQueued': 'W kolejce', + 'memory.ingestingTitle': 'Pobieranie {title}', + // mic (extras) + 'mic.noAudioCaptured': 'Nie nagrano dźwięku', + 'mic.noSpeechDetected': 'Nie wykryto mowy', + 'mic.failedToStopRecording': 'Nie udało się zatrzymać nagrywania: {message}', + 'mic.transcriptionFailed': 'Transkrypcja nie powiodła się: {message}', + // reflections.kind + 'reflections.kind.retrospective': 'Retrospektywa', + 'reflections.kind.derivedFact': 'Wywiedziony fakt', + 'reflections.kind.moodInsight': 'Wnioski o nastroju', + 'reflections.kind.relationshipInsight': 'Wnioski o relacjach', + // graph.tooltip + 'graph.tooltip.summary': 'Podsumowanie', + 'graph.tooltip.contact': 'Kontakt', + // localModel.usage + 'localModel.usage.never': 'Nigdy', + 'localModel.usage.mediumLoad': 'Średnie obciążenie', + 'localModel.usage.lowLoad': 'Niskie obciążenie', + 'localModel.usage.idleMode': 'Tryb bezczynności', + 'localModel.rebootstrapComplete': 'Ponowna inicjalizacja modelu zakończona.', + 'localModel.modelsVerified': 'Modele lokalne zweryfikowane.', + // accounts + 'accounts.addModal.allConnected': 'Wszystkie połączone', + 'accounts.addModal.title': 'Dodaj konto', + 'accounts.respondQueue.empty': 'Pusto', + 'accounts.respondQueue.hide': 'Ukryj kolejkę odpowiedzi', + 'accounts.respondQueue.loadFailed': 'Nie udało się wczytać kolejki odpowiedzi', + 'accounts.respondQueue.loading': 'Wczytywanie kolejki…', + 'accounts.respondQueue.pending': 'Oczekujące', + 'accounts.respondQueue.show': 'Pokaż kolejkę odpowiedzi', + 'accounts.respondQueue.title': 'Kolejka odpowiedzi', + 'accounts.webviewHost.almostReady': 'Już prawie gotowe...', + 'accounts.webviewHost.loadTimeout': 'Limit czasu wczytywania webview', + 'accounts.webviewHost.loading': 'Wczytywanie {providerName}...', + 'accounts.webviewHost.loadingAccount': 'Wczytywanie konta', + 'accounts.webviewHost.restoringSession': 'Przywracanie sesji...', + 'accounts.webviewHost.retryLoading': 'Ponów wczytywanie', + 'accounts.webviewHost.takingLonger': '{providerName} trwa dłużej niż oczekiwano.', + 'accounts.webviewHost.timeoutHint': 'Wskazówka dot. limitu czasu', + // app + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'Wiadomości', + 'app.connectionIndicator.connected': 'Połączono z OpenHuman AI 🚀', + 'app.connectionIndicator.connecting': 'Łączenie', + 'app.connectionIndicator.coreOffline': 'Rdzeń offline', + 'app.connectionIndicator.disconnected': 'Rozłączono', + 'app.connectionIndicator.offline': 'Offline', + 'app.connectionIndicator.reconnecting': 'Ponowne łączenie…', + 'app.errorFallback.componentStack': 'Stos komponentów', + 'app.errorFallback.downloadLatest': 'Pobierz najnowszą wersję', + 'app.errorFallback.heading': 'Coś poszło nie tak', + 'app.errorFallback.hint': 'Wskazówka', + 'app.errorFallback.reloadApp': 'Przeładuj aplikację', + 'app.errorFallback.subheading': 'Spróbuj przeładować lub pobrać najnowszą wersję.', + 'app.errorFallback.tryRecover': 'Spróbuj odzyskać', + 'app.localAiDownload.installing': 'Instalowanie...', + 'app.localAiDownload.preparing': 'Przygotowanie...', + // app.openhumanLink + 'app.openhumanLink.accounts.continueWith': 'Kontynuuj z logowaniem {label}', + 'app.openhumanLink.accounts.done': 'Gotowe', + 'app.openhumanLink.accounts.intro': 'Podłącz konta, których używasz na co dzień.', + 'app.openhumanLink.accounts.webviewNote': 'Każde konto otwiera się we własnym oknie webview.', + 'app.openhumanLink.billing.openDashboard': 'Otwórz panel', + 'app.openhumanLink.billing.stayOnTrial': 'Zostań w wersji próbnej', + 'app.openhumanLink.billing.trialCredit': 'Kredyt próbny', + 'app.openhumanLink.billing.trialDesc': + 'Korzystasz z bezpłatnego okresu próbnego. Doładuj, aby kontynuować.', + 'app.openhumanLink.defaultBody': + 'Jeszcze nie gotowe w popupie. Otwórz pełną stronę ustawień, gdy będziesz potrzebować.', + 'app.openhumanLink.discord.intro': + 'Dołącz do społeczności, dziel się opiniami i bądź na bieżąco.', + 'app.openhumanLink.discord.openInvite': 'Otwórz zaproszenie', + 'app.openhumanLink.discord.perk1': 'Pomoc bezpośrednio od twórców', + 'app.openhumanLink.discord.perk2': 'Wczesny dostęp do nowych funkcji', + 'app.openhumanLink.discord.perk3': 'Wymiana skryptów i przepisów', + 'app.openhumanLink.discord.perk4': 'Możliwość wpływu na priorytety', + 'app.openhumanLink.done': 'Gotowe', + 'app.openhumanLink.loadingChannelSetup': 'Wczytywanie konfiguracji kanału', + 'app.openhumanLink.maybeLater': 'Może później', + 'app.openhumanLink.notifications.asking': 'Pytanie systemu operacyjnego…', + 'app.openhumanLink.notifications.blocked': 'Zablokowane', + 'app.openhumanLink.notifications.blockedStep1': 'Otwórz Ustawienia systemowe → Powiadomienia.', + 'app.openhumanLink.notifications.blockedStep2': 'Znajdź OpenHuman na liście aplikacji.', + 'app.openhumanLink.notifications.blockedStep3': 'Włącz „Zezwalaj na powiadomienia” i wróć tutaj.', + 'app.openhumanLink.notifications.intro': + 'Włącz powiadomienia, aby otrzymywać alerty od agenta i kanałów.', + 'app.openhumanLink.notifications.promptHint': 'Twój system zapyta o zgodę za chwilę.', + 'app.openhumanLink.notifications.retry': 'Ponów powiadomienie testowe', + 'app.openhumanLink.notifications.send': 'Wyślij powiadomienie testowe', + 'app.openhumanLink.notifications.sendFailed': 'Nie udało się wysłać: {error}', + 'app.openhumanLink.notifications.sent': + 'Wysłano powiadomienie testowe. Jeśli go nie otrzymałeś(aś), przejdź do Ustawienia systemowe → Powiadomienia → OpenHuman, włącz „Zezwalaj na powiadomienia” i ustaw styl banera na „Trwały”.', + 'app.openhumanLink.skipForNow': 'Pomiń na razie', + 'app.openhumanLink.telegramUnavailable': 'Telegram niedostępny', + 'app.openhumanLink.title.accounts': 'Podłącz swoje aplikacje', + 'app.openhumanLink.title.billing': 'Rozliczenia i kredyty', + 'app.openhumanLink.title.discord': 'Dołącz do społeczności', + 'app.openhumanLink.title.messaging': 'Podłącz kanał komunikacji', + 'app.openhumanLink.title.notifications': 'Zezwól na powiadomienia', + // app.persistRehydration + 'app.persistRehydration.body': + 'Trwa odzyskiwanie stanu. Jeśli widzisz ten ekran zbyt długo, zresetuj aplikację.', + 'app.persistRehydration.heading': 'Przywracanie sesji', + 'app.persistRehydration.resetCta': 'Resetowanie…', + 'app.persistRehydration.resetting': 'Resetowanie…', + // app.routeLoading + 'app.routeLoading.initializing': 'Inicjalizacja OpenHuman...', + // app.update + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': 'Coś poszło nie tak podczas aktualizacji.', + 'app.update.header.default': 'Aktualizacja', + 'app.update.header.error': 'Aktualizacja nie powiodła się', + 'app.update.header.installing': 'Instalowanie aktualizacji', + 'app.update.header.readyToInstall': 'Aktualizacja gotowa do instalacji', + 'app.update.header.restarting': 'Restartowanie…', + 'app.update.later': 'Później', + 'app.update.newVersionReady': 'Nowa wersja jest gotowa do instalacji.', + 'app.update.progress.downloaded': 'pobrano {amount}', + 'app.update.progress.installing': 'Instalowanie nowej wersji…', + 'app.update.progress.restarting': 'Uruchamianie aplikacji ponownie…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'Restart zamknie wszystkie aktywne sesje czatu i wątki.', + 'app.update.restartNow': 'Zrestartuj teraz', + 'app.update.versionReady': 'Wersja {newVersion} jest gotowa do instalacji.', + // channels.discord + 'channels.discord.accountLinked': 'Konto powiązane', + 'channels.discord.connect': 'Połącz', + 'channels.discord.linkTokenExpired': 'Token powiązania wygasł. Spróbuj ponownie.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'Etykieta tokenu powiązania', + 'channels.discord.linkTokenOnce': 'Token jednorazowego powiązania', + 'channels.discord.picker.allPermissionsOk': 'Bot ma wszystkie wymagane uprawnienia w tym kanale.', + 'channels.discord.picker.botNotInServers': 'Bot nie jest na serwerach', + 'channels.discord.picker.category': 'Kategoria', + 'channels.discord.picker.channel': 'Kanał', + 'channels.discord.picker.checkingPermissions': 'Sprawdzanie uprawnień', + 'channels.discord.picker.loadingChannels': 'Wczytywanie kanałów...', + 'channels.discord.picker.loadingServers': 'Wczytywanie serwerów...', + 'channels.discord.picker.missingPermissions': 'Brakujące uprawnienia', + 'channels.discord.picker.noChannels': 'Nie znaleziono kanałów tekstowych', + 'channels.discord.picker.noServers': 'Nie znaleziono serwerów', + 'channels.discord.picker.selectChannel': 'Wybierz kanał', + 'channels.discord.picker.selectServer': 'Wybierz serwer', + 'channels.discord.picker.server': 'Serwer', + 'channels.discord.picker.serverChannelSelection': 'Wybór serwera i kanału', + 'channels.discord.savedRestartRequired': + 'Kanał zapisany. Zrestartuj aplikację, aby go aktywować.', + // channels.telegram + 'channels.telegram.connect': 'Połącz', + 'channels.telegram.managedDmConnecting': 'Łączenie zarządzanego DM', + 'channels.telegram.managedDmTimeout': 'Limit czasu zarządzanego DM', + 'channels.telegram.reconnect': 'Połącz ponownie', + 'channels.telegram.savedRestartRequired': + 'Kanał zapisany. Zrestartuj aplikację, aby go aktywować.', + 'channels.web.alwaysAvailable': 'Zawsze dostępny', + // chat.approval + 'chat.approval.approve': 'Zatwierdź', + 'chat.approval.deciding': 'Przetwarzanie…', + 'chat.approval.deny': 'Odrzuć', + 'chat.approval.error': 'Nie udało się zapisać decyzji — spróbuj ponownie.', + 'chat.approval.fallback': 'Agent chce wykonać akcję wymagającą Twojej zgody.', + 'chat.approval.title': 'Wymagana zgoda', + 'chat.approval.tool': 'Narzędzie:', + // channel displayNames + descriptions + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Wysyłaj i odbieraj wiadomości przez Discord.', + 'channels.discord.authMode.bot_token.description': 'Podaj własny token bota Discord.', + 'channels.discord.authMode.oauth.description': + 'Zainstaluj bota OpenHuman na swoim serwerze Discord przez OAuth.', + 'channels.discord.authMode.managed_dm.description': + 'Powiąż swoje osobiste konto Discord z botem OpenHuman.', + 'channels.discord.fields.bot_token.label': 'Token bota', + 'channels.discord.fields.bot_token.placeholder': 'Twój token bota Discord', + 'channels.discord.fields.guild_id.label': 'ID serwera (gildii)', + 'channels.discord.fields.guild_id.placeholder': 'Opcjonalne: ogranicz do konkretnego serwera', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Wysyłaj i odbieraj wiadomości przez Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'Pisz bezpośrednio do bota OpenHuman na Telegramie.', + 'channels.telegram.authMode.bot_token.description': + 'Podaj własny token bota Telegram z @BotFather.', + 'channels.telegram.fields.bot_token.label': 'Token bota', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'Dozwoleni użytkownicy', + 'channels.telegram.fields.allowed_users.placeholder': + 'Oddzielone przecinkami nazwy użytkowników Telegrama', + 'channels.web.displayName': 'Sieć', + 'channels.web.description': 'Czatuj przez wbudowany interfejs webowy.', + 'channels.web.authMode.managed_dm.description': + 'Użyj wbudowanego czatu webowego — bez konfiguracji.', + 'channels.yuanbao.connect': 'Połącz', + 'channels.yuanbao.connecting': 'Łączenie…', + 'channels.yuanbao.fieldRequired': '{field} jest wymagane', + 'channels.yuanbao.reconnect': 'Połącz ponownie', + 'channels.yuanbao.savedRestartRequired': + 'Kanał zapisany. Zrestartuj aplikację, aby go aktywować.', + 'channels.yuanbao.unexpectedStatus': 'Nieoczekiwany status połączenia: {status}', +}; + +export default pl3; diff --git a/app/src/lib/i18n/chunks/pl-4.ts b/app/src/lib/i18n/chunks/pl-4.ts new file mode 100644 index 000000000..24b12d608 --- /dev/null +++ b/app/src/lib/i18n/chunks/pl-4.ts @@ -0,0 +1,468 @@ +import type { TranslationMap } from '../types'; +import en4 from './en-4'; + +// Polish chunk 4/5. Spreads the English source-of-truth chunk so every key is +// present (i18n parity gate); Polish values below override EN where translated. +const pl4: TranslationMap = { + ...en4, + // chat.unsubscribeApproval + 'chat.unsubscribeApproval.approve': 'Zatwierdź i wypisz', + 'chat.unsubscribeApproval.approved': '✓ Pomyślnie wypisano.', + 'chat.unsubscribeApproval.denied': '✕ Żądanie odrzucone.', + 'chat.unsubscribeApproval.deny': 'Odrzuć', + 'chat.unsubscribeApproval.processing': 'Przetwarzanie...', + 'chat.unsubscribeApproval.title': 'Żądanie wypisania', + // commandPalette + 'commandPalette.ariaLabel': 'Paleta poleceń', + 'commandPalette.description': 'Opis', + 'commandPalette.label': 'Polecenia', + 'commandPalette.noResults': 'Brak wyników', + 'commandPalette.placeholder': 'Wpisz polecenie lub wyszukaj…', + 'commandPalette.searchAria': 'Szukaj poleceń', + 'commandPalette.shortcutHint': 'Wciśnij ?, aby zobaczyć wszystkie skróty', + 'commandPalette.title': 'Paleta poleceń', + // composio.connect + 'composio.connect.additionalConfigRequired': 'Wymagana dodatkowa konfiguracja', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'Subdomena Atlassian', + 'composio.connect.connect': 'Połącz', + 'composio.connect.connectionFailed': 'Połączenie nie powiodło się (status: {status}).', + 'composio.connect.disconnectFailed': 'Rozłączenie nie powiodło się: {msg}', + 'composio.connect.disconnecting': 'Rozłączanie…', + 'composio.connect.idleDescription': 'Połącz swoje konto', + 'composio.connect.idleDescriptionSuffix': + '. Otworzymy okno przeglądarki, tam zaakceptujesz dostęp, a ta aplikacja wykryje połączenie automatycznie.', + 'composio.connect.isConnected': 'jest połączone.', + 'composio.connect.manage': 'Zarządzaj', + 'composio.connect.needsSubdomain': 'Aby się połączyć', + 'composio.connect.needsSubdomainSuffix': + 'wprowadź swoją subdomenę Atlassian (np. acme dla acme.atlassian.net) i spróbuj ponownie.', + 'composio.connect.oauthComplete': 'Czekam na zakończenie OAuth…', + 'composio.connect.oauthTimeout': 'Przekroczono czas oczekiwania na OAuth', + 'composio.connect.permissions': 'Uprawnienia', + 'composio.connect.permissionsDefault': 'Odczyt + zapis włączone domyślnie', + 'composio.connect.permissionsNote': 'może wystawiać', + 'composio.connect.permissionsNoteSuffix': + 'uprawnienia agenta OpenHuman są kontrolowane poniżej przełącznikami odczytu, zapisu i administracji.', + 'composio.connect.reopenBrowser': 'Otwórz przeglądarkę ponownie', + 'composio.connect.requestingUrl': 'Żądanie URL połączenia…', + 'composio.connect.retryConnection': 'Ponów połączenie', + 'composio.connect.scopeLoadError': 'Nie udało się wczytać preferencji uprawnień: {msg}', + 'composio.connect.scopeSaveError': 'Nie udało się zapisać uprawnienia {key}: {msg}', + 'composio.connect.scope.read': 'Odczyt', + 'composio.connect.scope.readHint': 'Pozwól agentowi odczytywać dane z tego połączenia.', + 'composio.connect.scope.write': 'Zapis', + 'composio.connect.scope.writeHint': + 'Pozwól agentowi tworzyć lub modyfikować dane przez to połączenie.', + 'composio.connect.scope.admin': 'Administracja', + 'composio.connect.scope.adminHint': + 'Pozwól agentowi zarządzać ustawieniami, uprawnieniami lub akcjami destrukcyjnymi.', + 'composio.connect.subdomainInvalid': + 'Wprowadź tylko krótką subdomenę (np. „acme”), nie pełny URL. Powinna zawierać tylko litery, cyfry i myślniki.', + 'composio.connect.subdomainRequired': 'Wprowadź subdomenę Atlassian, aby kontynuować.', + 'composio.connect.dynamicsOrgNameLabel': 'Nazwa organizacji Dynamics 365', + 'composio.connect.dynamicsOrgNameHint': + 'Na przykład „myorg” dla myorg.crm.dynamics.com. Wprowadź tylko krótką nazwę organizacji, nie pełny URL.', + 'composio.connect.needsFieldsPrefix': 'Aby się połączyć', + 'composio.connect.needsFieldsSuffix': + 'potrzebujemy nieco więcej informacji. Uzupełnij brakujące pola poniżej i spróbuj ponownie.', + 'composio.connect.requiredFieldEmpty': 'To pole jest wymagane.', + 'composio.connect.wabaIdHint': + 'Znajdziesz je przez GET /me/businesses, a następnie GET /{business_id}/owned_whatsapp_business_accounts z tokenem dostępu Meta.', + 'composio.connect.wabaIdLabel': 'ID WhatsApp Business Account', + 'composio.connect.wabaIdRequired': + 'Wprowadź swoje ID WhatsApp Business Account (WABA ID), aby kontynuować.', + 'composio.connect.waitingFor': 'Oczekiwanie na', + 'composio.connect.waitingHint': 'Może to potrwać chwilę.', + // composio.triggers + 'composio.triggers.heading': 'Wyzwalacze', + 'composio.triggers.listenFrom': 'Nasłuchuj zdarzeń z', + 'composio.triggers.loadError': 'Nie udało się wczytać wyzwalaczy', + 'composio.triggers.needsConfiguration': 'Wymaga konfiguracji', + 'composio.triggers.noneAvailable': 'Brak dostępnych wyzwalaczy dla', + // conversations + 'conversations.taskKanban.moveLeft': 'Przesuń w lewo', + 'conversations.taskKanban.moveRight': 'Przesuń w prawo', + 'conversations.taskKanban.title': 'Zadania', + 'conversations.toolTimeline.turn': 'tura', + 'conversations.toolTimeline.workerThread': 'wątek workera', + // daemon + 'daemon.serviceBlockingGate.body': + 'Rdzeń OpenHuman nie odpowiada. Spróbuj ponownie lub pobierz najnowszą wersję aplikacji.', + 'daemon.serviceBlockingGate.downloadHint': + 'Jeśli problem się powtarza, pobierz najnowszą wersję.', + 'daemon.serviceBlockingGate.downloadLatest': 'Pobierz najnowszą wersję', + 'daemon.serviceBlockingGate.retryCore': 'Ponów rdzeń', + 'daemon.serviceBlockingGate.retryFailed': + 'Ponowna próba się nie powiodła. Pobierz najnowszą wersję aplikacji i spróbuj ponownie.', + 'daemon.serviceBlockingGate.retrying': 'Ponawianie...', + 'daemon.serviceBlockingGate.title': 'Rdzeń OpenHuman jest niedostępny', + // home.banners + 'home.banners.discordSubtitle': 'Pomoc, opinie i wczesny dostęp do funkcji.', + 'home.banners.discordTitle': 'Dołącz do naszego Discorda', + 'home.banners.earlyBirdDismiss': 'Odrzuć baner early bird', + 'home.banners.earlyBirdFirstSub': 'pierwszą subskrypcję.', + 'home.banners.earlyBirdOn': 'Early bird na', + 'home.banners.earlyBirdTitle': 'Pierwszych 1000 użytkowników otrzymuje 60% zniżki.', + 'home.banners.earlyBirdUseCode': 'Użyj kodu early bird', + 'home.banners.getSubscription': 'wykup subskrypcję', + 'home.banners.promoCreditsBody': 'Przetestuj OpenHuman, a gdy będziesz gotowy(a) na więcej,', + 'home.banners.promoCreditsTitle': 'Masz {amount} kredytów promocyjnych.', + 'home.banners.promoCreditsUsage': 'i uzyskaj 10x więcej użycia.', + // intelligence + 'intelligence.memoryChunk.detail.chunk': 'Fragment', + 'intelligence.memoryChunk.detail.copyChunkId': 'Skopiuj ID fragmentu', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024 wymiarów', + 'intelligence.memoryChunk.detail.noEmbedding': 'Brak embeddingu', + 'intelligence.memoryChunk.letterhead.from': 'od', + 'intelligence.memoryChunk.letterhead.to': 'do', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 fragment', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} fragmentów', + 'intelligence.memoryChunk.mentioned.heading': 'w z m i a n k o w a n e', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} wynik {pct} procent', + 'intelligence.memoryChunk.scoreBars.atThreshold': 'na progu {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': 'odrzucone', + 'intelligence.memoryChunk.scoreBars.heading': 'd l a c z e g o z a c h o w a n e', + 'intelligence.memoryChunk.scoreBars.kept': 'zachowane', + 'intelligence.memoryText.entityTypePrefix': 'Typ encji', + 'intelligence.screenDebug.active': 'Aktywne', + 'intelligence.screenDebug.app': 'Aplikacja', + 'intelligence.screenDebug.bounds': 'Granice', + 'intelligence.screenDebug.captureAlt': 'Wynik testu przechwytywania', + 'intelligence.screenDebug.captureFailed': 'Niepowodzenie', + 'intelligence.screenDebug.captureSuccess': 'Powodzenie', + 'intelligence.screenDebug.captureTest': 'Test przechwytywania', + 'intelligence.screenDebug.capturing': 'Przechwytywanie', + 'intelligence.screenDebug.frames': 'Klatki', + 'intelligence.screenDebug.idle': 'Bezczynne', + 'intelligence.screenDebug.lastApp': 'Ostatnia aplikacja', + 'intelligence.screenDebug.mode': 'Tryb', + 'intelligence.screenDebug.permAccessibility': 'Uprawnienie: dostępność', + 'intelligence.screenDebug.permInput': 'Uprawnienie: wejście', + 'intelligence.screenDebug.permScreen': 'Dostępność', + 'intelligence.screenDebug.permissions': 'Uprawnienia', + 'intelligence.screenDebug.platformNotSupported': 'Platforma nieobsługiwana', + 'intelligence.screenDebug.recentVisionSummaries': 'Ostatnie podsumowania wizji', + 'intelligence.screenDebug.session': 'Sesja', + 'intelligence.screenDebug.size': 'Rozmiar', + 'intelligence.screenDebug.status': 'Stan', + 'intelligence.screenDebug.testCapture': 'Testuj przechwytywanie', + 'intelligence.screenDebug.time': 'Czas', + 'intelligence.screenDebug.title': 'Tytuł', + 'intelligence.screenDebug.unknown': 'Nieznane', + 'intelligence.screenDebug.visionQueue': 'Kolejka wizji', + 'intelligence.screenDebug.visionState': 'Stan wizji', + 'intelligence.tasks.activeBoardOne': '1 aktywna tablica w rozmowach', + 'intelligence.tasks.activeBoardOther': '{count} aktywnych tablic w rozmowach', + 'intelligence.tasks.empty': 'Brak tablic zadań agenta', + 'intelligence.tasks.emptyHint': 'Tablice pojawią się tutaj po rozpoczęciu pracy z agentem.', + 'intelligence.tasks.failedToLoad': 'Nie udało się wczytać', + 'intelligence.tasks.live': 'na żywo', + 'intelligence.tasks.loadingBoards': 'Wczytywanie tablic zadań…', + 'intelligence.tasks.threadPrefix': 'Wątek {thread}', + // notifications card/center + 'notifications.card.dismiss': 'Odrzuć powiadomienie', + 'notifications.card.importanceTitle': 'Ważność: {pct}%', + 'notifications.center.empty': 'Brak powiadomień', + 'notifications.center.emptyHint': 'Nowe powiadomienia pojawią się tutaj.', + 'notifications.center.filterAll': 'Wszystkie', + 'notifications.center.markAllRead': 'Oznacz wszystkie jako przeczytane', + 'notifications.center.title': 'Powiadomienia', + // oauth + 'oauth.button.loopbackTimeout': + 'Logowanie przekroczyło limit czasu — przeglądarka nie ukończyła przekierowania OAuth. Spróbuj ponownie.', + 'oauth.button.connecting': 'Łączenie...', + 'oauth.login.continueWith': 'Kontynuuj z', + // onboarding.contextGathering + 'onboarding.contextGathering.buildingDesc': + 'Analizujemy Twój kontekst, aby spersonalizować pierwsze rozmowy.', + 'onboarding.contextGathering.buildingProfile': 'Budowanie Twojego profilu...', + 'onboarding.contextGathering.continueToChat': 'Przejdź do czatu', + 'onboarding.contextGathering.errorDesc': + 'Twój czat jest gotowy. Będziemy nadal budować pełny profil w tle, więc możesz już teraz kontynuować i dopracowywać go z czasem.', + 'onboarding.contextGathering.coreAlive': + 'Rdzeń jest osiągalny — pierwsze uruchomienie może potrwać minutę.', + 'onboarding.contextGathering.coreAliveProbing': 'Sprawdzanie połączenia z rdzeniem…', + 'onboarding.contextGathering.coreUnreachable': + 'Rdzeń nie odpowiada. Możesz kontynuować i spróbować ponownie później.', + 'onboarding.contextGathering.stillWorkingDesc': + 'Pierwsze uruchomienie może potrwać 30–60 sekund podczas rozgrzewania lokalnego modelu i narzędzi. Możesz przejść do czatu w każdej chwili — budowa profilu działa w tle.', + 'onboarding.contextGathering.stillWorkingTitle': 'Trwa praca nad Twoim profilem…', + 'onboarding.contextGathering.title': 'Zbieranie kontekstu', + // overlay + 'overlay.ariaAttention': 'Wiadomość uwagi', + 'overlay.ariaCompanion': 'Companion aktywny', + 'overlay.ariaOrb': 'Nakładka OpenHuman', + 'overlay.ariaVoiceActive': 'Wejście głosowe aktywne', + 'overlay.companion.error': 'Błąd', + 'overlay.companion.listening': 'Słucham…', + 'overlay.companion.pointing': 'Wskazuję…', + 'overlay.companion.speaking': 'Mówię…', + 'overlay.companion.thinking': 'Myślę…', + 'overlay.orbTitle': 'Przeciągnij, aby przesunąć · Kliknij dwukrotnie, aby zresetować pozycję', + // pages.settings.account + 'pages.settings.account.connections': 'Połączenia', + 'pages.settings.account.connectionsDesc': 'Przeglądaj i zarządzaj połączeniami kont', + 'pages.settings.account.privacy': 'Prywatność', + 'pages.settings.account.privacyDesc': + 'Zarządzaj udostępnianiem danych i anonimowymi preferencjami użycia', + 'pages.settings.account.recoveryPhrase': 'Fraza odzyskiwania', + 'pages.settings.account.recoveryPhraseDesc': + 'Zarządzaj swoją frazą odzyskiwania BIP39 do szyfrowania i dostępu do portfela', + 'pages.settings.account.team': 'Zespół', + 'pages.settings.account.teamDesc': 'Zarządzaj zespołem, członkami i zaproszeniami', + 'pages.settings.account.migration': 'Importuj z innego asystenta', + 'pages.settings.account.migrationDesc': + 'Przenieś pamięć i notatki z OpenClaw (a wkrótce również Hermes) do tej przestrzeni roboczej.', + 'pages.settings.accountSection.description': + 'Fraza odzyskiwania, zespół, połączenia i ustawienia prywatności.', + 'pages.settings.accountSection.title': 'Konto', + // pages.settings.ai + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'Dostawcy modeli językowych i trasowanie', + 'pages.settings.ai.voice': 'Głos', + 'pages.settings.ai.voiceDesc': 'Konfiguracja STT i TTS dla rozmów głosowych', + 'pages.settings.ai.embeddings': 'Embeddingi', + 'pages.settings.ai.embeddingsDesc': 'Model kodowania wektorowego do wyszukiwania w pamięci', + 'pages.settings.aiSection.description': + 'Dostawcy modeli językowych, lokalna Ollama i głos (STT / TTS).', + 'pages.settings.aiSection.title': 'AI', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Trasowanie, wyzwalacze i historia integracji obsługiwanych przez Composio.', + 'pages.settings.features.desktopCompanion': 'Desktop Companion', + 'pages.settings.features.desktopCompanionDesc': + 'Asystent głosowy ze świadomością ekranu — słucha, widzi, mówi, wskazuje', + 'pages.settings.features.messagingChannels': 'Kanały komunikacji', + 'pages.settings.features.messagingChannelsDesc': + 'Konfiguruj kanały takie jak Telegram, Discord i Slack', + 'pages.settings.features.notifications': 'Powiadomienia', + 'pages.settings.features.notificationsDesc': + 'Steruj alertami systemowymi i kategoriami powiadomień', + 'pages.settings.features.screenAwareness': 'Świadomość ekranu', + 'pages.settings.features.screenAwarenessDesc': + 'Uprawnienia, monitorowanie i sesje przechwytywania ekranu', + 'pages.settings.features.tools': 'Narzędzia', + 'pages.settings.features.toolsDesc': 'Wybierz, z jakich możliwości OpenHuman może korzystać', + 'pages.settings.featuresSection.description': 'Świadomość ekranu, komunikacja i narzędzia.', + 'pages.settings.featuresSection.title': 'Funkcje', + // privacy + 'privacy.dataKind.credentials': 'Poświadczenia', + 'privacy.dataKind.derived': 'Wyprowadzone', + 'privacy.dataKind.diagnostics': 'Diagnostyka', + 'privacy.dataKind.metadata': 'Metadane', + 'privacy.dataKind.raw': 'Surowe', + 'privacy.whatLeaves.link.label': 'Co opuszcza mój komputer?', + // rewards.community + 'rewards.community.achievementsUnlocked': 'Odblokowano {unlocked} z {total} osiągnięć', + 'rewards.community.connectDiscord': 'Połącz Discord', + 'rewards.community.cumulativeTokens': 'Łączna liczba tokenów', + 'rewards.community.currentStreak': 'Aktualna seria', + 'rewards.community.discordLinkedNotInGuild': 'Powiązane, ale nie na serwerze', + 'rewards.community.discordMember': 'Dołączono do serwera', + 'rewards.community.discordNotLinked': 'Nie powiązane', + 'rewards.community.discordServer': 'Serwer Discord', + 'rewards.community.discordStatusUnavailable': 'Status członkostwa niedostępny', + 'rewards.community.discordWaiting': 'Oczekiwanie na synchronizację z backendem', + 'rewards.community.heroSubtitle': + 'Odblokuj ekskluzywne kanały, odznaki wspierających i nagrody synchronizowane z backendem, łącząc swoje konto Discord.', + 'rewards.community.heroTitle': 'Zdobywaj nagrody i role na Discordzie', + 'rewards.community.joinDiscord': 'Dołącz do Discorda', + 'rewards.community.loadingRewards': 'Wczytywanie nagród…', + 'rewards.community.locked': 'Zablokowane', + 'rewards.community.retrying': 'Ponawianie…', + 'rewards.community.rolesAndRewards': 'Role i nagrody', + 'rewards.community.streakDays': '{n} dni', + 'rewards.community.syncPending': 'Synchronizacja nagród w toku', + 'rewards.community.syncPendingDesc': + 'Trwa synchronizacja Twoich nagród. Spróbuj ponownie za chwilę.', + 'rewards.community.syncUnavailable': 'Synchronizacja niedostępna', + 'rewards.community.tryAgain': 'Ponawianie…', + 'rewards.community.unknown': 'Nieznane', + 'rewards.community.unlocked': 'Odblokowane', + 'rewards.community.yourProgress': 'Twój postęp', + // rewards.coupon + 'rewards.coupon.colCode': 'Kod', + 'rewards.coupon.colRedeemed': 'Zrealizowano', + 'rewards.coupon.colReward': 'Nagroda', + 'rewards.coupon.colStatus': 'Status', + 'rewards.coupon.loadingHistory': 'Wczytywanie historii nagród…', + 'rewards.coupon.noCodes': 'Nie zrealizowano jeszcze żadnych kodów.', + 'rewards.coupon.pending': 'Oczekujące', + 'rewards.coupon.placeholder': 'Kod kuponu', + 'rewards.coupon.promoCredits': 'Kredyty promocyjne', + 'rewards.coupon.recentRedemptions': 'Ostatnie realizacje', + 'rewards.coupon.redeemAccepted': + '{code} zaakceptowany. {amount} zostanie odblokowane po wykonaniu wymaganej akcji.', + 'rewards.coupon.redeemButton': 'Zrealizuj kod', + 'rewards.coupon.redeemSuccess': '{code} zrealizowany. {amount} dodano do Twoich kredytów.', + 'rewards.coupon.redeemedCodes': 'Zrealizowane kody', + 'rewards.coupon.redeeming': 'Realizacja...', + 'rewards.coupon.statusApplied': 'Zastosowano', + 'rewards.coupon.statusPendingAction': 'Oczekuje na akcję', + 'rewards.coupon.statusRedeemed': 'Zrealizowano', + 'rewards.coupon.subtitle': 'Wprowadź kod, aby otrzymać kredyty promocyjne.', + 'rewards.coupon.title': 'Zrealizuj kod kuponu', + // rewards.referralSection + 'rewards.referralSection.activity': 'Aktywność poleceń', + 'rewards.referralSection.apply': 'Stosowanie…', + 'rewards.referralSection.applying': 'Stosowanie…', + 'rewards.referralSection.colReferredUser': 'Polecony użytkownik', + 'rewards.referralSection.colReward': 'Nagroda', + 'rewards.referralSection.colStatus': 'Status', + 'rewards.referralSection.colUpdated': 'Zaktualizowano', + 'rewards.referralSection.completed': 'Zakończone', + 'rewards.referralSection.copyCode': 'Kopiuj kod', + 'rewards.referralSection.copyFailed': 'Kopiowanie nie powiodło się', + 'rewards.referralSection.haveCode': 'Masz kod polecający?', + 'rewards.referralSection.haveCodeDesc': + 'Wprowadź kod, który otrzymałeś(aś) od znajomego, aby uzyskać bonus.', + 'rewards.referralSection.linked': 'Powiązane', + 'rewards.referralSection.linkedCode': '(kod {code})', + 'rewards.referralSection.loading': 'Wczytywanie programu poleceń…', + 'rewards.referralSection.noReferrals': 'Brak poleceń', + 'rewards.referralSection.pendingReferrals': 'Oczekujące polecenia', + 'rewards.referralSection.placeholder': 'Kod polecający', + 'rewards.referralSection.share': 'Udostępnij', + 'rewards.referralSection.statusCompleted': 'Zakończone', + 'rewards.referralSection.statusExpired': 'Wygasłe', + 'rewards.referralSection.statusJoined': 'Dołączył(a)', + 'rewards.referralSection.subtitle': 'Zaproś znajomych do OpenHuman i zarabiajcie kredyty razem.', + 'rewards.referralSection.title': 'Zapraszaj znajomych, zarabiaj kredyty', + 'rewards.referralSection.totalEarned': 'Łącznie zarobione', + 'rewards.referralSection.yourCode': 'Twój kod', + // settings.ai (extras) + 'settings.ai.addCloudProvider': 'Dodaj dostawcę chmurowego', + 'settings.ai.addProvider': 'Zapisywanie…', + 'settings.ai.apiKeyFieldLabel': 'Klucz API', + 'settings.ai.apiKeyRequired': 'Wklej swój klucz API, aby kontynuować.', + 'settings.ai.apiKeyStoredEncrypted': 'Klucz API przechowywany w postaci zaszyfrowanej', + 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', + 'settings.ai.clearStoredKey': 'Wyczyść zapisany klucz', + 'settings.ai.connectProvider': 'Połącz dostawcę', + 'settings.ai.customRouting': 'Własne trasowanie', + 'settings.ai.defaultResolvesTo': 'OpenHuman', + 'settings.ai.discard': 'Odrzuć', + 'settings.ai.editProvider': 'Edytuj dostawcę', + 'settings.ai.llmProviders': 'Dostawcy LLM', + 'settings.ai.llmProvidersDesc': 'Skonfiguruj dostawców chmurowych i lokalnych modeli językowych.', + 'settings.ai.localOllama': 'Lokalny (Ollama)', + 'settings.ai.modelLabel': 'Model', + 'settings.ai.noCustomProviders': 'Brak własnych dostawców', + 'settings.ai.openAiCompat.authHeaderExample': 'Authorization: Bearer ', + 'settings.ai.openAiCompat.authHeaderLabel': 'Nagłówek uwierzytelniania', + 'settings.ai.openAiCompat.baseUrlLabel': 'Bazowy URL', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'Niedostępny', + 'settings.ai.openAiCompat.clearKey': 'Wyczyść klucz', + 'settings.ai.openAiCompat.description': + 'Skieruj lokalne harnesy do tego serwera /v1, aby kierować ruch przez dostawców skonfigurowanych poniżej. Uwierzytelnianie używa stabilnego klucza ustawionego tutaj, nie wewnętrznego tokenu rdzenia aplikacji.', + 'settings.ai.openAiCompat.keyConfigured': 'Klucz skonfigurowany', + 'settings.ai.openAiCompat.keyRequired': 'Klucz wymagany', + 'settings.ai.openAiCompat.rotateKey': 'Rotuj klucz', + 'settings.ai.openAiCompat.setKey': 'Ustaw klucz', + 'settings.ai.openAiCompat.title': 'Endpoint kompatybilny z OpenAI', + 'settings.ai.providerLabel': 'Dostawca', + 'settings.ai.routing': 'Trasowanie', + 'settings.ai.routingCustom': 'Własne trasowanie', + 'settings.ai.routingDefault': 'Domyślne', + 'settings.ai.routingDesc': + 'Wybierz, którzy dostawcy obsługują które workloady (czat, tło, embeddingi).', + 'settings.ai.saveChanges': 'Zapisywanie…', + 'settings.ai.saving': 'Zapisywanie…', + 'settings.ai.unsavedChange': 'niezapisana zmiana', + 'settings.ai.unsavedChanges': 'niezapisane zmiany', + 'settings.ai.workloadGroupBackground': 'Grupa workloadów: tło', + 'settings.ai.workloadGroupChat': 'Grupa workloadów: czat', + // settings.autocomplete + 'settings.autocomplete.appFilter.acceptSuggestion': 'Akceptuj sugestię', + 'settings.autocomplete.appFilter.contextOverride': 'Nadpisanie kontekstu (opcjonalne)', + 'settings.autocomplete.appFilter.debugFocus': 'Debug fokusa', + 'settings.autocomplete.appFilter.getSuggestion': 'Pobierz sugestię', + 'settings.autocomplete.appFilter.liveLogs': 'Dziennik na żywo', + 'settings.autocomplete.appFilter.noLogs': ') :', + 'settings.autocomplete.appFilter.refreshStatus': 'Odświeżanie…', + 'settings.autocomplete.appFilter.refreshing': 'Odświeżanie…', + 'settings.autocomplete.appFilter.runtime': 'Środowisko', + 'settings.autocomplete.appFilter.test': 'Test', + 'settings.autocomplete.completionStyle.acceptedCompletion': + 'Zapisano {count} zaakceptowane uzupełnienie — używane do personalizacji przyszłych sugestii.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + 'Zapisano {count} zaakceptowanych uzupełnień — używane do personalizacji przyszłych sugestii.', + 'settings.autocomplete.completionStyle.clearHistory': 'Czyszczenie…', + 'settings.autocomplete.completionStyle.clearing': 'Czyszczenie…', + 'settings.autocomplete.completionStyle.debounce': 'Debounce (ms)', + 'settings.autocomplete.completionStyle.enabled': 'Włączone', + 'settings.autocomplete.completionStyle.maxChars': 'Maks. znaków', + 'settings.autocomplete.completionStyle.noHistory': + 'Brak zaakceptowanych uzupełnień. Akceptuj sugestie Tabem, aby rozpocząć personalizację.', + 'settings.autocomplete.completionStyle.overlayTtl': 'TTL nakładki (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'Historia personalizacji', + 'settings.autocomplete.completionStyle.styleExamples': 'Przykłady stylu (jeden w wierszu)', + 'settings.autocomplete.completionStyle.styleInstructions': 'Instrukcje stylu', + // settings.billing.autoRecharge + 'settings.billing.autoRecharge.addAmount': 'Dodaj tę kwotę', + 'settings.billing.autoRecharge.addCard': 'Dodaj kartę', + 'settings.billing.autoRecharge.amountHint': 'Minimalna kwota doładowania to równowartość 5 USD.', + 'settings.billing.autoRecharge.defaultCard': 'Karta domyślna', + 'settings.billing.autoRecharge.lastRechargeFailed': 'Ostatnie doładowanie nie powiodło się', + 'settings.billing.autoRecharge.lastRecharged': 'Ostatnio doładowano', + 'settings.billing.autoRecharge.noCards': 'Brak kart', + 'settings.billing.autoRecharge.paymentMethods': 'Metody płatności', + 'settings.billing.autoRecharge.rechargeInProgress': 'Doładowanie w toku', + 'settings.billing.autoRecharge.rechargeWhen': 'Doładuj, gdy saldo spadnie poniżej', + 'settings.billing.autoRecharge.saveSettings': 'Zapisywanie…', + 'settings.billing.autoRecharge.saving': 'Zapisywanie…', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': + 'Automatycznie doładowuj kredyty, gdy saldo spadnie poniżej progu.', + 'settings.billing.autoRecharge.title': 'Włącz automatyczne doładowanie', + 'settings.billing.autoRecharge.toggleAriaLabel': 'Przełącz automatyczne doładowanie', + 'settings.billing.autoRecharge.weeklyLimit': 'Tygodniowy limit wydatków', + // settings.billing.history + 'settings.billing.history.desc': 'Twoje ostatnie transakcje i rozliczenia.', + 'settings.billing.history.empty': 'Brak historii do wyświetlenia.', + 'settings.billing.history.openPortal': 'Otwórz portal', + 'settings.billing.history.posted': 'Zaksięgowano', + 'settings.billing.history.title': 'Historia rozliczeń', + // settings.billing.inferenceBudget + 'settings.billing.inferenceBudget.cycleEnds': 'Koniec cyklu', + 'settings.billing.inferenceBudget.exhausted': 'Wyczerpane', + 'settings.billing.inferenceBudget.loadError': 'Błąd wczytywania', + 'settings.billing.inferenceBudget.noBudgetDesc': + 'Brak aktywnego budżetu cyklicznego. Wykup plan, aby zacząć.', + 'settings.billing.inferenceBudget.noRecurringBudget': 'Brak budżetu cyklicznego', + 'settings.billing.inferenceBudget.remaining': 'Pozostało', + 'settings.billing.inferenceBudget.tenHourCap': 'Limit 10-godzinny', + 'settings.billing.inferenceBudget.title': 'Budżet inferencji', + // settings.billing.payAsYouGo + 'settings.billing.payAsYouGo.available': 'Dostępne', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'Otwieranie…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Wybierz kwotę doładowania lub wprowadź własną.', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Wybierz kwotę doładowania', + 'settings.billing.payAsYouGo.creditBalanceDesc': + 'Twoje aktualne saldo kredytów dostępne do użycia.', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'Saldo kredytów', + 'settings.billing.payAsYouGo.customAmount': 'Własna kwota', + 'settings.billing.payAsYouGo.enterAmount': 'Wprowadź kwotę', + 'settings.billing.payAsYouGo.opening': 'Otwieranie', + 'settings.billing.payAsYouGo.promotionalCredits': 'Kredyty promocyjne', + 'settings.billing.payAsYouGo.topUpBalance': 'Doładuj saldo', + 'settings.billing.payAsYouGo.topUpCredits': 'Doładuj kredyty', + 'settings.billing.payAsYouGo.unableToLoad': 'Nie można wczytać salda.', + // settings.billing.subscription + 'settings.billing.subscription.annual': 'Roczna', + 'settings.billing.subscription.billedAnnually': 'Rozliczane rocznie', + 'settings.billing.subscription.chooseSubtitle': 'Wybierz plan dopasowany do Twoich potrzeb.', + 'settings.billing.subscription.chooseTitle': 'Wybierz plan', + 'settings.billing.subscription.cryptoDesc': + 'Możesz zapłacić również w kryptowalucie — skontaktuj się z nami.', + 'settings.billing.subscription.cryptoQuestion': 'Wolisz zapłacić kryptowalutą?', + 'settings.billing.subscription.current': 'Bieżący', + 'settings.billing.subscription.currentPlan': 'Bieżący plan', + 'settings.billing.subscription.monthly': 'Miesięczna', + 'settings.billing.subscription.paymentConfirmed': 'Płatność potwierdzona', + 'settings.billing.subscription.perMonth': 'miesięcznie', + 'settings.billing.subscription.popular': 'Popularne', +}; + +export default pl4; diff --git a/app/src/lib/i18n/chunks/pl-5.ts b/app/src/lib/i18n/chunks/pl-5.ts new file mode 100644 index 000000000..be9dfffce --- /dev/null +++ b/app/src/lib/i18n/chunks/pl-5.ts @@ -0,0 +1,819 @@ +import type { TranslationMap } from '../types'; +import en5 from './en-5'; + +// Polish chunk 5/5. Spreads the English source-of-truth chunk so every key is +// present (i18n parity gate); Polish values below override EN where translated. +const pl5: TranslationMap = { + ...en5, + // settings.billing.subscription (extras) + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'Podnieś plan', + 'settings.billing.subscription.waiting': 'Oczekiwanie', + 'settings.billing.subscription.waitingPayment': 'Oczekiwanie na płatność', + // settings.composio + 'settings.composio.apiKeyDesc': + 'Klucz API Composio jest obecnie przechowywany na tym urządzeniu.', + 'settings.composio.apiKeyLabel': 'Klucz API Composio', + 'settings.composio.apiKeyStored': 'Klucz API zapisany', + 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', + 'settings.composio.clearedToBackend': 'Przełączono na tryb backendowy', + 'settings.composio.confirmItem1': 'Konto w app.composio.dev z kluczem API', + 'settings.composio.confirmItem2': + 'Ponowne powiązanie każdej integracji przez Twoje osobiste konto Composio', + 'settings.composio.confirmItem3': + 'Uwaga: wyzwalacze Composio (webhooks w czasie rzeczywistym) nie działają jeszcze w trybie bezpośrednim — tylko synchroniczne wywołania narzędzi', + 'settings.composio.confirmNeedItems': 'Będziesz potrzebować:', + 'settings.composio.confirmSwitch': 'Rozumiem, przełącz na tryb bezpośredni', + 'settings.composio.confirmTitle': '⚠️ Przełączanie na tryb bezpośredni', + 'settings.composio.confirmWarning': + 'Twoje istniejące integracje (Gmail, Slack, GitHub itp. połączone przez OpenHuman) nie będą widoczne — żyją w tenant Composio zarządzanym przez OpenHuman.', + 'settings.composio.intro': + 'Composio integruje 250+ zewnętrznych aplikacji jako narzędzia, z których może korzystać Twój agent. Wybierz, jak kierować te wywołania.', + 'settings.composio.modeDirect': 'Bezpośredni (przynieś własny klucz API)', + 'settings.composio.modeDirectDesc': + 'Wywołania trafiają bezpośrednio do backend.composio.dev. Suwerennie / przyjazne offline. Wywołania narzędzi działają synchronicznie; webhooks wyzwalaczy w czasie rzeczywistym nie są jeszcze trasowane w trybie bezpośrednim.', + 'settings.composio.modeManaged': 'Zarządzany (OpenHuman robi to za Ciebie)', + 'settings.composio.modeManagedDesc': + 'OpenHuman pośredniczy w wywołaniach narzędzi przez nasz backend (zalecane). Uwierzytelnianie jest pośredniczone; nie musisz wklejać klucza API Composio. Webhooks są w pełni trasowane.', + 'settings.composio.routingMode': 'Tryb trasowania', + 'settings.composio.saveErrorNoKey': + 'Nie udało się zapisać. Tryb bezpośredni wymaga niepustego klucza API.', + 'settings.composio.saving': 'Zapisywanie…', + 'settings.composio.switching': 'Przełączanie…', + // settings.cron + 'settings.cron.jobs.desc': 'Zadania cykliczne uruchamiane przez harmonogram rdzenia.', + 'settings.cron.jobs.empty': 'Nie znaleziono zadań cron rdzenia.', + 'settings.cron.jobs.lastStatus': 'Ostatni status', + 'settings.cron.jobs.loading': 'Wczytywanie zadań cron...', + 'settings.cron.jobs.loadingRuns': 'Wczytywanie uruchomień', + 'settings.cron.jobs.nextRun': 'Następne uruchomienie', + 'settings.cron.jobs.pause': 'Wstrzymaj', + 'settings.cron.jobs.paused': 'Włączone', + 'settings.cron.jobs.recentRuns': 'Ostatnie uruchomienia', + 'settings.cron.jobs.removing': 'Usuwanie', + 'settings.cron.jobs.resume': 'Wznów', + 'settings.cron.jobs.runningNow': 'Uruchamiane teraz', + 'settings.cron.jobs.saving': 'Zapisywanie…', + 'settings.cron.jobs.schedule': 'Harmonogram', + 'settings.cron.jobs.title': 'Zadania cron rdzenia', + 'settings.cron.jobs.viewRuns': 'Zobacz uruchomienia', + // settings.localModel.deviceCapability + 'settings.localModel.deviceCapability.active': 'Aktywne', + 'settings.localModel.deviceCapability.appliedTier': 'Zastosowany poziom', + 'settings.localModel.deviceCapability.applying': 'Stosowanie', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': 'Nie udało się wczytać presetów', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'Własne ID modeli', + 'settings.localModel.deviceCapability.detected': 'Wykryto', + 'settings.localModel.deviceCapability.disabled': 'Wyłączone', + 'settings.localModel.deviceCapability.disabledDesc': + 'Lokalne AI wyłączone — używana jest chmura jako rezerwa.', + 'settings.localModel.deviceCapability.downloadingModels': '(pobieranie modeli)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'Pobieranie instalatora OllamaSetup (~2 GB) i rozpakowywanie. Pierwsza instalacja może potrwać minutę.', + 'settings.localModel.deviceCapability.failedToApplyPreset': 'Nie udało się zastosować presetu', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Instalacja Ollama nie powiodła się', + 'settings.localModel.deviceCapability.installFailedDesc': + 'Instalator zakończył pracę, zanim Ollama była gotowa. Kliknij ponów, aby spróbować jeszcze raz, lub zainstaluj ręcznie z ollama.com.', + 'settings.localModel.deviceCapability.installFirst': 'Najpierw uruchom Ollamę.', + 'settings.localModel.deviceCapability.installFirstDesc': + 'Lokalne poziomy zależą od zewnętrznie zarządzanego endpointu Ollama. Uruchom go samodzielnie, pobierz potrzebne modele i pozostań przy „Wyłączone (rezerwa chmurowa)”, dopóki środowisko nie będzie osiągalne.', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'Najpierw uruchom Ollamę, aby użyć tego poziomu', + 'settings.localModel.deviceCapability.installingOllama': 'Instalowanie Ollama', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Wczytywanie informacji o urządzeniu', + 'settings.localModel.deviceCapability.localAiDisabled': + 'Lokalne AI wyłączone — używana jest rezerwa chmurowa.', + 'settings.localModel.deviceCapability.modelTier': 'Poziom modelu', + 'settings.localModel.deviceCapability.needsOllama': 'Wymaga Ollama', + 'settings.localModel.deviceCapability.notDetected': 'Nie wykryto', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'Zalecane', + 'settings.localModel.deviceCapability.retryInstall': 'Ponawianie…', + 'settings.localModel.deviceCapability.retrying': 'Ponawianie…', + 'settings.localModel.deviceCapability.starting': 'Uruchamianie…', + // settings.localModel.download + 'settings.localModel.download.audioPathPlaceholder': 'Bezwzględna ścieżka do pliku audio', + 'settings.localModel.download.capabilityAssets': 'Zasoby możliwości', + 'settings.localModel.download.downloading': 'Pobieranie...', + 'settings.localModel.download.embeddingPlaceholder': 'Jeden ciąg wejściowy w wierszu...', + 'settings.localModel.download.noThinkMode': 'Tryb bez myślenia', + 'settings.localModel.download.promptPlaceholder': + 'Wpisz dowolny prompt i uruchom go na modelu lokalnym...', + 'settings.localModel.download.quantizationPref': 'Preferencja kwantyzacji', + 'settings.localModel.download.runEmbeddingTest': 'Uruchamianie...', + 'settings.localModel.download.runPromptTest': 'Uruchom test promptu', + 'settings.localModel.download.runSummaryTest': 'Uruchom test podsumowania', + 'settings.localModel.download.runTranscriptionTest': 'Uruchamianie...', + 'settings.localModel.download.runTtsTest': 'Uruchamianie...', + 'settings.localModel.download.runVisionTest': 'Uruchamianie...', + 'settings.localModel.download.running': 'Uruchamianie...', + 'settings.localModel.download.runningPrompt': 'Uruchamianie promptu', + 'settings.localModel.download.summarizePlaceholder': + 'Wklej tekst do podsumowania modelem lokalnym...', + 'settings.localModel.download.testCustomPrompt': 'Testuj własny prompt', + 'settings.localModel.download.testEmbeddings': 'Testuj embeddingi', + 'settings.localModel.download.testSummarization': 'Testuj podsumowywanie', + 'settings.localModel.download.testVisionPrompt': 'Testuj prompt wizji', + 'settings.localModel.download.testVoiceInput': 'Testuj wejście głosowe (STT)', + 'settings.localModel.download.testVoiceOutput': 'Testuj wyjście głosowe (TTS)', + 'settings.localModel.download.ttsOutputPlaceholder': 'Opcjonalna ścieżka wyjściowa WAV', + 'settings.localModel.download.ttsPlaceholder': 'Wprowadź tekst do syntezy...', + 'settings.localModel.download.visionImagePlaceholder': + 'Jedno odniesienie do obrazu w wierszu (data URI, URL lub marker lokalnej ścieżki)', + 'settings.localModel.download.visionPromptPlaceholder': 'Wprowadź prompt dla modelu wizji...', + // settings.localModel.status + 'settings.localModel.status.allChecksPassed': 'Wszystkie testy zaliczone', + 'settings.localModel.status.artifact': 'Artefakt', + 'settings.localModel.status.backend': 'Backend', + 'settings.localModel.status.binary': 'Plik binarny', + 'settings.localModel.status.bootstrapResume': 'Inicjalizacja / wznowienie', + 'settings.localModel.status.checking': 'Sprawdzanie...', + 'settings.localModel.status.checkingOllama': 'Sprawdzanie Ollama', + 'settings.localModel.status.customLocation': 'Własna lokalizacja', + 'settings.localModel.status.customLocationDesc': 'Wskaż ręcznie ścieżkę do binarki Ollama.', + 'settings.localModel.status.diagnosticsHint': + 'Kliknij „Uruchom diagnostykę”, aby zweryfikować, że Ollama działa i modele są zainstalowane.', + 'settings.localModel.status.downloadingUnknown': 'Pobieranie (rozmiar nieznany)', + 'settings.localModel.status.eta': 'Pozostały czas', + 'settings.localModel.status.expectedModels': 'Oczekiwane modele', + 'settings.localModel.status.forceRebootstrap': 'Wymuś ponowną inicjalizację', + 'settings.localModel.status.generationTps': 'TPS generowania', + 'settings.localModel.status.hideErrorDetails': 'Ukryj szczegóły błędu', + 'settings.localModel.status.installManually': 'Zainstaluj ręcznie', + 'settings.localModel.status.installManuallyFrom': 'Zainstaluj ręcznie z', + 'settings.localModel.status.installOllama': 'Uruchamianie…', + 'settings.localModel.status.installedModels': 'Zainstalowane modele', + 'settings.localModel.status.installing': 'Instalowanie...', + 'settings.localModel.status.installingOllama': 'Instalowanie środowiska Ollama...', + 'settings.localModel.status.issues': 'Problemy', + 'settings.localModel.status.issuesFound': 'Znaleziono {count} problemów', + 'settings.localModel.status.lastLatency': 'Ostatnie opóźnienie', + 'settings.localModel.status.model': 'Model', + 'settings.localModel.status.notFound': 'Nie znaleziono', + 'settings.localModel.status.notRunning': 'Nie działa', + 'settings.localModel.status.ollamaBinaryPath': 'Ścieżka binarki Ollama', + 'settings.localModel.status.ollamaDiagnostics': 'Diagnostyka Ollama', + 'settings.localModel.status.ollamaNotInstalled': 'Środowisko Ollama niedostępne', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'OpenHuman traktuje teraz Ollamę jako zewnętrzne środowisko inferencji. Uruchom własny serwer Ollama, pobierz potrzebne modele i skieruj na niego trasowanie workloadów.', + 'settings.localModel.status.progress': 'Postęp', + 'settings.localModel.status.provider': 'Dostawca', + 'settings.localModel.status.retryBootstrap': 'Ponów inicjalizację', + 'settings.localModel.status.runDiagnostics': 'Sprawdzanie...', + 'settings.localModel.status.running': 'Działa', + 'settings.localModel.status.runningExternalProcess': 'Działa przez zewnętrzny proces', + 'settings.localModel.status.runtimeStatus': 'Stan środowiska', + 'settings.localModel.status.server': 'Serwer', + 'settings.localModel.status.setPath': 'Ustawianie...', + 'settings.localModel.status.setting': 'Ustawianie...', + 'settings.localModel.status.showErrorDetails': 'Ukryj szczegóły błędu', + 'settings.localModel.status.showInstallErrorDetails': 'Ukryj szczegóły błędu', + 'settings.localModel.status.suggestedFixes': 'Sugerowane poprawki', + 'settings.localModel.status.thenSetPath': 'Następnie ustaw ścieżkę', + 'settings.localModel.status.triggering': 'Uruchamianie...', + 'settings.localModel.status.unavailable': 'Niedostępne', + 'settings.localModel.status.working': 'Pracuję...', + // settings.developerMenu + 'settings.developerMenu.ai.title': 'Konfiguracja AI', + 'settings.developerMenu.ai.desc': + 'Dostawcy chmurowi, lokalne modele Ollama i trasowanie per workload', + 'settings.developerMenu.screenAwareness.title': 'Świadomość ekranu', + 'settings.developerMenu.screenAwareness.desc': + 'Uprawnienia do przechwytywania ekranu, polityka monitorowania i kontrola sesji', + 'settings.developerMenu.messagingChannels.title': 'Kanały komunikacji', + 'settings.developerMenu.messagingChannels.desc': + 'Konfiguruj tryby uwierzytelniania Telegram/Discord i domyślne trasowanie', + 'settings.developerMenu.tools.title': 'Narzędzia', + 'settings.developerMenu.tools.desc': + 'Włącz lub wyłącz możliwości, z których OpenHuman może korzystać w Twoim imieniu', + 'settings.developerMenu.agentChat.title': 'Czat z agentem', + 'settings.developerMenu.agentChat.desc': + 'Testuj rozmowę z agentem z nadpisaniami modelu i temperatury', + 'settings.developerMenu.cronJobs.title': 'Zadania cron', + 'settings.developerMenu.cronJobs.desc': + 'Przeglądaj i konfiguruj zaplanowane zadania dla umiejętności runtime', + 'settings.developerMenu.localModelDebug.title': 'Debug modelu lokalnego', + 'settings.developerMenu.localModelDebug.desc': + 'Konfiguracja Ollama, pobieranie zasobów, testy modeli i diagnostyka', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': + 'Tryb trasowania, wyzwalacze integracji i archiwum historii wyzwalaczy.', + 'settings.developerMenu.webhooks.title': 'Webhooks', + 'settings.developerMenu.webhooks.desc': + 'Sprawdź rejestracje webhooków w runtime i logi przechwyconych żądań', + 'settings.developerMenu.intelligence.title': 'Inteligencja', + 'settings.developerMenu.intelligence.desc': + 'Przestrzeń pamięci, silnik podświadomości, sny i ustawienia', + 'settings.developerMenu.notificationRouting.title': 'Trasowanie powiadomień', + 'settings.developerMenu.notificationRouting.desc': + 'Punktacja ważności AI i eskalacja orkiestratora dla alertów integracji', + 'settings.developerMenu.composeioTriggers.title': 'Wyzwalacze ComposeIO', + 'settings.developerMenu.composeioTriggers.desc': + 'Przeglądaj historię i archiwum wyzwalaczy ComposeIO', + 'settings.developerMenu.composioRouting.title': 'Trasowanie Composio (tryb bezpośredni)', + 'settings.developerMenu.composioRouting.desc': + 'Użyj własnego klucza API Composio i kieruj wywołania bezpośrednio do backend.composio.dev', + 'settings.developerMenu.integrationTriggers.title': 'Wyzwalacze integracji', + 'settings.developerMenu.integrationTriggers.desc': + 'Konfiguruj ustawienia klasyfikacji AI dla wyzwalaczy integracji Composio', + 'settings.appearance.menuDesc': 'Wybierz jasny, ciemny lub dopasowany do systemu motyw', + // settings.agentAccess + 'settings.agentAccess.title': 'Dostęp agenta do systemu', + 'settings.agentAccess.menuDesc': + 'Kontroluj, gdzie agent może czytać/pisać oraz czy może używać powłoki.', + 'settings.agentAccess.loadError': 'Nie udało się wczytać ustawień dostępu', + 'settings.agentAccess.saveError': 'Nie udało się zapisać ustawień dostępu', + 'settings.agentAccess.saved': 'Zapisano — zostanie zastosowane w następnej wiadomości.', + 'settings.agentAccess.desktopOnly': + 'Ustawienia dostępu są dostępne tylko w aplikacji desktopowej.', + 'settings.agentAccess.loading': 'Wczytywanie…', + 'settings.agentAccess.accessMode': 'Tryb dostępu', + 'settings.agentAccess.tier.readonly.title': 'Tylko do odczytu', + 'settings.agentAccess.tier.readonly.desc': + 'Czyta pliki i uruchamia polecenia tylko do odczytu, aby eksplorować — ale nigdy nie zapisuje, nie edytuje ani nie uruchamia niczego, co zmienia stan.', + 'settings.agentAccess.tier.supervised.title': 'Pytaj przed edycją', + 'settings.agentAccess.tier.supervised.desc': + 'Tworzy nowe pliki swobodnie, ale pyta o Twoją zgodę przed edycją istniejącego pliku, uruchomieniem polecenia, dostępem do sieci lub instalacją czegokolwiek.', + 'settings.agentAccess.tier.full.title': 'Pełny dostęp', + 'settings.agentAccess.tier.full.desc': + 'Uruchamia polecenia z pełnym dostępem Twojego konta — może czytać/pisać wszędzie, gdzie to dozwolone, oprócz magazynów poświadczeń i systemowych. Polecenia destrukcyjne, dostęp do sieci i instalacje nadal proszą o zgodę.', + 'settings.agentAccess.defaultTag': '(domyślny)', + 'settings.agentAccess.fullWarning': + '⚠ Pełny dostęp uruchamia polecenia z pełnymi uprawnieniami Twojego konta i nie jest sandboxowany. Włącz to tylko wtedy, gdy ufasz agentowi na tym komputerze. Katalogi poświadczeń i systemowe pozostają zablokowane, a akcje destrukcyjne, sieciowe i instalacyjne nadal proszą o zgodę.', + 'settings.agentAccess.confine.label': 'Ogranicz do przestrzeni roboczej', + 'settings.agentAccess.confine.desc': + 'Ogranicz agenta do katalogu przestrzeni roboczej (oraz dodanych folderów), niezależnie od wybranego trybu dostępu. Wyłączone — może sięgać wszędzie, gdzie Twój użytkownik, oprócz zawsze zablokowanych katalogów poświadczeń i systemowych.', + 'settings.agentAccess.grantedFolders': 'Przyznane foldery', + 'settings.agentAccess.grantedDesc': + 'Foldery, do których agent może czytać i pisać, oprócz przestrzeni roboczej. Magazyny poświadczeń (~/.ssh, ~/.gnupg, ~/.aws, keychains) i katalogi systemowe (/etc, /System, C:\\Windows, …) są zawsze zablokowane, nawet w przyznanym folderze.', + 'settings.agentAccess.noneGranted': 'Brak przyznanych folderów.', + 'settings.agentAccess.readWrite': 'odczyt + zapis', + 'settings.agentAccess.readOnly': 'tylko do odczytu', + 'settings.agentAccess.remove': 'Usuń', + 'settings.agentAccess.pathPlaceholder': 'Bezwzględna ścieżka folderu', + 'settings.agentAccess.accessLevelLabel': 'Poziom dostępu', + 'settings.agentAccess.add': 'Dodaj', + 'settings.agentAccess.saving': 'Zapisywanie…', + 'settings.agentAccess.changesApply': 'Zmiany zostaną zastosowane w następnej wiadomości.', + // settings.mascot + 'settings.mascot.active': 'Aktywny', + 'settings.mascot.characterDesc': 'Wybierz charakter maskotki OpenHuman.', + 'settings.mascot.characterHeading': 'Charakter', + 'settings.mascot.customGifError': + 'Wprowadź URL .gif HTTPS, URL .gif loopback HTTP, URL file:// .gif lub lokalną ścieżkę .gif.', + 'settings.mascot.customGifHeading': 'Własny awatar GIF', + 'settings.mascot.customGifLabel': 'URL własnego awatara GIF', + 'settings.mascot.colorDesc': 'Wybierz kolor maskotki używany w całej aplikacji.', + 'settings.mascot.colorHeading': 'Kolor', + 'settings.mascot.loadingLibrary': 'Wczytywanie biblioteki OpenHuman…', + 'settings.mascot.localDefault': 'Lokalny OpenHuman (domyślny)', + 'settings.mascot.menuTitle': 'Maskotka', + 'settings.mascot.menuDesc': 'Wybierz kolor maskotki używany w aplikacji', + 'settings.mascot.noCharacters': 'Nie ma jeszcze dostępnych postaci OpenHuman', + 'settings.mascot.noColorVariants': 'Brak wariantów kolorystycznych', + 'settings.mascot.voice.current': 'bieżący', + 'settings.mascot.voice.customDesc': + 'Znajdź ID głosów w api.elevenlabs.io/v1/voices lub w panelu ElevenLabs. Przechowywane jest tylko ID — Twój klucz API pozostaje na backendzie.', + 'settings.mascot.voice.customHeading': 'Własne ID głosu', + 'settings.mascot.voice.customOption': 'Inne (wklej ID głosu)…', + 'settings.mascot.voice.desc': + 'Wybierz głos ElevenLabs, którego maskotka używa do odpowiedzi głosowych. Filtruj po płci, wybierz z listy lub pozwól aplikacji dobrać głos pasujący do języka interfejsu.', + 'settings.mascot.voice.genderFemale': 'Kobiecy', + 'settings.mascot.voice.genderHeading': 'Płeć głosu', + 'settings.mascot.voice.genderMale': 'Męski', + 'settings.mascot.voice.heading': 'Głos', + 'settings.mascot.voice.preset': 'Preset głosu', + 'settings.mascot.voice.presetHeading': 'Preset głosu', + 'settings.mascot.voice.preview': 'Podgląd głosu', + 'settings.mascot.voice.previewError': 'Podgląd głosu nie powiódł się', + 'settings.mascot.voice.previewing': 'Odsłuchiwanie…', + 'settings.mascot.voice.reset': 'Przywróć domyślny', + 'settings.mascot.voice.useLocaleDefault': 'Dopasuj do języka aplikacji', + 'settings.mascot.voice.useLocaleDefaultDesc': + 'Automatyczny dobór głosu do bieżącego języka interfejsu.', + // settings.memoryWindow + 'settings.memoryWindow.balanced.badge': 'Zalecane', + 'settings.memoryWindow.balanced.hint': + 'Rozsądna wartość domyślna — dobra ciągłość bez nadmiernych tokenów na każde uruchomienie.', + 'settings.memoryWindow.balanced.label': 'Zrównoważone', + 'settings.memoryWindow.description': + 'Ile zapamiętanego kontekstu OpenHuman wstrzykuje do każdego nowego uruchomienia agenta. Większe okno daje większą świadomość poprzednich rozmów, ale używa więcej tokenów — i kosztuje więcej — przy każdym uruchomieniu.', + 'settings.memoryWindow.extended.badge': 'Więcej kontekstu', + 'settings.memoryWindow.extended.hint': + 'Więcej długoterminowej pamięci wstrzykiwanej do każdego uruchomienia. Wyższy koszt tokenów na turę.', + 'settings.memoryWindow.extended.label': 'Rozszerzone', + 'settings.memoryWindow.maximum.badge': 'Najwyższy koszt', + 'settings.memoryWindow.maximum.hint': + 'Największe bezpieczne okno. Najlepsza ciągłość, znacząco wyższy rachunek za tokeny przy każdym uruchomieniu.', + 'settings.memoryWindow.maximum.label': 'Maksymalne', + 'settings.memoryWindow.minimal.badge': 'Najtańsze', + 'settings.memoryWindow.minimal.hint': + 'Najmniejsze okno pamięci. Najtańsze, najszybsze, najmniejsza ciągłość między uruchomieniami.', + 'settings.memoryWindow.minimal.label': 'Minimalne', + 'settings.memoryWindow.title': 'Okno pamięci długoterminowej', + // settings.screenIntel + 'settings.screenIntel.permissions.accessibility': 'Dostępność', + 'settings.screenIntel.permissions.grantHint': 'System otworzy okno żądania uprawnień.', + 'settings.screenIntel.permissions.inputMonitoring': 'Monitorowanie wejścia', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS stosuje politykę prywatności do:', + 'settings.screenIntel.permissions.openInputMonitoring': 'Żądanie…', + 'settings.screenIntel.permissions.refreshStatus': 'Odświeżanie…', + 'settings.screenIntel.permissions.refreshing': 'Odświeżanie…', + 'settings.screenIntel.permissions.requestAccessibility': 'Żądanie…', + 'settings.screenIntel.permissions.requestScreenRecording': 'Żądanie…', + 'settings.screenIntel.permissions.requesting': 'Żądanie…', + 'settings.screenIntel.permissions.restartRefresh': 'Restartowanie rdzenia…', + 'settings.screenIntel.permissions.restartingCore': 'Restartowanie rdzenia…', + 'settings.screenIntel.permissions.screenRecording': 'Nagrywanie ekranu', + 'settings.screenIntel.permissions.title': 'Uprawnienia', + // skills.card + 'skills.card.moreActions': 'Więcej akcji', + // skills.create + 'skills.create.allowedTools': 'Dozwolone narzędzia', + 'skills.create.author': 'Autor', + 'skills.create.authorPlaceholder': 'Twoje imię', + 'skills.create.commaSeparated': '(rozdzielone przecinkami)', + 'skills.create.createBtn': 'Utwórz umiejętność', + 'skills.create.createError': 'Nie udało się utworzyć umiejętności', + 'skills.create.creating': 'Tworzenie…', + 'skills.create.description': 'Opis', + 'skills.create.descriptionPlaceholder': 'Co robi ta umiejętność?', + 'skills.create.license': 'Licencja', + 'skills.create.name': 'Nazwa', + 'skills.create.namePlaceholder': 'np. Dziennik transakcji', + 'skills.create.scope': 'Zakres', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + 'Zapisane do ~/.openhuman/skills//SKILL.md — dostępne we wszystkich przestrzeniach roboczych.', + 'skills.create.slugLabel': 'Etykieta slug', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'Tagi', + 'skills.create.title': 'Nowa umiejętność', + // skills.detail + 'skills.detail.allowedTools': 'Dozwolone narzędzia', + 'skills.detail.author': 'Autor', + 'skills.detail.bundledResources': 'Dołączone zasoby', + 'skills.detail.closeAriaLabel': 'Zamknij szczegóły umiejętności', + 'skills.detail.location': 'Lokalizacja', + 'skills.detail.noBundledResources': 'Brak dołączonych zasobów.', + 'skills.detail.tags': 'Tagi', + 'skills.detail.warnings': 'Ostrzeżenia', + // skills.install + 'skills.install.fetchLog': 'Dziennik pobierania', + 'skills.install.installBtn': 'Instalowanie…', + 'skills.install.installComplete': 'Instalacja zakończona', + 'skills.install.installing': 'Instalowanie…', + 'skills.install.parseWarnings': 'Ostrzeżenia parsowania', + 'skills.install.rawError': 'Surowy błąd', + 'skills.install.timeoutHint': '(sekundy, opcjonalne)', + 'skills.install.timeoutLabel': 'Limit czasu', + 'skills.install.title': 'Zainstaluj umiejętność z URL', + 'skills.install.urlLabel': 'URL umiejętności', + // skills.meetingBots + 'skills.meetingBots.bannerDesc': + 'Wklej link Google Meet, a OpenHuman dołączy jako gość, mówi, słucha i odpowiada.', + 'skills.meetingBots.bannerTitle': 'Wyślij OpenHuman na spotkanie', + 'skills.meetingBots.busyTitle': 'OpenHuman jest zajęty', + 'skills.meetingBots.comingSoon': 'Wkrótce', + 'skills.meetingBots.couldNotStartTitle': 'Nie udało się uruchomić OpenHuman', + 'skills.meetingBots.displayName': 'Wyświetlana nazwa', + 'skills.meetingBots.failedToStart': 'Nie udało się uruchomić OpenHuman.', + 'skills.meetingBots.joiningMessage': 'Powinien pojawić się jako uczestnik w ciągu kilku sekund.', + 'skills.meetingBots.joiningTitle': 'OpenHuman dołącza do spotkania', + 'skills.meetingBots.meetingLink': 'Link spotkania', + 'skills.meetingBots.modalAriaLabel': 'Wyślij OpenHuman na spotkanie', + 'skills.meetingBots.modalDesc': + 'OpenHuman dołącza jako anonimowy gość, transmituje wideo do rozmowy i odpowiada przez agenta.', + 'skills.meetingBots.modalTitle': 'Wyślij OpenHuman na spotkanie', + 'skills.meetingBots.newBadge': 'Nowość', + 'skills.meetingBots.sendTo': 'Wyślij do', + 'skills.meetingBots.starting': 'Uruchamianie…', + // skills.resource + 'skills.resource.preview.closeAriaLabel': 'Zamknij podgląd', + 'skills.resource.preview.failed': 'Podgląd nie powiódł się', + 'skills.resource.preview.loading': 'Wczytywanie podglądu…', + 'skills.resource.tree.empty': 'Brak dołączonych zasobów.', + 'skills.search.placeholder': 'Szukaj umiejętności...', + // skills.setup.autocomplete + 'skills.setup.autocomplete.acceptKey': 'Klawisz akceptacji', + 'skills.setup.autocomplete.activeDesc': + 'Autouzupełnianie działa. Akceptuj sugestie klawiszem skrótu.', + 'skills.setup.autocomplete.activeTitle': 'Autouzupełnianie jest aktywne', + 'skills.setup.autocomplete.customizeSettings': 'Dostosuj ustawienia', + 'skills.setup.autocomplete.debounce': 'Debounce', + 'skills.setup.autocomplete.description': + 'Sugestie wierszowe podczas pisania w polach tekstowych.', + 'skills.setup.autocomplete.enableBtn': 'Włączanie...', + 'skills.setup.autocomplete.enableError': 'Nie udało się włączyć autouzupełniania', + 'skills.setup.autocomplete.enabling': 'Włączanie...', + 'skills.setup.autocomplete.notSupported': 'Nieobsługiwane', + 'skills.setup.autocomplete.stepEnable': 'Włącz uzupełnienia wierszowe', + 'skills.setup.autocomplete.stepSuccess': 'Gotowe', + 'skills.setup.autocomplete.stylePreset': 'Preset stylu', + 'skills.setup.autocomplete.stylePresetValue': 'Zrównoważony (konfigurowalny później)', + 'skills.setup.autocomplete.title': 'Autouzupełnianie tekstu', + // skills.setup.screenIntel + 'skills.setup.screenIntel.activeDesc': 'Inteligencja ekranu działa. Wybrane okna są obserwowane.', + 'skills.setup.screenIntel.activeTitle': 'Inteligencja ekranu jest włączona', + 'skills.setup.screenIntel.advancedSettings': 'Ustawienia zaawansowane', + 'skills.setup.screenIntel.allGranted': 'Wszystkie uprawnienia przyznane', + 'skills.setup.screenIntel.captureMode': 'Tryb przechwytywania', + 'skills.setup.screenIntel.captureModeValue': 'Wszystkie okna (konfigurowalne później)', + 'skills.setup.screenIntel.deniedHint': + 'Po przyznaniu uprawnień w Ustawieniach systemowych kliknij poniżej, aby zrestartować i odświeżyć zmiany.', + 'skills.setup.screenIntel.enableBtn': 'Włączanie...', + 'skills.setup.screenIntel.enableDesc': + 's na Twoim ekranie i dostarczają użytecznego kontekstu agentowi', + 'skills.setup.screenIntel.enableError': 'Nie udało się włączyć inteligencji ekranu', + 'skills.setup.screenIntel.enabling': 'Włączanie...', + 'skills.setup.screenIntel.grant': 'Otwieranie...', + 'skills.setup.screenIntel.granted': 'Przyznano', + 'skills.setup.screenIntel.macosOnly': 'Tylko macOS', + 'skills.setup.screenIntel.opening': 'Otwieranie...', + 'skills.setup.screenIntel.panicHotkey': 'Skrót awaryjny', + 'skills.setup.screenIntel.permAccessibility': 'Dostępność', + 'skills.setup.screenIntel.permInputMonitoring': 'Monitorowanie wejścia', + 'skills.setup.screenIntel.permScreenRecording': 'Nagrywanie ekranu', + 'skills.setup.screenIntel.permissionsDesc': 'Inteligencja ekranu wymaga uprawnień systemowych:', + 'skills.setup.screenIntel.refreshStatus': 'Odśwież status', + 'skills.setup.screenIntel.restartRefresh': 'Restartowanie...', + 'skills.setup.screenIntel.restarting': 'Restartowanie...', + 'skills.setup.screenIntel.stepEnable': 'Włącz umiejętność', + 'skills.setup.screenIntel.stepPermissions': 'Przyznaj uprawnienia', + 'skills.setup.screenIntel.stepSuccess': 'Gotowe', + 'skills.setup.screenIntel.title': 'Inteligencja ekranu', + 'skills.setup.screenIntel.visionModel': 'Model wizji', + // skills.setup.voice + 'skills.setup.voice.activation': 'Aktywacja', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': 'Inteligencja głosowa jest aktywna', + 'skills.setup.voice.customizeSettings': 'Dostosuj ustawienia', + 'skills.setup.voice.downloadSttBtn': 'Pobierz model STT', + 'skills.setup.voice.enableDesc': 'Włącz dyktowanie głosowe i odpowiedzi głosowe.', + 'skills.setup.voice.hotkey': 'Skrót klawiszowy', + 'skills.setup.voice.startBtn': 'Uruchamianie...', + 'skills.setup.voice.startError': 'Nie udało się uruchomić serwera głosowego', + 'skills.setup.voice.starting': 'Uruchamianie...', + 'skills.setup.voice.stepEnable': 'Uruchom serwer głosowy', + 'skills.setup.voice.stepSetup': 'Wymagane pobranie modelu', + 'skills.setup.voice.stepSuccess': 'Gotowe', + 'skills.setup.voice.sttNotReady': 'Model speech-to-text niegotowy', + 'skills.setup.voice.sttNotReadyDesc': + 'Inteligencja głosowa wymaga lokalnego modelu Whisper do transkrypcji. Pobierz go z ustawień modelu lokalnego.', + 'skills.setup.voice.sttReady': 'Model speech-to-text gotowy', + 'skills.setup.voice.sttReturnHint': 'Wróć tutaj po pobraniu modelu.', + 'skills.setup.voice.title': 'Inteligencja głosowa', + // skills.uninstall + 'skills.uninstall.couldNotUninstall': 'Nie udało się odinstalować', + 'skills.uninstall.description': + 'Permanentnie usuwa katalog umiejętności i wszystkie dołączone zasoby. Agent przestanie je widzieć w następnej turze.', + 'skills.uninstall.title': 'Odinstaluj', + 'skills.uninstall.uninstallBtn': 'Odinstaluj', + 'skills.uninstall.uninstalling': 'Odinstalowywanie…', + // upsell + 'upsell.global.limitMessage': 'Podnieś plan lub doładuj kredyty, aby kontynuować', + 'upsell.global.limitTitle': 'Ty', + 'upsell.global.nearLimitMessage': + 'Wykorzystano {pct}% limitu użycia. Podnieś plan, aby zwiększyć limity.', + 'upsell.global.nearLimitTitle': 'Zbliżasz się do limitu użycia', + 'upsell.usageLimit.bodyBudget': + 'Osiągnięto tygodniowy limit.{reset} Podnieś plan lub doładuj kredyty, aby uniknąć limitów.', + 'upsell.usageLimit.bodyRate': + 'Osiągnięto 10-godzinny limit szybkości inferencji.{reset} Podnieś plan, aby zwiększyć limity.', + 'upsell.usageLimit.heading': 'Osiągnięto limit użycia', + 'upsell.usageLimit.notNow': 'Nie teraz', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'Resetuje się {time}.', + 'upsell.usageLimit.upgradePlan': 'Podnieś plan', + 'upsell.usageLimit.weeklyInference': '{amount}', + // walkthrough + 'walkthrough.tooltip.letsGo': 'Zaczynamy!', + 'walkthrough.tooltip.next': 'Dalej →', + 'walkthrough.tooltip.skip': 'Pomiń przewodnik', + 'walkthrough.tooltip.stepCounter': '{n} z {total}', + // webhooks + 'webhooks.activity.empty': 'Brak aktywności.', + 'webhooks.activity.title': 'Ostatnia aktywność', + 'webhooks.composioHistory.empty': 'Brak historii.', + 'webhooks.composioHistory.metadataId': 'ID metadanych', + 'webhooks.composioHistory.metadataUuid': 'UUID metadanych', + 'webhooks.composioHistory.payload': 'Ładunek', + 'webhooks.composioHistory.title': 'Historia wyzwalaczy ComposeIO', + 'webhooks.tunnels.active': 'Aktywny', + 'webhooks.tunnels.createFailed': 'Nie udało się utworzyć tunelu', + 'webhooks.tunnels.creating': 'Tworzenie...', + 'webhooks.tunnels.deleteFailed': 'Nie udało się usunąć tunelu', + 'webhooks.tunnels.descriptionPlaceholder': 'Opis (opcjonalny)', + 'webhooks.tunnels.echo': 'Echo', + 'webhooks.tunnels.empty': 'Brak tuneli.', + 'webhooks.tunnels.enableEcho': 'Usuń Echo', + 'webhooks.tunnels.inactive': 'Aktywny', + 'webhooks.tunnels.namePlaceholder': 'Nazwa tunelu (np. telegram-bot)', + 'webhooks.tunnels.newTunnel': 'Nowy tunel', + 'webhooks.tunnels.removeEcho': 'Usuń Echo', + 'webhooks.tunnels.title': 'Tunele webhooków', + 'webhooks.tunnels.toggleFailed': 'Nie udało się przełączyć echa', + // composio (extras) + 'composio.authExpired': 'Autoryzacja wygasła', + 'composio.reconnect': 'Połącz ponownie', + 'composio.previewBadge': 'Podgląd', + 'composio.previewTooltip': + 'Integracja z agentem wkrótce — możesz się połączyć, ale agent nie może jeszcze użyć tego zestawu narzędzi.', + 'composio.directModeRequiresKey': + 'Nie udało się zapisać. Tryb bezpośredni wymaga niepustego klucza API.', + 'composio.notYetRouted': 'jeszcze nie trasowane', + 'composio.triggers.loading': 'Wczytywanie…', + 'conversations.taskKanban.todo': 'Do zrobienia', + 'settings.composio.loading': 'Wczytywanie…', + 'settings.mascot.noCharactersAvailable': 'Nie ma jeszcze dostępnych postaci OpenHuman', + 'skills.uninstall.confirmTitle': 'Odinstalować {name}?', + 'conversations.taskKanban.blocked': 'Zablokowane', + 'conversations.taskKanban.done': 'Zrobione', + 'conversations.taskKanban.inProgress': 'W toku', + 'intelligence.memoryChunk.detail.copiedHint': 'skopiowano', + 'settings.composio.notYetRouted': 'jeszcze nie trasowane', + 'settings.localModel.download.manageExternal': + 'Zarządzaj tym modelem w swoim zewnętrznym środowisku.', + 'settings.localModel.status.manageOllamaExternal': + 'Zarządzaj procesem Ollama i pobraniami modeli poza OpenHumanem, a następnie uruchom ponownie diagnostykę.', + 'settings.localModel.status.ollamaDocs': 'Dokumentacja Ollama', + 'settings.localModel.status.thenRetry': + 'po instrukcje konfiguracji, a następnie spróbuj ponownie, gdy środowisko będzie osiągalne.', + // settings.appearance + 'settings.appearance.title': 'Wygląd', + 'settings.appearance.themeHeading': 'Motyw', + 'settings.appearance.themeAria': 'Motyw', + 'settings.appearance.modeLight': 'Jasny', + 'settings.appearance.modeLightDesc': 'Jasne powierzchnie, ciemny tekst.', + 'settings.appearance.modeDark': 'Ciemny', + 'settings.appearance.modeDarkDesc': 'Przyciemnione powierzchnie, łatwiejsze dla oczu po zmroku.', + 'settings.appearance.modeSystem': 'Dopasuj do systemu', + 'settings.appearance.modeSystemDesc': + 'Postępuj zgodnie z ustawieniem wyglądu Twojego systemu operacyjnego.', + 'settings.appearance.helperText': + 'Tryb ciemny przełącza całą aplikację — czat, ustawienia, panele — na przyciemnioną paletę. „Dopasuj do systemu” podąża za wyglądem systemu i aktualizuje się na żywo.', + 'settings.appearance.tabBarHeading': 'Dolny pasek zakładek', + 'settings.appearance.tabBarAlwaysShowLabels': 'Zawsze pokazuj etykiety', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'Wyłączone — etykiety pojawiają się tylko po najechaniu lub dla aktywnej zakładki.', + // settings.mascot (more) + 'settings.mascot.characterPreview': 'Podgląd', + 'settings.mascot.characterStates': 'stanów', + 'settings.mascot.characterVisemes': 'wizemów', + 'settings.mascot.colorAria': 'Kolor OpenHuman', + 'settings.mascot.colorBlack': 'Czarny', + 'settings.mascot.colorBurgundy': 'Burgundowy', + 'settings.mascot.colorCustom': 'Własny', + 'settings.mascot.colorNavy': 'Granatowy', + 'settings.mascot.primaryColor': 'Kolor podstawowy', + 'settings.mascot.secondaryColor': 'Kolor dodatkowy', + 'settings.mascot.colorYellow': 'Żółty', + 'settings.mascot.libraryUnavailable': 'Biblioteka OpenHuman niedostępna', + 'settings.mascot.title': 'OpenHuman', + // settings.developerMenu (more) + 'settings.developerMenu.mcpServer.title': 'Serwer MCP', + 'settings.developerMenu.mcpServer.desc': + 'Skonfiguruj zewnętrznych klientów MCP do połączenia z OpenHumanem', + 'settings.developerMenu.autonomy.title': 'Autonomia agenta', + 'settings.developerMenu.autonomy.desc': 'Limity szybkości akcji narzędzi i progi bezpieczeństwa', + // settings.mcpServer + 'settings.mcpServer.title': 'Serwer MCP', + 'settings.mcpServer.toolsSectionTitle': 'Dostępne narzędzia', + 'settings.mcpServer.toolsSectionDesc': + 'Narzędzia udostępniane przez serwer stdio MCP podczas uruchamiania openhuman-core mcp', + 'settings.mcpServer.configSectionTitle': 'Konfiguracja klienta', + 'settings.mcpServer.configSectionDesc': + 'Wybierz swojego klienta MCP, aby wygenerować poprawny fragment konfiguracji', + 'settings.mcpServer.copySnippet': 'Skopiuj do schowka', + 'settings.mcpServer.copied': 'Skopiowano!', + 'settings.mcpServer.openConfigFile': 'Otwórz plik konfiguracyjny', + 'settings.mcpServer.binaryPathNotFound': + 'Nie znaleziono pliku binarnego OpenHuman. Jeśli uruchamiasz ze źródeł, zbuduj: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'Nie udało się otworzyć pliku konfiguracyjnego', + 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', + 'settings.mcpServer.clientCursor': 'Cursor', + 'settings.mcpServer.clientCodex': 'Codex', + 'settings.mcpServer.clientZed': 'Zed', + 'settings.mcpServer.configFilePath': 'Plik konfiguracyjny', + 'settings.mcpServer.clientSelectorAriaLabel': 'Selektor klienta MCP', + // settings.persona + 'settings.persona.title': 'Persona', + 'settings.persona.menuTitle': 'Persona', + 'settings.persona.menuDesc': + 'Imię, osobowość, awatar i głos — Twój asystent jako jedna tożsamość', + 'settings.persona.identityHeading': 'Tożsamość', + 'settings.persona.identityDesc': + 'Wyświetlana nazwa i krótki opis Twojego asystenta. Pokazane w aplikacji; nie zmienia sposobu rozumowania asystenta.', + 'settings.persona.displayNameLabel': 'Wyświetlana nazwa', + 'settings.persona.displayNamePlaceholder': 'np. Nova', + 'settings.persona.descriptionLabel': 'Opis', + 'settings.persona.descriptionPlaceholder': 'np. Spokojny, zwięzły asystent dla mojego zespołu.', + 'settings.persona.soul.heading': 'Osobowość (SOUL.md)', + 'settings.persona.soul.desc': + 'Prompt osobowości, którym asystent kieruje się w każdej rozmowie. Edycje są zapisywane w Twojej przestrzeni roboczej i wchodzą w życie w następnej odpowiedzi.', + 'settings.persona.soul.editorLabel': 'Zawartość SOUL.md', + 'settings.persona.soul.reset': 'Przywróć domyślne', + 'settings.persona.soul.usingDefault': 'Używam dołączonej wartości domyślnej', + 'settings.persona.soul.loadError': 'Nie udało się wczytać SOUL.md', + 'settings.persona.soul.saveError': 'Nie udało się zapisać SOUL.md', + 'settings.persona.soul.resetError': 'Nie udało się zresetować SOUL.md', + 'settings.persona.appearanceHeading': 'Awatar i głos', + 'settings.persona.appearanceDesc': + 'Kolor maskotki, własny awatar GIF i głos odpowiedzi są konfigurowane w ustawieniach Maskotki.', + 'settings.persona.openMascotSettings': 'Otwórz ustawienia Maskotki', + // common (extras) + 'common.breadcrumb': 'Ścieżka nawigacji', + 'settings.betaBuild': 'Wersja beta - v{version}', + // migration (extras) + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent (wkrótce)', + // onboarding.apiKeys + 'onboarding.apiKeys.openaiOauthHint': + 'Użyj ChatGPT Plus/Pro (subskrypcja) lub klucza API OpenAI — nie potrzeba obu.', + 'onboarding.apiKeys.openaiOauthOpening': 'Otwieranie logowania…', + 'onboarding.apiKeys.finishSignIn': 'Dokończ logowanie ChatGPT', + 'onboarding.apiKeys.orApiKey': 'lub klucz API', + // app + 'app.localAiDownload.expandAria': 'Rozwiń postęp pobierania', + 'app.localAiDownload.collapseAria': 'Zwiń postęp pobierania', + 'app.localAiDownload.dismissAria': 'Odrzuć powiadomienie o pobieraniu', + // mobile / progress + 'mobile.nav.ariaLabel': 'Nawigacja mobilna', + 'progress.stepsAria': 'Kroki postępu', + 'progress.stepAria': 'Krok {current} z {total}', + // workspace.vaults + 'workspace.vaultsTitle': 'Sejfy wiedzy', + 'workspace.vaultsDesc': + 'Wskaż lokalny folder; pliki są dzielone na fragmenty i zwierciadłowo odzwierciedlane w pamięci.', + // calls (extras) + 'calls.title': 'Rozmowy', + 'calls.comingSoonBody': 'Rozmowy wspomagane przez AI są już wkrótce. Pozostań w kontakcie.', + // art / dev / composio expired + 'art.rotatingTetrahedronAria': 'Obracający się odwrócony statek tetraedryczny', + 'devOptions.sentryDisabled': '(brak ID — Sentry wyłączone w tej kompilacji)', + 'composio.expiredAuthorization': 'Autoryzacja {name} wygasła', + 'composio.expiredDescription': + 'Połącz ponownie, aby ponownie włączyć narzędzia {name}. OpenHuman utrzyma tę integrację jako niedostępną, dopóki nie odświeżysz dostępu OAuth.', + 'channels.telegram.remoteControlTitle': 'Sterowanie zdalne (Telegram)', + 'channels.telegram.remoteControlBody': + 'Z dozwolonego czatu Telegram wyślij /status, /sessions, /new lub /help. Trasowanie modelu nadal używa /model i /models.', + 'rewards.referralSection.retry': 'Ponów', + // settings.ai (more) + 'settings.ai.plannerSummary': + 'Planner: {sourceEvents} zdarzeń źródłowych, {sent} wysłanych, {deduped} zdeduplikowanych.', + 'settings.ai.routeLabel': 'trasa: {route}', + 'settings.ai.latestSpend': 'Ostatni wydatek: {amount} o {time} ({action})', + 'settings.ai.topActions': 'Najczęstsze akcje', + 'settings.ai.noSpendRows': 'Brak załadowanych wierszy wydatków.', + 'settings.ai.topHours': 'Najczęstsze godziny', + 'settings.ai.noHourlySpend': 'Brak wydatków godzinowych.', + // settings.autocomplete.appFilter (more) + 'settings.autocomplete.appFilter.app': 'Aplikacja', + 'settings.autocomplete.appFilter.currentSuggestion': 'Bieżąca sugestia', + 'settings.autocomplete.appFilter.debounce': 'Debounce', + 'settings.autocomplete.appFilter.enabled': 'Włączone', + 'settings.autocomplete.appFilter.lastError': 'Ostatni błąd', + 'settings.autocomplete.appFilter.model': 'Model', + 'settings.autocomplete.appFilter.phase': 'Faza', + 'settings.autocomplete.appFilter.platformSupported': 'Platforma obsługiwana', + 'settings.autocomplete.appFilter.running': 'Działa', + // settings.autocomplete.debug + 'settings.autocomplete.debug.acceptedPrefix': 'Zaakceptowano: {value}', + 'settings.autocomplete.debug.acceptFailed': 'Nie udało się zaakceptować sugestii', + 'settings.autocomplete.debug.alreadyRunning': 'Autouzupełnianie już działa.', + 'settings.autocomplete.debug.clearHistoryFailed': 'Nie udało się wyczyścić historii', + 'settings.autocomplete.debug.didNotStart': 'Autouzupełnianie nie wystartowało.', + 'settings.autocomplete.debug.disabledInSettings': + 'Autouzupełnianie jest wyłączone w ustawieniach. Włącz je i zapisz najpierw.', + 'settings.autocomplete.debug.fetchSuggestionFailed': 'Nie udało się pobrać bieżącej sugestii', + 'settings.autocomplete.debug.inspectFocusedElementFailed': + 'Nie udało się zbadać aktywnego elementu', + 'settings.autocomplete.debug.loadSettingsFailed': + 'Nie udało się wczytać ustawień autouzupełniania', + 'settings.autocomplete.debug.noSuggestionApplied': 'Nie zastosowano sugestii.', + 'settings.autocomplete.debug.noSuggestionReturned': 'Nie zwrócono sugestii.', + 'settings.autocomplete.debug.refreshStatusFailed': + 'Nie udało się odświeżyć statusu autouzupełniania', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': + 'Nie udało się zapisać ustawień zaawansowanych', + 'settings.autocomplete.debug.startFailed': 'Nie udało się uruchomić autouzupełniania', + 'settings.autocomplete.debug.stopFailed': 'Nie udało się zatrzymać autouzupełniania', + 'settings.autocomplete.debug.suggestionPrefix': 'Sugestia: {value}', + 'settings.autocomplete.shared.none': 'Brak', + 'settings.autocomplete.shared.notApplicable': 'nd.', + 'settings.autocomplete.shared.unknown': 'Nieznane', + // settings.billing.autoRecharge (more) + 'settings.billing.autoRecharge.expires': 'Wygasa {date}', + 'settings.billing.autoRecharge.spentThisWeek': 'Wykorzystano ${spent} z ${limit} w tym tygodniu', + // settings.localModel.deviceCapability (extras) + 'settings.localModel.deviceCapability.disabledLowercase': 'wyłączone', + 'settings.localModel.deviceCapability.presetDetails': + 'Czat: {chatModel} · Wizja: {visionModel} · Docelowy RAM: {targetRamGb} GB', + 'settings.localModel.download.capabilityChat': 'Czat', + 'settings.localModel.download.capabilityEmbedding': 'Embedding', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'Wizja', + 'settings.localModel.download.embeddingDimensions': 'Wymiary: {dimensions}', + 'settings.localModel.download.embeddingModel': 'Model: {modelId}', + 'settings.localModel.download.embeddingVectors': 'Wektory: {count}', + 'settings.localModel.download.notAvailable': 'nd.', + 'settings.localModel.download.summaryHelper': + 'Wywołuje `openhuman.inference_summarize` przez rdzeń Rust', + 'settings.localModel.download.transcript': 'Transkrypcja:', + 'settings.localModel.download.ttsOutput': 'Wyjście: {outputPath}', + 'settings.localModel.download.ttsVoice': 'Głos: {voiceId}', + // settings.localModel.status (extras) + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - poniżej minimum {required}', + 'settings.localModel.status.contextBelowMinimumTitle': + 'Odrzucone: okno kontekstu {contextLength} tokenów jest poniżej minimum {required} tokenów wymaganego przez warstwę pamięci. Cichy obcięcie kontekstu uszkodziłoby recall.', + 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', + 'settings.localModel.status.contextOkTitle': + 'Okno kontekstu {contextLength} tokenów spełnia minimum warstwy pamięci wynoszące {required} tokenów.', + 'settings.localModel.status.contextUnknownBadge': 'ctx nieznane', + 'settings.localModel.status.contextUnknownTitle': + 'Okno kontekstu nieznane; nie udało się potwierdzić, że spełnia minimum {required} tokenów warstwy pamięci.', + 'settings.localModel.status.expectedChat': 'Czat: {model}', + 'settings.localModel.status.expectedEmbedding': 'Embedding: {model}', + 'settings.localModel.status.expectedVision': 'Wizja: {model}', + 'settings.localModel.status.externalProcess': 'Zewnętrzny proces', + 'settings.localModel.status.notAvailable': 'nd.', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.loadDetailError': 'Nie udało się wczytać maskotki.', + 'settings.mascot.loadLibraryError': 'Nie udało się wczytać biblioteki maskotek.', + 'settings.mascot.voice.customPlaceholder': 'np. 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.previewText': 'Cześć, jestem Twoim asystentem. To jest podgląd głosu.', + // skills (channel icons / composio / create extras / install errors) + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'Sieć', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Napędzane przez Composio', + 'skills.composio.staleStatusTitle': 'Połączenia pokazują nieaktualny status', + 'skills.create.allowedToolsHelp': 'Renderowane do nagłówka frontmatter SKILL.md jako', + 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.tagsPlaceholder': 'handel, badania', + 'skills.install.errors.alreadyInstalledHint': + 'Umiejętność z tym slugiem już istnieje w przestrzeni roboczej. Usuń ją najpierw lub zmień `metadata.id` / `name` w frontmatter.', + 'skills.install.errors.alreadyInstalledTitle': 'Umiejętność już zainstalowana', + 'skills.install.errors.fetchFailedHint': + 'Żądanie nie zostało zrealizowane pomyślnie. Sprawdź, że URL wskazuje na osiągalny plik publiczny i że host zwrócił odpowiedź 2xx.', + 'skills.install.errors.fetchFailedTitle': 'Pobieranie nie powiodło się', + 'skills.install.errors.fetchTimedOutHint': + 'Zdalny host nie odpowiedział w czasie. Spróbuj ponownie lub zwiększ limit czasu (1-600 s).', + 'skills.install.errors.fetchTimedOutTitle': 'Przekroczono limit czasu pobierania', + 'skills.install.errors.fetchTooLargeHint': + 'SKILL.md musi mieć poniżej 1 MiB. Podziel dołączone zasoby na pliki `references/` lub `scripts/` zamiast wstawiać je inline.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md zbyt duży', + 'skills.install.errors.genericHint': 'Backend zwrócił błąd. Surowa wiadomość pokazana poniżej.', + 'skills.install.errors.genericTitle': 'Nie udało się zainstalować umiejętności', + 'skills.install.errors.invalidSkillHint': + 'Frontmatter musi być poprawnym YAML-em z niepustymi polami `name` i `description`, zakończonym `---`.', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md nie został sparsowany', + 'skills.install.errors.invalidUrlHint': + 'Dozwolone są tylko publiczne adresy HTTPS. Prywatne, loopback i metadanowe hosty są zablokowane.', + 'skills.install.errors.invalidUrlTitle': 'URL odrzucony', + 'skills.install.errors.unsupportedUrlHint': + 'Działają tylko bezpośrednie linki `.md`. Dla GitHuba linkuj do pliku (github.com/owner/repo/blob/.../SKILL.md) — drzewa i korzenie repo nie są instalowane.', + 'skills.install.errors.unsupportedUrlTitle': 'Forma URL nieobsługiwana', + 'skills.install.errors.writeFailedHint': + 'Katalog umiejętności w przestrzeni roboczej nie był zapisywalny. Sprawdź uprawnienia systemu plików dla `/.openhuman/skills/`.', + 'skills.install.errors.writeFailedTitle': 'Nie udało się zapisać SKILL.md', + 'skills.install.fetchingPrefix': 'Pobieranie', + 'skills.install.fetchingSuffix': 'może to potrwać do skonfigurowanego limitu czasu.', + 'skills.install.subtitleMiddle': 'przez HTTPS i instaluje pod', + 'skills.install.subtitlePrefix': 'Pobiera pojedynczy', + 'skills.install.subtitleSuffix': 'tylko HTTPS; prywatne i loopback hosty są zablokowane.', + 'skills.install.successDiscovered': 'Odkryto {count} nowych umiejętności.', + 'skills.install.successNoNewIds': + 'Umiejętność zainstalowana, ale nie pojawiły się nowe ID — katalog może już zawierać umiejętność z tym samym slugiem.', + 'skills.install.timeoutHelp': + 'Domyślnie 60 sekund. Wartości spoza zakresu 1-600 są ograniczane po stronie serwera.', + 'skills.install.timeoutInvalid': 'Musi być liczbą całkowitą między 1 a 600.', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.urlHelpMiddle': 'plik.', + 'skills.install.urlHelpPrefix': 'Bezpośredni link do', + 'skills.install.urlHelpSuffix': 'URL-e przepisują się na', + 'skills.install.urlInvalidPrefix': 'URL musi być poprawnie sformułowanym', + 'skills.install.urlInvalidSuffix': 'linkiem.', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.platformComingSoon': 'Obsługa {label} jest już wkrótce.', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google Meet', + 'skills.meetingBots.platforms.teams': 'Microsoft Teams', + 'skills.meetingBots.platforms.zoom': 'Zoom', + 'skills.meetingBots.soonSuffix': 'wkrótce', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS stosuje politykę prywatności do:', +}; + +export default pl5; diff --git a/app/src/lib/i18n/pl.ts b/app/src/lib/i18n/pl.ts new file mode 100644 index 000000000..2594268c6 --- /dev/null +++ b/app/src/lib/i18n/pl.ts @@ -0,0 +1,32 @@ +import pl1 from './chunks/pl-1'; +import pl2 from './chunks/pl-2'; +import pl3 from './chunks/pl-3'; +import pl4 from './chunks/pl-4'; +import pl5 from './chunks/pl-5'; +import type { TranslationMap } from './types'; + +// Polish (Polski) translations. Each chunk maps to chunks/en-N.ts. +// Missing keys fall back to English via I18nContext.resolveEn(). +const pl: TranslationMap = { + ...pl1, + ...pl2, + ...pl3, + ...pl4, + ...pl5, + 'skills.composio.noApiKeyTitle': 'Brak skonfigurowanego klucza API Composio', + 'skills.composio.noApiKeyDescription': + 'W trybie lokalnym używany jest Twój własny klucz API Composio. Otwórz Ustawienia → Zaawansowane → Composio, aby dodać klucz, zanim podłączysz tutaj integracje.', + 'skills.composio.noApiKeyCta': 'Otwórz ustawienia', + 'channels.localManagedUnavailable': + 'Kanały zarządzane są niedostępne dla użytkowników lokalnych.', + 'rewards.localUnavailable': + 'Logowanie lokalne nie zbiera nagród, voucherów ani środków z poleceń. Wyloguj się i zaloguj kontem OpenHuman, jeśli zależy Ci na nagrodach.', + 'rewards.localUnavailableCta': 'Otwórz ustawienia konta', + 'settings.search.localManagedUnavailable': + 'Wyszukiwarka zarządzana przez OpenHuman jest niedostępna dla użytkowników lokalnych. Dodaj własny klucz API Parallel lub Brave, aby włączyć wyszukiwanie w sieci.', + 'devices.comingSoonDescription': + 'Parowanie urządzeń pojawi się wkrótce. Ta strona będzie służyć do parowania iPhone’ów i zarządzania połączonymi urządzeniami.', + 'welcome.continueLocallyExperimental': 'Kontynuuj lokalnie (Eksperymentalne)', +}; + +export default pl; diff --git a/app/src/lib/i18n/types.ts b/app/src/lib/i18n/types.ts index 29e94dadb..516a7a956 100644 --- a/app/src/lib/i18n/types.ts +++ b/app/src/lib/i18n/types.ts @@ -11,7 +11,8 @@ export type Locale = | 'ru' | 'id' | 'it' - | 'ko'; + | 'ko' + | 'pl'; export interface TranslationMap { [key: string]: string; diff --git a/app/src/store/localeSlice.ts b/app/src/store/localeSlice.ts index b1bf079d4..2451b540d 100644 --- a/app/src/store/localeSlice.ts +++ b/app/src/store/localeSlice.ts @@ -19,6 +19,7 @@ const PREFIX_TO_LOCALE: Array<[string, Locale]> = [ ['id', 'id'], ['in', 'id'], ['it', 'it'], + ['pl', 'pl'], ['en', 'en'], ]; diff --git a/scripts/i18n-coverage.ts b/scripts/i18n-coverage.ts index 1d5c2d8d5..add2f8964 100644 --- a/scripts/i18n-coverage.ts +++ b/scripts/i18n-coverage.ts @@ -46,6 +46,7 @@ const ALL_LOCALES = [ "ru", "id", "it", + "pl", ] as const; type Locale = (typeof ALL_LOCALES)[number];