* Add workspace MCP settings and token access controls. Ship MCP settings UI, OAuth revoke/list helpers, Passport deploy wiring, and workspace.token:mcp gating so assistants can connect without pulling in welcome/onboarding from the parent epic. Co-authored-by: Cursor <cursoragent@cursor.com> * Type MCP client config shapes instead of string checks. Encode http/config-root on each advanced client and tighten primary client ids so snippet generation does not branch on magic strings. Co-authored-by: Cursor <cursoragent@cursor.com> * Polish MCP settings follow-ups from review. Translate Ukrainian MCP copy, deep-link ChatGPT into connector creation, drop an unused asset and revoke arg, and assert PATs are rejected on the MCP endpoint. Co-authored-by: Cursor <cursoragent@cursor.com> * Harden MCP connected clients, revoke scope, and OAuth consent. List recoverable sessions with live refresh tokens, revoke only PATs, throttle registration alone, and block viewers from authorizing MCP. Co-authored-by: Cursor <cursoragent@cursor.com> * Simplify MCP OAuth route throttling to a single middleware group. Co-authored-by: Cursor <cursoragent@cursor.com> * Allow workspace viewers read-only MCP access with web policy writes. Mirror the web app: MCP connects on view + OAuth mcp:use, write tools enforce createPost/update/delete/manageAccounts/manageTeam, and demotion to Viewer keeps grants. Cover role denials, consent, and disconnect. Co-authored-by: Cursor <cursoragent@cursor.com> * Harden MCP tool authz with shared workspace helpers. Route ApiKey tools through AuthorizesMcpTool, fail closed on null user or policy argument, and resolve the current workspace before mutating. Co-authored-by: Cursor <cursoragent@cursor.com> * Drop redundant string casts on validated request data. Enum::from and validated() fields are already strings, so the casts add noise without changing behavior. Co-authored-by: Cursor <cursoragent@cursor.com> * Show only the current user's MCP connections in settings. Match API keys privacy: list and disconnect your own OAuth clients, not teammates' across the account. Co-authored-by: Cursor <cursoragent@cursor.com> * Cover LoadWorkspaceFromToken gaps and harden AuthorizesMcpTool tests. Co-authored-by: Cursor <cursoragent@cursor.com> * Drop redundant is_string guard before UpdatePostTool find. Co-authored-by: Cursor <cursoragent@cursor.com> * Refactor AppSidebar to always show MCP link and simplify route middleware definition in ai.php. The MCP link is now consistently displayed regardless of the current workspace state, and the route middleware syntax has been streamlined. * Refresh MCP connected clients with Inertia usePoll. Co-authored-by: Cursor <cursoragent@cursor.com> * Bump laravel/mcp to 0.9.1 and add the TryPost server icon. Requires laravel/boost 2.5 for the Icon attribute; expose images/trypost/icon.png on TryPostServer. Co-authored-by: Cursor <cursoragent@cursor.com> * Drop no-op ReflectionClass import in TryPostServerTest. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
385 lines
18 KiB
PHP
385 lines
18 KiB
PHP
<?php
|
|
|
|
return [
|
|
'title' => 'Ustawienia',
|
|
'description' => 'Zarządzaj swoim profilem i ustawieniami konta',
|
|
|
|
'hub' => [
|
|
'title' => 'Ustawienia',
|
|
'description' => 'Wybierz, czym chcesz zarządzać.',
|
|
'profile' => [
|
|
'title' => 'Profil',
|
|
'description' => 'Zaktualizuj swoje dane osobowe, hasło i preferencje powiadomień.',
|
|
],
|
|
'workspace' => [
|
|
'title' => 'Przestrzeń robocza',
|
|
'description' => 'Skonfiguruj swoją przestrzeń roboczą, markę, członków i klucze API.',
|
|
],
|
|
'account' => [
|
|
'title' => 'Konto',
|
|
'description' => 'Zarządzaj danymi konta, wykorzystaniem i rozliczeniami.',
|
|
],
|
|
],
|
|
|
|
'nav' => [
|
|
'profile' => 'Profil',
|
|
'authentication' => 'Uwierzytelnianie',
|
|
'workspace' => 'Przestrzeń robocza',
|
|
'members' => 'Członkowie',
|
|
'notifications' => 'Powiadomienia',
|
|
'billing' => 'Rozliczenia',
|
|
],
|
|
|
|
'notifications' => [
|
|
'title' => 'Preferencje powiadomień',
|
|
'heading' => 'Powiadomienia e-mail',
|
|
'description' => 'Wybierz, które powiadomienia e-mail chcesz otrzymywać',
|
|
'post_published' => 'Post opublikowany',
|
|
'post_published_description' => 'Otrzymuj e-mail, gdy Twój post zostanie pomyślnie opublikowany',
|
|
'post_failed' => 'Publikacja posta nie powiodła się',
|
|
'post_failed_description' => 'Otrzymuj e-mail, gdy publikacja Twojego posta się nie powiedzie',
|
|
'account_disconnected' => 'Konto rozłączone',
|
|
'account_disconnected_description' => 'Otrzymuj e-mail, gdy konto społecznościowe zostanie rozłączone',
|
|
'save' => 'Zapisz preferencje',
|
|
],
|
|
|
|
'profile' => [
|
|
'title' => 'Ustawienia profilu',
|
|
'photo_heading' => 'Zdjęcie profilowe',
|
|
'photo_description' => 'Prześlij zdjęcie profilowe',
|
|
'heading' => 'Informacje o profilu',
|
|
'description' => 'Zaktualizuj swoje imię i adres e-mail',
|
|
'avatar' => 'Awatar',
|
|
'name' => 'Imię i nazwisko',
|
|
'name_placeholder' => 'Imię i nazwisko',
|
|
'email' => 'Adres e-mail',
|
|
'email_placeholder' => 'Adres e-mail',
|
|
'email_unverified' => 'Twój adres e-mail nie został zweryfikowany.',
|
|
'resend_verification' => 'Kliknij tutaj, aby ponownie wysłać e-mail weryfikacyjny.',
|
|
'verification_sent' => 'Nowy link weryfikacyjny został wysłany na Twój adres e-mail.',
|
|
'save' => 'Zapisz',
|
|
],
|
|
|
|
'authentication' => [
|
|
'title' => 'Uwierzytelnianie',
|
|
'page_title' => 'Ustawienia uwierzytelniania',
|
|
'sessions' => [
|
|
'title' => 'Aktywne sesje',
|
|
'description' => 'Jeśli zauważysz coś podejrzanego, wyloguj się z innych urządzeń.',
|
|
'unknown_browser' => 'Nieznana przeglądarka',
|
|
'unknown_ip' => 'Nieznany adres IP',
|
|
'on' => 'w',
|
|
'active_now' => 'Aktywna teraz',
|
|
'log_out_others' => 'Wyloguj inne urządzenia',
|
|
'modal_title' => 'Wyloguj inne urządzenia',
|
|
'modal_description_password' => 'Wprowadź swoje aktualne hasło, aby potwierdzić chęć wylogowania innych sesji przeglądarki.',
|
|
'modal_description_email' => 'Wpisz swój adres e-mail, aby potwierdzić chęć wylogowania innych sesji przeglądarki.',
|
|
'password_placeholder' => 'Aktualne hasło',
|
|
'email_placeholder' => 'E-mail Twojego konta',
|
|
'cancel' => 'Anuluj',
|
|
'submit' => 'Wyloguj inne urządzenia',
|
|
'email_mismatch' => 'Adres e-mail nie zgadza się z Twoim kontem.',
|
|
'flash_logged_out' => 'Zostałeś wylogowany z innych urządzeń.',
|
|
],
|
|
'password' => [
|
|
'update_title' => 'Zaktualizuj hasło',
|
|
'set_title' => 'Ustaw hasło',
|
|
'update_description' => 'Upewnij się, że Twoje konto używa długiego, losowego hasła, aby zachować bezpieczeństwo.',
|
|
'set_description' => 'Dodaj hasło, aby móc logować się bez połączonego dostawcy.',
|
|
'current_password' => 'Aktualne hasło',
|
|
'new_password' => 'Nowe hasło',
|
|
'confirm_password' => 'Potwierdź hasło',
|
|
'save' => 'Zapisz hasło',
|
|
'set' => 'Ustaw hasło',
|
|
],
|
|
'providers' => [
|
|
'title' => 'Połączone konta',
|
|
'description' => 'Loguj się szybciej dzięki tym połączonym dostawcom.',
|
|
'connected' => 'Połączone',
|
|
'not_connected' => 'Niepołączone',
|
|
'connect' => 'Połącz',
|
|
'disconnect' => 'Rozłącz',
|
|
'flash_disconnected' => ':provider zostało pomyślnie rozłączone.',
|
|
'flash_connected' => ':provider zostało pomyślnie połączone.',
|
|
'flash_already_linked' => 'To konto :provider jest już powiązane z innym użytkownikiem.',
|
|
'flash_cannot_disconnect' => 'Nie możesz rozłączyć swojej jedynej metody logowania. Najpierw ustaw hasło lub połącz innego dostawcę.',
|
|
],
|
|
],
|
|
|
|
'delete_account' => [
|
|
'heading' => 'Usuń konto',
|
|
'description' => 'Usuń swoje konto i wszystkie jego zasoby',
|
|
'warning' => 'Ostrzeżenie',
|
|
'warning_message' => 'Postępuj ostrożnie: tego nie da się cofnąć. Jeśli jesteś właścicielem tego konta, zaproszeni członkowie również zostaną trwale usunięci.',
|
|
'button' => 'Usuń konto',
|
|
'modal_title' => 'Czy na pewno chcesz usunąć swoje konto?',
|
|
'modal_description_password' => 'Po usunięciu konta wszystkie jego zasoby i dane również zostaną trwale usunięte. Jeśli jesteś właścicielem konta, zaproszeni członkowie również zostaną trwale usunięci. Wprowadź hasło, aby potwierdzić.',
|
|
'modal_description_email' => 'Po usunięciu konta wszystkie jego zasoby i dane również zostaną trwale usunięte. Jeśli jesteś właścicielem konta, zaproszeni członkowie również zostaną trwale usunięci. Wpisz swój adres e-mail :email, aby potwierdzić.',
|
|
'password' => 'Hasło',
|
|
'password_placeholder' => 'Hasło',
|
|
'email_placeholder' => 'E-mail Twojego konta',
|
|
'email_mismatch' => 'Adres e-mail nie zgadza się z Twoim kontem.',
|
|
'cancel' => 'Anuluj',
|
|
'confirm' => 'Usuń konto',
|
|
],
|
|
|
|
'workspace' => [
|
|
'tabs' => [
|
|
'workspace' => 'Przestrzeń robocza',
|
|
'brand' => 'Marka',
|
|
'users' => 'Członkowie',
|
|
'api_keys' => 'Klucze API',
|
|
'mcp' => 'MCP',
|
|
],
|
|
'title' => 'Ustawienia przestrzeni roboczej',
|
|
'logo_heading' => 'Logo przestrzeni roboczej',
|
|
'logo_description' => 'Prześlij logo dla swojej przestrzeni roboczej',
|
|
'heading' => 'Nazwa przestrzeni roboczej',
|
|
'description' => 'Zaktualizuj nazwę swojej przestrzeni roboczej',
|
|
'members_heading' => 'Członkowie',
|
|
'members_description' => 'Zarządzaj członkami i zaproszeniami przestrzeni roboczej',
|
|
'name' => 'Nazwa',
|
|
'name_placeholder' => 'Moja przestrzeń robocza',
|
|
'save' => 'Zapisz',
|
|
'danger_description' => 'Nieodwracalne działania.',
|
|
'delete_warning' => 'Ostrzeżenie',
|
|
'delete_title' => 'Usuń ten workspace',
|
|
'delete_description' => 'Trwale usuwa ten workspace wraz z postami, połączonymi kontami i mediami. Będziesz rozliczany za o jeden workspace mniej.',
|
|
'delete_description_self_hosted' => 'Trwale usuwa ten workspace, jego posty, połączone konta i media.',
|
|
'delete_only_description' => 'Nie możesz usunąć swojego jedynego workspace. Anuluj subskrypcję w rozliczeniach, aby przestać płacić, albo usuń konto w Uwierzytelnianiu, aby anulować rozliczenia i trwale usunąć wszystko.',
|
|
'delete_go_to_billing' => 'Przejdź do rozliczeń',
|
|
'delete_go_to_delete_account' => 'Usuń konto',
|
|
'delete_members_warning' => '{1}:count inny członek straci dostęp. Członkowie bez innego workspace w TryPost zostaną trwale usunięci.|[2,*]:count innych członków straci dostęp. Członkowie bez innego workspace w TryPost zostaną trwale usunięci.',
|
|
'delete_action' => 'Usuń workspace',
|
|
'delete_cancel' => 'Anuluj',
|
|
'delete_confirm_title' => 'Usunąć workspace?',
|
|
'delete_confirm_description' => 'To trwale usuwa workspace i wszystkie jego dane. Rozliczenia zostaną zaktualizowane, aby odzwierciedlić o jeden workspace mniej.',
|
|
'delete_confirm_description_self_hosted' => 'To trwale usuwa workspace i wszystkie jego dane.',
|
|
],
|
|
|
|
'brand' => [
|
|
'title' => 'Marka',
|
|
'description' => 'Skonfiguruj tożsamość swojej marki dla treści generowanych przez AI.',
|
|
'name' => 'Nazwa przestrzeni roboczej',
|
|
'name_placeholder' => 'Moja marka',
|
|
'website' => 'Strona internetowa',
|
|
'website_placeholder' => 'https://twojamarka.com',
|
|
'brand_description' => 'Opis',
|
|
'brand_description_placeholder' => 'Opowiedz nam o swojej marce, czym się zajmujesz i kim są Twoi odbiorcy...',
|
|
'voice' => 'Głos marki',
|
|
'voice_description' => 'Wybierz cechy, które definiują brzmienie Twoich treści.',
|
|
'voice_group' => [
|
|
'pov' => 'Punkt widzenia',
|
|
'formality' => 'Formalność',
|
|
'energy' => 'Energia',
|
|
'humor' => 'Humor',
|
|
'attitude' => 'Nastawienie',
|
|
'warmth' => 'Serdeczność',
|
|
'confidence' => 'Pewność siebie',
|
|
'style' => 'Styl',
|
|
],
|
|
'voice_trait' => [
|
|
'first_person' => 'Pierwsza osoba',
|
|
'second_person' => 'Druga osoba (ty)',
|
|
'third_person' => 'Trzecia osoba',
|
|
'formal' => 'Formalny',
|
|
'balanced' => 'Zrównoważony',
|
|
'casual' => 'Swobodny',
|
|
'calm' => 'Spokojny',
|
|
'moderate' => 'Umiarkowany',
|
|
'enthusiastic' => 'Entuzjastyczny',
|
|
'vibrant' => 'Żywy',
|
|
'serious' => 'Poważny',
|
|
'dry' => 'Suchy / subtelny',
|
|
'witty' => 'Dowcipny',
|
|
'playful' => 'Figlarny',
|
|
'respectful' => 'Pełen szacunku',
|
|
'even_handed' => 'Bezstronny',
|
|
'bold' => 'Śmiały',
|
|
'provocative' => 'Prowokacyjny',
|
|
'neutral' => 'Neutralny',
|
|
'friendly' => 'Przyjazny',
|
|
'empathetic' => 'Empatyczny',
|
|
'humble' => 'Skromny',
|
|
'confident' => 'Pewny siebie',
|
|
'assertive' => 'Asertywny',
|
|
'direct' => 'Bezpośredni',
|
|
'concise' => 'Zwięzły',
|
|
'transparent' => 'Przejrzysty',
|
|
'no_hype' => 'Bez szumu',
|
|
'practical' => 'Praktyczny',
|
|
'data_driven' => 'Oparty na danych',
|
|
'storytelling' => 'Narracyjny',
|
|
'inspirational' => 'Inspirujący',
|
|
'educational' => 'Edukacyjny',
|
|
'technical' => 'Techniczny',
|
|
'minimalist' => 'Mało emoji',
|
|
],
|
|
'brand_color' => 'Kolor marki',
|
|
'background_color' => 'Kolor tła',
|
|
'text_color' => 'Kolor tekstu',
|
|
'font' => 'Czcionka',
|
|
'image_style' => 'Styl obrazu',
|
|
'image_style_description' => 'Styl wizualny stosowany podczas generowania slajdów i okładek do postów AI.',
|
|
'image_style_cinematic' => 'Filmowy',
|
|
'image_style_illustration' => 'Ilustracja',
|
|
'image_style_isometric_3d' => 'Izometryczny',
|
|
'image_style_cartoon' => 'Kreskówkowy',
|
|
'image_style_typographic' => 'Typograficzny',
|
|
'image_style_infographic' => 'Infografika',
|
|
'image_style_minimalist' => 'Minimalistyczny',
|
|
'image_style_mockup' => 'Makieta',
|
|
'content_language' => 'Język treści',
|
|
'content_language_description' => 'Język używany w podpisach, hasztagach generowanych przez AI oraz w dowolnym tekście wewnątrz generowanych obrazów lub filmów.',
|
|
'font_placeholder' => 'Wybierz czcionkę…',
|
|
'font_search' => 'Szukaj czcionki…',
|
|
'font_empty' => 'Nie znaleziono czcionek.',
|
|
'language_placeholder' => 'Wybierz język…',
|
|
'language_search' => 'Szukaj języka…',
|
|
'language_empty' => 'Nie znaleziono języka.',
|
|
|
|
],
|
|
|
|
'members' => [
|
|
'title' => 'Członkowie',
|
|
'heading' => 'Członkowie zespołu',
|
|
'description' => 'Zarządzaj członkami i zaproszeniami tej przestrzeni roboczej',
|
|
|
|
'cancel' => 'Anuluj',
|
|
'remove' => 'Usuń',
|
|
'make_role' => 'Ustaw jako :role',
|
|
|
|
'invite' => [
|
|
'title' => 'Zaproś członka',
|
|
'description' => 'Wyślij zaproszenie e-mail, aby dodać współpracowników',
|
|
'email' => 'E-mail',
|
|
'email_placeholder' => 'wspolpracownik@email.com',
|
|
'role' => 'Rola',
|
|
'role_placeholder' => 'Wybierz rolę',
|
|
'submit' => 'Wyślij zaproszenie',
|
|
],
|
|
|
|
'pending' => [
|
|
'title' => 'Oczekujące zaproszenia',
|
|
'description' => 'Zaproszenia oczekujące na akceptację',
|
|
'empty' => 'Brak oczekujących zaproszeń',
|
|
],
|
|
|
|
'list' => [
|
|
'title' => 'Członkowie',
|
|
'description' => 'Osoby z dostępem do tej przestrzeni roboczej',
|
|
'empty' => 'Brak członków poza właścicielem',
|
|
],
|
|
|
|
'remove_modal' => [
|
|
'title' => 'Usuń członka',
|
|
'description' => 'Czy na pewno chcesz usunąć tego członka z przestrzeni roboczej? Utraci on dostęp do wszystkich zasobów przestrzeni roboczej.',
|
|
'action' => 'Usuń członka',
|
|
],
|
|
|
|
'cancel_invite_modal' => [
|
|
'title' => 'Anuluj zaproszenie',
|
|
'description' => 'Czy na pewno chcesz anulować to zaproszenie?',
|
|
'action' => 'Anuluj zaproszenie',
|
|
],
|
|
|
|
'roles' => [
|
|
'owner' => 'Właściciel',
|
|
'admin' => 'Administrator',
|
|
'member' => 'Członek',
|
|
'viewer' => 'Przeglądający',
|
|
],
|
|
|
|
'errors' => [
|
|
'invite_exists' => 'Zaproszenie dla tego adresu e-mail już istnieje.',
|
|
'email_belongs_to_account' => 'Ten adres e-mail należy już do innego konta TryPost. Poproś o dedykowany służbowy adres e-mail.',
|
|
],
|
|
|
|
'flash' => [
|
|
'invite_sent' => 'Zaproszenie zostało pomyślnie wysłane!',
|
|
'invite_deleted' => 'Zaproszenie usunięte.',
|
|
'member_removed' => 'Członek został pomyślnie usunięty.',
|
|
'role_updated' => 'Rola członka została zaktualizowana.',
|
|
'wrong_email' => 'To zaproszenie dotyczy innego adresu e-mail.',
|
|
'already_member' => 'Jesteś już członkiem tej przestrzeni roboczej.',
|
|
'invite_accepted' => 'Witamy! Jesteś teraz członkiem przestrzeni roboczej.',
|
|
'invite_workspace_gone' => 'To zaproszenie jest już nieważne, ponieważ przestrzeń robocza została usunięta.',
|
|
'invite_declined' => 'Zaproszenie odrzucone.',
|
|
],
|
|
],
|
|
|
|
'account' => [
|
|
'tabs' => [
|
|
'account' => 'Konto',
|
|
'usage' => 'Wykorzystanie',
|
|
'billing' => 'Rozliczenia',
|
|
],
|
|
'title' => 'Ustawienia konta',
|
|
'description' => 'Zarządzaj nazwą konta i e-mailem rozliczeniowym',
|
|
'name' => 'Nazwa konta',
|
|
'name_placeholder' => 'Moja firma',
|
|
'billing_email' => 'E-mail rozliczeniowy',
|
|
'billing_email_placeholder' => 'rozliczenia@firma.com',
|
|
'billing_email_hint' => 'Ten e-mail będzie używany do faktur i komunikacji rozliczeniowej ze Stripe.',
|
|
'submit' => 'Zapisz',
|
|
],
|
|
|
|
'flash' => [
|
|
'account_updated' => 'Konto zostało pomyślnie zaktualizowane!',
|
|
'profile_updated' => 'Profil został pomyślnie zaktualizowany!',
|
|
'password_updated' => 'Hasło zostało pomyślnie zaktualizowane!',
|
|
'workspace_updated' => 'Ustawienia zostały pomyślnie zaktualizowane!',
|
|
'photo_updated' => 'Zdjęcie zostało pomyślnie zaktualizowane!',
|
|
'photo_deleted' => 'Zdjęcie zostało pomyślnie usunięte!',
|
|
'delete_failed_billing' => 'Nie udało się anulować subskrypcji u dostawcy płatności. Nic nie zostało usunięte. Spróbuj ponownie lub skontaktuj się z pomocą.',
|
|
'logo_updated' => 'Logo zostało pomyślnie przesłane!',
|
|
'logo_deleted' => 'Logo zostało pomyślnie usunięte!',
|
|
'notifications_updated' => 'Preferencje powiadomień zostały zaktualizowane!',
|
|
],
|
|
|
|
'api_keys' => [
|
|
'title' => 'Klucze API',
|
|
'page_title' => 'Klucze API',
|
|
'heading' => 'Klucze API',
|
|
'description' => 'Zarządzaj kluczami API zapewniającymi programowy dostęp do Twojej przestrzeni roboczej.',
|
|
'create' => 'Utwórz klucz API',
|
|
'copy' => 'Kopiuj',
|
|
'new_token_message' => 'Twój nowy klucz API został utworzony. Skopiuj go teraz — nie będziesz mógł zobaczyć go ponownie.',
|
|
'table' => [
|
|
'name' => 'Nazwa',
|
|
'key' => 'Klucz',
|
|
'status' => 'Status',
|
|
'expires' => 'Wygasa',
|
|
'last_used' => 'Ostatnio użyty',
|
|
'never' => 'Nigdy',
|
|
],
|
|
'actions' => [
|
|
'copy_id' => 'Kopiuj identyfikator klucza API',
|
|
'copy_id_success' => 'Skopiowano identyfikator klucza API do schowka',
|
|
'delete' => 'Usuń',
|
|
],
|
|
'empty' => [
|
|
'title' => 'Brak kluczy API',
|
|
'description' => 'Utwórz klucz API, aby uzyskać programowy dostęp do swojej przestrzeni roboczej.',
|
|
],
|
|
'delete_modal' => [
|
|
'title' => 'Usuń klucz API',
|
|
'description' => 'Czy na pewno chcesz usunąć ten klucz API? Wszystkie aplikacje korzystające z tego klucza natychmiast utracą dostęp.',
|
|
'action' => 'Usuń klucz API',
|
|
],
|
|
'create_dialog' => [
|
|
'title' => 'Utwórz klucz API',
|
|
'description' => 'Utwórz nowy klucz API zapewniający programowy dostęp do Twojej przestrzeni roboczej.',
|
|
'name' => 'Nazwa',
|
|
'name_placeholder' => 'np. Produkcyjny klucz API',
|
|
'expires' => 'Data wygaśnięcia (opcjonalnie)',
|
|
'expires_placeholder' => 'Bez wygaśnięcia',
|
|
'submit' => 'Utwórz',
|
|
'cancel' => 'Anuluj',
|
|
],
|
|
'flash' => [
|
|
'created' => 'Klucz API został pomyślnie utworzony!',
|
|
'deleted' => 'Klucz API został pomyślnie usunięty!',
|
|
],
|
|
],
|
|
];
|