diff --git a/.changeset/hungry-bears-complain.md b/.changeset/hungry-bears-complain.md
new file mode 100644
index 000000000..406a309e2
--- /dev/null
+++ b/.changeset/hungry-bears-complain.md
@@ -0,0 +1,6 @@
+---
+"@logto/phrases": minor
+"@logto/phrases-ui": minor
+---
+
+add pl-PL translation
diff --git a/packages/phrases-ui/src/index.ts b/packages/phrases-ui/src/index.ts
index 2955f84da..0a9f8cac2 100644
--- a/packages/phrases-ui/src/index.ts
+++ b/packages/phrases-ui/src/index.ts
@@ -10,6 +10,7 @@ import fr from './locales/fr/index.js';
 import it from './locales/it/index.js';
 import ja from './locales/ja/index.js';
 import ko from './locales/ko/index.js';
+import plPL from './locales/pl-pl/index.js';
 import ptBR from './locales/pt-br/index.js';
 import ptPT from './locales/pt-pt/index.js';
 import ru from './locales/ru/index.js';
@@ -31,6 +32,7 @@ export const builtInLanguages = [
   'it',
   'ja',
   'ko',
+  'pl-PL',
   'pt-PT',
   'pt-BR',
   'ru',
@@ -59,6 +61,7 @@ const resource: Resource = {
   it,
   ja,
   ko,
+  'pl-PL': plPL,
   'pt-PT': ptPT,
   'pt-BR': ptBR,
   ru,
diff --git a/packages/phrases-ui/src/locales/pl-pl/action.ts b/packages/phrases-ui/src/locales/pl-pl/action.ts
new file mode 100644
index 000000000..64710de96
--- /dev/null
+++ b/packages/phrases-ui/src/locales/pl-pl/action.ts
@@ -0,0 +1,29 @@
+const action = {
+  sign_in: 'Zaloguj się',
+  continue: 'Kontynuuj',
+  create_account: 'Utwórz konto',
+  create_account_without_linking: 'Utwórz konto bez łączenia',
+  create: 'Utwórz',
+  enter_passcode: 'Wprowadź kod weryfikacyjny',
+  confirm: 'Potwierdź',
+  cancel: 'Anuluj',
+  save_password: 'Zapisz hasło',
+  bind: 'Połącz z {{address}}',
+  bind_and_continue: 'Połącz i kontynuuj',
+  back: 'Wróć',
+  nav_back: 'Wstecz',
+  agree: 'Zgadzam się',
+  got_it: 'Zrozumiałem',
+  sign_in_with: 'Kontynuuj z {{name}}',
+  forgot_password: 'Zapomniałeś hasła?',
+  switch_to: 'Przełącz na {{method}}',
+  sign_in_via_passcode: 'Zaloguj się za pomocą kodu weryfikacyjnego',
+  sign_in_via_password: 'Zaloguj się za pomocą hasła',
+  change: 'Zmień {{method}}',
+  link_another_email: 'Połącz inne konto email',
+  link_another_phone: 'Połącz inne konto telefoniczne',
+  link_another_email_or_phone: 'Połącz inne konto email lub telefoniczne',
+  show_password: 'Pokaż hasło',
+};
+
+export default action;
diff --git a/packages/phrases-ui/src/locales/pl-pl/demo-app.ts b/packages/phrases-ui/src/locales/pl-pl/demo-app.ts
new file mode 100644
index 000000000..0c61d2cc4
--- /dev/null
+++ b/packages/phrases-ui/src/locales/pl-pl/demo-app.ts
@@ -0,0 +1,5 @@
+const demo_app = {
+  notification: 'Wskazówka: Najpierw stwórz konto, aby przetestować proces logowania.',
+};
+
+export default demo_app;
diff --git a/packages/phrases-ui/src/locales/pl-pl/description.ts b/packages/phrases-ui/src/locales/pl-pl/description.ts
new file mode 100644
index 000000000..2666dce04
--- /dev/null
+++ b/packages/phrases-ui/src/locales/pl-pl/description.ts
@@ -0,0 +1,61 @@
+const opis = {
+  email: 'adres email',
+  phone_number: 'numer telefonu',
+  username: 'nazwa użytkownika',
+  reminder: 'Przypomnienie',
+  not_found: '404 Nie znaleziono',
+  agree_with_terms: 'Przeczytałem/am i zgadzam się z ',
+  agree_with_terms_modal: 'Do kontynuacji należy zaakceptować <link></link>.',
+  terms_of_use: 'Warunki korzystania',
+  sign_in: 'Zaloguj się',
+  privacy_policy: 'Polityka prywatności',
+  create_account: 'Utwórz konto',
+  or: 'lub',
+  and: 'i',
+  enter_passcode: 'Kod weryfikacyjny został wysłany na twoje {{address}} {{target}}',
+  passcode_sent: 'Kod weryfikacyjny został wysłany ponownie',
+  resend_after_seconds: 'Wyślij ponownie po <span>{{seconds}}</span> sekundach',
+  resend_passcode: 'Wyślij kod weryfikacyjny ponownie',
+  create_account_id_exists: 'Konto z {{type}} {{value}} już istnieje. Czy chcesz się zalogować?',
+  link_account_id_exists: 'Konto z {{type}} {{value}} już istnieje. Czy chcesz je połączyć?',
+  sign_in_id_does_not_exist:
+    'Konto z {{type}} {{value}} nie istnieje. Czy chcesz utworzyć nowe konto?',
+  sign_in_id_does_not_exist_alert: 'Konto z {{type}} {{value}} nie istnieje.',
+  create_account_id_exists_alert:
+    'Konto z {{type}} {{value}} jest połączone z innym kontem. Spróbuj inny {{type}}.',
+  social_identity_exist: '{{type}} {{value}} jest połączony z innym kontem. Spróbuj inny {{type}}.',
+  bind_account_title: 'Połącz lub utwórz konto',
+  social_create_account: 'Możesz utworzyć nowe konto.',
+  social_link_email: 'Możesz połączyć kolejny adres email',
+  social_link_phone: 'Możesz połączyć kolejny numer telefonu',
+  social_link_email_or_phone: 'Możesz połączyć kolejny adres email lub numer telefonu',
+  social_bind_with_existing: 'Znaleźliśmy powiązane konto, możesz go połączyć bezpośrednio.',
+  reset_password: 'Zresetuj hasło',
+  reset_password_description:
+    'Wpisz {{types, lista(type: złączonych;)}} związanego z twoim kontem, a wyślemy ci kod weryfikacyjny do zresetowania hasła.',
+  new_password: 'Nowe hasło',
+  set_password: 'Ustaw hasło',
+  password_changed: 'Hasło zmienione',
+  no_account: 'Nie masz jeszcze konta? ',
+  have_account: 'Masz już konto?',
+  enter_password: 'Wpisz hasło',
+  enter_password_for: 'Zaloguj się przy użyciu hasła do {{method}} {{value}}',
+  enter_username: 'Ustaw nazwę użytkownika',
+  enter_username_description:
+    'Nazwa użytkownika jest alternatywną formą logowania. Nazwa użytkownika powinna zawierać tylko litery, cyfry i podkreślenia.',
+  link_email: 'Połącz adres email',
+  link_phone: 'Połącz numer telefonu',
+  link_email_or_phone: 'Połącz adres email lub numer telefonu',
+  link_email_description: 'Dla zwiększenia bezpieczeństwa, proszę połączyć konto z adresem e-mail.',
+  link_phone_description:
+    'Dla zwiększenia bezpieczeństwa, proszę połączyć konto z numerem telefonu.',
+  link_email_or_phone_description:
+    'Dla zwiększenia bezpieczeństwa, proszę połączyć konto z adresem e-mail lub numerem telefonu.',
+  continue_with_more_information:
+    'Dla zwiększenia bezpieczeństwa, proszę uzupełnić poniższe informacje o koncie.',
+  create_your_account: 'Utwórz konto',
+  sign_in_to_your_account: 'Zaloguj się do swojego konta',
+  no_region_code_found: 'Nie znaleziono kodu regionu',
+};
+
+export default opis;
diff --git a/packages/phrases-ui/src/locales/pl-pl/error.ts b/packages/phrases-ui/src/locales/pl-pl/error.ts
new file mode 100644
index 000000000..aaf733ab8
--- /dev/null
+++ b/packages/phrases-ui/src/locales/pl-pl/error.ts
@@ -0,0 +1,24 @@
+const error = {
+  general_required: `{{types, list(type: disjunction;)}} jest wymagany`,
+  general_invalid: `{{types, list(type: disjunction;)}} jest nieprawidłowe`,
+  username_required: 'Nazwa użytkownika jest wymagana',
+  password_required: 'Hasło jest wymagane',
+  username_exists: 'Nazwa użytkownika już istnieje',
+  username_should_not_start_with_number: 'Nazwa użytkownika nie powinna zaczynać się od liczby',
+  username_invalid_charset:
+    'Nazwa użytkownika powinna zawierać tylko litery, liczby lub podkreślenia.',
+  invalid_email: 'Nieprawidłowy adres e-mail',
+  invalid_phone: 'Nieprawidłowy numer telefonu',
+  password_min_length: 'Hasło wymaga minimum {{min}} znaków',
+  invalid_password:
+    'Hasło wymaga minimum {{min}} znaków i zawiera kombinację liter, cyfr oraz symboli.',
+  passwords_do_not_match: 'Hasła nie pasują do siebie. Proszę spróbuj ponownie.',
+  invalid_passcode: 'Nieprawidłowy kod weryfikacyjny',
+  invalid_connector_auth: 'Nieprawidłowa autoryzacja',
+  invalid_connector_request: 'Nieprawidłowe dane konektora',
+  unknown: 'Nieznany błąd. Proszę spróbuj ponownie później.',
+  invalid_session: 'Sesja nie znaleziona. Proszę wróć i zaloguj się ponownie.',
+  timeout: 'Czas żądania upłynął. Proszę spróbuj ponownie później.',
+};
+
+export default error;
diff --git a/packages/phrases-ui/src/locales/pl-pl/index.ts b/packages/phrases-ui/src/locales/pl-pl/index.ts
new file mode 100644
index 000000000..497c0526b
--- /dev/null
+++ b/packages/phrases-ui/src/locales/pl-pl/index.ts
@@ -0,0 +1,21 @@
+import { type LocalePhrase } from '../../types.js';
+
+import action from './action.js';
+import demo_app from './demo-app.js';
+import description from './description.js';
+import error from './error.js';
+import input from './input.js';
+import secondary from './secondary.js';
+
+const plPL: LocalePhrase = Object.freeze({
+  translation: {
+    input,
+    secondary,
+    action,
+    description,
+    error,
+    demo_app,
+  },
+});
+
+export default plPL;
diff --git a/packages/phrases-ui/src/locales/pl-pl/input.ts b/packages/phrases-ui/src/locales/pl-pl/input.ts
new file mode 100644
index 000000000..186047c1b
--- /dev/null
+++ b/packages/phrases-ui/src/locales/pl-pl/input.ts
@@ -0,0 +1,10 @@
+const input = {
+  username: 'Nazwa użytkownika',
+  password: 'Hasło',
+  email: 'E-mail',
+  phone_number: 'Numer telefonu',
+  confirm_password: 'Potwierdź hasło',
+  search_region_code: 'Kod regionu wyszukiwania',
+};
+
+export default input;
diff --git a/packages/phrases-ui/src/locales/pl-pl/secondary.ts b/packages/phrases-ui/src/locales/pl-pl/secondary.ts
new file mode 100644
index 000000000..42f05d1c2
--- /dev/null
+++ b/packages/phrases-ui/src/locales/pl-pl/secondary.ts
@@ -0,0 +1,6 @@
+const secondary = {
+  social_bind_with:
+    'Masz już konto? Zaloguj się, aby połączyć {{methods, list(type: disjunction;)}} z twoją tożsamością społeczną.',
+};
+
+export default secondary;
diff --git a/packages/phrases/src/index.ts b/packages/phrases/src/index.ts
index 3b5789d12..5e5e142e4 100644
--- a/packages/phrases/src/index.ts
+++ b/packages/phrases/src/index.ts
@@ -10,6 +10,7 @@ import fr from './locales/fr/index.js';
 import it from './locales/it/index.js';
 import ja from './locales/ja/index.js';
 import ko from './locales/ko/index.js';
+import plPL from './locales/pl-pl/index.js';
 import ptBR from './locales/pt-br/index.js';
 import ptPT from './locales/pt-pt/index.js';
 import ru from './locales/ru/index.js';
@@ -31,6 +32,7 @@ export const builtInLanguages = [
   'it',
   'ja',
   'ko',
+  'pl-PL',
   'pt-BR',
   'pt-PT',
   'ru',
@@ -71,6 +73,7 @@ const resource: Resource = {
   it,
   ja,
   ko,
+  'pl-PL': plPL,
   'pt-BR': ptBR,
   'pt-PT': ptPT,
   ru,
diff --git a/packages/phrases/src/locales/pl-pl/errors/auth.ts b/packages/phrases/src/locales/pl-pl/errors/auth.ts
new file mode 100644
index 000000000..d867c77b8
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/auth.ts
@@ -0,0 +1,12 @@
+const auth = {
+  authorization_header_missing: 'Brak nagłówka autoryzacji',
+  authorization_token_type_not_supported: 'Nieobsługiwany typ autoryzacji',
+  unauthorized: 'Brak autoryzacji. Sprawdź swoje dane logowania i ich zakres.',
+  forbidden: 'Brak dostępu. Sprawdź swoje role użytkownika oraz uprawnienia.',
+  expected_role_not_found:
+    'Nie znaleziono oczekiwanej roli. Sprawdź swoje role użytkownika oraz uprawnienia.',
+  jwt_sub_missing: 'Brak `sub` w JWT.',
+  require_re_authentication: 'Wymagane ponowne uwierzytelnienie, aby wykonać chronione działanie.',
+};
+
+export default auth;
diff --git a/packages/phrases/src/locales/pl-pl/errors/connector.ts b/packages/phrases/src/locales/pl-pl/errors/connector.ts
new file mode 100644
index 000000000..a7fc2fbc7
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/connector.ts
@@ -0,0 +1,40 @@
+const connector = {
+  general: 'Wystąpił błąd włącznika: {{errorDescription}}',
+  not_found: 'Nie można znaleźć dostępnego łącznika dla typu: {{type}}.',
+  not_enabled: 'Łącznik nie jest włączony.',
+  invalid_metadata: 'Metadane łącznika są nieprawidłowe.',
+  invalid_config_guard: 'Ochrona konfiguracji łącznika jest nieprawidłowa.',
+  unexpected_type: 'Typ łącznika jest nieoczekiwany.',
+  invalid_request_parameters:
+    'Żądanie jest z nieprawidłowym parametrem wejściowym/lub parametrami wejściowymi.',
+  insufficient_request_parameters: 'Żądanie może nie zawierać niektórych parametrów wejściowych.',
+  invalid_config: 'Konfiguracja łącznika jest nieprawidłowa.',
+  invalid_response: 'Odpowiedź łącznika jest nieprawidłowa.',
+  template_not_found: 'Nie można znaleźć poprawnego szablonu w konfiguracji łącznika.',
+  not_implemented: '{{method}}: jeszcze nie zaimplementowano.',
+  social_invalid_access_token: 'Token dostępu łącznika jest nieprawidłowy.',
+  invalid_auth_code: 'Kod autoryzacji łącznika jest nieprawidłowy.',
+  social_invalid_id_token: 'Token ID łącznika jest nieprawidłowy.',
+  authorization_failed: 'Proces autoryzacji użytkownika zakończył się niepowodzeniem.',
+  social_auth_code_invalid:
+    'Nie udało się uzyskać tokenu dostępu, proszę sprawdzić kod autoryzacji.',
+  more_than_one_sms: 'Ilość łączników SMS jest większa niż 1.',
+  more_than_one_email: 'Ilość łączników e-mail jest większa niż 1.',
+  more_than_one_connector_factory:
+    'Znaleziono wiele fabryk łączników (z id {{connectorIds}}), możesz odinstalować niepotrzebne.',
+  db_connector_type_mismatch: 'W bazie danych znajduje się łącznik, który nie pasuje do typu.',
+  not_found_with_connector_id:
+    'Nie można odnaleźć łącznika o podanym standardowym identyfikatorze łącznika.',
+  multiple_instances_not_supported:
+    'Nie można utworzyć wielu instancji z wybranym standardowym łącznikiem.',
+  invalid_type_for_syncing_profile:
+    'Możesz tylko synchronizować profil użytkownika z łącznikami społecznościowymi.',
+  can_not_modify_target: "Nie można modyfikować 'target' łącznika.",
+  should_specify_target: "Powinieneś/nna/lno określić 'target'.",
+  multiple_target_with_same_platform:
+    "Nie można mieć wielu łączników społecznościowych z takim samym 'platforma i target'.",
+  cannot_overwrite_metadata_for_non_standard_connector:
+    'Nie można nadpisać "metadata" tego łącznika, który nie należy do standardu.',
+};
+
+export default connector;
diff --git a/packages/phrases/src/locales/pl-pl/errors/entity.ts b/packages/phrases/src/locales/pl-pl/errors/entity.ts
new file mode 100644
index 000000000..b7cc21f25
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/entity.ts
@@ -0,0 +1,8 @@
+const entity = {
+  create_failed: 'Nie udało się utworzyć {{name}}.',
+  not_exists: '{{name}} nie istnieje.',
+  not_exists_with_id: '{{name}} o identyfikatorze `{{id}}` nie istnieje.',
+  not_found: 'Zasób nie istnieje.',
+};
+
+export default entity;
diff --git a/packages/phrases/src/locales/pl-pl/errors/guard.ts b/packages/phrases/src/locales/pl-pl/errors/guard.ts
new file mode 100644
index 000000000..ee02fbee2
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/guard.ts
@@ -0,0 +1,9 @@
+const guard = {
+  invalid_input: 'Żądanie {{type}} jest nieprawidłowe.',
+  invalid_pagination: 'Nieprawidłowa wartość paginacji żądania.',
+  can_not_get_tenant_id: 'Nie można pobrać identyfikatora najemcy z żądania.',
+  file_size_exceeded: 'Przekroczono rozmiar pliku.',
+  mime_type_not_allowed: 'Nie dozwolony typ MIME.',
+};
+
+export default guard;
diff --git a/packages/phrases/src/locales/pl-pl/errors/index.ts b/packages/phrases/src/locales/pl-pl/errors/index.ts
new file mode 100644
index 000000000..c3f5e05ec
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/index.ts
@@ -0,0 +1,39 @@
+import auth from './auth.js';
+import connector from './connector.js';
+import entity from './entity.js';
+import guard from './guard.js';
+import localization from './localization.js';
+import log from './log.js';
+import oidc from './oidc.js';
+import password from './password.js';
+import request from './request.js';
+import role from './role.js';
+import scope from './scope.js';
+import session from './session.js';
+import sign_in_experiences from './sign-in-experiences.js';
+import storage from './storage.js';
+import swagger from './swagger.js';
+import user from './user.js';
+import verification_code from './verification-code.js';
+
+const errors = {
+  request,
+  auth,
+  guard,
+  oidc,
+  user,
+  password,
+  session,
+  connector,
+  verification_code,
+  sign_in_experiences,
+  localization,
+  swagger,
+  entity,
+  log,
+  role,
+  scope,
+  storage,
+};
+
+export default errors;
diff --git a/packages/phrases/src/locales/pl-pl/errors/localization.ts b/packages/phrases/src/locales/pl-pl/errors/localization.ts
new file mode 100644
index 000000000..98a70a619
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/localization.ts
@@ -0,0 +1,8 @@
+const localization = {
+  cannot_delete_default_language:
+    '{{languageTag}} jest ustawiony jako Twój język domyślny i nie można go usunąć.',
+  invalid_translation_structure:
+    'Nieprawidłowe schematy danych. Sprawdź swoje dane wejściowe i spróbuj ponownie.',
+};
+
+export default localization;
diff --git a/packages/phrases/src/locales/pl-pl/errors/log.ts b/packages/phrases/src/locales/pl-pl/errors/log.ts
new file mode 100644
index 000000000..6c3c76337
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/log.ts
@@ -0,0 +1,5 @@
+const log = {
+  invalid_type: 'Typ dziennika jest nieprawidłowy.',
+};
+
+export default log;
diff --git a/packages/phrases/src/locales/pl-pl/errors/oidc.ts b/packages/phrases/src/locales/pl-pl/errors/oidc.ts
new file mode 100644
index 000000000..6021fe73a
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/oidc.ts
@@ -0,0 +1,20 @@
+const oidc = {
+  aborted: 'Koniec interakcji z użytkownikiem.',
+  invalid_scope: 'Zakres {{scope}} nie jest obsługiwany.',
+  invalid_scope_plural: 'Zakresy {{scopes}} nie są obsługiwane.',
+  invalid_token: 'Podano nieprawidłowy token.',
+  invalid_client_metadata: 'Podano nieprawidłowe metadane klienta.',
+  insufficient_scope: 'Brakujący zakres żądanego tokena dostępu {{scopes}}.',
+  invalid_request: 'Żądanie jest nieprawidłowe.',
+  invalid_grant: 'Żądanie przyznania jest nieprawidłowe.',
+  invalid_redirect_uri:
+    'Adres URL `redirect_uri` nie pasuje do zarejestrowanych przez klienta `redirect_uris`.',
+  access_denied: 'Odmowa dostępu.',
+  invalid_target: 'Nieprawidłowy wskaźnik zasobów.',
+  unsupported_grant_type: 'Żądany typ `grant_type` nie jest obsługiwany.',
+  unsupported_response_mode: 'Żądany tryb `response_mode` nie jest obsługiwany.',
+  unsupported_response_type: 'Żądany typ `response_type` nie jest obsługiwany.',
+  provider_error: 'Wewnętrzny błąd OIDC: {{message}}.',
+};
+
+export default oidc;
diff --git a/packages/phrases/src/locales/pl-pl/errors/password.ts b/packages/phrases/src/locales/pl-pl/errors/password.ts
new file mode 100644
index 000000000..adc8e1bfd
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/password.ts
@@ -0,0 +1,6 @@
+const password = {
+  unsupported_encryption_method: 'Metoda szyfrowania {{name}} nie jest obsługiwana.',
+  pepper_not_found: 'Nie znaleziono wartości pepper dla hasła. Sprawdź swoje zmienne środowiskowe.',
+};
+
+export default password;
diff --git a/packages/phrases/src/locales/pl-pl/errors/request.ts b/packages/phrases/src/locales/pl-pl/errors/request.ts
new file mode 100644
index 000000000..4195ccfc9
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/request.ts
@@ -0,0 +1,6 @@
+const request = {
+  invalid_input: 'Nieprawidłowe dane wejściowe. {{details}}',
+  general: 'Wystąpił błąd żądania.',
+};
+
+export default request;
diff --git a/packages/phrases/src/locales/pl-pl/errors/role.ts b/packages/phrases/src/locales/pl-pl/errors/role.ts
new file mode 100644
index 000000000..514fe3e01
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/role.ts
@@ -0,0 +1,11 @@
+const role = {
+  name_in_use: 'Ta nazwa roli {{name}} jest już w użyciu',
+  scope_exists: 'Identyfikator zakresu {{scopeId}} został już dodany do tej roli',
+  user_exists: 'Identyfikator użytkownika {{userId}} został już dodany do tej roli',
+  default_role_missing:
+    'Niektóre z domyślnych nazw ról nie istnieją w bazie danych, upewnij się, że najpierw utworzysz role',
+  internal_role_violation:
+    'Możesz próbować zaktualizować lub usunąć rolę wewnętrzną, co jest zabronione przez Logto. Jeśli tworzysz nową rolę, spróbuj innej nazwy, która nie zaczyna się od "#internal:".',
+};
+
+export default role;
diff --git a/packages/phrases/src/locales/pl-pl/errors/scope.ts b/packages/phrases/src/locales/pl-pl/errors/scope.ts
new file mode 100644
index 000000000..d3501a67b
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/scope.ts
@@ -0,0 +1,6 @@
+const scope = {
+  name_exists: 'Nazwa zakresu {{name}} jest już używana',
+  name_with_space: 'Nazwa zakresu nie może zawierać spacji.',
+};
+
+export default scope;
diff --git a/packages/phrases/src/locales/pl-pl/errors/session.ts b/packages/phrases/src/locales/pl-pl/errors/session.ts
new file mode 100644
index 000000000..9c1beb291
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/session.ts
@@ -0,0 +1,25 @@
+const session = {
+  not_found: 'Nie znaleziono sesji. Proszę wrócić i zalogować się ponownie.',
+  invalid_credentials: 'Niepoprawne konto lub hasło. Sprawdź swoje dane wejściowe.',
+  invalid_sign_in_method: 'Aktualna metoda logowania jest niedostępna.',
+  invalid_connector_id: 'Nie można znaleźć dostępnego łącznika o id {{connectorId}}.',
+  insufficient_info: 'Niewystarczające informacje do zalogowania.',
+  connector_id_mismatch: 'Id łącznika nie pasuje do rekordu sesji.',
+  connector_session_not_found: 'Nie znaleziono sesji łącznika. Proszę wróć i zaloguj ponownie.',
+  verification_session_not_found:
+    'Weryfikacja nie powiodła się. Uruchom proces weryfikacji ponownie i spróbuj ponownie.',
+  verification_expired:
+    'Połączenie wygasło. Zweryfikuj ponownie, aby zapewnić bezpieczeństwo Twojego konta.',
+  unauthorized: 'Proszę się najpierw zalogować.',
+  unsupported_prompt_name: 'Nieobsługiwana nazwa podpowiedzi.',
+  forgot_password_not_enabled: 'Odzyskiwanie hasła nie jest włączone.',
+  verification_failed:
+    'Weryfikacja nie powiodła się. Uruchom proces weryfikacji ponownie i spróbuj ponownie.',
+  connector_validation_session_not_found: 'Nie znaleziono sesji łącznika dla weryfikacji tokena.',
+  identifier_not_found:
+    'Nie znaleziono identyfikatora użytkownika. Proszę wróć i zaloguj się ponownie.',
+  interaction_not_found:
+    'Nie znaleziono sesji interakcji. Proszę wróć i rozpocznij sesję ponownie.',
+};
+
+export default session;
diff --git a/packages/phrases/src/locales/pl-pl/errors/sign-in-experiences.ts b/packages/phrases/src/locales/pl-pl/errors/sign-in-experiences.ts
new file mode 100644
index 000000000..b798e3729
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/sign-in-experiences.ts
@@ -0,0 +1,22 @@
+const sign_in_experiences = {
+  empty_content_url_of_terms_of_use:
+    'Pusty adres URL zawartości "Regulaminu". Proszę dodać adres URL zawartości, jeśli funkcja "Regulamin" jest włączona.',
+  empty_social_connectors:
+    'Brak skojarzonych kont społecznościowych. Proszę dodać skojarzone konta społecznościowe, gdy metoda logowania za pomocą sieci społecznościowej jest włączona.',
+  enabled_connector_not_found: 'Nie znaleziono aktywowanego łącznika typu {{type}}.',
+  not_one_and_only_one_primary_sign_in_method:
+    'Musi istnieć jedna i tylko jedna podstawowa metoda logowania. Proszę sprawdzić swoje dane wejściowe.',
+  username_requires_password:
+    'Należy włączyć ustawienie hasła dla identyfikatora rejestracji nazwy użytkownika.',
+  passwordless_requires_verify:
+    'Należy włączyć weryfikację dla identyfikatora rejestracji adresu e-mail/telefonu.',
+  miss_sign_up_identifier_in_sign_in: 'Metody logowania muszą zawierać identyfikator rejestracji.',
+  password_sign_in_must_be_enabled:
+    'Logowanie za pomocą hasła musi być włączone, gdy w rejestracji wymagane jest ustawienie hasła.',
+  code_sign_in_must_be_enabled:
+    'Logowanie za pomocą kodu weryfikacyjnego musi być włączone, gdy w rejestracji nie jest wymagane ustawienie hasła.',
+  unsupported_default_language: 'Ten język - {{language}} nie jest obecnie obsługiwany.',
+  at_least_one_authentication_factor: 'Musisz wybrać co najmniej jeden czynnik uwierzytelniający.',
+};
+
+export default sign_in_experiences;
diff --git a/packages/phrases/src/locales/pl-pl/errors/storage.ts b/packages/phrases/src/locales/pl-pl/errors/storage.ts
new file mode 100644
index 000000000..d3b14a4ca
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/storage.ts
@@ -0,0 +1,7 @@
+const storage = {
+  not_configured: 'Nie skonfigurowano dostawcy magazynu.',
+  missing_parameter: 'Brak parametru {{parameter}} dla dostawcy magazynu.',
+  upload_error: 'Nie udało się przesłać pliku do dostawcy magazynu.',
+};
+
+export default storage;
diff --git a/packages/phrases/src/locales/pl-pl/errors/swagger.ts b/packages/phrases/src/locales/pl-pl/errors/swagger.ts
new file mode 100644
index 000000000..c4d03ac69
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/swagger.ts
@@ -0,0 +1,7 @@
+const swagger = {
+  invalid_zod_type: 'Nieprawidłowy typ Zod. Sprawdź konfigurację straży routy.',
+  not_supported_zod_type_for_params:
+    'Nieobsługiwany typ Zod dla parametrów. Sprawdź konfigurację straży routy.',
+};
+
+export default swagger;
diff --git a/packages/phrases/src/locales/pl-pl/errors/user.ts b/packages/phrases/src/locales/pl-pl/errors/user.ts
new file mode 100644
index 000000000..dc4e29f3e
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/user.ts
@@ -0,0 +1,34 @@
+const user = {
+  username_already_in_use: 'Nazwa użytkownika jest już zajęta.',
+  email_already_in_use: 'Ten email jest już powiązany z istniejącym kontem.',
+  phone_already_in_use: 'Ten numer telefonu jest już powiązany z istniejącym kontem.',
+  invalid_email: 'Nieprawidłowy adres email.',
+  invalid_phone: 'Nieprawidłowy numer telefonu.',
+  email_not_exist: 'Podany adres email nie został jeszcze zarejestrowany.',
+  phone_not_exist: 'Podany numer telefonu nie został jeszcze zarejestrowany.',
+  identity_not_exist: 'Konto społecznościowe nie zostało jeszcze zarejestrowane.',
+  identity_already_in_use: 'Konto społecznościowe zostało już powiązane z istniejącym kontem.',
+  social_account_exists_in_profile:
+    'To konto społecznościowe zostało już powiązane z Twoim profilem.',
+  cannot_delete_self: 'Nie możesz usunąć swojego konta.',
+  sign_up_method_not_enabled: 'Rejestracja tym sposobem jest wyłączona.',
+  sign_in_method_not_enabled: 'Logowanie tym sposobem jest wyłączone.',
+  same_password: 'Nowe hasło nie może być takie samo jak stare hasło.',
+  password_required_in_profile: 'Musisz ustawić hasło przed zalogowaniem.',
+  new_password_required_in_profile: 'Musisz ustawić nowe hasło.',
+  password_exists_in_profile: 'Hasło już istnieje w Twoim profilu.',
+  username_required_in_profile: 'Musisz ustawić nazwę użytkownika przed zalogowaniem.',
+  username_exists_in_profile: 'Nazwa użytkownika już istnieje w Twoim profilu.',
+  email_required_in_profile: 'Musisz dodać adres email przed zalogowaniem.',
+  email_exists_in_profile: 'Twój profil jest już powiązany z adresem email.',
+  phone_required_in_profile: 'Musisz dodać numer telefonu przed zalogowaniem.',
+  phone_exists_in_profile: 'Twój profil jest już powiązany z numerem telefonu.',
+  email_or_phone_required_in_profile:
+    'Musisz dodać adres email lub numer telefonu przed zalogowaniem.',
+  suspended: 'To konto jest zawieszone.',
+  user_not_exist: 'Użytkownik z identyfikatorem {{ identifier }} nie istnieje.',
+  missing_profile: 'Musisz podać dodatkowe informacje przed zalogowaniem.',
+  role_exists: 'Identyfikator roli {{roleId}} jest już dodany do tego użytkownika',
+};
+
+export default user;
diff --git a/packages/phrases/src/locales/pl-pl/errors/verification-code.ts b/packages/phrases/src/locales/pl-pl/errors/verification-code.ts
new file mode 100644
index 000000000..83fee9271
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/errors/verification-code.ts
@@ -0,0 +1,12 @@
+const verification_code = {
+  phone_email_empty: 'Oba pola telefonu i emaila są puste.',
+  not_found: 'Nie znaleziono kodu weryfikacyjnego. Proszę najpierw wysłać kod weryfikacyjny.',
+  phone_mismatch: 'Niepoprawny numer telefonu. Proszę poprosić o nowy kod weryfikacyjny.',
+  email_mismatch: 'Niepoprawny adres email. Proszę poprosić o nowy kod weryfikacyjny.',
+  code_mismatch: 'Nieprawidłowy kod weryfikacyjny.',
+  expired: 'Kod weryfikacyjny wygasł. Proszę poprosić o nowy kod weryfikacyjny.',
+  exceed_max_try:
+    'Osiągnięto limit prób kodu weryfikacyjnego. Proszę poprosić o nowy kod weryfikacyjny.',
+};
+
+export default verification_code;
diff --git a/packages/phrases/src/locales/pl-pl/index.ts b/packages/phrases/src/locales/pl-pl/index.ts
new file mode 100644
index 000000000..ad3241b65
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/index.ts
@@ -0,0 +1,11 @@
+import type { LocalePhrase } from '../../types.js';
+
+import errors from './errors/index.js';
+import translation from './translation/index.js';
+
+const plPL: LocalePhrase = Object.freeze({
+  translation,
+  errors,
+});
+
+export default plPL;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/api-resource-details.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/api-resource-details.ts
new file mode 100644
index 000000000..88b49cbdd
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/api-resource-details.ts
@@ -0,0 +1,32 @@
+const api_resource_details = {
+  page_title: 'Szczegóły zasobów API',
+  back_to_api_resources: 'Powróć do zasobów API',
+  settings_tab: 'Ustawienia',
+  permissions_tab: 'Uprawnienia',
+  settings: 'Ustawienia',
+  settings_description:
+    'Zasoby API, tzw. wskaźniki zasobów, wskazują na usługi lub zasoby docelowe, które mają być żądane, zwykle w zmiennej formatu URI reprezentującej tożsamość zasobu.',
+  token_expiration_time_in_seconds: 'Czas wygaśnięcia tokenu (w sekundach)',
+  token_expiration_time_in_seconds_placeholder: 'Wprowadź czas wygaśnięcia tokenu',
+  delete_description:
+    'Tej akcji nie można cofnąć. Spowoduje to trwałe usunięcie zasobu API. Wpisz nazwę zasobu API <span>{{name}}</span>, aby potwierdzić.',
+  enter_your_api_resource_name: 'Wprowadź nazwę swojego zasobu API',
+  api_resource_deleted: 'Zasób API {{name}} został pomyślnie usunięty',
+  permission: {
+    create_button: 'Utwórz uprawnienie',
+    create_title: 'Utwórz uprawnienie',
+    create_subtitle: 'Zdefiniuj uprawnienia (zakresy) wymagane przez to API.',
+    confirm_create: 'Utwórz uprawnienie',
+    name: 'Nazwa uprawnienia',
+    name_placeholder: 'ready:resource',
+    forbidden_space_in_name: 'Nazwa uprawnienia nie może zawierać spacji.',
+    description: 'Opis',
+    description_placeholder: 'Możliwość odczytu zasobów',
+    permission_created: 'Uprawnienie {{name}} zostało pomyślnie utworzone',
+    delete_description:
+      'Jeśli to uprawnienie zostanie usunięte, użytkownik, który miał to uprawnienie, straci dostęp przyznany przez nie.',
+    deleted: 'Uprawnienie "{{name}}" zostało pomyślnie usunięte!',
+  },
+};
+
+export default api_resource_details;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/api-resources.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/api-resources.ts
new file mode 100644
index 000000000..f54576cbc
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/api-resources.ts
@@ -0,0 +1,15 @@
+const api_resources = {
+  page_title: 'Zasoby API',
+  title: 'Zasoby API',
+  subtitle: 'Definiuj API, z których korzystać mogą twoje autoryzowane aplikacje',
+  create: 'Utwórz zasób API',
+  api_name: 'Nazwa API',
+  api_name_placeholder: 'Wprowadź nazwę swojego API',
+  api_identifier: 'Identyfikator API',
+  api_identifier_tip:
+    'Unikalny identyfikator zasobu API. Musi to być bezwzględny adres URI bez składnika fragmentu (#). Jest równy <a>parametrowi zasobu</a> w standardzie OAuth 2.0.',
+  api_resource_created: 'Zasób API {{name}} został pomyślnie utworzony',
+  api_identifier_placeholder: 'https://identyfikator-twojego-api/',
+};
+
+export default api_resources;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/application-details.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/application-details.ts
new file mode 100644
index 000000000..ed6efbf6e
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/application-details.ts
@@ -0,0 +1,51 @@
+const application_details = {
+  page_title: 'Szczegóły aplikacji',
+  back_to_applications: 'Powrót do Aplikacji',
+  check_guide: 'Sprawdź przewodnik',
+  settings: 'Ustawienia',
+  settings_description:
+    'Aplikacje są używane do identyfikowania Twoich aplikacji w Logto dla OIDC, doświadczenia logowania, dzienników audytowych itp.',
+  advanced_settings: 'Zaawansowane ustawienia',
+  advanced_settings_description:
+    'Zaawansowane ustawienia obejmują związane z OIDC terminy. Możesz sprawdzić punkt końcowy Token dla bardziej szczegółowych informacji.',
+  application_name: 'Nazwa aplikacji',
+  application_name_placeholder: 'Moja aplikacja',
+  description: 'Opis',
+  description_placeholder: 'Wpisz opis swojej aplikacji',
+  authorization_endpoint: 'Endpoint autoryzacji',
+  authorization_endpoint_tip:
+    'Endpoint wykorzystywany do autentykacji i autoryzacji. Używany jest dla OpenID Connect <a>Autentykacji</a>.',
+  application_id: 'ID aplikacji',
+  application_id_tip:
+    'Unikalny identyfikator aplikacji, który jest zwykle generowany przez Logto. Oznacza również „<a>client_id</a>” w OpenID Connect.',
+  application_secret: 'Tajny kod aplikacji',
+  redirect_uri: 'Adres URL przekierowania',
+  redirect_uris: 'Adresy URL przekierowania',
+  redirect_uri_placeholder: 'https://twoja.strona.com/aplikacja',
+  redirect_uri_placeholder_native: 'io.logto://callback',
+  redirect_uri_tip:
+    'Adres URL, na który użytkownik jest przekierowywany po zalogowaniu się (zarówno pozytywnym, jak i negatywnym). Zobacz OpenID Connect <a>AuthRequest</a> po więcej informacji.',
+  post_sign_out_redirect_uri: 'Adres URL przekierowania po wylogowaniu',
+  post_sign_out_redirect_uris: 'Adresy URL przekierowania po wylogowaniu',
+  post_sign_out_redirect_uri_placeholder: 'https://twoja.strona.com/strona-startowa',
+  post_sign_out_redirect_uri_tip:
+    'Adres URL, na który użytkownik jest przekierowywany po wylogowaniu (opcjonalnie). W niektórych rodzajach aplikacji może nie mieć to praktycznego wpływu.',
+  cors_allowed_origins: 'Dozwolone źródła CORS',
+  cors_allowed_origins_placeholder: 'https://twoja.strona.com',
+  cors_allowed_origins_tip:
+    'Domyślnie dozwolone będą wszystkie źródła z adresów URL przekierowania. Zazwyczaj nie wymaga to żadnych działań. Zobacz dokumentację <a>MDN</a> dla szczegółowych informacji.',
+  id_token_expiration: 'Ważność ID Token',
+  refresh_token_expiration: 'Ważność Token odświeżania',
+  token_endpoint: 'Endpoint Tokena',
+  user_info_endpoint: 'Endpoint Informacji o użytkowniku',
+  enable_admin_access: 'Włącz dostęp administratora',
+  enable_admin_access_label:
+    'Włącz lub wyłącz dostęp do interfejsu API zarządzania. Po włączeniu możesz używać tokenów dostępu do wywoływania interfejsu API zarządzania w imieniu tej aplikacji.',
+  delete_description:
+    'Ta operacja nie może zostać cofnięta. Skutkuje ona trwałym usunięciem aplikacji. Aby potwierdzić, wpisz nazwę aplikacji <span>{{name}}</span>.',
+  enter_your_application_name: 'Wpisz nazwę swojej aplikacji',
+  application_deleted: 'Aplikacja {{name}} została pomyślnie usunięta',
+  redirect_uri_required: 'Musisz wpisać co najmniej jeden adres URL przekierowania',
+};
+
+export default application_details;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/applications.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/applications.ts
new file mode 100644
index 000000000..54e876969
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/applications.ts
@@ -0,0 +1,53 @@
+const applications = {
+  page_title: 'Applications',
+  title: 'Applications',
+  subtitle:
+    'Set up Logto authentication for your native, single page, machine to machine, or traditional application',
+  create: 'Create Application',
+  application_name: 'Application name',
+  application_name_placeholder: 'My App',
+  application_description: 'Application description',
+  application_description_placeholder: 'Enter your application description',
+  select_application_type: 'Select an application type',
+  no_application_type_selected: 'You haven’t selected any application type yet',
+  application_created:
+    'The application {{name}} has been successfully created! \nNow finish your application settings.',
+  app_id: 'App ID',
+  type: {
+    native: {
+      title: 'Native App',
+      subtitle: 'An app that runs in a native environment',
+      description: 'E.g., iOS app, Android app',
+    },
+    spa: {
+      title: 'Single Page App',
+      subtitle: 'An app that runs in a web browser and dynamically updates data in place',
+      description: 'E.g., React DOM app, Vue app',
+    },
+    traditional: {
+      title: 'Traditional Web',
+      subtitle: 'An app that renders and updates pages by the web server alone',
+      description: 'E.g., Next.js, PHP',
+    },
+    machine_to_machine: {
+      title: 'Machine-to-Machine',
+      subtitle: 'An app (usually a service) that directly talks to resources',
+      description: 'E.g., Backend service',
+    },
+  },
+  guide: {
+    get_sample_file: 'Get Sample',
+    header_description:
+      'Follow a step by step guide to integrate your application or click the right button to get our sample project',
+    title: 'The application has been successfully created',
+    subtitle:
+      'Now follow the steps below to finish your app settings. Please select the SDK type to continue.',
+    description_by_sdk:
+      'This quick start guide demonstrates how to integrate Logto into {{sdk}} app',
+  },
+  placeholder_title: 'Select an application type to continue',
+  placeholder_description:
+    'Logto uses an application entity for OIDC to help with tasks such as identifying your apps, managing sign-in, and creating audit logs.',
+};
+
+export default applications;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/cloud.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/cloud.ts
new file mode 100644
index 000000000..19ee22fab
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/cloud.ts
@@ -0,0 +1,121 @@
+const cloud = {
+  welcome: {
+    page_title: 'Witaj',
+    title: 'Witaj i stwórz własny podgląd chmury Logto',
+    description:
+      'Nie ważne czy jesteś użytkownikiem open-source czy chmury, przejdź przez prezentacje i doświadcz pełnej wartości Logto. Podgląd chmury serwuje również jako wstępna wersja chmury Logto.',
+    project_field: 'Używam Logto do',
+    project_options: {
+      personal: 'Projektu osobistego',
+      company: 'Projektu firmowego',
+    },
+    deployment_type_field: 'Wolisz open-source czy chmurę?',
+    deployment_type_options: {
+      open_source: 'Open-Source',
+      cloud: 'Chmura',
+    },
+  },
+  about: {
+    page_title: 'Trochę o Tobie',
+    title: 'Trochę o Tobie',
+    description:
+      'Stwórz indywidualne wrażenia z Logto dzięki naszej wiedzy na temat Ciebie. Twoje informacje są bezpieczne u nas.',
+    title_field: 'Twój tytuł',
+    title_options: {
+      developer: 'Developer',
+      team_lead: 'Team Lead',
+      ceo: 'CEO',
+      cto: 'CTO',
+      product: 'Product',
+      others: 'Inne',
+    },
+    company_name_field: 'Nazwa firmy',
+    company_name_placeholder: 'Acme.co',
+    company_size_field: 'Jak wielka jest Twoja firma?',
+    company_options: {
+      size_1: '1',
+      size_2_49: '2-49',
+      size_50_199: '50-199',
+      size_200_999: '200-999',
+      size_1000_plus: '1000+',
+    },
+    reason_field: 'Rejestruję się, ponieważ',
+    reason_options: {
+      passwordless: 'Szukam uwierzytelnienia bez hasła i zestawu interfejsów użytkownika',
+      efficiency: 'Szukam infrastruktury tożsamości out-of-the-box',
+      access_control: 'Kontroluj dostęp użytkowników na podstawie ról i odpowiedzialności',
+      multi_tenancy: 'Szukam strategii dla produktu multi-mandantowego',
+      enterprise: 'Szukam rozwiązań SSO dla gotowości przedsiębiorstwa',
+      others: 'Inne',
+    },
+  },
+  congrats: {
+    page_title: 'Zarób wczesne kredyty',
+    title: 'Wspaniała wiadomość! Kwalifikujesz się do zyskania wczesnego kredytu na chmurę Logto!',
+    description:
+      'Nie przegap szansy na bezpłatną <strong>60-dniową</strong> subskrypcję na chmurę Logto po jej oficjalnym uruchomieniu! Skontaktuj się z zespołem Logto, aby dowiedzieć się więcej.',
+    check_out_button: 'Zobacz podgląd na żywo',
+    email_us_title:
+      'Napisz do nas maila w celu uzyskania oferty specjalnej i szczegółów dotyczących ceny',
+    email_us_description: 'Uzyskaj wyłączną ofertę cenową na oszczędność pieniędzy',
+    email_us_button: 'Wyślij e-mail',
+    join_description:
+      'Dołącz do naszej publicznej <a>{{link}}</a>, aby połączyć się i rozmawiać z innymi deweloperami.',
+    discord_link: 'kanał discord',
+    enter_admin_console: 'Wejdź do podglądu chmury Logto',
+  },
+  gift: {
+    title: 'Używaj Logto Cloud za darmo przez 60 dni. Dołącz do pionierów już teraz!',
+    description: 'Zarezerwuj spotkanie z naszym zespołem i zdobądź wczesny kredyt.',
+    reserve_title: 'Zarezerwuj swój czas z zespołem Logto',
+    reserve_description: 'Kredyt przysługuje tylko raz po ocenie.',
+    book_button: 'Rezerwuj',
+    email_us_title: 'Napisz do nas',
+    email_us_description: 'Skontaktuj się z nami, aby otrzymać ofertę specjalną i szczegóły cen.',
+    email_us_button: 'Wyślij',
+  },
+  sie: {
+    page_title: 'Dostosuj doświadczenie logowania',
+    title: 'Najpierw dostosuj swoje doświadczenie logowania',
+    inspire: {
+      title: 'Stwórz przykłady',
+      description:
+        'Nie jesteś pewien swojego doświadczenia logowania? Kliknij "Zainspiruj mnie" i pozwól, żeby magia się stała!',
+      inspire_me: 'Zainspiruj mnie',
+    },
+    logo_field: 'Logo aplikacji',
+    color_field: 'Kolor marki',
+    identifier_field: 'Identyfikator',
+    identifier_options: {
+      email: 'E-mail',
+      phone: 'Telefon',
+      user_name: 'Nazwa użytkownika',
+    },
+    authn_field: 'Uwierzytelnianie',
+    authn_options: {
+      password: 'Hasło',
+      verification_code: 'Kod weryfikacyjny',
+    },
+    social_field: 'Logowanie społecznościowe',
+    finish_and_done: 'Skończone i gotowe',
+    preview: {
+      mobile_tab: 'Mobilny',
+      web_tab: 'Sieć',
+    },
+    connectors: {
+      unlocked_later: 'Zostanie odblokowane później',
+      unlocked_later_tip:
+        'Po ukończeniu procesu wprowadzenia do użytku i wejściu do produktu będziesz mieć dostęp do jeszcze większej liczby metod logowania społecznościowego.',
+      notice:
+        'Prosimy, unikaj korzystania z demo konektora do celów produkcyjnych. Po zakończeniu testów, uprzejmie usuń demokonwerter i skonfiguruj swój własny konektor z własnymi poświadczeniami.',
+    },
+  },
+  broadcast: '📣 Jesteś w Logto Cloud (Podgląd)',
+  socialCallback: {
+    title: 'Zalogowałeś się pomyślnie',
+    description:
+      'Zalogowałeś się pomyślnie używając swojego konta społecznościowego. Aby zapewnić bezproblemową integrację i dostęp do wszystkich funkcji Logto, zalecamy przejście do konfiguracji własnego konektora społecznościowego.',
+  },
+};
+
+export default cloud;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/components.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/components.ts
new file mode 100644
index 000000000..e7dc053b0
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/components.ts
@@ -0,0 +1,15 @@
+const components = {
+  uploader: {
+    action_description: 'Przeciągnij i upuść lub przeszukaj',
+    uploading: 'Wysyłanie...',
+    image_limit:
+      'Wyślij obraz o rozmiarze mniejszym niż {{size, number}}KB, tylko w formacie {{extensions, list(style: narrow; type: conjunction;)}}.',
+    error_upload: 'Coś poszło nie tak. Nie udało się wysłać pliku.',
+    error_file_size:
+      'Plik jest zbyt duży. Wyślij plik o rozmiarze mniejszym niż {{size, number}}KB.',
+    error_file_type:
+      'Ten typ pliku nie jest obsługiwany. Obsługiwane formaty to {{extensions, list(style: narrow; type: conjunction;)}}.',
+  },
+};
+
+export default components;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/connector-details.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/connector-details.ts
new file mode 100644
index 000000000..80cec9894
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/connector-details.ts
@@ -0,0 +1,35 @@
+const connector_details = {
+  page_title: 'Szczegóły konektora',
+  back_to_connectors: 'Powrót do konektorów',
+  check_readme: 'Sprawdź README',
+  settings: 'Ustawienia ogólne',
+  settings_description:
+    'Konektory odgrywają kluczową rolę w Logto. Dzięki nim, Logto umożliwia użytkownikom końcowym korzystanie z rejestracji lub logowania bez hasła oraz możliwości logowania się za pomocą kont społecznościowych.',
+  parameter_configuration: 'Konfiguracja parametru',
+  test_connection: 'Testuj połączenie',
+  save_error_empty_config: 'Proszę wprowadzić konfigurację',
+  send: 'Wyślij',
+  send_error_invalid_format: 'Nieprawidłowy format danych wejściowych',
+  edit_config_label: 'Wprowadź swoje dane JSON tutaj',
+  test_email_sender: 'Wypróbuj konektor e-mail',
+  test_sms_sender: 'Wypróbuj konektor SMS',
+  test_email_placeholder: 'jan.kowalski@example.com',
+  test_sms_placeholder: '+48 123-456-789',
+  test_message_sent: 'Wiadomość testowa została wysłana',
+  test_sender_description:
+    'Logto używa szablonu "Ogólny" do testów. Otrzymasz wiadomość, jeśli twój konektor jest prawidłowo skonfigurowany.',
+  options_change_email: 'Zmień konektor e-mail',
+  options_change_sms: 'Zmień konektor SMS',
+  connector_deleted: 'Konektor został pomyślnie usunięty',
+  type_email: 'Konektor e-mail',
+  type_sms: 'Konektor SMS',
+  type_social: 'Konektor społecznościowy',
+  in_used_social_deletion_description:
+    'Ten konektor jest używany w Twoim procesie logowania. Usunięcie spowoduje usunięcie doświadczenia logowania <name/> w ustawieniach doświadczenia logowania. Będziesz musiał go ponownie skonfigurować, jeśli zdecydujesz się go dodać z powrotem.',
+  in_used_passwordless_deletion_description:
+    'Ten {{name}} jest używany w Twoim procesie logowania. Usunięcie spowoduje, że Twoje doświadczenie logowania nie będzie działać poprawnie, dopóki nie rozwiążesz konfliktu. Będziesz musiał go ponownie skonfigurować, jeśli zdecydujesz się go dodać z powrotem.',
+  deletion_description:
+    'Usuwasz ten konektor. Nie można tego cofnąć, będziesz musiał go ponownie skonfigurować, jeśli zdecydujesz się go ponownie dodać.',
+};
+
+export default connector_details;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/connectors.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/connectors.ts
new file mode 100644
index 000000000..fe5be2c1c
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/connectors.ts
@@ -0,0 +1,90 @@
+const connectors = {
+  page_title: 'Łączniki',
+  title: 'Łączniki',
+  subtitle: 'Skonfiguruj łączniki, aby umożliwić bezhasłowe i społecznościowe logowanie',
+  create: 'Dodaj łącznik społecznościowy',
+  config_sie_notice: 'Ustawiono łączniki. Upewnij się, że skonfigurowałeś to w <a>{{link}}</a>.',
+  config_sie_link_text: 'doświadczenie logowania',
+  tab_email_sms: 'Łączniki e-mail i SMS',
+  tab_social: 'Łączniki społecznościowe',
+  connector_name: 'Nazwa łącznika',
+  demo_tip:
+    'Maksymalna liczba wiadomości dozwolona dla tego Łącznika demonstracyjnego wynosi 100 i nie jest zalecana do wdrożenia w środowisku produkcyjnym.',
+  social_demo_tip:
+    'Łącznik demonstracyjny został zaprojektowany wyłącznie dla celów demonstracyjnych i nie jest zalecany do wdrożenia w środowisku produkcyjnym.',
+  connector_type: 'Typ',
+  connector_status: 'Doświadczenie logowania',
+  connector_status_in_use: 'W użyciu',
+  connector_status_not_in_use: 'Nie w użyciu',
+  not_in_use_tip: {
+    content:
+      'Nie w użyciu oznacza, że Twoje doświadczenie logowania nie użyło tej metody logowania. <a>{{link}}</a> aby dodać tę metodę logowania.',
+    go_to_sie: 'Przejdź do doświadczenia logowania',
+  },
+  placeholder_title: 'Łącznik społecznościowy',
+  placeholder_description:
+    'Logto dostarczył wiele powszechnie używanych łączników społecznościowych, tymczasem możesz utworzyć własne z wykorzystaniem standardowych protokołów.',
+  save_and_done: 'Zapisz i zakończ',
+  type: {
+    email: 'Łącznik e-mail',
+    sms: 'Łącznik SMS',
+    social: 'Łącznik społecznościowy',
+  },
+  setup_title: {
+    email: 'Skonfiguruj łącznik e-mail',
+    sms: 'Skonfiguruj łącznik SMS',
+    social: 'Dodaj łącznik społecznościowy',
+  },
+  guide: {
+    subtitle: 'Przewodnik krok po kroku do konfiguracji Twojego łącznika',
+    general_setting: 'Ustawienia ogólne',
+    parameter_configuration: 'Konfiguracja parametrów',
+    test_connection: 'Testuj połączenie',
+    name: 'Nazwa przycisku logowania społecznościowego',
+    name_placeholder: 'Wpisz nazwę przycisku logowania społecznościowego',
+    name_tip:
+      'Nazwa przycisku łącznika będzie wyświetlana jako "Kontynuuj z {{name}}." Uwzględnij długość nazwy, gdyż może stać się zbyt długa.',
+    logo: 'Logo URL łącznika społecznościowego',
+    logo_placeholder: 'https://your.cdn.domain/logo.png',
+    logo_tip:
+      'Obraz logo zostanie wyświetlony na łączniku. Uzyskaj publicznie dostępny link do obrazu i wklej tutaj link.',
+    logo_dark: 'Logo URL łącznika społecznościowego (tryb ciemny)',
+    logo_dark_placeholder: 'https://your.cdn.domain/logo.png',
+    logo_dark_tip:
+      'Ustaw logo łącznika dla trybu ciemnego po jego włączeniu w Doświadczeniu logowania w Konsoli Admina.',
+    logo_dark_collapse: 'Zwiń',
+    logo_dark_show: 'Pokaż ustawienia logo dla trybu ciemnego',
+    target: 'Nazwa dostawcy tożsamości',
+    target_placeholder: 'Wpisz nazwę dostawcy tożsamości łącznika',
+    target_tip:
+      'Wartość „Nazwy dostawcy tożsamości” może być unikalnym ciągiem identyfikującym, który odróżnia Twoje tożsamości społecznościowe. Po utworzeniu łącznika nie możesz go zmienić.',
+    target_tooltip:
+      '„Nazwa dostawcy tożsamości” w łącznikach społecznościowych Logto odnosi się do "źródła" Twoich tożsamości społecznościowych. W projektowaniu Logto nie akceptujemy tych samych „Nazw dostawców tożsamości” konkretnej platformy, aby uniknąć konfliktów. Powinieneś bardzo uważać przed dodaniem łącznika, ponieważ NIE MOŻESZ zmienić jego wartości po utworzeniu. <a>Dowiedz się więcej.</a>',
+    target_conflict:
+      'Wprowadzona nazwa IdP pasuje do istniejącego łącznika <span>nazwa</span>. Użycie tej samej nazwy IdP może spowodować nieoczekiwane zachowanie logowania, gdzie użytkownicy mogą uzyskać dostęp do tego samego konta za pośrednictwem dwóch różnych łączników.',
+    target_conflict_line2:
+      'Jeśli chcesz zastąpić aktualny łącznik tym samym dostawcą tożsamości i umożliwić poprzednim użytkownikom logowanie bez rejestracji ponownie, usuń łącznik <span>nazwa</span> i utwórz nowy z tą samą „Nazwą dostawcy tożsamości”.',
+    target_conflict_line3:
+      'Jeśli chcesz połączyć się z innym dostawcą tożsamości, zmodyfikuj „Nazwę dostawcy tożsamości” i kontynuuj.',
+    config: 'Wprowadź swój JSON konfiguracji',
+    sync_profile: 'Synchronizuj informacje profilowe',
+    sync_profile_only_at_sign_up: 'Synchronizuj tylko podczas rejestracji',
+    sync_profile_each_sign_in: 'Zawsze wykonaj synchronizację przy każdym logowaniu',
+    sync_profile_tip:
+      'Synchronizuje podstawowy profil z dostawcy usług społecznościowych, takie jak nazwy użytkowników i ich awatary.',
+    callback_uri: 'URI zwrotu (Callback)',
+    callback_uri_description:
+      'Nazywany także URI przekierowania, to URI w Logto, do którego użytkownicy zostaną przesłani po autoryzacji społecznej; skopiuj i wklej na stronie konfiguracyjnej dostawcy usług społecznościowych.',
+  },
+  platform: {
+    universal: 'Uniwersalny',
+    web: 'Web',
+    native: 'Natywny',
+  },
+  add_multi_platform: 'obsługuje wiele platform, wybierz platformę, aby kontynuować',
+  drawer_title: 'Poradnik łącznika',
+  drawer_subtitle: 'Postępuj zgodnie z instrukcjami, aby zintegrować swój łącznik',
+  unknown: 'Nieznany Łącznik',
+};
+
+export default connectors;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/contact.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/contact.ts
new file mode 100644
index 000000000..62aac8b49
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/contact.ts
@@ -0,0 +1,22 @@
+const contact = {
+  title: 'Skontaktuj się z nami',
+  description:
+    'Dołącz do naszej społeczności, żeby dać opinię, poprosić o pomoc i podzielić się swoimi myślami z innymi developerami',
+  discord: {
+    title: 'Kanał Discord',
+    description: 'Dołącz do naszego publicznego kanału, żeby rozmawiać z innymi developerami',
+    button: 'Dołącz',
+  },
+  github: {
+    title: 'GitHub',
+    description: 'Utwórz problem i wyślij na GitHub',
+    button: 'Otwórz',
+  },
+  email: {
+    title: 'Wyślij e-mail',
+    description: 'Wyślij nam e-maila dla dalszych informacji i pomocy',
+    button: 'Wyślij',
+  },
+};
+
+export default contact;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/dashboard.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/dashboard.ts
new file mode 100644
index 000000000..123818af6
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/dashboard.ts
@@ -0,0 +1,22 @@
+const dashboard = {
+  page_title: 'Panel',
+  title: 'Panel',
+  description: 'Przegląd wydajności Twojej aplikacji',
+  total_users: 'Wszyscy użytkownicy',
+  total_users_tip: 'Wszyscy użytkownicy',
+  new_users_today: 'Nowi użytkownicy dzisiaj',
+  new_users_today_tip: 'Liczba nowych użytkowników zarejestrowanych dzisiaj',
+  new_users_7_days: 'Nowi użytkownicy w ciągu ostatnich 7 dni',
+  new_users_7_days_tip: 'Liczba nowych użytkowników zarejestrowanych w ciągu ostatnich 7 dni',
+  daily_active_users: 'Dziennie aktywni użytkownicy',
+  daily_active_users_tip:
+    'Liczba unikalnych użytkowników wymieniających tokeny na Twojej aplikacji dziś',
+  weekly_active_users: 'Tygodniowo aktywni użytkownicy',
+  weekly_active_users_tip:
+    'Liczba unikalnych użytkowników wymieniających tokeny na Twojej aplikacji w ciągu ostatnich 7 dni',
+  monthly_active_users: 'Miesięcznie aktywni użytkownicy',
+  monthly_active_users_tip:
+    'Liczba unikalnych użytkowników wymieniających tokeny na Twojej aplikacji w ciągu ostatnich 30 dni',
+};
+
+export default dashboard;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/errors.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/errors.ts
new file mode 100644
index 000000000..21ed21e5c
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/errors.ts
@@ -0,0 +1,25 @@
+const errors = {
+  something_went_wrong: 'Ups! Coś poszło nie tak.',
+  page_not_found: 'Nie znaleziono strony',
+  unknown_server_error: 'Wystąpił nieznany błąd serwera',
+  empty: 'Brak danych',
+  missing_total_number: 'Nie można znaleźć wartości Total-Number w nagłówkach odpowiedzi',
+  invalid_uri_format: 'Nieprawidłowy format URI',
+  invalid_origin_format: 'Nieprawidłowy format pochodzenia URI',
+  invalid_json_format: 'Nieprawidłowy format JSON',
+  invalid_error_message_format: 'Nieprawidłowy format komunikatu błędu.',
+  required_field_missing: 'Wpisz {{field}}',
+  required_field_missing_plural: 'Musisz wprowadzić przynajmniej jeden {{field}}',
+  more_details: 'Więcej szczegółów',
+  username_pattern_error:
+    'Nazwa użytkownika powinna zawierać tylko litery, cyfry lub znak podkreślenia i nie powinna zaczynać się od cyfry.',
+  password_pattern_error:
+    'Hasło wymaga minimum {{min}} znaków i zawiera kombinację liter, cyfr i symboli.',
+  insecure_contexts: 'Nieobsługiwane są niebezpieczne konteksty (non-HTTPS).',
+  unexpected_error: 'Wystąpił nieoczekiwany błąd.',
+  not_found: '404 nie znaleziono',
+  create_internal_role_violation:
+    'Tworzysz nową wewnętrzną rolę, co jest zabronione przez Logto. Spróbuj użyć innego nazwy, która nie zaczyna się od "# internal:".',
+};
+
+export default errors;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/general.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/general.ts
new file mode 100644
index 000000000..7a13d9136
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/general.ts
@@ -0,0 +1,55 @@
+const general = {
+  placeholder: 'Miejsce na tekst',
+  skip: 'Pomiń',
+  next: 'Dalej',
+  back: 'Wstecz',
+  retry: 'Spróbuj ponownie',
+  done: 'Gotowe',
+  search: 'Szukaj',
+  search_placeholder: 'Szukaj',
+  clear_result: 'Wyczyść Wyniki',
+  save: 'Zapisz',
+  save_changes: 'Zapisz zmiany',
+  saved: 'Zapisane!',
+  discard: 'Porzuć',
+  loading: 'Trwa ładowanie...',
+  redirecting: 'Przekierowywanie...',
+  add: 'Dodaj',
+  added: 'Dodano',
+  cancel: 'Anuluj',
+  confirm: 'Potwierdź',
+  check_out: 'Zapłać i wyjdź',
+  create: 'Stwórz',
+  set_up: 'Skonfiguruj',
+  customize: 'Dostosuj',
+  enable: 'Włącz',
+  reminder: 'Przypomnienie',
+  delete: 'Usuń',
+  more_options: 'WIĘCEJ OPCJI',
+  close: 'Zamknij',
+  copy: 'Kopiuj',
+  copying: 'Kopiowanie',
+  copied: 'Skopiowano',
+  required: 'Wymagane',
+  add_another: 'Dodaj kolejny',
+  deletion_confirmation: 'Czy na pewno chcesz usunąć {{title}}?',
+  settings_nav: 'Ustawienia',
+  unsaved_changes_warning: 'Wprowadzono zmiany. Czy na pewno chcesz opuścić tę stronę?',
+  leave_page: 'Opuść stronę',
+  stay_on_page: 'Pozostań na stronie',
+  type_to_search: 'Szukaj',
+  got_it: 'Zrozumiałe(a)m',
+  continue: 'Kontynuuj',
+  page_info: '{{min, number}}-{{max, number}} z {{total, number}}',
+  learn_more: 'Dowiedz się więcej',
+  tab_errors: '{{count, number}} błędów',
+  skip_for_now: 'Pomiń na teraz',
+  remove: 'Usuń',
+  visit: 'Odwiedź',
+  join: 'Dołącz',
+  try_now: 'Wypróbuj teraz',
+  multiple_form_field: '(Wiele)',
+  demo: 'Demo',
+};
+
+export default general;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/get-started.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/get-started.ts
new file mode 100644
index 000000000..2b09a4358
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/get-started.ts
@@ -0,0 +1,34 @@
+const get_started = {
+  page_title: 'Rozpocznij',
+  progress: 'Przewodnik rozpoczęcia: {{completed}}/{{total}}',
+  progress_dropdown_title: 'Kilka rzeczy, które możesz zrobić...',
+  title: 'Coś do odkrycia, aby pomóc ci odnieść sukces',
+  subtitle_part1: 'Kilka rzeczy, które możesz zrobić, aby szybko osiągnąć wartość Logto',
+  subtitle_part2: 'Jestem ekspertem i ukończyłem wszystkie etapy.',
+  hide_this: 'Ukryj to',
+  confirm_message: 'Jesteś pewny, że chcesz ukryć tę stronę? Tej czynności nie można cofnąć.',
+  check_preview_title: 'Sprawdź podgląd na żywo',
+  check_preview_subtitle:
+    'Wypróbuj teraz doświadczenie Logto przy logowaniu, aby zobaczyć, jak działa',
+  integration_title: 'Utwórz i zintegruj swoją aplikację',
+  integration_subtitle:
+    'Skonfiguruj uwierzytelnianie Logto dla swojej aplikacji natywnej, jednostronicowej, maszynowej lub tradycyjnej',
+  custom_sie_title: 'Dostosuj doświadczenie logowania',
+  custom_sie_subtitle: 'Odblokuj szeroki zakres scenariuszy za pomocą zaawansowanych ustawień',
+  passwordless_title: 'Skaluj logowanie bez hasła, dodając własne łączniki',
+  passwordless_subtitle:
+    'Spróbuj logowania bez hasła i zapewnij swoim klientom bezpieczne i bezproblemowe doświadczenie',
+  community_title: 'Dołącz do naszej społeczności Discord',
+  community_subtitle: 'Dołącz do naszego publicznego kanału, aby porozmawiać z innymi deweloperami',
+  management_api_title: 'Interakcja z API zarządzania',
+  management_api_subtitle:
+    'Bezpośrednio połącz swój system uwierzytelniający z naszym API zarządzania',
+  further_readings_title: 'Dalsza lektura',
+  further_readings_subtitle:
+    'Sprawdź nasze krok po kroku, oparte na scenariuszach dokumenty bez nużących pojęć',
+  add_rbac_title: 'Dodaj kontrolę dostępu opartą na rolach, aby chronić swoje zasoby',
+  add_rbac_subtitle:
+    'Kontroluj swoje zasoby poprzez skalowalną autoryzację ról dla różnorodnych przypadków użycia.',
+};
+
+export default get_started;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts
new file mode 100644
index 000000000..8ffecb483
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts
@@ -0,0 +1,62 @@
+import api_resource_details from './api-resource-details.js';
+import api_resources from './api-resources.js';
+import application_details from './application-details.js';
+import applications from './applications.js';
+import cloud from './cloud.js';
+import components from './components.js';
+import connector_details from './connector-details.js';
+import connectors from './connectors.js';
+import contact from './contact.js';
+import dashboard from './dashboard.js';
+import errors from './errors.js';
+import general from './general.js';
+import get_started from './get-started.js';
+import log_details from './log-details.js';
+import logs from './logs.js';
+import menu from './menu.js';
+import permissions from './permissions.js';
+import profile from './profile.js';
+import role_details from './role-details.js';
+import roles from './roles.js';
+import session_expired from './session-expired.js';
+import sign_in_exp from './sign-in-exp/index.js';
+import tab_sections from './tab-sections.js';
+import tabs from './tabs.js';
+import user_details from './user-details.js';
+import users from './users.js';
+import welcome from './welcome.js';
+
+const admin_console = {
+  title: '관리자 콘솔',
+  admin_user: '관리자',
+  system_app: '시스템',
+  menu,
+  general,
+  errors,
+  tab_sections,
+  tabs,
+  applications,
+  application_details,
+  api_resources,
+  api_resource_details,
+  connectors,
+  connector_details,
+  get_started,
+  users,
+  user_details,
+  contact,
+  sign_in_exp,
+  dashboard,
+  logs,
+  log_details,
+  session_expired,
+  welcome,
+  roles,
+  role_details,
+  permissions,
+  cloud,
+  profile,
+  components,
+};
+
+export default admin_console;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/log-details.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/log-details.ts
new file mode 100644
index 000000000..b371db4ce
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/log-details.ts
@@ -0,0 +1,18 @@
+const log_details = {
+  page_title: 'Szczegóły dziennika audytu',
+  back_to_logs: 'Powróć do dziennika audytu',
+  back_to_user: 'Powróć do {{name}}',
+  success: 'Sukces',
+  failed: 'Niepowodzenie',
+  event_key: 'Klucz zdarzenia',
+  application: 'Aplikacja',
+  ip_address: 'Adres IP',
+  user: 'Użytkownik',
+  log_id: 'ID dziennika',
+  time: 'Czas',
+  user_agent: 'Użytkownik agent',
+  tab_details: 'Szczegóły',
+  raw_data: 'Surowe dane',
+};
+
+export default log_details;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/logs.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/logs.ts
new file mode 100644
index 000000000..162fac76b
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/logs.ts
@@ -0,0 +1,13 @@
+const logs = {
+  page_title: 'Dziennik audytu',
+  title: 'Dziennik audytu',
+  subtitle:
+    'Wyświetl dane dziennika dotyczące zdarzeń uwierzytelnienia dokonywanych przez Twoich użytkowników',
+  event: 'Zdarzenie',
+  user: 'Użytkownik',
+  application: 'Aplikacja',
+  time: 'Czas',
+  filter_by: 'Filtruj według',
+};
+
+export default logs;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/menu.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/menu.ts
new file mode 100644
index 000000000..de8bbdac8
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/menu.ts
@@ -0,0 +1,13 @@
+const menu = {
+  profile: 'Profil',
+  language: 'Język',
+  appearance: {
+    label: 'Wygląd',
+    light: 'Tryb jasny',
+    dark: 'Tryb ciemny',
+    system: 'Synchronizuj z systemem',
+  },
+  sign_out: 'Wyloguj się',
+};
+
+export default menu;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/permissions.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/permissions.ts
new file mode 100644
index 000000000..00cdb7b51
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/permissions.ts
@@ -0,0 +1,12 @@
+const permissions = {
+  search_placeholder: 'Szukaj według API lub nazwy uprawnienia',
+  search_placeholder_without_api: 'Szukaj według nazwy uprawnienia',
+  name_column: 'Uprawnienie',
+  description_column: 'Opis',
+  api_column: 'API',
+  placeholder_title: 'Uprawnienie',
+  placeholder_description:
+    'Uprawnienie odnosi się do autoryzacji dostępu do zasobu (nazywamy go zasobem API).',
+};
+
+export default permissions;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/profile.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/profile.ts
new file mode 100644
index 000000000..6151bf7ef
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/profile.ts
@@ -0,0 +1,82 @@
+const profile = {
+  page_title: 'Ustawienia konta',
+  title: 'Ustawienia konta',
+  description:
+    'Zmień swoje ustawienia konta i zarządzaj swoimi danymi osobistymi tutaj, aby zapewnić bezpieczeństwo Twojego konta.',
+  settings: {
+    title: 'USTAWIENIA PROFILU',
+    profile_information: 'Informacje o profilu',
+    avatar: 'Awatar',
+    name: 'Nazwa',
+    username: 'Nazwa użytkownika',
+  },
+  link_account: {
+    title: 'POŁĄCZ KONTO',
+    email_sign_in: 'Zaloguj się przez e-mail',
+    email: 'Email',
+    social_sign_in: 'Zaloguj się przez media społecznościowe',
+    link_email: 'Połącz email',
+    link_email_subtitle: 'Połącz swój email, aby się zalogować lub pomóc w odzyskiwaniu konta.',
+    email_required: 'Email jest wymagany',
+    invalid_email: 'Nieprawidłowy adres email',
+    identical_email_address: 'Adres email jest taki sam jak obecny',
+    anonymous: 'Anonimowy',
+  },
+  password: {
+    title: 'HASŁO I BEZPIECZEŃSTWO',
+    password: 'Hasło',
+    password_setting: 'Ustawienia hasła',
+    new_password: 'Nowe hasło',
+    confirm_password: 'Potwierdź hasło',
+    enter_password: 'Wprowadź hasło',
+    enter_password_subtitle: 'Zweryfikuj, czy to Ty, aby chronić bezpieczeństwo swojego konta.',
+    set_password: 'Ustaw hasło',
+    verify_via_password: 'Zweryfikuj za pomocą hasła',
+    show_password: 'Pokaż hasło',
+    required: 'Hasło jest wymagane',
+    min_length: 'Hasło wymaga co najmniej {{min}} znaków.',
+    do_not_match: 'Hasła nie pasują do siebie. Spróbuj ponownie.',
+  },
+  code: {
+    enter_verification_code: 'Wprowadź kod weryfikacyjny',
+    enter_verification_code_subtitle:
+      'Kod weryfikacyjny został wysłany na adres <strong>{{target}}</strong>',
+    verify_via_code: 'Zweryfikuj za pomocą kodu weryfikacyjnego',
+    resend: 'Wyślij ponownie kod weryfikacyjny',
+    resend_countdown: 'Wyślij ponownie za {{countdown}} sekund',
+  },
+  delete_account: {
+    title: 'USUŃ KONTO',
+    label: 'Usuń konto',
+    description:
+      'Usunięcie twojego konta spowoduje usunięcie wszystkich twoich danych osobistych, danych użytkownika i konfiguracji. Ta operacja nie może być cofnięta.',
+    button: 'Usuń konto',
+    dialog_paragraph_1:
+      'Żałujemy, że chcesz usunąć swoje konto. Usunięcie twojego konta spowoduje trwałe usunięcie wszystkich danych, w tym informacji o użytkowniku, logów i ustawień, i ta operacja nie może być cofnięta. Przed dokonaniem tej operacji zalecamy wykonanie kopii zapasowych ważnych danych.',
+    dialog_paragraph_2:
+      'Aby przejść do procesu usuwania konta, wyślij email do naszego zespołu wsparcia na adres <a>{{mail}}</a> z tematem "Żądanie usunięcia konta". Pomożemy Ci i zapewnimy, że wszystkie twoje dane zostaną poprawnie usunięte z naszego systemu.',
+    dialog_paragraph_3:
+      'Dziękujemy za wybranie chmury Logto. Jeśli masz jakieś dodatkowe pytania lub wątpliwości, skontaktuj się z nami.',
+  },
+  set: 'Ustaw',
+  change: 'Zmień',
+  link: 'Połącz',
+  unlink: 'Odłącz',
+  not_set: 'Nie ustawione',
+  change_avatar: 'Zmień awatar',
+  change_name: 'Zmień nazwę',
+  change_username: 'Zmień nazwę użytkownika',
+  set_name: 'Ustaw nazwę',
+  email_changed: 'Adres email został zmieniony!',
+  password_changed: 'Hasło zostało zmienione!',
+  updated: '{{target}} zaktualizowane!',
+  linked: '{{target}} połączone!',
+  unlinked: '{{target}} rozłączone!',
+  email_exists_reminder:
+    'Ten adres e-mail {{email}} jest powiązany z istniejącym kontem. Połącz inny e-mail tutaj.',
+  unlink_confirm_text: 'Tak, odłącz',
+  unlink_reminder:
+    'Użytkownicy nie będą mogli się zalogować z kontem <span></span>, jeśli je odłączysz. Czy na pewno chcesz kontynuować?',
+};
+
+export default profile;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/role-details.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/role-details.ts
new file mode 100644
index 000000000..48809fb1d
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/role-details.ts
@@ -0,0 +1,50 @@
+const role_details = {
+  back_to_roles: 'Powrót do ról',
+  identifier: 'Identyfikator',
+  delete_description:
+    'Usunięcie tej roli usunie uprawnienia z nią związanymi od użytkowników i usunie odwzorowanie między rolami, użytkownikami i uprawnieniami.',
+  role_deleted: '{{name}} został pomyślnie usunięty!',
+  settings_tab: 'Ustawienia',
+  users_tab: 'Użytkownicy',
+  permissions_tab: 'Uprawnienia',
+  settings: 'Ustawienia',
+  settings_description:
+    'Role to grupowanie uprawnień, które mogą być przypisywane do użytkowników. Zapewniają również sposób agregacji uprawnień zdefiniowanych dla różnych interfejsów API, co umożliwia bardziej efektywne dodawanie, usuwanie lub modyfikowanie uprawnień w porównaniu z przypisywaniem ich do użytkowników indywidualnie.',
+  field_name: 'Nazwa',
+  field_description: 'Opis',
+  permission: {
+    assign_button: 'Przypisz uprawnienia',
+    assign_title: 'Przypisz uprawnienia',
+    assign_subtitle:
+      'Przypisz uprawnienia do tej roli. Rola zyska dodane uprawnienia, a użytkownicy z tą rolą odziedziczą te uprawnienia.',
+    assign_form_field: 'Przypisz uprawnienia',
+    added_text_one: '{{count, number}} uprawnienie dodane',
+    added_text_other: '{{count, number}} uprawnień dodanych',
+    api_permission_count_one: '{{count, number}} uprawnienie',
+    api_permission_count_other: '{{count, number}} uprawnień',
+    confirm_assign: 'Przypisz uprawnienia',
+    permission_assigned: 'Wybrane uprawnienia zostały pomyślnie przypisane do tej roli',
+    deletion_description:
+      'Jeśli to uprawnienie zostanie usunięte, dotknięty użytkownik z tą rolą straci dostęp przyznany przez to uprawnienie.',
+    permission_deleted: 'Uprawnienie "{{name}}" zostało pomyślnie usunięte z tej roli',
+    empty: 'Brak dostępnych uprawnień',
+  },
+  users: {
+    assign_button: 'Przydziel użytkowników',
+    name_column: 'Użytkownik',
+    app_column: 'Aplikacja',
+    latest_sign_in_column: 'Ostatnie logowanie',
+    delete_description:
+      'Osoba pozostanie w bazie użytkowników, ale straci autoryzację dla tej roli.',
+    deleted: '{{name}} został pomyślnie usunięty z tej roli',
+    assign_title: 'Przydziel użytkowników',
+    assign_subtitle:
+      'Przydziel użytkowników do tej roli. Znajdź odpowiednich użytkowników, wyszukując po nazwie, adresie e-mail, numerze telefonu lub identyfikatorze użytkownika.',
+    assign_users_field: 'Przydziel użytkowników',
+    confirm_assign: 'Przydziel użytkowników',
+    users_assigned: 'Wybrani użytkownicy zostali pomyślnie przypisani do tej roli',
+    empty: 'Brak dostępnych użytkowników',
+  },
+};
+
+export default role_details;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/roles.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/roles.ts
new file mode 100644
index 000000000..b10412628
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/roles.ts
@@ -0,0 +1,24 @@
+const roles = {
+  page_title: 'Role',
+  title: 'Role',
+  subtitle:
+    'Role zawiera uprawnienia określające, co użytkownik może robić. RBAC wykorzystuje role do udostępniania użytkownikom zasobów do określonych działań.',
+  create: 'Utwórz rolę',
+  role_name: 'Rola',
+  role_description: 'Opis',
+  role_name_placeholder: 'Wprowadź nazwę swojej roli',
+  role_description_placeholder: 'Wprowadź opis swojej roli',
+  assigned_users: 'Przypisani użytkownicy',
+  assign_permissions: 'Przypisz uprawnienia',
+  create_role_title: 'Utwórz rolę',
+  create_role_description:
+    'Utwórz i zarządzaj rolami dla swoich aplikacji. Role zawierają zbiory uprawnień i mogą być przypisywane użytkownikom.',
+  create_role_button: 'Utwórz rolę',
+  role_created: 'Rola {{name}} została pomyślnie utworzona!',
+  search: 'Wyszukaj po nazwie roli, opisie lub identyfikatorze',
+  placeholder_title: 'Role',
+  placeholder_description:
+    'Role są grupowaniem uprawnień, które mogą być przypisywane użytkownikom. Upewnij się, że najpierw dodasz uprawnienie, zanim utworzysz role.',
+};
+
+export default roles;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/session-expired.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/session-expired.ts
new file mode 100644
index 000000000..c22e6fe90
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/session-expired.ts
@@ -0,0 +1,8 @@
+const session_expired = {
+  title: 'Sesja wygasła',
+  subtitle:
+    'Twoja sesja mogła wygasnąć i zostałeś odłączony. Kliknij poniższy przycisk, aby ponownie się zalogować do konsoli administracyjnej.',
+  button: 'Zaloguj się ponownie',
+};
+
+export default session_expired;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/index.ts
new file mode 100644
index 000000000..7ade3e8de
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/index.ts
@@ -0,0 +1,88 @@
+import others from './others.js';
+import sign_up_and_sign_in from './sign-up-and-sign-in.js';
+
+const sign_in_exp = {
+  page_title: 'Doświadczenie logowania',
+  title: 'Doświadczenie logowania',
+  description:
+    'Dostosuj interfejs logowania, aby pasował do Twojej marki i wyświetlaj w czasie rzeczywistym',
+  tabs: {
+    branding: 'Marka',
+    sign_up_and_sign_in: 'Rejestracja i logowanie',
+    others: 'Inne',
+  },
+  welcome: {
+    title: 'Dostosuj swoje doświadczenie logowania',
+    description:
+      'Szybkie uruchomienie Twojego pierwszego logowania. Ten przewodnik po krokach przeprowadzi Cię przez wszystkie niezbędne ustawienia.',
+    get_started: 'Rozpocznij',
+    apply_remind:
+      'Należy pamiętać, że doświadczenie logowania będzie stosowane do wszystkich aplikacji w tej sekcji.',
+  },
+  color: {
+    title: 'KOLOR',
+    primary_color: 'Kolor marki',
+    dark_primary_color: 'Kolor marki (ciemny)',
+    dark_mode: 'Włącz tryb ciemny',
+    dark_mode_description:
+      'Twoja aplikacja będzie miała automatycznie wygenerowany szablon trybu ciemnego na podstawie koloru marki i algorytmu Logto. Możesz go swobodnie dostosować.',
+    dark_mode_reset_tip: 'Przelicz kolor trybu ciemnego na podstawie koloru marki.',
+    reset: 'Przelicz',
+  },
+  branding: {
+    title: 'OPCJE BRANDINGU',
+    ui_style: 'Styl',
+    favicon: 'Favicon',
+    logo_image_url: 'Adres URL obrazka logo aplikacji',
+    logo_image_url_placeholder: 'https://twoja.domena.cdn/logo.png',
+    dark_logo_image_url: 'Adres URL obrazka logo aplikacji (Ciemny)',
+    dark_logo_image_url_placeholder: 'https://twoja.domena.cdn/logo-ciemny.png',
+    logo_image: 'Logo aplikacji',
+    dark_logo_image: 'Logo aplikacji (Ciemny)',
+    logo_image_error: 'Logo aplikacji: {{error}}',
+    favicon_error: 'Favicon: {{error}}',
+  },
+  custom_css: {
+    title: 'Niestandardowe CSS',
+    css_code_editor_title: 'Dostosuj swój interfejs użytkownika niestandardowym CSS',
+    css_code_editor_description1: 'Zobacz przykład niestandardowego CSS.',
+    css_code_editor_description2: '<a>{{link}}</a>',
+    css_code_editor_description_link_content: 'Dowiedz się więcej',
+    css_code_editor_content_placeholder:
+      'Wprowadź swoje niestandardowe CSS, aby dostosować style czegokolwiek do swoich dokładnych specyfikacji. Wyraź swoją kreatywność i wyróżnij swój interfejs użytkownika.',
+  },
+  sign_up_and_sign_in,
+  others,
+  setup_warning: {
+    no_connector_sms:
+      'Nie ustawiono jeszcze łącznika SMS. Przed zakończeniem konfiguracji użytkownicy nie będą mogli się zalogować przy użyciu tej metody. <a>{{link}}</a> w sekcji „Łączniki“',
+    no_connector_email:
+      'Nie ustawiono jeszcze łącznika e-mail. Przed zakończeniem konfiguracji użytkownicy nie będą mogli się zalogować przy użyciu tej metody. <a>{{link}}</a> w sekcji „Łączniki“',
+    no_connector_social:
+      'Nie ustawiono jeszcze łącznika społecznościowego. Przed zakończeniem konfiguracji użytkownicy nie będą mogli się zalogować przy użyciu tej metody. <a>{{link}}</a> w sekcji„Łączniki"',
+    no_added_social_connector:
+      'Skonfigurowałeś teraz kilka łączników społecznościowych. Upewnij się, że dodano niektóre z nich do Twojego doświadczenia logowania.',
+    setup_link: 'Konfiguracja',
+  },
+  save_alert: {
+    description:
+      'Wdrażasz nowe procedury logowania i rejestracji. Wszyscy Twoi użytkownicy mogą być dotknięci nową konfiguracją. Czy na pewno zdecydowałeś się na zmiany?',
+    before: 'Przed',
+    after: 'Po',
+    sign_up: 'Rejestracja',
+    sign_in: 'Logowanie',
+    social: 'Społecznościowy',
+  },
+  preview: {
+    title: 'Podgląd logowania',
+    live_preview: 'Podgląd na żywo',
+    live_preview_tip: 'Zapisz, aby obejrzeć zmiany',
+    native: 'Aplikacja natywna',
+    desktop_web: 'Wersja desktopowa',
+    mobile_web: 'Wersja mobilna',
+    desktop: 'Komputer',
+    mobile: 'Telefon',
+  },
+};
+
+export default sign_in_exp;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/others.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/others.ts
new file mode 100644
index 000000000..12c264384
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/others.ts
@@ -0,0 +1,48 @@
+const others = {
+  terms_of_use: {
+    title: 'WARUNKI',
+    terms_of_use: 'URL warunków użytkowania',
+    terms_of_use_placeholder: 'https://twoje.warunki.użytkowania/',
+    privacy_policy: 'URL polityki prywatności',
+    privacy_policy_placeholder: 'https://twoja.polityka.prywatności/',
+  },
+  languages: {
+    title: 'JĘZYKI',
+    enable_auto_detect: 'Włącz wykrywanie automatyczne',
+    description:
+      'Twoje oprogramowanie wykrywa ustawienia językowe użytkownika i przełącza się na język lokalny. Możesz dodać nowe języki, tłumacząc interfejs użytkownika z angielskiego na inny język.',
+    manage_language: 'Zarządzanie językiem',
+    default_language: 'Domyślny język',
+    default_language_description_auto:
+      'Domyślny język będzie używany, gdy wykryty język użytkownika nie będzie objęty w bieżącej bibliotece językowej.',
+    default_language_description_fixed:
+      'Gdy wykrywanie automatyczne jest wyłączone, jedynym językiem, który będzie wyświetlał się w twoim oprogramowaniu, jest język domyślny. Włącz wykrywanie automatyczne, aby rozszerzyć język.',
+  },
+  manage_language: {
+    title: 'Zarządzanie językiem',
+    subtitle:
+      'Lokalizuj doświadczenie użytkownika przez dodawanie języków i tłumaczeń. Twoje tłumaczenie może być ustawione jako domyślny język.',
+    add_language: 'Dodaj język',
+    logto_provided: 'Logto dostarczony',
+    key: 'Klucz',
+    logto_source_values: 'Logto źródłowe wartości',
+    custom_values: 'Własne wartości',
+    clear_all_tip: 'Wyczyść wszystkie wartości',
+    unsaved_description:
+      'Zmiany nie zostaną zapisane, jeśli wyjdziecie z tej strony bez zapisywania.',
+    deletion_tip: 'Usuń język',
+    deletion_title: 'Czy chcesz usunąć dodany język?',
+    deletion_description: 'Po usunięciu użytkownicy nie będą mogli przeglądać w tym języku.',
+    default_language_deletion_title: 'Domyślny język nie może zostać usunięty.',
+    default_language_deletion_description:
+      '{{language}} jest ustawiony jako twój domyślny język i nie może być usunięty.',
+  },
+  advanced_options: {
+    title: 'OPCJE ZAAWANSOWANE',
+    enable_user_registration: 'Włącz rejestrację użytkowników',
+    enable_user_registration_description:
+      'Włącz lub wyłącz rejestrację użytkowników. Po wyłączeniu użytkownicy nadal mogą być dodawani w konsoli administracyjnej, ale nie mogą już zakładać kont za pomocą interfejsu logowania.',
+  },
+};
+
+export default others;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts
new file mode 100644
index 000000000..4e630a641
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts
@@ -0,0 +1,58 @@
+const sign_up_and_sign_in = {
+  identifiers_email: 'Adres e-mail',
+  identifiers_phone: 'Numer telefonu',
+  identifiers_username: 'Nazwa użytkownika',
+  identifiers_email_or_sms: 'Adres e-mail lub numer telefonu',
+  identifiers_none: 'Nie dotyczy',
+  and: 'i',
+  or: 'lub',
+  sign_up: {
+    title: 'REJESTRACJA',
+    sign_up_identifier: 'Identyfikator rejestracji',
+    identifier_description:
+      'Identyfikator rejestracji jest wymagany do utworzenia konta i musi być uwzględniony na ekranie logowania.',
+    sign_up_authentication: 'Ustawienia uwierzytelniania dla rejestracji',
+    authentication_description:
+      'Wszystkie wybrane czynności będą obowiązkowe dla użytkowników, aby ukończyć proces rejestracji.',
+    set_a_password_option: 'Utwórz hasło',
+    verify_at_sign_up_option: 'Weryfikuj podczas rejestracji',
+    social_only_creation_description: '(Stosuje się tylko do tworzenia kont społecznościowych)',
+  },
+  sign_in: {
+    title: 'LOGOWANIE',
+    sign_in_identifier_and_auth: 'Identyfikator i ustawienia uwierzytelniania dla logowania',
+    description:
+      'Użytkownicy mogą się zalogować za pomocą dowolnej dostępnej opcji. Dostosuj układ, przeciągając i upuszczając poniżej opcji.',
+    add_sign_in_method: 'Dodaj metodę logowania',
+    password_auth: 'Hasło',
+    verification_code_auth: 'Kod weryfikacyjny',
+    auth_swap_tip:
+      'Zamień poniższe opcje, aby określić, która pojawia się jako pierwsza w procesie.',
+    require_auth_factor: 'Musisz wybrać co najmniej jeden czynnik uwierzytelniający.',
+  },
+  social_sign_in: {
+    title: 'LOGOWANIE SPOŁECZNOŚCIOWE',
+    social_sign_in: 'Logowanie społecznościowe',
+    description:
+      'W zależności od obowiązkowego identyfikatora, którego ustawisz, użytkownik może zostać poproszony o podanie identyfikatora podczas rejestracji za pośrednictwem łącznika społecznościowego.',
+    add_social_connector: 'Dodaj łącznik społecznościowy',
+    set_up_hint: {
+      not_in_list: 'Nie ma na liście?',
+      set_up_more: 'Ustaw',
+      go_to: 'inne łączniki społecznościowe teraz.',
+    },
+  },
+  tip: {
+    set_a_password: 'Unikatowe hasło dla nazwy użytkownika jest konieczne.',
+    verify_at_sign_up:
+      'Obecnie obsługujemy tylko weryfikowany adres e-mail. Twoja baza użytkowników może zawierać dużą liczbę adresów e-mail niskiej jakości, jeśli nie dokonasz walidacji.',
+    password_auth:
+      'Jest to istotne, ponieważ umożliwiłeś opcję tworzenia hasła podczas procesu rejestracji.',
+    verification_code_auth:
+      'Jest to istotne, ponieważ umożliwiłeś wyłącznie opcję podania kodu weryfikacyjnego podczas rejestracji. Możesz odznaczyć pole wyboru, gdy dozwolone jest ustawienie hasła podczas procesu rejestracji.',
+    delete_sign_in_method:
+      'Jest to istotne, ponieważ wybrałeś {{identifier}} jako wymagany identyfikator.',
+  },
+};
+
+export default sign_up_and_sign_in;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/tab-sections.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/tab-sections.ts
new file mode 100644
index 000000000..b1ee68d1d
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/tab-sections.ts
@@ -0,0 +1,9 @@
+const tab_sections = {
+  overview: 'Przegląd',
+  resource_management: 'Zarządzanie zasobami',
+  user_management: 'Zarządzanie użytkownikami',
+  access_control: 'Kontrola dostępu',
+  help_and_support: 'Pomoc i wsparcie',
+};
+
+export default tab_sections;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/tabs.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/tabs.ts
new file mode 100644
index 000000000..b52900f05
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/tabs.ts
@@ -0,0 +1,16 @@
+const tabs = {
+  get_started: 'Rozpocznij',
+  dashboard: 'Panel',
+  applications: 'Aplikacje',
+  api_resources: 'Zasoby API',
+  sign_in_experience: 'Doświadczenie przy logowaniu',
+  connectors: 'Konnektory',
+  users: 'Zarządzanie użytkownikami',
+  audit_logs: 'Dzienniki audytu',
+  roles: 'Role',
+  docs: 'Dokumentacja',
+  contact_us: 'Skontaktuj się z nami',
+  settings: 'Ustawienia',
+};
+
+export default tabs;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/user-details.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/user-details.ts
new file mode 100644
index 000000000..63c813027
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/user-details.ts
@@ -0,0 +1,63 @@
+const user_details = {
+  page_title: 'Szczegóły użytkownika',
+  back_to_users: 'Powrót do zarządzania użytkownikami',
+  created_title: 'Ten użytkownik został pomyślnie utworzony',
+  created_guide: 'Możesz wysłać następujące informacje o logowaniu do użytkownika',
+  created_username: 'Nazwa użytkownika:',
+  created_password: 'Hasło:',
+  menu_delete: 'Usuń',
+  delete_description: 'Tej akcji nie można cofnąć. Usunie to użytkownika na stałe.',
+  deleted: 'Użytkownik został pomyślnie usunięty',
+  reset_password: {
+    reset_password: 'Zresetuj hasło',
+    title: 'Czy na pewno chcesz zresetować hasło?',
+    content: 'Tej akcji nie można cofnąć. To zresetuje informacje o logowaniu użytkownika.',
+    congratulations: 'Ten użytkownik został zresetowany',
+    new_password: 'Nowe hasło:',
+  },
+  tab_settings: 'Ustawienia',
+  tab_roles: 'Role',
+  tab_logs: 'Logi użytkownika',
+  settings: 'Ustawienia',
+  settings_description:
+    'Każdy użytkownik ma profil zawierający wszystkie informacje o użytkowniku. Składa się on z podstawowych danych, tożsamości społecznościowych i niestandardowych danych.',
+  field_email: 'E-mail podstawowy',
+  field_phone: 'Telefon podstawowy',
+  field_username: 'Nazwa użytkownika',
+  field_name: 'Imię i nazwisko',
+  field_avatar: 'Adres URL obrazka awatara',
+  field_avatar_placeholder: 'https://twoja.domena/cdn/avatar.png',
+  field_custom_data: 'Dane niestandardowe',
+  field_custom_data_tip:
+    'Dodatkowe informacje o użytkowniku niewymienione jako właściwości predefiniowane, takie jak preferowany przez użytkownika kolor i język.',
+  field_connectors: 'Połączenia społecznościowe',
+  custom_data_invalid: 'Nieprawidłowe dane niestandardowe JSON',
+  connectors: {
+    connectors: 'Połączenia',
+    user_id: 'Identyfikator użytkownika',
+    remove: 'Usuń',
+    not_connected: 'Użytkownik nie jest połączony z żadnym połączeniem społecznościowym',
+    deletion_confirmation: 'Usuwasz istniejącą tożsamość <name/>. Czy na pewno chcesz to zrobić?',
+  },
+  suspended: 'Zawieszony',
+  roles: {
+    name_column: 'Rola',
+    description_column: 'Opis',
+    assign_button: 'Przypisz role',
+    delete_description:
+      'Ta akcja usunie tę rolę z tego użytkownika. Rola nadal będzie istnieć, ale nie będzie już przypisana do tego użytkownika.',
+    deleted: '{{name}} został usunięty z tego użytkownika.',
+    assign_title: 'Przypisz role dla {{name}}',
+    assign_subtitle: 'Autoryzuj {{name}} jedną lub wiele ról',
+    assign_role_field: 'Przypisz role',
+    role_search_placeholder: 'Szukaj po nazwie roli',
+    added_text: '{{value, number}} dodanych',
+    assigned_user_count: '{{value, number}} użytkowników',
+    confirm_assign: 'Przypisz role',
+    role_assigned: 'Pomyślnie przypisano rolę(y)',
+    search: 'Szukaj po nazwie roli, opisie lub ID',
+    empty: 'Brak dostępnej roli',
+  },
+};
+
+export default user_details;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/users.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/users.ts
new file mode 100644
index 000000000..4c852492e
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/users.ts
@@ -0,0 +1,21 @@
+const users = {
+  page_title: 'Zarządzanie użytkownikami',
+  title: 'Zarządzanie użytkownikami',
+  subtitle:
+    'Zarządzaj tożsamościami użytkowników, w tym tworzeniem użytkowników, edycją informacji o użytkownikach, przeglądaniem dzienników użytkowników, resetowaniem hasła i usuwaniem użytkowników.',
+  create: 'Dodaj użytkownika',
+  user_name: 'Użytkownik',
+  application_name: 'Z aplikacji',
+  latest_sign_in: 'Najnowsze logowanie',
+  create_form_username: 'Nazwa użytkownika',
+  create_form_password: 'Hasło',
+  create_form_name: 'Imię i nazwisko',
+  unnamed: 'Bez nazwy',
+  search: 'Wyszukaj według nazwy, e-maila, numeru telefonu lub nazwy użytkownika',
+  check_user_detail: 'Sprawdź szczegóły użytkownika',
+  placeholder_title: 'Zarządzanie użytkownikami',
+  placeholder_description:
+    'Każdy użytkownik ma profil zawierający wszystkie informacje o użytkowniku. Składa się z podstawowych danych, tożsamości społecznych i niestandardowych danych.',
+};
+
+export default users;
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/welcome.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/welcome.ts
new file mode 100644
index 000000000..8367f805b
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/welcome.ts
@@ -0,0 +1,8 @@
+const welcome = {
+  title: 'Witaj w konsoli administracyjnej',
+  description:
+    'Konsola administracyjna to aplikacja internetowa umożliwiająca zarządzanie Logto bez wymagania znajomości kodowania. Najpierw załóż konto. Dzięki temu kontu możesz zarządzać Logto samodzielnie lub w imieniu swojej firmy.',
+  create_account: 'Załóż konto',
+};
+
+export default welcome;
diff --git a/packages/phrases/src/locales/pl-pl/translation/demo-app.ts b/packages/phrases/src/locales/pl-pl/translation/demo-app.ts
new file mode 100644
index 000000000..abf81e271
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/demo-app.ts
@@ -0,0 +1,13 @@
+const demo_app = {
+  title: 'Pomyślnie zalogowałeś się do podglądu na żywo!',
+  subtitle: 'Oto twoje informacje logowania:',
+  username: 'Nazwa użytkownika: ',
+  user_id: 'ID użytkownika: ',
+  sign_out: 'Wyloguj się z podglądu na żywo',
+  continue_explore: 'Lub kontynuuj przeglądanie',
+  customize_sign_in_experience: 'Dostosuj wrażenia z logowania',
+  enable_passwordless: 'Włącz logowanie bez hasła',
+  add_social_connector: 'Dodaj złącze społecznościowe',
+};
+
+export default demo_app;
diff --git a/packages/phrases/src/locales/pl-pl/translation/index.ts b/packages/phrases/src/locales/pl-pl/translation/index.ts
new file mode 100644
index 000000000..d006e599f
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/index.ts
@@ -0,0 +1,11 @@
+import admin_console from './admin-console/index.js';
+import demo_app from './demo-app.js';
+import oidc from './oidc.js';
+
+const translation = {
+  admin_console,
+  demo_app,
+  oidc,
+};
+
+export default translation;
diff --git a/packages/phrases/src/locales/pl-pl/translation/oidc.ts b/packages/phrases/src/locales/pl-pl/translation/oidc.ts
new file mode 100644
index 000000000..f50611fbf
--- /dev/null
+++ b/packages/phrases/src/locales/pl-pl/translation/oidc.ts
@@ -0,0 +1,5 @@
+const oidc = {
+  logout_success: 'Pomyślnie zostałeś wylogowany.',
+};
+
+export default oidc;