Browse Source

feat(Languages): :alien: add pl-PL language (#4128)

Patryk Garstecki 11 tháng trước cách đây
mục cha
commit
6271463240

+ 2 - 1
api/constants/languages.py

@@ -1,6 +1,6 @@
 
 
-languages = ['en-US', 'zh-Hans', 'zh-Hant', 'pt-BR', 'es-ES', 'fr-FR', 'de-DE', 'ja-JP', 'ko-KR', 'ru-RU', 'it-IT', 'uk-UA', 'vi-VN']
+languages = ['en-US', 'zh-Hans', 'zh-Hant', 'pt-BR', 'es-ES', 'fr-FR', 'de-DE', 'ja-JP', 'ko-KR', 'ru-RU', 'it-IT', 'uk-UA', 'vi-VN', 'pl-PL']
 
 language_timezone_mapping = {
     'en-US': 'America/New_York',
@@ -16,6 +16,7 @@ language_timezone_mapping = {
     'it-IT': 'Europe/Rome',
     'uk-UA': 'Europe/Kyiv',
     'vi-VN': 'Asia/Ho_Chi_Minh',
+    'pl-PL': 'Europe/Warsaw',
 }
 
 

+ 9 - 0
web/i18n/language.ts

@@ -19,6 +19,7 @@ export type I18nText = {
   'vi-VN': string
   'de_DE': string
   'zh_Hant': string
+  'pl-PL': string
 }
 
 export const languages = [
@@ -112,6 +113,12 @@ export const languages = [
     example: 'Xin chào, Dify!',
     supported: true,
   },
+  {
+    value: 'pl-PL',
+    name: 'Polski (Polish)',
+    example: 'Cześć, Dify!',
+    supported: true,
+  },
 ]
 
 export const LanguagesSupported = languages.filter(item => item.supported).map(item => item.value)
@@ -133,6 +140,7 @@ export const NOTICE_I18N = {
     de_DE: 'Wichtiger Hinweis',
     ja_JP: '重要なお知らせ',
     ko_KR: '중요 공지',
+    pl_PL: 'Ważne ogłoszenie',
     uk_UA: 'Важливе повідомлення',
     vi_VN: 'Thông báo quan trọng',
   },
@@ -145,6 +153,7 @@ export const NOTICE_I18N = {
     de_DE: 'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
     ja_JP: 'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
     ko_KR: 'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
+    pl_PL: 'Nasz system będzie niedostępny od 19:00 do 24:00 UTC 28 sierpnia w celu aktualizacji. W przypadku pytań prosimy o kontakt z naszym zespołem wsparcia (support@dify.ai). Doceniamy Twoją cierpliwość.',
     uk_UA: 'Наша система буде недоступна з 19:00 до 24:00 UTC 28 серпня для оновлення. Якщо у вас виникнуть запитання, будь ласка, зв’яжіться з нашою службою підтримки (support@dify.ai). Дякуємо за терпіння.',
     vi_VN: 'Hệ thống của chúng tôi sẽ ngừng hoạt động từ 19:00 đến 24:00 UTC vào ngày 28 tháng 8 để nâng cấp. Nếu có thắc mắc, vui lòng liên hệ với nhóm hỗ trợ của chúng tôi (support@dify.ai). Chúng tôi đánh giá cao sự kiên nhẫn của bạn.',
   },

+ 89 - 0
web/i18n/pl-PL/app-annotation.ts

@@ -0,0 +1,89 @@
+const translation = {
+  title: 'Adnotacje',
+  name: 'Odpowiedź adnotacji',
+  editBy: 'Odpowiedź edytowana przez {{author}}',
+  noData: {
+    title: 'Brak adnotacji',
+    description:
+      'Możesz edytować adnotacje podczas debugowania aplikacji lub importować adnotacje tutaj w celu uzyskania wysokiej jakości odpowiedzi.',
+  },
+  table: {
+    header: {
+      question: 'pytanie',
+      answer: 'odpowiedź',
+      createdAt: 'utworzono',
+      hits: 'trafienia',
+      actions: 'akcje',
+      addAnnotation: 'Dodaj adnotację',
+      bulkImport: 'Masowy import',
+      bulkExport: 'Masowy eksport',
+      clearAll: 'Wyczyść wszystkie adnotacje',
+    },
+  },
+  editModal: {
+    title: 'Edytuj odpowiedź adnotacji',
+    queryName: 'Zapytanie użytkownika',
+    answerName: 'Bot opowiadający historie',
+    yourAnswer: 'Twoja odpowiedź',
+    answerPlaceholder: 'Wpisz tutaj swoją odpowiedź',
+    yourQuery: 'Twoje zapytanie',
+    queryPlaceholder: 'Wpisz tutaj swoje zapytanie',
+    removeThisCache: 'Usuń tę adnotację',
+    createdAt: 'Utworzono',
+  },
+  addModal: {
+    title: 'Dodaj odpowiedź adnotacji',
+    queryName: 'Pytanie',
+    answerName: 'Odpowiedź',
+    answerPlaceholder: 'Wpisz tutaj odpowiedź',
+    queryPlaceholder: 'Wpisz tutaj zapytanie',
+    createNext: 'Dodaj kolejną odpowiedź adnotacji',
+  },
+  batchModal: {
+    title: 'Masowy import',
+    csvUploadTitle: 'Przeciągnij i upuść tutaj swój plik CSV, lub ',
+    browse: 'przeglądaj',
+    tip: 'Plik CSV musi spełniać następującą strukturę:',
+    question: 'pytanie',
+    answer: 'odpowiedź',
+    contentTitle: 'zawartość fragmentu',
+    content: 'zawartość',
+    template: 'Pobierz szablon tutaj',
+    cancel: 'Anuluj',
+    run: 'Uruchom batch',
+    runError: 'Uruchomienie batcha nie powiodło się',
+    processing: 'Przetwarzanie batcha',
+    completed: 'Import zakończony',
+    error: 'Błąd importu',
+    ok: 'OK',
+  },
+  errorMessage: {
+    answerRequired: 'Odpowiedź jest wymagana',
+    queryRequired: 'Pytanie jest wymagane',
+  },
+  viewModal: {
+    annotatedResponse: 'Odpowiedź adnotacji',
+    hitHistory: 'Historia trafień',
+    hit: 'Trafienie',
+    hits: 'Trafienia',
+    noHitHistory: 'Brak historii trafień',
+  },
+  hitHistoryTable: {
+    query: 'Zapytanie',
+    match: 'Dopasowanie',
+    response: 'Odpowiedź',
+    source: 'Źródło',
+    score: 'Wynik',
+    time: 'Czas',
+  },
+  initSetup: {
+    title: 'Początkowa konfiguracja odpowiedzi adnotacji',
+    configTitle: 'Konfiguracja odpowiedzi adnotacji',
+    confirmBtn: 'Zapisz i włącz',
+    configConfirmBtn: 'Zapisz',
+  },
+  embeddingModelSwitchTip:
+    'Model wektoryzacji tekstu adnotacji, przełączanie modeli spowoduje ponowne osadzenie, co wiąże się z dodatkowymi kosztami.',
+}
+
+export default translation

+ 102 - 0
web/i18n/pl-PL/app-api.ts

@@ -0,0 +1,102 @@
+const translation = {
+  apiServer: 'Serwer API',
+  apiKey: 'Klucz API',
+  status: 'Status',
+  disabled: 'Wyłączony',
+  ok: 'W usłudze',
+  copy: 'Kopiuj',
+  copied: 'Skopiowane',
+  play: 'Graj',
+  pause: 'Pauza',
+  playing: 'Gra',
+  loading: 'Ładowanie',
+  merMaind: {
+    rerender: 'Przerób Renderowanie',
+  },
+  never: 'Nigdy',
+  apiKeyModal: {
+    apiSecretKey: 'Tajny klucz API',
+    apiSecretKeyTips:
+      'Aby zapobiec nadużyciom API, chron swój klucz API. Unikaj używania go jako zwykłego tekstu w kodzie front-end. :)',
+    createNewSecretKey: 'Utwórz nowy tajny klucz',
+    secretKey: 'Tajny Klucz',
+    created: 'UTWORZONY',
+    lastUsed: 'OSTATNIO UŻYWANY',
+    generateTips: 'Przechowuj ten klucz w bezpiecznym i dostępnym miejscu.',
+  },
+  actionMsg: {
+    deleteConfirmTitle: 'Usunąć ten tajny klucz?',
+    deleteConfirmTips: 'Tej akcji nie można cofnąć.',
+    ok: 'OK',
+  },
+  completionMode: {
+    title: 'Zakończenie App API',
+    info: 'Do generowania tekstu wysokiej jakości, takiego jak artykuły, podsumowania i tłumaczenia, użyj API completion-messages z danymi wejściowymi użytkownika. Generowanie tekstu zależy od parametrów modelu i szablonów promptów ustawionych w Dify Prompt Engineering.',
+    createCompletionApi: 'Utwórz Wiadomość Zakończenia',
+    createCompletionApiTip:
+      'Utwórz Wiadomość Zakończenia, aby obsługiwać tryb pytanie-odpowiedź.',
+    inputsTips:
+      '(Opcjonalnie) Podaj pola wejściowe użytkownika jako pary klucz-wartość, odpowiadające zmiennym w Prompt Eng. Klucz to nazwa zmiennej, Wartość to wartość parametru. Jeśli typ pola to Wybierz, przesłana Wartość musi być jednym z predefiniowanych wyborów.',
+    queryTips: 'Treść tekstu wprowadzanego przez użytkownika.',
+    blocking:
+      'Typ blokujący, czekanie na zakończenie wykonania i zwrócenie wyników. (Żądania mogą być przerywane, jeśli proces jest długi)',
+    streaming:
+      'zwraca strumieniowo. Implementacja strumieniowego zwrotu na podstawie SSE (Server-Sent Events).',
+    messageFeedbackApi: 'Informacje zwrotne o wiadomości (lubię)',
+    messageFeedbackApiTip:
+      'Oceniaj otrzymane wiadomości w imieniu użytkowników końcowych na podstawie polubień lub niepolubień. Te dane są widoczne na stronie Logi i adnotacje i są używane do przyszłego dostrojenia modelu.',
+    messageIDTip: 'ID wiadomości',
+    ratingTip: 'lubię lub nie lubię, null to cofnięcie',
+    parametersApi: 'Uzyskaj informacje o parametrach aplikacji',
+    parametersApiTip:
+      'Pobierz skonfigurowane parametry wejściowe, w tym nazwy zmiennych, nazwy pól, typy i domyślne wartości. Zwykle używane do wyświetlania tych pól w formularzu lub wypełniania domyślnych wartości po załadowaniu klienta.',
+  },
+  chatMode: {
+    title: 'Chat App API',
+    info: 'Do wszechstronnych aplikacji konwersacyjnych w formacie Q&A, wywołaj API chat-messages, aby rozpocząć dialog. Utrzymuj trwające rozmowy, przekazując zwrócone conversation_id. Parametry odpowiedzi i szablony zależą od ustawień Dify Prompt Eng.',
+    createChatApi: 'Utwórz wiadomość czatu',
+    createChatApiTip:
+      'Utwórz nową wiadomość konwersacji lub kontynuuj istniejący dialog.',
+    inputsTips:
+      '(Opcjonalnie) Podaj pola wejściowe użytkownika jako pary klucz-wartość, odpowiadające zmiennym w Prompt Eng. Klucz to nazwa zmiennej, Wartość to wartość parametru. Jeśli typ pola to Wybierz, przesłana Wartość musi być jednym z predefiniowanych wyborów.',
+    queryTips: 'Treść pytania/wprowadzanej przez użytkownika',
+    blocking:
+      'Typ blokujący, czekanie na zakończenie wykonania i zwrócenie wyników. (Żądania mogą być przerywane, jeśli proces jest długi)',
+    streaming:
+      'zwraca strumieniowo. Implementacja strumieniowego zwrotu na podstawie SSE (Server-Sent Events).',
+    conversationIdTip:
+      '(Opcjonalnie) ID rozmowy: pozostaw puste dla pierwszej rozmowy; przekaż conversation_id z kontekstu, aby kontynuować dialog.',
+    messageFeedbackApi: 'Informacje zwrotne od użytkownika terminala, lubię',
+    messageFeedbackApiTip:
+      'Oceniaj otrzymane wiadomości w imieniu użytkowników końcowych na podstawie polubień lub niepolubień. Te dane są widoczne na stronie Logi i adnotacje i są używane do przyszłego dostrojenia modelu.',
+    messageIDTip: 'ID wiadomości',
+    ratingTip: 'lubię lub nie lubię, null to cofnięcie',
+    chatMsgHistoryApi: 'Pobierz historię wiadomości czatu',
+    chatMsgHistoryApiTip:
+      'Pierwsza strona zwraca najnowsze `limit` wiadomości, które są w odwrotnej kolejności.',
+    chatMsgHistoryConversationIdTip: 'ID rozmowy',
+    chatMsgHistoryFirstId:
+      'ID pierwszego rekordu czatu na bieżącej stronie. Domyślnie brak.',
+    chatMsgHistoryLimit: 'Ile czatów jest zwracanych w jednym żądaniu',
+    conversationsListApi: 'Pobierz listę rozmów',
+    conversationsListApiTip:
+      'Pobiera listę sesji bieżącego użytkownika. Domyślnie zwraca ostatnie 20 sesji.',
+    conversationsListFirstIdTip:
+      'ID ostatniego rekordu na bieżącej stronie, domyślnie brak.',
+    conversationsListLimitTip: 'Ile czatów jest zwracanych w jednym żądaniu',
+    conversationRenamingApi: 'Zmiana nazwy rozmowy',
+    conversationRenamingApiTip:
+      'Zmień nazwy rozmów; nazwa jest wyświetlana w interfejsach klienta wielosesyjnego.',
+    conversationRenamingNameTip: 'Nowa nazwa',
+    parametersApi: 'Uzyskaj informacje o parametrach aplikacji',
+    parametersApiTip:
+      'Pobierz skonfigurowane parametry wejściowe, w tym nazwy zmiennych, nazwy pól, typy i domyślne wartości. Zwykle używane do wyświetlania tych pól w formularzu lub wypełniania domyślnych wartości po załadowaniu klienta.',
+  },
+  develop: {
+    requestBody: 'Ciało żądania',
+    pathParams: 'Parametry ścieżki',
+    query: 'Zapytanie',
+  },
+}
+
+export default translation

+ 463 - 0
web/i18n/pl-PL/app-debug.ts

@@ -0,0 +1,463 @@
+const translation = {
+  pageTitle: {
+    line1: 'MONIT',
+    line2: 'Inżynieria',
+  },
+  orchestrate: 'Orkiestracja',
+  promptMode: {
+    simple: 'Przełącz na tryb Ekspert, aby edytować cały MONIT',
+    advanced: 'Tryb Ekspert',
+    switchBack: 'Przełącz z powrotem',
+    advancedWarning: {
+      title:
+        'Przełączyłeś się na Tryb Ekspert, i po modyfikacji MONITU, NIE można powrócić do trybu podstawowego.',
+      description: 'W Trybie Ekspert, możesz edytować cały MONIT.',
+      learnMore: 'Dowiedz się więcej',
+      ok: 'OK',
+    },
+    operation: {
+      addMessage: 'Dodaj Wiadomość',
+    },
+    contextMissing:
+      'Brak komponentu kontekstowego, skuteczność monitu może być niewystarczająca.',
+  },
+  operation: {
+    applyConfig: 'Publikuj',
+    resetConfig: 'Resetuj',
+    debugConfig: 'Debuguj',
+    addFeature: 'Dodaj funkcję',
+    automatic: 'Automatyczny',
+    stopResponding: 'Przestaje odpowiadać',
+    agree: 'lubię',
+    disagree: 'nie lubię',
+    cancelAgree: 'Anuluj polubienie',
+    cancelDisagree: 'Anuluj niepolubienie',
+    userAction: 'Akcja użytkownika ',
+  },
+  notSetAPIKey: {
+    title: 'Klucz dostawcy LLM nie został ustawiony',
+    trailFinished: 'Ścieżka zakończona',
+    description:
+      'Klucz dostawcy LLM nie został ustawiony, musi zostać ustawiony przed debugowaniem.',
+    settingBtn: 'Przejdź do ustawień',
+  },
+  trailUseGPT4Info: {
+    title: 'Obecnie nie obsługuje GPT-4',
+    description: 'Użyj GPT-4, proszę ustawić klucz API.',
+  },
+  feature: {
+    groupChat: {
+      title: 'Rozmowy grupowe',
+      description:
+        'Dodanie ustawień przedkonwersacyjnych dla aplikacji może poprawić doświadczenia użytkownika.',
+    },
+    groupExperience: {
+      title: 'Poprawa doświadczenia',
+    },
+    conversationOpener: {
+      title: 'Otwieracze do rozmów',
+      description:
+        'W aplikacji czatowej pierwsze zdanie, które AI aktywnie wypowiada do użytkownika, zazwyczaj służy jako powitanie.',
+    },
+    suggestedQuestionsAfterAnswer: {
+      title: 'Nawiązanie',
+      description: 'Ustawienie kolejnych pytań może poprawić czat.',
+      resDes: '3 sugestie dla kolejnego pytania użytkownika.',
+      tryToAsk: 'Spróbuj zapytać',
+    },
+    moreLikeThis: {
+      title: 'Więcej takich jak ten',
+      description:
+        'Generuj wiele tekstów na raz, a następnie edytuj i kontynuuj generowanie',
+      generateNumTip: 'Liczba generowanych razów',
+      tip: 'Korzystanie z tej funkcji spowoduje dodatkowe zużycie tokenów',
+    },
+    speechToText: {
+      title: 'Mowa na tekst',
+      description: 'Po włączeniu można używać wprowadzania głosowego.',
+      resDes: 'Wprowadzanie głosowe jest włączone',
+    },
+    textToSpeech: {
+      title: 'Tekst na mowę',
+      description: 'Po włączeniu tekst można przekształcić w mowę.',
+      resDes: 'Tekst na audio jest włączony',
+    },
+    citation: {
+      title: 'Cytaty i odniesienia',
+      description:
+        'Po włączeniu, pokaż dokument źródłowy i przypisaną sekcję wygenerowanej treści.',
+      resDes: 'Cytaty i odniesienia są włączone',
+    },
+    annotation: {
+      title: 'Odpowiedź z adnotacją',
+      description:
+        'Możesz ręcznie dodać odpowiedź wysokiej jakości do pamięci podręcznej dla priorytetowego dopasowania do podobnych pytań użytkownika.',
+      resDes: 'Odpowiedź z adnotacją jest włączona',
+      scoreThreshold: {
+        title: 'Próg wyników',
+        description:
+          'Służy do ustawienia progu podobieństwa dla odpowiedzi z adnotacją.',
+        easyMatch: 'Łatwe dopasowanie',
+        accurateMatch: 'Dokładne dopasowanie',
+      },
+      matchVariable: {
+        title: 'Zmienna dopasowania',
+        choosePlaceholder: 'Wybierz zmienną do dopasowania',
+      },
+      cacheManagement: 'Adnotacje',
+      cached: 'Zanotowano',
+      remove: 'Usuń',
+      removeConfirm: 'Usunąć tę adnotację?',
+      add: 'Dodaj adnotację',
+      edit: 'Edytuj adnotację',
+    },
+    dataSet: {
+      title: 'Kontekst',
+      noData: 'Możesz importować wiedzę jako kontekst',
+      words: 'Słowa',
+      textBlocks: 'Bloki tekstu',
+      selectTitle: 'Wybierz odniesienie do wiedzy',
+      selected: 'Wiedza wybrana',
+      noDataSet: 'Nie znaleziono wiedzy',
+      toCreate: 'Przejdź do tworzenia',
+      notSupportSelectMulti: 'Obecnie obsługiwana jest tylko jedna wiedza',
+      queryVariable: {
+        title: 'Zmienna zapytania',
+        tip: 'Ta zmienna będzie używana jako dane wejściowe zapytania do odzyskiwania kontekstu, uzyskując informacje kontekstowe związane z wprowadzonymi danymi.',
+        choosePlaceholder: 'Wybierz zmienną zapytania',
+        noVar: 'Brak zmiennych',
+        noVarTip: 'proszę stworzyć zmienną w sekcji Zmienne',
+        unableToQueryDataSet: 'Nie można odzyskać wiedzy',
+        unableToQueryDataSetTip:
+          'Nie udało się pomyślnie odzyskać wiedzy, proszę wybrać zmienną zapytania kontekstowego w sekcji kontekstowej.',
+        ok: 'OK',
+        contextVarNotEmpty:
+          'zmienna zapytania kontekstowego nie może być pusta',
+        deleteContextVarTitle: 'Usunąć zmienną „{{varName}}”?',
+        deleteContextVarTip:
+          'Ta zmienna została ustawiona jako zmienna zapytania kontekstowego, a jej usunięcie wpłynie na normalne korzystanie z wiedzy. Jeśli nadal potrzebujesz jej usunąć, wybierz ją ponownie w sekcji kontekstowej.',
+      },
+    },
+    tools: {
+      title: 'Narzędzia',
+      tips: 'Narzędzia zapewniają standardową metodę wywołania API, przyjmując dane wejściowe użytkownika lub zmienne jako parametry żądania do zapytania o dane zewnętrzne jako kontekst.',
+      toolsInUse: '{{count}} narzędzi w użyciu',
+      modal: {
+        title: 'Narzędzie',
+        toolType: {
+          title: 'Typ narzędzia',
+          placeholder: 'Wybierz typ narzędzia',
+        },
+        name: {
+          title: 'Nazwa',
+          placeholder: 'Wprowadź nazwę',
+        },
+        variableName: {
+          title: 'Nazwa zmiennej',
+          placeholder: 'Wprowadź nazwę zmiennej',
+        },
+      },
+    },
+    conversationHistory: {
+      title: 'Historia konwersacji',
+      description: 'Ustaw prefixy dla ról w rozmowie',
+      tip: 'Historia konwersacji nie jest włączona, proszę dodać <historie> w monicie powyżej.',
+      learnMore: 'Dowiedz się więcej',
+      editModal: {
+        title: 'Edycja nazw ról konwersacyjnych',
+        userPrefix: 'Prefix użytkownika',
+        assistantPrefix: 'Prefix asystenta',
+      },
+    },
+    toolbox: {
+      title: 'SKRZYNKA NARZĘDZIOWA',
+    },
+    moderation: {
+      title: 'Moderacja treści',
+      description:
+        'Zabezpiecz wyjście modelu, używając API moderacji lub utrzymując listę wrażliwych słów.',
+      allEnabled: 'Treść WEJŚCIOWA/WYJŚCIOWA Włączona',
+      inputEnabled: 'Treść WEJŚCIOWA Włączona',
+      outputEnabled: 'Treść WYJŚCIOWA Włączona',
+      modal: {
+        title: 'Ustawienia moderacji treści',
+        provider: {
+          title: 'Dostawca',
+          openai: 'Moderacja OpenAI',
+          openaiTip: {
+            prefix:
+              'Moderacja OpenAI wymaga skonfigurowanego klucza API OpenAI w ',
+            suffix: '.',
+          },
+          keywords: 'Słowa kluczowe',
+        },
+        keywords: {
+          tip: 'Po jednym w wierszu, oddzielone znakiem nowej linii. Maksymalnie 100 znaków na wiersz.',
+          placeholder: 'Po jednym w wierszu, oddzielone znakiem nowej linii',
+          line: 'Linia',
+        },
+        content: {
+          input: 'Moderuj treść WEJŚCIOWĄ',
+          output: 'Moderuj treść WYJŚCIOWĄ',
+          preset: 'Ustawione odpowiedzi',
+          placeholder: 'Tutaj wprowadź ustawione odpowiedzi',
+          condition:
+            'Treść WEJŚCIA i WYJŚCIA musi być włączona przynajmniej jedna',
+          fromApi: 'Ustawione odpowiedzi zwracane przez API',
+          errorMessage: 'Ustawione odpowiedzi nie mogą być puste',
+          supportMarkdown: 'Obsługuje Markdown',
+        },
+        openaiNotConfig: {
+          before:
+            'Moderacja OpenAI wymaga skonfigurowanego klucza API OpenAI w',
+          after: '',
+        },
+      },
+    },
+  },
+  automatic: {
+    title: 'Zautomatyzowana orkiestracja aplikacji',
+    description:
+      'Opisz swój scenariusz, Dify zorkiestruje aplikację dla Ciebie.',
+    intendedAudience: 'Dla kogo jest przeznaczona ta aplikacja?',
+    intendedAudiencePlaceHolder: 'np. Uczeń',
+    solveProblem:
+      'Jakie problemy mają nadzieję, że AI może rozwiązać dla nich?',
+    solveProblemPlaceHolder:
+      'np. Wyciąganie wniosków i podsumowanie informacji z długich raportów i artykułów',
+    generate: 'Generuj',
+    audiencesRequired: 'Wymagana publiczności',
+    problemRequired: 'Wymagany problem',
+    resTitle: 'Stworzyliśmy następującą aplikację dla Ciebie.',
+    apply: 'Zastosuj tę orkiestrację',
+    noData:
+      'Opisz swój przypadek po lewej, podgląd orkiestracji pojawi się tutaj.',
+    loading: 'Orkiestracja aplikacji dla Ciebie...',
+    overwriteTitle: 'Zastąpić istniejącą konfigurację?',
+    overwriteMessage:
+      'Zastosowanie tej orkiestracji zastąpi istniejącą konfigurację.',
+  },
+  resetConfig: {
+    title: 'Potwierdź reset?',
+    message:
+      'Reset odrzuca zmiany, przywracając ostatnią opublikowaną konfigurację.',
+  },
+  errorMessage: {
+    nameOfKeyRequired: 'nazwa klucza: {{key}} wymagana',
+    valueOfVarRequired: '{{key}} wartość nie może być pusta',
+    queryRequired: 'Tekst żądania jest wymagany.',
+    waitForResponse: 'Proszę czekać na odpowiedź na poprzednią wiadomość.',
+    waitForBatchResponse: 'Proszę czekać na odpowiedź na zadanie wsadowe.',
+    notSelectModel: 'Proszę wybrać model',
+    waitForImgUpload: 'Proszę czekać na przesłanie obrazu',
+  },
+  chatSubTitle: 'Instrukcje',
+  completionSubTitle: 'Prefix Monitu',
+  promptTip:
+    'Monity kierują odpowiedziami AI za pomocą instrukcji i ograniczeń. Wstaw zmienne takie jak {{input}}. Ten monit nie będzie widoczny dla użytkowników.',
+  formattingChangedTitle: 'Zmiana formatowania',
+  formattingChangedText:
+    'Modyfikacja formatowania zresetuje obszar debugowania, czy jesteś pewien?',
+  variableTitle: 'Zmienne',
+  variableTip:
+    'Użytkownicy wypełniają zmienne w formularzu, automatycznie zastępując zmienne w monicie.',
+  notSetVar:
+    'Zmienne pozwalają użytkownikom wprowadzać słowa wstępujące lub otwierające uwagi podczas wypełniania formularzy. Możesz spróbować wpisać "{{input}}" w słowach monitu.',
+  autoAddVar:
+    'Niezdefiniowane zmienne odwołują się w pre-monicie, czy chcesz je dodać do formularza wejściowego użytkownika?',
+  variableTable: {
+    key: 'Klucz Zmiennej',
+    name: 'Nazwa Pola Wejściowego Użytkownika',
+    optional: 'Opcjonalnie',
+    type: 'Typ Wejścia',
+    action: 'Akcje',
+    typeString: 'String',
+    typeSelect: 'Wybierz',
+  },
+  varKeyError: {
+    canNoBeEmpty: 'Klucz zmiennej nie może być pusty',
+    tooLong:
+      'Klucz zmiennej: {{key}} za długi. Nie może być dłuższy niż 30 znaków',
+    notValid:
+      'Klucz zmiennej: {{key}} jest nieprawidłowy. Może zawierać tylko litery, cyfry i podkreślenia',
+    notStartWithNumber:
+      'Klucz zmiennej: {{key}} nie może zaczynać się od cyfry',
+    keyAlreadyExists: 'Klucz zmiennej: :{{key}} już istnieje',
+  },
+  otherError: {
+    promptNoBeEmpty: 'Monit nie może być pusty',
+    historyNoBeEmpty: 'Historia konwersacji musi być ustawiona w monicie',
+    queryNoBeEmpty: 'Zapytanie musi być ustawione w monicie',
+  },
+  variableConig: {
+    'addModalTitle': 'Dodaj Pole Wejściowe',
+    'editModalTitle': 'Edytuj Pole Wejściowe',
+    'description': 'Ustawienia dla zmiennej {{varName}}',
+    'fieldType': 'Typ pola',
+    'string': 'Krótki tekst',
+    'text-input': 'Krótki tekst',
+    'paragraph': 'Akapit',
+    'select': 'Wybierz',
+    'number': 'Numer',
+    'notSet': 'Nie ustawione, spróbuj wpisać {{input}} w monicie wstępnym',
+    'stringTitle': 'Opcje pola tekstowego formularza',
+    'maxLength': 'Maksymalna długość',
+    'options': 'Opcje',
+    'addOption': 'Dodaj opcję',
+    'apiBasedVar': 'Zmienna oparta na API',
+    'varName': 'Nazwa zmiennej',
+    'labelName': 'Nazwa etykiety',
+    'inputPlaceholder': 'Proszę wpisać',
+    'required': 'Wymagane',
+    'errorMsg': {
+      varNameRequired: 'Wymagana nazwa zmiennej',
+      labelNameRequired: 'Wymagana nazwa etykiety',
+      varNameCanBeRepeat: 'Nazwa zmiennej nie może się powtarzać',
+      atLeastOneOption: 'Wymagana jest co najmniej jedna opcja',
+      optionRepeat: 'Powtarzają się opcje',
+    },
+  },
+  vision: {
+    name: 'Wizja',
+    description:
+      'Włączenie Wizji pozwoli modelowi przyjmować obrazy i odpowiadać na pytania o nich.',
+    settings: 'Ustawienia',
+    visionSettings: {
+      title: 'Ustawienia Wizji',
+      resolution: 'Rozdzielczość',
+      resolutionTooltip: `niska rozdzielczość pozwoli modelowi odbierać obrazy o rozdzielczości 512 x 512 i reprezentować obraz z limitem 65 tokenów. Pozwala to API na szybsze odpowiedzi i zużywa mniej tokenów wejściowych dla przypadków, które nie wymagają wysokiego szczegółu.
+        \n
+        wysoka rozdzielczość pozwala najpierw modelowi zobaczyć obraz niskiej rozdzielczości, a następnie tworzy szczegółowe przycięcia obrazów wejściowych jako 512px kwadratów w oparciu o rozmiar obrazu wejściowego. Każde z tych szczegółowych przycięć używa dwukrotności budżetu tokenów, co daje razem 129 tokenów.`,
+      high: 'Wysoka',
+      low: 'Niska',
+      uploadMethod: 'Metoda przesyłania',
+      both: 'Obie',
+      localUpload: 'Przesyłanie lokalne',
+      url: 'URL',
+      uploadLimit: 'Limit przesyłania',
+    },
+  },
+  voice: {
+    name: 'Głos',
+    defaultDisplay: 'Domyślny Głos',
+    description: 'Ustawienia głosu tekstu na mowę',
+    settings: 'Ustawienia',
+    voiceSettings: {
+      title: 'Ustawienia Głosu',
+      language: 'Język',
+      resolutionTooltip: 'Wsparcie językowe głosu tekstu na mowę.',
+      voice: 'Głos',
+    },
+  },
+  openingStatement: {
+    title: 'Wstęp do rozmowy',
+    add: 'Dodaj',
+    writeOpner: 'Napisz wstęp',
+    placeholder:
+      'Tutaj napisz swoją wiadomość wprowadzającą, możesz użyć zmiennych, spróbuj wpisać {{variable}}.',
+    openingQuestion: 'Pytania otwierające',
+    noDataPlaceHolder:
+      'Rozpoczynanie rozmowy z użytkownikiem może pomóc AI nawiązać bliższe połączenie z nim w aplikacjach konwersacyjnych.',
+    varTip: 'Możesz używać zmiennych, spróbuj wpisać {{variable}}',
+    tooShort:
+      'Wymagane jest co najmniej 20 słów wstępnego monitu, aby wygenerować uwagi wstępne do rozmowy.',
+    notIncludeKey:
+      'Wstępny monit nie zawiera zmiennej: {{key}}. Proszę dodać ją do wstępnego monitu.',
+  },
+  modelConfig: {
+    model: 'Model',
+    setTone: 'Ustaw ton odpowiedzi',
+    title: 'Model i parametry',
+    modeType: {
+      chat: 'Czat',
+      completion: 'Uzupełnienie',
+    },
+  },
+  inputs: {
+    title: 'Debugowanie i podgląd',
+    noPrompt: 'Spróbuj wpisać jakiś monit w polu przedmonitu',
+    userInputField: 'Pole wejściowe użytkownika',
+    noVar:
+      'Wypełnij wartość zmiennej, która będzie automatycznie zastępowana w monicie za każdym razem, gdy rozpocznie się nowa sesja.',
+    chatVarTip:
+      'Wypełnij wartość zmiennej, która będzie automatycznie zastępowana w monicie za każdym razem, gdy rozpocznie się nowa sesja',
+    completionVarTip:
+      'Wypełnij wartość zmiennej, która będzie automatycznie zastępowana w słowach monitu za każdym razem, gdy zostanie przesłane pytanie.',
+    previewTitle: 'Podgląd monitu',
+    queryTitle: 'Treść zapytania',
+    queryPlaceholder: 'Proszę wprowadzić tekst żądania.',
+    run: 'URUCHOM',
+  },
+  result: 'Tekst wyjściowy',
+  datasetConfig: {
+    settingTitle: 'Ustawienia odzyskiwania',
+    knowledgeTip: 'Kliknij przycisk „+”, aby dodać wiedzę',
+    retrieveOneWay: {
+      title: 'Odzyskiwanie N-do-1',
+      description:
+        'Na podstawie zamiaru użytkownika i opisów Wiedzy, Agent samodzielnie wybiera najlepszą Wiedzę do zapytania. Najlepiej sprawdza się w aplikacjach o wyraźnej, ograniczonej Wiedzy.',
+    },
+    retrieveMultiWay: {
+      title: 'Odzyskiwanie wielościeżkowe',
+      description:
+        'Na podstawie zamiaru użytkownika, zapytania obejmują wszystkie Wiedze, pobierają odpowiedni tekst z wielu źródeł i wybierają najlepsze wyniki dopasowane do zapytań użytkownika po ponownym rankingu. Wymagana jest konfiguracja API modelu Przerankowania.',
+    },
+    rerankModelRequired: 'Wymagany model Przerankowania',
+    params: 'Parametry',
+    top_k: 'Najlepsze K',
+    top_kTip:
+      'Używane do filtrowania fragmentów najbardziej podobnych do pytań użytkownika. System również dynamicznie dostosowuje wartość Najlepszych K, zgodnie z maksymalną liczbą tokenów wybranego modelu.',
+    score_threshold: 'Próg punktacji',
+    score_thresholdTip:
+      'Używany do ustawienia progu podobieństwa dla filtrowania fragmentów.',
+    retrieveChangeTip:
+      'Modyfikacja trybu indeksowania i odzyskiwania może wpłynąć na aplikacje powiązane z tą Wiedzą.',
+  },
+  debugAsSingleModel: 'Debuguj jako pojedynczy model',
+  debugAsMultipleModel: 'Debuguj jako wiele modeli',
+  duplicateModel: 'Duplikuj',
+  publishAs: 'Opublikuj jako',
+  assistantType: {
+    name: 'Typ asystenta',
+    chatAssistant: {
+      name: 'Podstawowy Asystent',
+      description:
+        'Buduj asystenta opartego na czacie, korzystając z dużego modelu językowego',
+    },
+    agentAssistant: {
+      name: 'Asystent Agent',
+      description:
+        'Buduj inteligentnego agenta, który może autonomicznie wybierać narzędzia do wykonywania zadań',
+    },
+  },
+  agent: {
+    agentMode: 'Tryb Agenta',
+    agentModeDes: 'Ustaw rodzaj trybu wnioskowania dla agenta',
+    agentModeType: {
+      ReACT: 'ReAct',
+      functionCall: 'Wywołanie funkcji',
+    },
+    setting: {
+      name: 'Ustawienia Agenta',
+      description:
+        'Ustawienia Asystenta Agenta pozwalają ustawić tryb agenta i zaawansowane funkcje, takie jak wbudowane monity, dostępne tylko w typie Agent.',
+      maximumIterations: {
+        name: 'Maksymalna liczba iteracji',
+        description:
+          'Ogranicz liczbę iteracji, które asystent agenta może wykonać',
+      },
+    },
+    buildInPrompt: 'Wbudowany Monit',
+    firstPrompt: 'Pierwszy Monit',
+    nextIteration: 'Następna Iteracja',
+    promptPlaceholder: 'Napisz tutaj swój monit',
+    tools: {
+      name: 'Narzędzia',
+      description:
+        'Używanie narzędzi może rozszerzyć możliwości LLM, takie jak wyszukiwanie w internecie lub wykonywanie obliczeń naukowych',
+      enabled: 'Włączone',
+    },
+  },
+}
+
+export default translation

+ 95 - 0
web/i18n/pl-PL/app-log.ts

@@ -0,0 +1,95 @@
+const translation = {
+  title: 'Dzienniki',
+  description:
+    'Dzienniki rejestrują stan działania aplikacji, w tym dane wejściowe użytkowników i odpowiedzi AI.',
+  dateTimeFormat: 'DD/MM/YYYY HH:mm',
+  table: {
+    header: {
+      time: 'Czas',
+      endUser: 'Użytkownik końcowy',
+      input: 'Wejście',
+      output: 'Wyjście',
+      summary: 'Tytuł',
+      messageCount: 'Liczba wiadomości',
+      userRate: 'Ocena użytkownika',
+      adminRate: 'Ocena operatora',
+      startTime: 'CZAS STARTU',
+      status: 'STATUS',
+      runtime: 'CZAS DZIAŁANIA',
+      tokens: 'TOKENY',
+      user: 'UŻYTKOWNIK KOŃCOWY',
+      version: 'WERSJA',
+    },
+    pagination: {
+      previous: 'Poprzedni',
+      next: 'Następny',
+    },
+    empty: {
+      noChat: 'Brak rozmowy',
+      noOutput: 'Brak wyników',
+      element: {
+        title: 'Czy ktoś jest?',
+        content:
+          'Obserwuj i adnotuj interakcje między użytkownikami końcowymi a aplikacjami AI tutaj, aby ciągle poprawiać dokładność AI. Możesz spróbować <shareLink>udostępnić</shareLink> lub <testLink>przetestować</testLink> aplikację internetową samodzielnie, a następnie wrócić na tę stronę.',
+      },
+    },
+  },
+  detail: {
+    time: 'Czas',
+    conversationId: 'ID rozmowy',
+    promptTemplate: 'Szablon monitu',
+    promptTemplateBeforeChat:
+      'Szablon monitu przed rozmową · Jako wiadomość systemowa',
+    annotationTip: 'Usprawnienia oznaczone przez {{user}}',
+    timeConsuming: '',
+    second: 's',
+    tokenCost: 'Wydatkowane tokeny',
+    loading: 'ładowanie',
+    operation: {
+      like: 'lubię',
+      dislike: 'nie lubię',
+      addAnnotation: 'Dodaj usprawnienie',
+      editAnnotation: 'Edytuj usprawnienie',
+      annotationPlaceholder:
+        'Wprowadź oczekiwaną odpowiedź, którą chcesz, aby AI odpowiedziało, co może być używane do dokładnego dostrojenia modelu i ciągłej poprawy jakości generacji tekstu w przyszłości.',
+    },
+    variables: 'Zmienne',
+    uploadImages: 'Przesłane obrazy',
+  },
+  filter: {
+    period: {
+      today: 'Dzisiaj',
+      last7days: 'Ostatnie 7 dni',
+      last4weeks: 'Ostatnie 4 tygodnie',
+      last3months: 'Ostatnie 3 miesiące',
+      last12months: 'Ostatnie 12 miesięcy',
+      monthToDate: 'Od początku miesiąca',
+      quarterToDate: 'Od początku kwartału',
+      yearToDate: 'Od początku roku',
+      allTime: 'Cały czas',
+    },
+    annotation: {
+      all: 'Wszystkie',
+      annotated: 'Zanotowane usprawnienia ({{count}} elementów)',
+      not_annotated: 'Nie zanotowane',
+    },
+  },
+  workflowTitle: 'Dzienniki przepływu pracy',
+  workflowSubtitle: 'Dziennik zarejestrował operację Automatyzacji.',
+  runDetail: {
+    title: 'Dziennik rozmowy',
+    workflowTitle: 'Szczegół dziennika',
+  },
+  promptLog: 'Dziennik monitów',
+  agentLog: 'Dziennik agenta',
+  viewLog: 'Zobacz dziennik',
+  agentLogDetail: {
+    agentMode: 'Tryb agenta',
+    toolUsed: 'Użyte narzędzia',
+    iterations: 'Iteracje',
+    iteration: 'Iteracja',
+    finalProcessing: 'Końcowa obróbka',
+  },
+}
+
+export default translation

+ 162 - 0
web/i18n/pl-PL/app-overview.ts

@@ -0,0 +1,162 @@
+const translation = {
+  welcome: {
+    firstStepTip: 'Aby rozpocząć,',
+    enterKeyTip: 'wprowadź poniżej swój klucz API OpenAI',
+    getKeyTip: 'Pobierz swój klucz API z pulpitu nawigacyjnego OpenAI',
+    placeholder: 'Twój klucz API OpenAI (np. sk-xxxx)',
+  },
+  apiKeyInfo: {
+    cloud: {
+      trial: {
+        title: 'Korzystasz z limitu próbnego {{providerName}}.',
+        description:
+          'Limit próbny jest dostarczany do użytku testowego. Zanim wykorzystasz dozwolone wywołania limitu próbnego, skonfiguruj swojego własnego dostawcę modelu lub zakup dodatkowy limit.',
+      },
+      exhausted: {
+        title:
+          'Twój limit próbny został wyczerpany, proszę skonfiguruj swój klucz API.',
+        description:
+          'Twój limit próbny został wyczerpany. Skonfiguruj swojego własnego dostawcę modelu lub zakup dodatkowy limit.',
+      },
+    },
+    selfHost: {
+      title: {
+        row1: 'Aby rozpocząć,',
+        row2: 'najpierw skonfiguruj swojego dostawcę modelu.',
+      },
+    },
+    callTimes: 'Liczba wywołań',
+    usedToken: 'Zużyty token',
+    setAPIBtn: 'Przejdź do konfiguracji dostawcy modelu',
+    tryCloud: 'Lub wypróbuj wersję chmurową Dify z darmowym limitem',
+  },
+  overview: {
+    title: 'Przegląd',
+    appInfo: {
+      explanation: 'Gotowa do użycia aplikacja internetowa AI',
+      accessibleAddress: 'Publiczny adres URL',
+      preview: 'Podgląd',
+      regenerate: 'Wygeneruj ponownie',
+      preUseReminder: 'Przed kontynuowaniem włącz aplikację WebApp.',
+      settings: {
+        entry: 'Ustawienia',
+        title: 'Ustawienia WebApp',
+        webName: 'Nazwa WebApp',
+        webDesc: 'Opis WebApp',
+        webDescTip:
+          'Ten tekst będzie wyświetlany po stronie klienta, zapewniając podstawowe wskazówki, jak korzystać z aplikacji',
+        webDescPlaceholder: 'Wpisz opis WebApp',
+        language: 'Język',
+        more: {
+          entry: 'Pokaż więcej ustawień',
+          copyright: 'Prawa autorskie',
+          copyRightPlaceholder: 'Wprowadź nazwę autora lub organizacji',
+          privacyPolicy: 'Polityka prywatności',
+          privacyPolicyPlaceholder: 'Wprowadź link do polityki prywatności',
+          privacyPolicyTip:
+            'Pomaga odwiedzającym zrozumieć, jakie dane zbiera aplikacja, zobacz <privacyPolicyLink>Politykę prywatności Dify</privacyPolicyLink>.',
+        },
+      },
+      embedded: {
+        entry: 'Osadzone',
+        title: 'Osadź na stronie internetowej',
+        explanation:
+          'Wybierz sposób osadzenia aplikacji czatu na swojej stronie internetowej',
+        iframe:
+          'Aby dodać aplikację czatu w dowolnym miejscu na swojej stronie internetowej, dodaj ten kod iframe do swojego kodu HTML.',
+        scripts:
+          'Aby dodać aplikację czatu w prawym dolnym rogu swojej strony internetowej, dodaj ten kod do swojego HTML.',
+        chromePlugin: 'Zainstaluj rozszerzenie Chrome Dify Chatbot',
+        copied: 'Skopiowane',
+        copy: 'Kopiuj',
+      },
+      qrcode: {
+        title: 'Kod QR do udostępniania',
+        scan: 'Skanuj aplikację udostępniania',
+        download: 'Pobierz kod QR',
+      },
+      customize: {
+        way: 'sposób',
+        entry: 'Dostosuj',
+        title: 'Dostosuj aplikację internetową AI',
+        explanation:
+          'Możesz dostosować front aplikacji internetowej do swoich scenariuszy i potrzeb stylowych.',
+        way1: {
+          name: 'Skopiuj kod klienta, zmodyfikuj go i wdroż na Vercel (zalecane)',
+          step1: 'Skopiuj kod klienta i zmodyfikuj go',
+          step1Tip:
+            'Kliknij tutaj, aby skopiować kod źródłowy na swoje konto GitHub i zmodyfikować kod',
+          step1Operation: 'Dify-WebClient',
+          step2: 'Wdroż na Vercel',
+          step2Tip:
+            'Kliknij tutaj, aby zaimportować repozytorium do Vercel i wdrożyć',
+          step2Operation: 'Import repozytorium',
+          step3: 'Konfiguracja zmiennych środowiskowych',
+          step3Tip: 'Dodaj następujące zmienne środowiskowe w Vercel',
+        },
+        way2: {
+          name: 'Napisz kod po stronie klienta, aby wywołać API i wdrożyć go na serwerze',
+          operation: 'Dokumentacja',
+        },
+      },
+    },
+    apiInfo: {
+      title: 'API usługi w tle',
+      explanation: 'Łatwe do zintegrowania z twoją aplikacją',
+      accessibleAddress: 'Punkt końcowy API usługi',
+      doc: 'Dokumentacja API',
+    },
+    status: {
+      running: 'W usłudze',
+      disable: 'Wyłącz',
+    },
+  },
+  analysis: {
+    title: 'Analiza',
+    ms: 'ms',
+    tokenPS: 'Tokeny/s',
+    totalMessages: {
+      title: 'Łączna liczba wiadomości',
+      explanation:
+        'Dzienna liczba interakcji z AI; inżynieria i debugowanie monitów wykluczone.',
+    },
+    activeUsers: {
+      title: 'Aktywni użytkownicy',
+      explanation:
+        'Unikalni użytkownicy uczestniczący w pytaniach i odpowiedziach z AI; inżynieria i debugowanie monitów wykluczone.',
+    },
+    tokenUsage: {
+      title: 'Zużycie tokenów',
+      explanation:
+        'Odbija dziennie używane tokeny modelu językowego dla aplikacji, przydatne do kontroli kosztów.',
+      consumed: 'Zużyte',
+    },
+    avgSessionInteractions: {
+      title: 'Śr. interakcji w sesji',
+      explanation:
+        'Liczba ciągłych komunikacji użytkownik-AI; dla aplikacji opartych na rozmowach.',
+    },
+    avgUserInteractions: {
+      title: 'Śr. interakcji użytkownika',
+      explanation:
+        'Odbija dzienną częstotliwość użytkowania przez użytkowników. Ta metryka odzwierciedla przywiązanie użytkowników.',
+    },
+    userSatisfactionRate: {
+      title: 'Wskaźnik zadowolenia użytkowników',
+      explanation:
+        'Liczba polubień na 1000 wiadomości. Wskazuje to proporcję odpowiedzi, z których użytkownicy są bardzo zadowoleni.',
+    },
+    avgResponseTime: {
+      title: 'Śr. czas odpowiedzi',
+      explanation:
+        'Czas (ms) potrzebny AI na przetworzenie/odpowiedź; dla aplikacji opartych na tekście.',
+    },
+    tps: {
+      title: 'Szybkość wydajności tokenów',
+      explanation:
+        'Mierzy wydajność LLM. Liczy szybkość wydajności tokenów LLM od początku żądania do zakończenia wyjścia.',
+    },
+  },
+}
+
+export default translation

+ 97 - 0
web/i18n/pl-PL/app.ts

@@ -0,0 +1,97 @@
+const translation = {
+  createApp: 'UTWÓRZ APLIKACJĘ',
+  types: {
+    all: 'Wszystkie',
+    chatbot: 'Chatbot',
+    agent: 'Agent',
+    workflow: 'Przepływ pracy',
+    completion: 'Zakończenie',
+  },
+  duplicate: 'Duplikuj',
+  duplicateTitle: 'Duplikuj aplikację',
+  export: 'Eksportuj DSL',
+  exportFailed: 'Eksport DSL nie powiódł się.',
+  importDSL: 'Importuj plik DSL',
+  createFromConfigFile: 'Utwórz z pliku DSL',
+  deleteAppConfirmTitle: 'Usunąć tę aplikację?',
+  deleteAppConfirmContent:
+    'Usunięcie aplikacji jest nieodwracalne. Użytkownicy nie będą mieli już dostępu do twojej aplikacji, a wszystkie konfiguracje monitów i dzienniki zostaną trwale usunięte.',
+  appDeleted: 'Aplikacja usunięta',
+  appDeleteFailed: 'Nie udało się usunąć aplikacji',
+  join: 'Dołącz do społeczności',
+  communityIntro:
+    'Dyskutuj z członkami zespołu, współtwórcami i deweloperami na różnych kanałach.',
+  roadmap: 'Zobacz naszą mapę drogową',
+  newApp: {
+    startFromBlank: 'Utwórz od podstaw',
+    startFromTemplate: 'Utwórz z szablonu',
+    captionAppType: 'Jaki typ aplikacji chcesz stworzyć?',
+    chatbotDescription:
+      'Zbuduj aplikację opartą na czacie. Ta aplikacja używa formatu pytań i odpowiedzi, umożliwiając wielokrotne rundy ciągłej konwersacji.',
+    completionDescription:
+      'Zbuduj aplikację generującą teksty wysokiej jakości na podstawie monitów, takich jak generowanie artykułów, streszczeń, tłumaczeń i innych.',
+    completionWarning: 'Ten typ aplikacji nie będzie już obsługiwany.',
+    agentDescription:
+      'Zbuduj inteligentnego agenta, który może autonomicznie wybierać narzędzia do wykonywania zadań',
+    workflowDescription:
+      'Zbuduj aplikację, która w oparciu o przepływ pracy generuje teksty wysokiej jakości z dużą możliwością dostosowania. Jest odpowiednia dla doświadczonych użytkowników.',
+    workflowWarning: 'Obecnie w fazie beta',
+    chatbotType: 'Metoda orkiestracji chatbota',
+    basic: 'Podstawowy',
+    basicTip: 'Dla początkujących, można przełączyć się później na Chatflow',
+    basicFor: 'Dla początkujących',
+    basicDescription:
+      'Podstawowa orkiestracja pozwala na skonfigurowanie aplikacji Chatbot za pomocą prostych ustawień, bez możliwości modyfikacji wbudowanych monitów. Jest odpowiednia dla początkujących.',
+    advanced: 'Chatflow',
+    advancedFor: 'Dla zaawansowanych użytkowników',
+    advancedDescription:
+      'Orkiestracja przepływu pracy organizuje Chatboty w formie przepływów pracy, oferując wysoki stopień dostosowania, w tym możliwość edycji wbudowanych monitów. Jest odpowiednia dla doświadczonych użytkowników.',
+    captionName: 'Ikona i nazwa aplikacji',
+    appNamePlaceholder: 'Podaj nazwę swojej aplikacji',
+    captionDescription: 'Opis',
+    appDescriptionPlaceholder: 'Wprowadź opis aplikacji',
+    useTemplate: 'Użyj tego szablonu',
+    previewDemo: 'Podgląd demo',
+    chatApp: 'Asystent',
+    chatAppIntro:
+      'Chcę zbudować aplikację opartą na czacie. Ta aplikacja używa formatu pytań i odpowiedzi, umożliwiając wielokrotne rundy ciągłej konwersacji.',
+    agentAssistant: 'Nowy asystent agenta',
+    completeApp: 'Generator tekstu',
+    completeAppIntro:
+      'Chcę stworzyć aplikację, która generuje teksty wysokiej jakości na podstawie monitów, takich jak generowanie artykułów, streszczeń, tłumaczeń i innych.',
+    showTemplates: 'Chcę wybrać z szablonu',
+    hideTemplates: 'Wróć do wyboru trybu',
+    Create: 'Utwórz',
+    Cancel: 'Anuluj',
+    nameNotEmpty: 'Nazwa nie może być pusta',
+    appTemplateNotSelected: 'Proszę wybrać szablon',
+    appTypeRequired: 'Proszę wybrać typ aplikacji',
+    appCreated: 'Aplikacja utworzona',
+    appCreateFailed: 'Nie udało się utworzyć aplikacji',
+  },
+  editApp: 'Edytuj informacje',
+  editAppTitle: 'Edytuj informacje o aplikacji',
+  editDone: 'Informacje o aplikacji zaktualizowane',
+  editFailed: 'Nie udało się zaktualizować informacji o aplikacji',
+  emoji: {
+    ok: 'OK',
+    cancel: 'Anuluj',
+  },
+  switch: 'Przełącz na Orkiestrację Przepływu Pracy',
+  switchTipStart:
+    'Dla ciebie zostanie utworzona nowa kopia aplikacji, a nowa kopia przełączy się na Orkiestrację Przepływu Pracy. Nowa kopia będzie ',
+  switchTip: 'nie pozwoli',
+  switchTipEnd: ' na powrót do Podstawowej Orkiestracji.',
+  switchLabel: 'Kopia aplikacji do utworzenia',
+  removeOriginal: 'Usuń oryginalną aplikację',
+  switchStart: 'Rozpocznij przełączanie',
+  typeSelector: {
+    all: 'WSZYSTKIE Typy',
+    chatbot: 'Chatbot',
+    agent: 'Agent',
+    workflow: 'Przepływ pracy',
+    completion: 'Zakończenie',
+  },
+}
+
+export default translation

+ 127 - 0
web/i18n/pl-PL/billing.ts

@@ -0,0 +1,127 @@
+const translation = {
+  currentPlan: 'Obecny plan',
+  upgradeBtn: {
+    plain: 'Ulepsz plan',
+    encourage: 'Ulepsz teraz',
+    encourageShort: 'Ulepsz',
+  },
+  viewBilling: 'Zarządzaj rozliczeniami i subskrypcjami',
+  buyPermissionDeniedTip:
+    'Skontaktuj się z administratorem swojej firmy, aby zasubskrybować',
+  plansCommon: {
+    title: 'Wybierz plan odpowiedni dla siebie',
+    yearlyTip: 'Otrzymaj 2 miesiące za darmo, subskrybując rocznie!',
+    mostPopular: 'Najpopularniejszy',
+    planRange: {
+      monthly: 'Miesięczny',
+      yearly: 'Roczny',
+    },
+    month: 'miesiąc',
+    year: 'rok',
+    save: 'Oszczędź ',
+    free: 'Darmowy',
+    currentPlan: 'Obecny plan',
+    contractSales: 'Skontaktuj się z działem sprzedaży',
+    contractOwner: 'Skontaktuj się z zarządcą zespołu',
+    startForFree: 'Zacznij za darmo',
+    getStartedWith: 'Rozpocznij z ',
+    contactSales: 'Kontakt z działem sprzedaży',
+    talkToSales: 'Porozmawiaj z działem sprzedaży',
+    modelProviders: 'Dostawcy modeli',
+    teamMembers: 'Członkowie zespołu',
+    buildApps: 'Twórz aplikacje',
+    vectorSpace: 'Przestrzeń wektorowa',
+    vectorSpaceBillingTooltip:
+      'Każdy 1MB może przechowywać około 1,2 miliona znaków z wektoryzowanych danych (szacowane na podstawie OpenAI Embeddings, różni się w zależności od modelu).',
+    vectorSpaceTooltip:
+      'Przestrzeń wektorowa jest systemem pamięci długoterminowej wymaganym dla LLM, aby zrozumieć Twoje dane.',
+    documentsUploadQuota: 'Limit przesyłanych dokumentów',
+    documentProcessingPriority: 'Priorytet przetwarzania dokumentów',
+    documentProcessingPriorityTip:
+      'Dla wyższego priorytetu przetwarzania dokumentów, ulepsz swój plan.',
+    documentProcessingPriorityUpgrade:
+      'Przetwarzaj więcej danych z większą dokładnością i w szybszym tempie.',
+    priority: {
+      'standard': 'Standardowy',
+      'priority': 'Priorytetowy',
+      'top-priority': 'Najwyższy priorytet',
+    },
+    logsHistory: 'Historia logów',
+    customTools: 'Niestandardowe narzędzia',
+    unavailable: 'Niedostępne',
+    days: 'dni',
+    unlimited: 'Nieograniczony',
+    support: 'Wsparcie',
+    supportItems: {
+      communityForums: 'Forum społecznościowe',
+      emailSupport: 'Wsparcie mailowe',
+      priorityEmail: 'Priorytetowa pomoc mailowa i czat',
+      logoChange: 'Zmiana logo',
+      SSOAuthentication: 'Uwierzytelnianie SSO',
+      personalizedSupport: 'Personalizowane wsparcie',
+      dedicatedAPISupport: 'Dedykowane wsparcie API',
+      customIntegration: 'Niestandardowa integracja i wsparcie',
+      ragAPIRequest: 'Żądania API RAG',
+      bulkUpload: 'Masowe przesyłanie dokumentów',
+      agentMode: 'Tryb agenta',
+      workflow: 'Przepływ pracy',
+    },
+    comingSoon: 'Wkrótce dostępne',
+    member: 'Członek',
+    memberAfter: 'Członek',
+    messageRequest: {
+      title: 'Limity kredytów wiadomości',
+      tooltip:
+        'Limity wywołań wiadomości dla różnych planów używających modeli OpenAI (z wyjątkiem gpt4). Wiadomości przekraczające limit będą korzystać z twojego klucza API OpenAI.',
+    },
+    annotatedResponse: {
+      title: 'Limity kredytów na adnotacje',
+      tooltip:
+        'Ręczna edycja i adnotacja odpowiedzi zapewniają możliwość dostosowania wysokiej jakości odpowiedzi na pytania dla aplikacji. (Stosowane tylko w aplikacjach czatowych)',
+    },
+    ragAPIRequestTooltip:
+      'Odnosi się do liczby wywołań API wykorzystujących tylko zdolności przetwarzania bazy wiedzy Dify.',
+    receiptInfo:
+      'Tylko właściciel zespołu i administrator zespołu mogą subskrybować i przeglądać informacje o rozliczeniach',
+  },
+  plans: {
+    sandbox: {
+      name: 'Sandbox',
+      description: '200 razy darmowa próba GPT',
+      includesTitle: 'Zawiera:',
+    },
+    professional: {
+      name: 'Profesjonalny',
+      description:
+        'Dla osób fizycznych i małych zespołów, aby odblokować więcej mocy w przystępnej cenie.',
+      includesTitle: 'Wszystko w darmowym planie, plus:',
+    },
+    team: {
+      name: 'Zespół',
+      description:
+        'Współpracuj bez ograniczeń i ciesz się najwyższą wydajnością.',
+      includesTitle: 'Wszystko w planie Profesjonalnym, plus:',
+    },
+    enterprise: {
+      name: 'Przedsiębiorstwo',
+      description:
+        'Uzyskaj pełne możliwości i wsparcie dla systemów o kluczowym znaczeniu dla misji.',
+      includesTitle: 'Wszystko w planie Zespołowym, plus:',
+    },
+  },
+  vectorSpace: {
+    fullTip: 'Przestrzeń wektorowa jest pełna.',
+    fullSolution: 'Ulepsz swój plan, aby uzyskać więcej miejsca.',
+  },
+  apps: {
+    fullTipLine1: 'Ulepsz swój plan, aby',
+    fullTipLine2: 'tworzyć więcej aplikacji.',
+  },
+  annotatedResponse: {
+    fullTipLine1: 'Ulepsz swój plan, aby',
+    fullTipLine2: 'adnotować więcej rozmów.',
+    quotaTitle: 'Limit adnotacji odpowiedzi',
+  },
+}
+
+export default translation

+ 547 - 0
web/i18n/pl-PL/common.ts

@@ -0,0 +1,547 @@
+const translation = {
+  api: {
+    success: 'Sukces',
+    actionSuccess: 'Akcja powiodła się',
+    saved: 'Zapisane',
+    create: 'Utworzono',
+    remove: 'Usunięto',
+  },
+  operation: {
+    create: 'Utwórz',
+    confirm: 'Potwierdź',
+    cancel: 'Anuluj',
+    clear: 'Wyczyść',
+    save: 'Zapisz',
+    edit: 'Edytuj',
+    add: 'Dodaj',
+    added: 'Dodano',
+    refresh: 'Odśwież',
+    reset: 'Resetuj',
+    search: 'Szukaj',
+    change: 'Zmień',
+    remove: 'Usuń',
+    send: 'Wyślij',
+    copy: 'Kopiuj',
+    lineBreak: 'Złamanie linii',
+    sure: 'Jestem pewien',
+    download: 'Pobierz',
+    delete: 'Usuń',
+    settings: 'Ustawienia',
+    setup: 'Konfiguruj',
+    getForFree: 'Zdobądź za darmo',
+    reload: 'Przeładuj',
+    ok: 'OK',
+    log: 'Dziennik',
+    learnMore: 'Dowiedz się więcej',
+    params: 'Parametry',
+    duplicate: 'Duplikuj',
+    rename: 'Zmień nazwę',
+  },
+  placeholder: {
+    input: 'Proszę wprowadzić',
+    select: 'Proszę wybrać',
+  },
+  voice: {
+    language: {
+      zhHans: 'Chiński',
+      zhHant: 'Chiński tradycyjny',
+      enUS: 'Angielski',
+      deDE: 'Niemiecki',
+      frFR: 'Francuski',
+      esES: 'Hiszpański',
+      itIT: 'Włoski',
+      thTH: 'Tajski',
+      idID: 'Indonezyjski',
+      jaJP: 'Japoński',
+      koKR: 'Koreański',
+      ptBR: 'Portugalski',
+      ruRU: 'Rosyjski',
+      ukUA: 'Ukraiński',
+      viVN: 'Wietnamski',
+    },
+  },
+  unit: {
+    char: 'znaki',
+  },
+  actionMsg: {
+    noModification: 'W tej chwili brak zmian.',
+    modifiedSuccessfully: 'Zmodyfikowano pomyślnie',
+    modifiedUnsuccessfully: 'Nie udało się zmodyfikować',
+    copySuccessfully: 'Skopiowano pomyślnie',
+    paySucceeded: 'Płatność zakończona sukcesem',
+    payCancelled: 'Płatność anulowana',
+    generatedSuccessfully: 'Wygenerowano pomyślnie',
+    generatedUnsuccessfully: 'Nie udało się wygenerować',
+  },
+  model: {
+    params: {
+      temperature: 'Temperatura',
+      temperatureTip:
+        'Kontroluje przypadkowość: obniżenie powoduje mniej przypadkowych uzupełnień. Gdy temperatura zbliża się do zera, model staje się deterministyczny i powtarzalny.',
+      top_p: 'Top P',
+      top_pTip:
+        'Kontroluje różnorodność poprzez próbkowanie jądra: 0,5 oznacza, że rozważane są połowa wszystkich opcji ważonych prawdopodobieństwem.',
+      presence_penalty: 'Kara za obecność',
+      presence_penaltyTip:
+        'Jak bardzo karać nowe tokeny w zależności od tego, czy pojawiły się już w tekście.\nZwiększa prawdopodobieństwo, że model zacznie rozmawiać o nowych tematach.',
+      frequency_penalty: 'Kara za częstotliwość',
+      frequency_penaltyTip:
+        'Jak bardzo karać nowe tokeny bazując na ich dotychczasowej częstotliwości w tekście.\nZmniejsza prawdopodobieństwo, że model będzie powtarzał tę samą linię dosłownie.',
+      max_tokens: 'Maksymalna liczba tokenów',
+      max_tokensTip:
+        'Służy do ograniczania maksymalnej długości odpowiedzi w tokenach. \nWiększe wartości mogą ograniczyć miejsce na słowa wstępne, dzienniki rozmów i Wiedzę. \nZaleca się ustawienie go poniżej dwóch trzecich\ngpt-4-1106-preview, gpt-4-vision-preview maksymalna liczba tokenów (input 128k output 4k)',
+      maxTokenSettingTip:
+        'Twoje ustawienie maksymalnej liczby tokenów jest wysokie, potencjalnie ograniczając miejsce na monity, zapytania i dane. Rozważ ustawienie go poniżej 2/3.',
+      setToCurrentModelMaxTokenTip:
+        'Maksymalna liczba tokenów została zaktualizowana do 80% maksymalnej liczby tokenów obecnego modelu {{maxToken}}.',
+      stop_sequences: 'Sekwencje zatrzymujące',
+      stop_sequencesTip:
+        'Do czterech sekwencji, w których API przestanie generować dalsze tokeny. Zwrócony tekst nie będzie zawierał sekwencji zatrzymującej.',
+      stop_sequencesPlaceholder: 'Wpisz sekwencję i naciśnij Tab',
+    },
+    tone: {
+      Creative: 'Kreatywny',
+      Balanced: 'Zrównoważony',
+      Precise: 'Precyzyjny',
+      Custom: 'Niestandardowy',
+    },
+    addMoreModel: 'Przejdź do ustawień, aby dodać więcej modeli',
+  },
+  menus: {
+    status: 'beta',
+    explore: 'Eksploruj',
+    apps: 'Studio',
+    plugins: 'Pluginy',
+    pluginsTips:
+      'Integruj pluginy stron trzecich lub twórz pluginy AI kompatybilne z ChatGPT.',
+    datasets: 'Wiedza',
+    datasetsTips:
+      'NADCHODZI: Importuj swoje własne dane tekstowe lub wpisuj dane w czasie rzeczywistym przez Webhook, aby wzmocnić kontekst LLM.',
+    newApp: 'Nowa aplikacja',
+    newDataset: 'Utwórz Wiedzę',
+    tools: 'Narzędzia',
+  },
+  userProfile: {
+    settings: 'Ustawienia',
+    workspace: 'Przestrzeń robocza',
+    createWorkspace: 'Utwórz przestrzeń roboczą',
+    helpCenter: 'Pomoc',
+    roadmapAndFeedback: 'Opinie',
+    community: 'Społeczność',
+    about: 'O',
+    logout: 'Wyloguj się',
+  },
+  settings: {
+    accountGroup: 'KONTO',
+    workplaceGroup: 'PRZESTRZEŃ ROBOCZA',
+    account: 'Moje konto',
+    members: 'Członkowie',
+    billing: 'Rozliczenia',
+    integrations: 'Integracje',
+    language: 'Język',
+    provider: 'Dostawca modelu',
+    dataSource: 'Źródło danych',
+    plugin: 'Pluginy',
+    apiBasedExtension: 'Rozszerzenie API',
+  },
+  account: {
+    avatar: 'Awatar',
+    name: 'Nazwa',
+    email: 'Email',
+    password: 'Hasło',
+    passwordTip:
+      'Możesz ustawić stałe hasło, jeśli nie chcesz używać tymczasowych kodów logowania',
+    setPassword: 'Ustaw hasło',
+    resetPassword: 'Zresetuj hasło',
+    currentPassword: 'Obecne hasło',
+    newPassword: 'Nowe hasło',
+    confirmPassword: 'Potwierdź hasło',
+    notEqual: 'Dwa hasła są różne.',
+    langGeniusAccount: 'Konto Dify',
+    langGeniusAccountTip: 'Twoje konto Dify i powiązane dane użytkownika.',
+    editName: 'Edytuj nazwę',
+    showAppLength: 'Pokaż {{length}} aplikacje',
+  },
+  members: {
+    team: 'Zespół',
+    invite: 'Dodaj',
+    name: 'NAZWA',
+    lastActive: 'OSTATNIA AKTYWNOŚĆ',
+    role: 'ROLE',
+    pending: 'Oczekujący...',
+    owner: 'Właściciel',
+    admin: 'Admin',
+    adminTip: 'Może tworzyć aplikacje i zarządzać ustawieniami zespołu',
+    normal: 'Normalny',
+    normalTip: 'Może tylko korzystać z aplikacji, nie może tworzyć aplikacji',
+    inviteTeamMember: 'Dodaj członka zespołu',
+    inviteTeamMemberTip:
+      'Mogą uzyskać bezpośredni dostęp do danych Twojego zespołu po zalogowaniu.',
+    email: 'Email',
+    emailInvalid: 'Nieprawidłowy format e-maila',
+    emailPlaceholder: 'Proszę podać adresy e-mail',
+    sendInvite: 'Wyślij zaproszenie',
+    invitedAsRole: 'Zaproszony jako użytkownik typu {{role}}',
+    invitationSent: 'Zaproszenie wysłane',
+    invitationSentTip:
+      'Zaproszenie zostało wysłane, a oni mogą zalogować się do Dify, aby uzyskać dostęp do danych Twojego zespołu.',
+    invitationLink: 'Link zaproszenia',
+    failedinvitationEmails: 'Poniższe osoby nie zostały pomyślnie zaproszone',
+    ok: 'OK',
+    removeFromTeam: 'Usuń z zespołu',
+    removeFromTeamTip: 'Usunie dostęp do zespołu',
+    setAdmin: 'Ustaw jako administratora',
+    setMember: 'Ustaw jako zwykłego członka',
+    disinvite: 'Anuluj zaproszenie',
+    deleteMember: 'Usuń członka',
+    you: '(Ty)',
+  },
+  integrations: {
+    connected: 'Połączony',
+    google: 'Google',
+    googleAccount: 'Zaloguj się przy użyciu konta Google',
+    github: 'GitHub',
+    githubAccount: 'Zaloguj się przy użyciu konta GitHub',
+    connect: 'Połącz',
+  },
+  language: {
+    displayLanguage: 'Język interfejsu',
+    timezone: 'Strefa czasowa',
+  },
+  provider: {
+    apiKey: 'Klucz API',
+    enterYourKey: 'Wprowadź tutaj swój klucz API',
+    invalidKey: 'Nieprawidłowy klucz API OpenAI',
+    validatedError: 'Weryfikacja nie powiodła się: ',
+    validating: 'Weryfikowanie klucza...',
+    saveFailed: 'Zapis klucza API nie powiódł się',
+    apiKeyExceedBill: 'Ten KLUCZ API nie ma dostępnych limitów, przeczytaj',
+    addKey: 'Dodaj klucz',
+    comingSoon: 'Już wkrótce',
+    editKey: 'Edytuj',
+    invalidApiKey: 'Nieprawidłowy klucz API',
+    azure: {
+      apiBase: 'Podstawa API',
+      apiBasePlaceholder:
+        'Adres URL podstawowy Twojego końcowego punktu Azure OpenAI.',
+      apiKey: 'Klucz API',
+      apiKeyPlaceholder: 'Wprowadź tutaj swój klucz API',
+      helpTip: 'Dowiedz się więcej o usłudze Azure OpenAI',
+    },
+    openaiHosted: {
+      openaiHosted: 'Hostowany OpenAI',
+      onTrial: 'NA PROBĘ',
+      exhausted: 'WYCZERPANY LIMIT',
+      desc: 'Usługa hostowania OpenAI dostarczana przez Dify pozwala korzystać z modeli takich jak GPT-3.5. Przed wyczerpaniem limitu próbnego należy skonfigurować inne dostawców modeli.',
+      callTimes: 'Czasy wywołań',
+      usedUp: 'Limit próbny został wyczerpany. Dodaj własnego dostawcę modeli.',
+      useYourModel: 'Aktualnie używany jest własny dostawca modeli.',
+      close: 'Zamknij',
+    },
+    anthropicHosted: {
+      anthropicHosted: 'Anthropic Claude',
+      onTrial: 'NA PROBĘ',
+      exhausted: 'WYCZERPANY LIMIT',
+      desc: 'Potężny model, który doskonale sprawdza się w szerokim spektrum zadań, od zaawansowanego dialogu i generowania treści twórczych po szczegółowe instrukcje.',
+      callTimes: 'Czasy wywołań',
+      usedUp: 'Limit próbny został wyczerpany. Dodaj własnego dostawcę modeli.',
+      useYourModel: 'Aktualnie używany jest własny dostawca modeli.',
+      close: 'Zamknij',
+    },
+    anthropic: {
+      using: 'Zdolność do osadzania jest używana',
+      enableTip:
+        'Aby włączyć model Anthropica, musisz najpierw powiązać się z usługą OpenAI lub Azure OpenAI.',
+      notEnabled: 'Nie włączono',
+      keyFrom: 'Pobierz swój klucz API od Anthropic',
+    },
+    encrypted: {
+      front: 'Twój KLUCZ API będzie szyfrowany i przechowywany za pomocą',
+      back: ' technologii.',
+    },
+  },
+  modelProvider: {
+    notConfigured:
+      'Systemowy model nie został jeszcze w pełni skonfigurowany, co może skutkować niedostępnością niektórych funkcji.',
+    systemModelSettings: 'Ustawienia modelu systemowego',
+    systemModelSettingsLink:
+      'Dlaczego konieczne jest skonfigurowanie modelu systemowego?',
+    selectModel: 'Wybierz swój model',
+    setupModelFirst: 'Proszę najpierw skonfigurować swój model',
+    systemReasoningModel: {
+      key: 'Model wnioskowania systemowego',
+      tip: 'Ustaw domyślny model wnioskowania do użytku przy tworzeniu aplikacji, a także cechy takie jak generowanie nazw dialogów i sugestie następnego pytania będą również korzystać z domyślnego modelu wnioskowania.',
+    },
+    embeddingModel: {
+      key: 'Model osadzania',
+      tip: 'Ustaw domyślny model do przetwarzania osadzania dokumentów wiedzy; zarówno pozyskiwanie, jak i importowanie wiedzy wykorzystują ten model osadzania do przetwarzania wektorowego. Zmiana spowoduje niezgodność wymiarów wektorów między importowaną wiedzą a pytaniem, co skutkować będzie niepowodzeniem w pozyskiwaniu. Aby uniknąć niepowodzeń, prosimy nie zmieniać tego modelu dowolnie.',
+      required: 'Model osadzania jest wymagany',
+    },
+    speechToTextModel: {
+      key: 'Model mowy na tekst',
+      tip: 'Ustaw domyślny model do przetwarzania mowy na tekst w rozmowach.',
+    },
+    ttsModel: {
+      key: 'Model tekstu na mowę',
+      tip: 'Ustaw domyślny model dla konwersji tekstu na mowę w rozmowach.',
+    },
+    rerankModel: {
+      key: 'Model ponownego rankingu',
+      tip: 'Model ponownego rankingu zmieni kolejność listy dokumentów kandydatów na podstawie semantycznego dopasowania z zapytaniem użytkownika, poprawiając wyniki rankingu semantycznego',
+    },
+    quota: 'Limit',
+    searchModel: 'Model wyszukiwania',
+    noModelFound: 'Nie znaleziono modelu dla {{model}}',
+    models: 'Modele',
+    showMoreModelProvider: 'Pokaż więcej dostawców modeli',
+    selector: {
+      tip: 'Ten model został usunięty. Proszę dodać model lub wybrać inny model.',
+      emptyTip: 'Brak dostępnych modeli',
+      emptySetting: 'Przejdź do ustawień, aby skonfigurować',
+      rerankTip: 'Proszę skonfigurować model ponownego rankingu',
+    },
+    card: {
+      quota: 'LIMIT',
+      onTrial: 'Na próbę',
+      paid: 'Płatny',
+      quotaExhausted: 'Wyczerpany limit',
+      callTimes: 'Czasy wywołań',
+      tokens: 'Tokeny',
+      buyQuota: 'Kup limit',
+      priorityUse: 'Używanie z priorytetem',
+      removeKey: 'Usuń klucz API',
+      tip: 'Priorytet zostanie nadany płatnemu limitowi. Po wyczerpaniu limitu próbnego zostanie użyty limit płatny.',
+    },
+    item: {
+      deleteDesc:
+        '{{modelName}} są używane jako modele wnioskowania systemowego. Niektóre funkcje mogą nie być dostępne po usunięciu. Proszę potwierdź.',
+      freeQuota: 'LIMIT GRATIS',
+    },
+    addApiKey: 'Dodaj swój klucz API',
+    invalidApiKey: 'Nieprawidłowy klucz API',
+    encrypted: {
+      front: 'Twój KLUCZ API będzie szyfrowany i przechowywany za pomocą',
+      back: ' technologii.',
+    },
+    freeQuota: {
+      howToEarn: 'Jak zdobyć',
+    },
+    addMoreModelProvider: 'DODAJ WIĘCEJ DOSTAWCÓW MODELI',
+    addModel: 'Dodaj model',
+    modelsNum: '{{num}} Modele',
+    showModels: 'Pokaż modele',
+    showModelsNum: 'Pokaż {{num}} modele',
+    collapse: 'Zwiń',
+    config: 'Konfiguracja',
+    modelAndParameters: 'Model i parametry',
+    model: 'Model',
+    featureSupported: '{{feature}} obsługiwane',
+    callTimes: 'Czasy wywołań',
+    credits: 'Kredyty wiadomości',
+    buyQuota: 'Kup limit',
+    getFreeTokens: 'Odbierz darmowe tokeny',
+    priorityUsing: 'Priorytetyzacja użycia',
+    deprecated: 'Przestarzałe',
+    confirmDelete: 'potwierdzić usunięcie?',
+    quotaTip: 'Pozostałe dostępne darmowe tokeny',
+    loadPresets: 'Załaduj ustawienia wstępne',
+    parameters: 'PARAMETRY',
+  },
+  dataSource: {
+    add: 'Dodaj źródło danych',
+    connect: 'Połącz',
+    notion: {
+      title: 'Notion',
+      description: 'Korzystanie z Notion jako źródła danych dla Wiedzy.',
+      connectedWorkspace: 'Połączona przestrzeń robocza',
+      addWorkspace: 'Dodaj przestrzeń roboczą',
+      connected: 'Połączono',
+      disconnected: 'Rozłączono',
+      changeAuthorizedPages: 'Zmień uprawnione strony',
+      pagesAuthorized: 'Strony autoryzowane',
+      sync: 'Synchronizuj',
+      remove: 'Usuń',
+      selector: {
+        pageSelected: 'Zaznaczone strony',
+        searchPages: 'Szukaj stron...',
+        noSearchResult: 'Brak wyników wyszukiwania',
+        addPages: 'Dodaj strony',
+        preview: 'PODGLĄD',
+      },
+    },
+  },
+  plugin: {
+    serpapi: {
+      apiKey: 'Klucz API',
+      apiKeyPlaceholder: 'Wprowadź swój klucz API',
+      keyFrom: 'Pobierz swój klucz SerpAPI ze strony konta SerpAPI',
+    },
+  },
+  apiBasedExtension: {
+    title:
+      'Rozszerzenia oparte na interfejsie API zapewniają scentralizowane zarządzanie interfejsami API, upraszczając konfigurację dla łatwego użytkowania w aplikacjach Dify.',
+    link: 'Dowiedz się, jak opracować własne rozszerzenie interfejsu API.',
+    linkUrl: 'https://docs.dify.ai/features/extension/api_based_extension',
+    add: 'Dodaj rozszerzenie interfejsu API',
+    selector: {
+      title: 'Rozszerzenie interfejsu API',
+      placeholder: 'Wybierz rozszerzenie interfejsu API',
+      manage: 'Zarządzaj rozszerzeniem interfejsu API',
+    },
+    modal: {
+      title: 'Dodaj rozszerzenie interfejsu API',
+      editTitle: 'Edytuj rozszerzenie interfejsu API',
+      name: {
+        title: 'Nazwa',
+        placeholder: 'Proszę wprowadź nazwę',
+      },
+      apiEndpoint: {
+        title: 'Koniec API',
+        placeholder: 'Proszę wprowadź koniec API',
+      },
+      apiKey: {
+        title: 'Klucz API',
+        placeholder: 'Proszę wprowadź klucz API',
+        lengthError: 'Długość klucza API nie może być mniejsza niż 5 znaków',
+      },
+    },
+    type: 'Typ',
+  },
+  about: {
+    changeLog: 'Dziennik zmian',
+    updateNow: 'Aktualizuj teraz',
+    nowAvailable: 'Dify {{version}} jest teraz dostępny.',
+    latestAvailable: 'Dify {{version}} jest najnowszą dostępną wersją.',
+  },
+  appMenus: {
+    overview: 'Przegląd',
+    promptEng: 'Orkiestracja',
+    apiAccess: 'Dostęp API',
+    logAndAnn: 'Logi i ogł.',
+    logs: 'Logi',
+  },
+  environment: {
+    testing: 'TESTOWANIE',
+    development: 'ROZWOJOWA',
+  },
+  appModes: {
+    completionApp: 'Generator tekstu',
+    chatApp: 'Aplikacja czatowa',
+  },
+  datasetMenus: {
+    documents: 'Dokumenty',
+    hitTesting: 'Testowanie poboru',
+    settings: 'Ustawienia',
+    emptyTip:
+      'Wiedza nie została powiązana, przejdź do aplikacji lub wtyczki, aby ukończyć powiązanie.',
+    viewDoc: 'Zobacz dokumentację',
+    relatedApp: 'powiązane aplikacje',
+  },
+  voiceInput: {
+    speaking: 'Mów teraz...',
+    converting: 'Konwertowanie na tekst...',
+    notAllow: 'mikrofon nieautoryzowany',
+  },
+  modelName: {
+    'gpt-3.5-turbo': 'GPT-3.5-Turbo',
+    'gpt-3.5-turbo-16k': 'GPT-3.5-Turbo-16K',
+    'gpt-4': 'GPT-4',
+    'gpt-4-32k': 'GPT-4-32K',
+    'text-davinci-003': 'Tekst-Davinci-003',
+    'text-embedding-ada-002': 'Tekst-Wan-Ada-002',
+    'whisper-1': 'Szept-1',
+    'claude-instant-1': 'Claude-Natychmiastowy',
+    'claude-2': 'Claude-2',
+  },
+  chat: {
+    renameConversation: 'Zmień nazwę rozmowy',
+    conversationName: 'Nazwa rozmowy',
+    conversationNamePlaceholder: 'Proszę wprowadź nazwę rozmowy',
+    conversationNameCanNotEmpty: 'Nazwa rozmowy wymagana',
+    citation: {
+      title: 'Cytaty',
+      linkToDataset: 'Link do Wiedzy',
+      characters: 'Postacie:',
+      hitCount: 'Liczba trafień:',
+      vectorHash: 'Wektor hash:',
+      hitScore: 'Wynik trafień:',
+    },
+  },
+  promptEditor: {
+    placeholder:
+      'Wpisz swoje słowo kluczowe tutaj, wprowadź \'{\' aby wstawić zmienną, wprowadź \'/\' aby wstawić blok treści słownika',
+    context: {
+      item: {
+        title: 'Kontekst',
+        desc: 'Wstaw szablon kontekstu',
+      },
+      modal: {
+        title: '{{num}} Wiedzy w Kontekście',
+        add: 'Dodaj Kontekst ',
+        footer: 'Możesz zarządzać kontekstami poniżej w sekcji Kontekstów.',
+      },
+    },
+    history: {
+      item: {
+        title: 'Historia rozmów',
+        desc: 'Wstaw szablon historycznej wiadomości',
+      },
+      modal: {
+        title: 'PRZYKŁAD',
+        user: 'Cześć',
+        assistant: 'Cześć! W czym mogę pomóc?',
+        edit: 'Edytuj nazwy ról rozmów',
+      },
+    },
+    variable: {
+      item: {
+        title: 'Zmienne i Narzędzia Zewnętrzne',
+        desc: 'Wstaw Zmienne i Narzędzia Zewnętrzne',
+      },
+      outputToolDisabledItem: {
+        title: 'Zmienne',
+        desc: 'Wstaw Zmienne',
+      },
+      modal: {
+        add: 'Nowa zmienna',
+        addTool: 'Nowe narzędzie',
+      },
+    },
+    query: {
+      item: {
+        title: 'Zapytanie',
+        desc: 'Wstaw szablon zapytania użytkownika',
+      },
+    },
+    existed: 'Już istnieje w poleceniu',
+  },
+  imageUploader: {
+    uploadFromComputer: 'Załaduj z komputera',
+    uploadFromComputerReadError: 'Błąd odczytu obrazu, spróbuj ponownie.',
+    uploadFromComputerUploadError:
+      'Błąd przesyłania obrazu, prześlij go ponownie.',
+    uploadFromComputerLimit:
+      'Obrazy do przesłania nie mogą przekroczyć {{size}} MB',
+    pasteImageLink: 'Wklej link do obrazu',
+    pasteImageLinkInputPlaceholder: 'Wklej tutaj link do obrazu',
+    pasteImageLinkInvalid: 'Nieprawidłowy link obrazu',
+    imageUpload: 'Przesyłanie obrazu',
+  },
+  tag: {
+    placeholder: 'Wszystkie tagi',
+    addNew: 'Dodaj nowy tag',
+    noTag: 'Brak tagów',
+    noTagYet: 'Brak tagów jeszcze',
+    addTag: 'Dodaj tagi',
+    editTag: 'Edytuj tagi',
+    manageTags: 'Zarządzaj Tagami',
+    selectorPlaceholder: 'Wpisz, aby wyszukać lub utworzyć',
+    create: 'Utwórz',
+    delete: 'Usuń tag',
+    deleteTip: 'Ten tag jest używany, czy chcesz go usunąć?',
+    created: 'Tag został pomyślnie utworzony',
+    failed: 'Nie udało się utworzyć tagu',
+  },
+}
+
+export default translation

+ 31 - 0
web/i18n/pl-PL/custom.ts

@@ -0,0 +1,31 @@
+const translation = {
+  custom: 'Dostosowanie',
+  upgradeTip: {
+    prefix: 'Zaktualizuj swój plan, aby',
+    suffix: 'dostosować swoją markę.',
+  },
+  webapp: {
+    title: 'Dostosuj markę aplikacji internetowej',
+    removeBrand: 'Usuń zasilane przez Dify',
+    changeLogo: 'Zmień obraz marki zasilany przez Brand',
+    changeLogoTip: 'Format SVG lub PNG o minimalnym rozmiarze 40x40px',
+  },
+  app: {
+    title: 'Dostosuj markę nagłówka aplikacji',
+    changeLogoTip: 'Format SVG lub PNG o minimalnym rozmiarze 80x80px',
+  },
+  upload: 'Prześlij',
+  uploading: 'Przesyłanie',
+  uploadedFail:
+    'Wystąpił problem podczas przesyłania obrazu, proszę spróbować ponownie.',
+  change: 'Zmień',
+  apply: 'Zastosuj',
+  restore: 'Przywróć domyślne',
+  customize: {
+    contactUs: ' skontaktuj się z nami ',
+    prefix: 'Aby dostosować logo marki w aplikacji, proszę',
+    suffix: 'dla aktualizacji do wersji Enterprise.',
+  },
+}
+
+export default translation

+ 146 - 0
web/i18n/pl-PL/dataset-creation.ts

@@ -0,0 +1,146 @@
+const translation = {
+  steps: {
+    header: {
+      creation: 'Utwórz Wiedzę',
+      update: 'Dodaj dane',
+    },
+    one: 'Wybierz źródło danych',
+    two: 'Przetwarzanie i Czyszczenie Tekstu',
+    three: 'Wykonaj i zakończ',
+  },
+  error: {
+    unavailable: 'Ta Wiedza nie jest dostępna',
+  },
+  stepOne: {
+    filePreview: 'Podgląd pliku',
+    pagePreview: 'Podgląd strony',
+    dataSourceType: {
+      file: 'Importuj z pliku tekstowego',
+      notion: 'Synchronizuj z Notion',
+      web: 'Synchronizuj z witryny',
+    },
+    uploader: {
+      title: 'Prześlij plik tekstowy',
+      button: 'Przeciągnij i upuść plik lub',
+      browse: 'Przeglądaj',
+      tip: 'Obsługuje {{supportTypes}}. Maksymalnie {{size}}MB każdy.',
+      validation: {
+        typeError: 'Nieobsługiwany typ pliku',
+        size: 'Plik jest za duży. Maksymalnie {{size}}MB',
+        count: 'Nieobsługiwane przesyłanie wielu plików',
+        filesNumber: 'Osiągnąłeś limit przesłania partii {{filesNumber}}.',
+      },
+      cancel: 'Anuluj',
+      change: 'Zmień',
+      failed: 'Przesyłanie nie powiodło się',
+    },
+    notionSyncTitle: 'Notion nie jest podłączony',
+    notionSyncTip:
+      'Aby synchronizować z Notion, najpierw trzeba ustanowić połączenie z Notion.',
+    connect: 'Przejdź do połączenia',
+    button: 'dalej',
+    emptyDatasetCreation: 'Chcę utworzyć pustą Wiedzę',
+    modal: {
+      title: 'Utwórz pustą Wiedzę',
+      tip: 'Pusta Wiedza nie będzie zawierała żadnych dokumentów, a można przesyłać dokumenty w dowolnym momencie.',
+      input: 'Nazwa Wiedzy',
+      placeholder: 'Proszę wpisz',
+      nameNotEmpty: 'Nazwa nie może być pusta',
+      nameLengthInvaild: 'Nazwa musi zawierać od 1 do 40 znaków',
+      cancelButton: 'Anuluj',
+      confirmButton: 'Utwórz',
+      failed: 'Utworzenie nie powiodło się',
+    },
+  },
+  stepTwo: {
+    segmentation: 'Ustawienia bloków tekstu',
+    auto: 'Automatycznie',
+    autoDescription:
+      'Automatyczne ustawianie bloków i reguł preprocessingu. Nieużytkownicy są zaleceni do wyboru tej opcji.',
+    custom: 'Niestandardowo',
+    customDescription:
+      'Dostosuj reguły bloków, długość bloków i reguły preprocessingu itp.',
+    separator: 'Separator bloków',
+    separatorPlaceholder:
+      'Na przykład nowa linia (\\n) lub specjalny separator (np. "***")',
+    maxLength: 'Maksymalna długość bloku',
+    overlap: 'Nakładka bloków',
+    overlapTip:
+      'Ustawienie nakładki bloków pozwala zachować semantyczną zgodność między nimi, poprawiając efekt pobierania. Zaleca się ustawienie 10%-25% maksymalnej długości bloku.',
+    overlapCheck:
+      'nakładka bloków nie powinna być większa niż maksymalna długość bloku',
+    rules: 'Reguły preprocessingu tekstu',
+    removeExtraSpaces: 'Zastąp kolejne spacje, nowe linie i tabulatory',
+    removeUrlEmails: 'Usuń wszystkie adresy URL i e-maile',
+    removeStopwords: 'Usuń słowa powszechne takie jak "a", "an", "the"',
+    preview: 'Potwierdź i Podgląd',
+    reset: 'Reset',
+    indexMode: 'Tryb indeksowania',
+    qualified: 'Wysoka jakość',
+    recommend: 'Polecać',
+    qualifiedTip:
+      'Wywołaj domyślne interfejsy wbudowania systemu do przetwarzania, zapewniając wyższą dokładność podczas zapytań przez użytkowników.',
+    warning: 'Proszę najpierw skonfigurować klucz API dostawcy modelu.',
+    click: 'Przejdź do ustawień',
+    economical: 'Ekonomiczny',
+    economicalTip:
+      'Użyj offline\'owych silników wektorowych, indeksów słów kluczowych itp., aby zmniejszyć dokładność bez wydawania tokenów',
+    QATitle: 'Segmentacja w formacie pytania i odpowiedzi',
+    QATip: 'Włączenie tej opcji spowoduje zużycie większej liczby tokenów',
+    QALanguage: 'Segmentacja przy użyciu',
+    emstimateCost: 'Oszacowanie',
+    emstimateSegment: 'Oszacowane bloki',
+    segmentCount: 'bloki',
+    calculating: 'Obliczanie...',
+    fileSource: 'Przetwarzaj dokumenty',
+    notionSource: 'Przetwarzaj strony',
+    other: 'i inne ',
+    fileUnit: ' plików',
+    notionUnit: ' stron',
+    previousStep: 'Poprzedni krok',
+    nextStep: 'Zapisz & Przetwarzaj',
+    save: 'Zapisz & Przetwarzaj',
+    cancel: 'Anuluj',
+    sideTipTitle: 'Dlaczego blok i preprocess?',
+    sideTipP1:
+      'Podczas przetwarzania danych tekstowych, blok i czyszczenie są dwoma ważnymi krokami preprocessingu.',
+    sideTipP2:
+      'Segmentacja dzieli długi tekst na akapity, dzięki czemu modele są w stanie lepiej zrozumieć. Poprawia to jakość i trafność wyników modelu.',
+    sideTipP3:
+      'Czyszczenie usuwa zbędne znaki i formatowanie, sprawiając, że Wiedza jest czystsza i łatwiejsza do analizy.',
+    sideTipP4:
+      'Odpowiednie blok i czyszczenie poprawiają wydajność modelu, zapewniając bardziej dokładne i wartościowe wyniki.',
+    previewTitle: 'Podgląd',
+    previewTitleButton: 'Podgląd',
+    previewButton: 'Przełącz do formatu pytania i odpowiedzi',
+    previewSwitchTipStart:
+      'Aktulany podgląd bloku jest w formacie tekstu, przełączenie na podgląd w formacie pytania i odpowiedzi spowoduje',
+    previewSwitchTipEnd: ' dodatkowe zużycie tokenów',
+    characters: 'znaki',
+    indexSettedTip: 'Aby zmienić metodę indeksowania, przejdź do ',
+    retrivalSettedTip: 'Aby zmienić metodę indeksowania, przejdź do ',
+    datasetSettingLink: 'ustawień Wiedzy.',
+  },
+  stepThree: {
+    creationTitle: '🎉 Utworzono Wiedzę',
+    creationContent:
+      'Automatycznie nadaliśmy nazwę Wiedzy, możesz ją dowolnie zmienić w każdej chwili',
+    label: 'Nazwa Wiedzy',
+    additionTitle: '🎉 Przesłano dokument',
+    additionP1: 'Dokument został przesłany do Wiedzy',
+    additionP2: ', możesz go znaleźć na liście dokumentów Wiedzy.',
+    stop: 'Zatrzymaj przetwarzanie',
+    resume: 'Wznów przetwarzanie',
+    navTo: 'Przejdź do dokumentu',
+    sideTipTitle: 'Co dalej',
+    sideTipContent:
+      'Po zakończeniu indeksowania dokumentu, Wiedza może być zintegrowana z aplikacją jako kontekst, można znaleźć ustawienie kontekstu na stronie orkiestracji. Można również stworzyć ją jako niezależny plugin indeksowania ChatGPT do wydania.',
+    modelTitle: 'Czy na pewno chcesz zatrzymać embedded?',
+    modelContent:
+      'Jeśli będziesz potrzebować wznowić przetwarzanie później, będziesz kontynuować od miejsca, w którym przerwałeś.',
+    modelButtonConfirm: 'Potwierdź',
+    modelButtonCancel: 'Anuluj',
+  },
+}
+
+export default translation

+ 350 - 0
web/i18n/pl-PL/dataset-documents.ts

@@ -0,0 +1,350 @@
+const translation = {
+  list: {
+    title: 'Dokumenty',
+    desc: 'Wszystkie pliki wiedzy są tutaj pokazane, a cała wiedza może być powiązana z odnośnikami Dify lub zindeksowana za pomocą wtyczki Chat.',
+    addFile: 'dodaj plik',
+    addPages: 'Dodaj strony',
+    table: {
+      header: {
+        fileName: 'NAZWA PLIKU',
+        words: 'SŁOWA',
+        hitCount: 'LICZBA ZNALEZIEŃ',
+        uploadTime: 'CZAS WGRANIA',
+        status: 'STATUS',
+        action: 'AKCJA',
+      },
+    },
+    action: {
+      uploadFile: 'Wgraj nowy plik',
+      settings: 'Ustawienia segmentacji',
+      addButton: 'Dodaj fragment',
+      add: 'Dodaj fragment',
+      batchAdd: 'Dodaj partię',
+      archive: 'Archiwum',
+      unarchive: 'Usuń z archiwum',
+      delete: 'Usuń',
+      enableWarning: 'Zarchiwizowany plik nie może zostać włączony',
+      sync: 'Synchronizuj',
+    },
+    index: {
+      enable: 'Włącz',
+      disable: 'Wyłącz',
+      all: 'Wszystkie',
+      enableTip: 'Plik może być zindeksowany',
+      disableTip: 'Plik nie może być zindeksowany',
+    },
+    status: {
+      queuing: 'Oczekiwanie',
+      indexing: 'Indeksowanie',
+      paused: 'Wstrzymane',
+      error: 'Błąd',
+      available: 'Dostępny',
+      enabled: 'Włączony',
+      disabled: 'Wyłączony',
+      archived: 'Zaarchiwizowany',
+    },
+    empty: {
+      title: 'Nie ma jeszcze dokumentacji',
+      upload: {
+        tip: 'Możesz wgrać pliki, synchronizować z witryny lub z aplikacji internetowych takich jak Notion, GitHub, itp.',
+      },
+      sync: {
+        tip: 'Dify regularnie pobiera pliki z Twojego Notion i dokonuje ich przetwarzania.',
+      },
+    },
+    delete: {
+      title: 'Czy na pewno chcesz usunąć?',
+      content:
+        'Jeśli będziesz musiał wznowić przetwarzanie później, będziesz kontynuować tam, gdzie przerwałeś',
+    },
+    batchModal: {
+      title: 'Dodaj partię fragmentów',
+      csvUploadTitle: 'Przeciągnij i upuść swój plik CSV tutaj, lub ',
+      browse: 'wybierz',
+      tip: 'Plik CSV musi być zgodny z następującą strukturą:',
+      question: 'pytanie',
+      answer: 'odpowiedź',
+      contentTitle: 'treść fragmentu',
+      content: 'treść',
+      template: 'Pobierz szablon tutaj',
+      cancel: 'Anuluj',
+      run: 'Uruchom partię',
+      runError: 'Błąd uruchomienia partii',
+      processing: 'Przetwarzanie partii',
+      completed: 'Import zakończony',
+      error: 'Błąd importu',
+      ok: 'OK',
+    },
+  },
+  metadata: {
+    title: 'Metadane',
+    desc: 'Etykietowanie metadanych dla dokumentów pozwala sztucznej inteligencji na dostęp do nich w odpowiednim czasie i ujawnia źródło odniesień dla użytkowników.',
+    dateTimeFormat: 'D MMMM YYYY, HH:mm',
+    docTypeSelectTitle: 'Wybierz rodzaj dokumentu',
+    docTypeChangeTitle: 'Zmień rodzaj dokumentu',
+    docTypeSelectWarning:
+      'Jeśli zmieniony zostanie rodzaj dokumentu, teraz wypełnione metadane nie zostaną zachowane',
+    firstMetaAction: 'Zacznijmy',
+    placeholder: {
+      add: 'Dodaj ',
+      select: 'Wybierz ',
+    },
+    source: {
+      upload_file: 'Wgraj plik',
+      notion: 'Synchronizuj z Notion',
+      github: 'Synchronizuj z Github',
+    },
+    type: {
+      book: 'Książka',
+      webPage: 'Strona internetowa',
+      paper: 'Artykuł',
+      socialMediaPost: 'Post w mediach społecznościowych',
+      personalDocument: 'Dokument osobisty',
+      businessDocument: 'Dokument biznesowy',
+      IMChat: 'Czat na komunikatorze',
+      wikipediaEntry: 'Artykuł w Wikipedii',
+      notion: 'Synchronizuj z Notion',
+      github: 'Synchronizuj z Github',
+      technicalParameters: 'Parametry techniczne',
+    },
+    field: {
+      processRule: {
+        processDoc: 'Przetwórz dokument',
+        segmentRule: 'Reguła fragmentacji',
+        segmentLength: 'Długość fragmentów',
+        processClean: 'Oczyszczanie tekstu',
+      },
+      book: {
+        title: 'Tytuł',
+        language: 'Język',
+        author: 'Autor',
+        publisher: 'Wydawca',
+        publicationDate: 'Data publikacji',
+        ISBN: 'ISBN',
+        category: 'Kategoria',
+      },
+      webPage: {
+        title: 'Tytuł',
+        url: 'URL',
+        language: 'Język',
+        authorPublisher: 'Autor/Wydawca',
+        publishDate: 'Data publikacji',
+        topicsKeywords: 'Tematy/Słowa kluczowe',
+        description: 'Opis',
+      },
+      paper: {
+        title: 'Tytuł',
+        language: 'Język',
+        author: 'Autor',
+        publishDate: 'Data publikacji',
+        journalConferenceName: 'Nazwa czasopisma/konferencji',
+        volumeIssuePage: 'Tom/Wydanie/Strona',
+        DOI: 'DOI',
+        topicsKeywords: 'Tematy/Słowa kluczowe',
+        abstract: 'Abstrakt',
+      },
+      socialMediaPost: {
+        platform: 'Platforma',
+        authorUsername: 'Autor/Nazwa użytkownika',
+        publishDate: 'Data publikacji',
+        postURL: 'Adres URL posta',
+        topicsTags: 'Tematy/Tagi',
+      },
+      personalDocument: {
+        title: 'Tytuł',
+        author: 'Autor',
+        creationDate: 'Data utworzenia',
+        lastModifiedDate: 'Data ostatniej modyfikacji',
+        documentType: 'Typ dokumentu',
+        tagsCategory: 'Tagi/Kategoria',
+      },
+      businessDocument: {
+        title: 'Tytuł',
+        author: 'Autor',
+        creationDate: 'Data utworzenia',
+        lastModifiedDate: 'Data ostatniej modyfikacji',
+        documentType: 'Typ dokumentu',
+        departmentTeam: 'Dział/Zespół',
+      },
+      IMChat: {
+        chatPlatform: 'Platforma czatu',
+        chatPartiesGroupName: 'Podmioty czatu/Nazwa grupy',
+        participants: 'Uczestnicy',
+        startDate: 'Data rozpoczęcia',
+        endDate: 'Data zakończenia',
+        topicsKeywords: 'Tematy/Słowa kluczowe',
+        fileType: 'Typ pliku',
+      },
+      wikipediaEntry: {
+        title: 'Tytuł',
+        language: 'Język',
+        webpageURL: 'Adres URL strony internetowej',
+        editorContributor: 'Edytor/Współtwórca',
+        lastEditDate: 'Data ostatniej edycji',
+        summaryIntroduction: 'Podsumowanie/Wstęp',
+      },
+      notion: {
+        title: 'Tytuł',
+        language: 'Język',
+        author: 'Autor',
+        createdTime: 'Czas utworzenia',
+        lastModifiedTime: 'Czas ostatniej modyfikacji',
+        url: 'URL',
+        tag: 'Tag',
+        description: 'Opis',
+      },
+      github: {
+        repoName: 'Nazwa repozytorium',
+        repoDesc: 'Opis repozytorium',
+        repoOwner: 'Właściciel repozytorium',
+        fileName: 'Nazwa pliku',
+        filePath: 'Ścieżka pliku',
+        programmingLang: 'Język programowania',
+        url: 'URL',
+        license: 'Licencja',
+        lastCommitTime: 'Czas ostatniego zobowiązania',
+        lastCommitAuthor: 'Autor ostatniego zobowiązania',
+      },
+      originInfo: {
+        originalFilename: 'Oryginalna nazwa pliku',
+        originalFileSize: 'Oryginalny rozmiar pliku',
+        uploadDate: 'Data wgrywania',
+        lastUpdateDate: 'Data ostatniej aktualizacji',
+        source: 'Źródło',
+      },
+      technicalParameters: {
+        segmentSpecification: 'Specyfikacja fragmentów',
+        segmentLength: 'Długość fragmentów',
+        avgParagraphLength: 'Średnia długość akapitu',
+        paragraphs: 'Akapity',
+        hitCount: 'Liczba odwołań',
+        embeddingTime: 'Czas embedowania',
+        embeddedSpend: 'Wydatki związane z embedowaniem',
+      },
+    },
+    languageMap: {
+      zh: 'Chiński',
+      en: 'Angielski',
+      es: 'Hiszpański',
+      fr: 'Francuski',
+      de: 'Niemiecki',
+      ja: 'Japoński',
+      ko: 'Koreański',
+      ru: 'Rosyjski',
+      ar: 'Arabski',
+      pt: 'Portugalski',
+      it: 'Włoski',
+      nl: 'Holenderski',
+      pl: 'Polski',
+      sv: 'Szwedzki',
+      tr: 'Turecki',
+      he: 'Hebrajski',
+      hi: 'Hinduski',
+      da: 'Duński',
+      fi: 'Fiński',
+      no: 'Norweski',
+      hu: 'Węgierski',
+      el: 'Grecki',
+      cs: 'Czeski',
+      th: 'Tajski',
+      id: 'Indonezyjski',
+    },
+    categoryMap: {
+      book: {
+        fiction: 'Literatura piękna',
+        biography: 'Biografia',
+        history: 'Historia',
+        science: 'Nauka',
+        technology: 'Technologia',
+        education: 'Edukacja',
+        philosophy: 'Filozofia',
+        religion: 'Religia',
+        socialSciences: 'Nauki społeczne',
+        art: 'Sztuka',
+        travel: 'Podróże',
+        health: 'Zdrowie',
+        selfHelp: 'Samorozwój',
+        businessEconomics: 'Biznes/ekonomia',
+        cooking: 'Gotowanie',
+        childrenYoungAdults: 'Dzieci/Młodzież',
+        comicsGraphicNovels: 'Komiksy/Graphic Novels',
+        poetry: 'Poezja',
+        drama: 'Dramat',
+        other: 'Inne',
+      },
+      personalDoc: {
+        notes: 'Notatki',
+        blogDraft: 'Wersja robocza bloga',
+        diary: 'Dziennik',
+        researchReport: 'Raport badawczy',
+        bookExcerpt: 'Fragment książki',
+        schedule: 'Harmonogram',
+        list: 'Lista',
+        projectOverview: 'Przegląd projektu',
+        photoCollection: 'Kolekcja zdjęć',
+        creativeWriting: 'Twórcze pisanie',
+        codeSnippet: 'Fragment kodu',
+        designDraft: 'Projekt/wersja robocza',
+        personalResume: 'CV',
+        other: 'Inne',
+      },
+      businessDoc: {
+        meetingMinutes: 'Protokoły zebrań',
+        researchReport: 'Raport badawczy',
+        proposal: 'Propozycja',
+        employeeHandbook: 'Podręcznik pracownika',
+        trainingMaterials: 'Materiały szkoleniowe',
+        requirementsDocument: 'Dokument wymagań',
+        designDocument: 'Dokument projektowy',
+        productSpecification: 'Specyfikacja produktu',
+        financialReport: 'Raport finansowy',
+        marketAnalysis: 'Analiza rynku',
+        projectPlan: 'Plan projektu',
+        teamStructure: 'Struktura zespołu',
+        policiesProcedures: 'Zasady i procedury',
+        contractsAgreements: 'Umowy',
+        emailCorrespondence: 'Korespondencja e-mailowa',
+        other: 'Inne',
+      },
+    },
+  },
+  embedding: {
+    processing: 'Przetwarzanie osadzania...',
+    paused: 'Osadzanie wstrzymane',
+    completed: 'Osadzanie zakończone',
+    error: 'Błąd osadzania',
+    docName: 'Przetwarzanie wstępne dokumentu',
+    mode: 'Reguła segmentacji',
+    segmentLength: 'Długość fragmentów',
+    textCleaning: 'Predefinicja tekstu i czyszczenie',
+    segments: 'Akapity',
+    highQuality: 'Tryb wysokiej jakości',
+    economy: 'Tryb ekonomiczny',
+    estimate: 'Szacowany czas',
+    stop: 'Zatrzymaj przetwarzanie',
+    resume: 'Wznów przetwarzanie',
+    automatic: 'Automatyczny',
+    custom: 'Niestandardowy',
+    previewTip: 'Podgląd akapitu będzie dostępny po zakończeniu osadzania',
+  },
+  segment: {
+    paragraphs: 'Akapity',
+    keywords: 'Słowa kluczowe',
+    addKeyWord: 'Dodaj słowo kluczowe',
+    keywordError: 'Maksymalna długość słowa kluczowego wynosi 20',
+    characters: 'znaków',
+    hitCount: 'Liczba odwołań',
+    vectorHash: 'Wektor hash: ',
+    questionPlaceholder: 'dodaj pytanie tutaj',
+    questionEmpty: 'Pytanie nie może być puste',
+    answerPlaceholder: 'dodaj odpowiedź tutaj',
+    answerEmpty: 'Odpowiedź nie może być pusta',
+    contentPlaceholder: 'dodaj treść tutaj',
+    contentEmpty: 'Treść nie może być pusta',
+    newTextSegment: 'Nowy segment tekstowy',
+    newQaSegment: 'Nowy segment Q&A',
+    delete: 'Usunąć ten fragment?',
+  },
+}
+
+export default translation

+ 28 - 0
web/i18n/pl-PL/dataset-hit-testing.ts

@@ -0,0 +1,28 @@
+const translation = {
+  title: 'Testowanie odzyskiwania',
+  desc: 'Przetestuj efekt uderzenia wiedzy na podstawie podanego tekstu zapytania.',
+  dateTimeFormat: 'MM/DD/YYYY hh:mm A',
+  recents: 'Ostatnie',
+  table: {
+    header: {
+      source: 'Źródło',
+      text: 'Tekst',
+      time: 'Czas',
+    },
+  },
+  input: {
+    title: 'Tekst źródłowy',
+    placeholder: 'Proszę wpisać tekst, zaleca się krótkie zdanie deklaratywne.',
+    countWarning: 'Do 200 znaków.',
+    indexWarning: 'Tylko wiedza wysokiej jakości.',
+    testing: 'Testowanie',
+  },
+  hit: {
+    title: 'AKAPITY ODZYSKIWANIA',
+    emptyTip: 'Wyniki testowania odzyskiwania będą tu pokazane',
+  },
+  noRecentTip: 'Brak ostatnich wyników zapytań tutaj',
+  viewChart: 'Zobacz WYKRES WEKTOROWY',
+}
+
+export default translation

+ 38 - 0
web/i18n/pl-PL/dataset-settings.ts

@@ -0,0 +1,38 @@
+const translation = {
+  title: 'Ustawienia wiedzy',
+  desc: 'Tutaj możesz modyfikować właściwości i metody działania Wiedzy.',
+  form: {
+    name: 'Nazwa wiedzy',
+    namePlaceholder: 'Proszę wprowadzić nazwę wiedzy',
+    nameError: 'Nazwa nie może być pusta',
+    desc: 'Opis wiedzy',
+    descInfo:
+      'Proszę napisać klarowny opis tekstowy, aby zarysować zawartość Wiedzy. Ten opis będzie wykorzystywany jako podstawa do dopasowywania podczas wyboru z wielu wiedz dla wnioskowania.',
+    descPlaceholder:
+      'Opisz, co znajduje się w tej Wiedzy. Szczegółowy opis pozwala sztucznej inteligencji na dostęp do treści Wiedzy w odpowiednim czasie. Jeśli jest pusty, Dify użyje domyślnej strategii trafień.',
+    descWrite: 'Dowiedz się, jak napisać dobry opis Wiedzy.',
+    permissions: 'Uprawnienia',
+    permissionsOnlyMe: 'Tylko ja',
+    permissionsAllMember: 'Wszyscy członkowie zespołu',
+    indexMethod: 'Metoda indeksowania',
+    indexMethodHighQuality: 'Wysoka jakość',
+    indexMethodHighQualityTip:
+      'Wywołaj interfejs wbudowywanie OpenAI do przetwarzania, aby zapewnić wyższą dokładność przy zapytaniach użytkowników.',
+    indexMethodEconomy: 'Ekonomiczna',
+    indexMethodEconomyTip:
+      'Użyj silników wektorów offline, indeksów słów kluczowych itp., aby zmniejszyć dokładność bez wydawania tokenów',
+    embeddingModel: 'Model wbudowywania',
+    embeddingModelTip: 'Aby zmienić model wbudowywania, przejdź do ',
+    embeddingModelTipLink: 'Ustawienia',
+    retrievalSetting: {
+      title: 'Ustawienia doboru',
+      learnMore: 'Dowiedz się więcej',
+      description: ' dotyczące metody doboru.',
+      longDescription:
+        ' dotyczące metody doboru, możesz to zmienić w dowolnym momencie w ustawieniach wiedzy.',
+    },
+    save: 'Zapisz',
+  },
+}
+
+export default translation

+ 55 - 0
web/i18n/pl-PL/dataset.ts

@@ -0,0 +1,55 @@
+const translation = {
+  knowledge: 'Wiedza',
+  documentCount: ' dokumenty',
+  wordCount: ' k słów',
+  appCount: ' powiązane aplikacje',
+  createDataset: 'Utwórz Wiedzę',
+  createDatasetIntro:
+    'Zaimportuj własne dane tekstowe lub zapisuj dane w czasie rzeczywistym za pomocą Webhooka w celu wzmocnienia kontekstu LLM.',
+  deleteDatasetConfirmTitle: 'Czy na pewno usunąć tę Wiedzę?',
+  deleteDatasetConfirmContent:
+    'Usunięcie Wiedzy jest nieodwracalne. Użytkownicy nie będą już mieli dostępu do Twojej Wiedzy, a wszystkie konfiguracje i logi zostaną trwale usunięte.',
+  datasetDeleted: 'Wiedza usunięta',
+  datasetDeleteFailed: 'Nie udało się usunąć Wiedzy',
+  didYouKnow: 'Czy wiedziałeś?',
+  intro1: 'Wiedzę można zintegrować z aplikacją Dify ',
+  intro2: 'jako kontekst',
+  intro3: ',',
+  intro4: 'lub ',
+  intro5: 'może być utworzona',
+  intro6: ' jako samodzielny wtyczka indeksująca ChatGPT do publikacji',
+  unavailable: 'Niedostępny',
+  unavailableTip:
+    'Model osadzający jest niedostępny, domyślny model osadzający musi być skonfigurowany',
+  datasets: 'WIEDZA',
+  datasetsApi: 'DOSTĘP DO API',
+  retrieval: {
+    semantic_search: {
+      title: 'Wyszukiwanie wektorowe',
+      description:
+        'Generowanie osadzeń zapytań i wyszukiwanie fragmentów tekstu najbardziej podobnych do ich wektorowej reprezentacji.',
+    },
+    full_text_search: {
+      title: 'Wyszukiwanie pełnotekstowe',
+      description:
+        'Indeksowanie wszystkich terminów w dokumencie, umożliwiając użytkownikom wyszukiwanie dowolnego terminu i odzyskiwanie odpowiedniego fragmentu tekstu zawierającego te terminy.',
+    },
+    hybrid_search: {
+      title: 'Wyszukiwanie hybrydowe',
+      description:
+        'Wykonaj jednocześnie pełnotekstowe wyszukiwanie i wyszukiwanie wektorowe, ponownie porządkuj, aby wybrać najlepsze dopasowanie dla zapytania użytkownika. Konieczna jest konfiguracja API Rerank model.',
+      recommend: 'Polecany',
+    },
+    invertedIndex: {
+      title: 'Indeks odwrócony',
+      description:
+        'Indeks odwrócony to struktura używana do efektywnego odzyskiwania informacji. Zorganizowane według terminów, każdy termin wskazuje na dokumenty lub strony internetowe zawierające go.',
+    },
+    change: 'Zmień',
+    changeRetrievalMethod: 'Zmień metodę odzyskiwania',
+  },
+  docsFailedNotice: 'nie udało się zindeksować dokumentów',
+  retry: 'Ponów',
+}
+
+export default translation

+ 42 - 0
web/i18n/pl-PL/explore.ts

@@ -0,0 +1,42 @@
+const translation = {
+  title: 'Odkryj',
+  sidebar: {
+    discovery: 'Odkrywanie',
+    chat: 'Czat',
+    workspace: 'Przestrzeń robocza',
+    action: {
+      pin: 'Przypnij',
+      unpin: 'Odepnij',
+      rename: 'Zmień nazwę',
+      delete: 'Usuń',
+    },
+    delete: {
+      title: 'Usuń aplikację',
+      content: 'Czy na pewno chcesz usunąć tę aplikację?',
+    },
+  },
+  apps: {
+    title: 'Odkrywaj aplikacje stworzone przez Dify',
+    description:
+      'Wykorzystaj te aplikacje szablonowe natychmiast lub dostosuj własne aplikacje na podstawie szablonów.',
+    allCategories: 'Polecane',
+  },
+  appCard: {
+    addToWorkspace: 'Dodaj do przestrzeni roboczej',
+    customize: 'Dostosuj',
+  },
+  appCustomize: {
+    title: 'Utwórz aplikację z {{name}}',
+    subTitle: 'Ikona i nazwa aplikacji',
+    nameRequired: 'Nazwa aplikacji jest wymagana',
+  },
+  category: {
+    Assistant: 'Asystent',
+    Writing: 'Pisanie',
+    Translate: 'Tłumaczenie',
+    Programming: 'Programowanie',
+    HR: 'HR',
+  },
+}
+
+export default translation

+ 4 - 0
web/i18n/pl-PL/layout.ts

@@ -0,0 +1,4 @@
+const translation = {
+}
+
+export default translation

+ 66 - 0
web/i18n/pl-PL/login.ts

@@ -0,0 +1,66 @@
+const translation = {
+  pageTitle: 'Cześć, zaczynajmy!👋',
+  welcome: 'Witaj w Dify, zaloguj się, aby kontynuować.',
+  email: 'Adres e-mail',
+  emailPlaceholder: 'Twój adres e-mail',
+  password: 'Hasło',
+  passwordPlaceholder: 'Twoje hasło',
+  name: 'Nazwa użytkownika',
+  namePlaceholder: 'Twoja nazwa użytkownika',
+  forget: 'Zapomniałeś hasła?',
+  signBtn: 'Zaloguj się',
+  sso: 'Kontynuuj za pomocą SSO',
+  installBtn: 'Ustaw',
+  setAdminAccount: 'Ustawianie konta administratora',
+  setAdminAccountDesc:
+    'Maksymalne uprawnienia dla konta administratora, które można użyć do tworzenia aplikacji i zarządzania dostawcami LLM, itp.',
+  createAndSignIn: 'Utwórz i zaloguj się',
+  oneMoreStep: 'Jeszcze jeden krok',
+  createSample:
+    'Na podstawie tych informacji, utworzymy dla Ciebie przykładową aplikację',
+  invitationCode: 'Kod zaproszenia',
+  invitationCodePlaceholder: 'Twój kod zaproszenia',
+  interfaceLanguage: 'Język interfejsu',
+  timezone: 'Strefa czasowa',
+  go: 'Przejdź do Dify',
+  sendUsMail:
+    'Wyślij nam e-mail z swoim wstępem, a my zajmiemy się prośbą o zaproszenie.',
+  acceptPP: 'Przeczytałem/am i akceptuję politykę prywatności',
+  reset: 'Uruchom poniższą komendę, aby zresetować swoje hasło',
+  withGitHub: 'Kontynuuj za pomocą GitHub',
+  withGoogle: 'Kontynuuj za pomocą Google',
+  rightTitle: 'Odblokuj pełny potencjał LLM',
+  rightDesc:
+    'Łatwo buduj wizualnie atrakcyjne, działające i udoskonalane aplikacje AI.',
+  tos: 'Warunki świadczenia usług',
+  pp: 'Polityka prywatności',
+  tosDesc: 'Założeniem konta zgadzasz się z naszymi',
+  goToInit: 'Jeśli nie zainicjowałeś konta, przejdź do strony inicjalizacji',
+  donthave: 'Nie masz?',
+  invalidInvitationCode: 'Niewłaściwy kod zaproszenia',
+  accountAlreadyInited: 'Konto już zainicjowane',
+  error: {
+    emailEmpty: 'Adres e-mail jest wymagany',
+    emailInValid: 'Proszę wpisać prawidłowy adres e-mail',
+    nameEmpty: 'Nazwa jest wymagana',
+    passwordEmpty: 'Hasło jest wymagane',
+    passwordInvalid:
+      'Hasło musi zawierać litery i cyfry, a jego długość musi być większa niż 8',
+  },
+  license: {
+    tip: 'Przed rozpoczęciem wersji społecznościowej Dify, przeczytaj GitHub',
+    link: 'Licencję open-source',
+  },
+  join: 'Dołącz',
+  joinTipStart: 'Zapraszam Cię do dołączenia do',
+  joinTipEnd: 'zespołu na Dify',
+  invalid: 'Link wygasł',
+  explore: 'Odkryj Dify',
+  activatedTipStart: 'Dołączyłeś do',
+  activatedTipEnd: 'zespołu',
+  activated: 'Zaloguj się teraz',
+  adminInitPassword: 'Hasło inicjalizacyjne administratora',
+  validate: 'Sprawdź',
+}
+
+export default translation

+ 4 - 0
web/i18n/pl-PL/register.ts

@@ -0,0 +1,4 @@
+const translation = {
+}
+
+export default translation

+ 29 - 0
web/i18n/pl-PL/run-log.ts

@@ -0,0 +1,29 @@
+const translation = {
+  input: 'WEJŚCIE',
+  result: 'WYNIK',
+  detail: 'SZCZEGÓŁY',
+  tracing: 'ŚLEDZENIE',
+  resultPanel: {
+    status: 'STATUS',
+    time: 'CZAS WYKONANIA',
+    tokens: 'CAŁKOWITA LICZBA TOKENÓW',
+  },
+  meta: {
+    title: 'METADANE',
+    status: 'Status',
+    version: 'Wersja',
+    executor: 'Wykonawca',
+    startTime: 'Czas rozpoczęcia',
+    time: 'Czas trwania',
+    tokens: 'Liczba tokenów',
+    steps: 'Kroki wykonania',
+  },
+  resultEmpty: {
+    title: 'To wykonanie generuje tylko format JSON,',
+    tipLeft: 'proszę przejdź do ',
+    link: 'panelu szczegółów',
+    tipRight: ' aby je zobaczyć.',
+  },
+}
+
+export default translation

+ 75 - 0
web/i18n/pl-PL/share-app.ts

@@ -0,0 +1,75 @@
+const translation = {
+  common: {
+    welcome: 'Witaj w użyciu',
+    appUnavailable: 'Aplikacja jest niedostępna',
+    appUnkonwError: 'Aplikacja jest niedostępna',
+  },
+  chat: {
+    newChat: 'Nowy czat',
+    pinnedTitle: 'Przypięte',
+    unpinnedTitle: 'Czaty',
+    newChatDefaultName: 'Nowa rozmowa',
+    resetChat: 'Resetuj rozmowę',
+    powerBy: 'Działany przez',
+    prompt: 'Podpowiedź',
+    privatePromptConfigTitle: 'Ustawienia rozmowy',
+    publicPromptConfigTitle: 'Początkowa podpowiedź',
+    configStatusDes:
+      'Przed rozpoczęciem możesz zmodyfikować ustawienia rozmowy',
+    configDisabled: 'Ustawienia poprzedniej sesji zostały użyte w tej sesji.',
+    startChat: 'Zacznij czat',
+    privacyPolicyLeft: 'Proszę przeczytać ',
+    privacyPolicyMiddle: 'politykę prywatności',
+    privacyPolicyRight: ' dostarczoną przez dewelopera aplikacji.',
+    deleteConversation: {
+      title: 'Usuń rozmowę',
+      content: 'Czy na pewno chcesz usunąć tę rozmowę?',
+    },
+    tryToSolve: 'Spróbuj rozwiązać',
+    temporarySystemIssue: 'Przepraszamy, tymczasowy problem systemowy.',
+  },
+  generation: {
+    tabs: {
+      create: 'Uruchom raz',
+      batch: 'Uruchom partię',
+      saved: 'Zapisane',
+    },
+    savedNoData: {
+      title: 'Nie zapisałeś jeszcze wyniku!',
+      description:
+        'Zacznij generować treść i znajdź swoje zapisane wyniki tutaj.',
+      startCreateContent: 'Zacznij tworzyć treść',
+    },
+    title: 'Uzupełnianie AI',
+    queryTitle: 'Zapytaj o treść',
+    completionResult: 'Wynik uzupełnienia',
+    queryPlaceholder: 'Wpisz swoją treść zapytania...',
+    run: 'Wykonaj',
+    copy: 'Kopiuj',
+    resultTitle: 'Uzupełnianie AI',
+    noData: 'AI poda Ci to, czego chcesz tutaj.',
+    csvUploadTitle: 'Przeciągnij i upuść plik CSV tutaj lub ',
+    browse: 'przeglądaj',
+    csvStructureTitle: 'Plik CSV musi być zgodny z następującą strukturą:',
+    downloadTemplate: 'Pobierz szablon tutaj',
+    field: 'Pole',
+    batchFailed: {
+      info: '{{num}} nieudanych wykonan',
+      retry: 'Powtórz',
+      outputPlaceholder: 'Brak treści wyjściowej',
+    },
+    errorMsg: {
+      empty: 'Proszę wprowadź treść w załadowanym pliku.',
+      fileStructNotMatch: 'Załadowany plik CSV nie pasuje do struktury.',
+      emptyLine: 'Wiersz {{rowIndex}} jest pusty',
+      invalidLine:
+        'Wiersz {{rowIndex}}: wartość {{varName}} nie może być pusta',
+      moreThanMaxLengthLine:
+        'Wiersz {{rowIndex}}: wartość {{varName}} nie może mieć więcej niż {{maxLength}} znaków',
+      atLeastOne:
+        'Proszę wprowadź co najmniej jeden wiersz w załadowanym pliku.',
+    },
+  },
+}
+
+export default translation

+ 119 - 0
web/i18n/pl-PL/tools.ts

@@ -0,0 +1,119 @@
+const translation = {
+  title: 'Narzędzia',
+  createCustomTool: 'Utwórz niestandardowe narzędzie',
+  type: {
+    all: 'Wszystkie',
+    builtIn: 'Wbudowane',
+    custom: 'Niestandardowe',
+  },
+  contribute: {
+    line1: 'Interesuje mnie ',
+    line2: 'współtworzenie narzędzi dla Dify.',
+    viewGuide: 'Zobacz przewodnik',
+  },
+  author: 'Przez',
+  auth: {
+    unauthorized: 'Autoryzacja',
+    authorized: 'Zautoryzowane',
+    setup: 'Skonfiguruj autoryzację aby użyć',
+    setupModalTitle: 'Konfiguruj autoryzację',
+    setupModalTitleDescription:
+      'Po skonfigurowaniu poświadczeń wszyscy członkowie w przestrzeni roboczej mogą używać tego narzędzia podczas projektowania aplikacji.',
+  },
+  includeToolNum: '{{num}} narzędzi zawarte',
+  addTool: 'Dodaj narzędzie',
+  createTool: {
+    title: 'Utwórz niestandardowe narzędzie',
+    editAction: 'Konfiguruj',
+    editTitle: 'Edytuj niestandardowe narzędzie',
+    name: 'Nazwa',
+    toolNamePlaceHolder: 'Wprowadź nazwę narzędzia',
+    schema: 'Schemat',
+    schemaPlaceHolder: 'Wprowadź tutaj swój schemat OpenAPI',
+    viewSchemaSpec: 'Zobacz specyfikację OpenAPI-Swagger',
+    importFromUrl: 'Importuj z adresu URL',
+    importFromUrlPlaceHolder: 'https://...',
+    urlError: 'Proszę podać prawidłowy URL',
+    examples: 'Przykłady',
+    exampleOptions: {
+      json: 'Pogoda (JSON)',
+      yaml: 'Sklep Zoologiczny (YAML)',
+      blankTemplate: 'Pusty szablon',
+    },
+    availableTools: {
+      title: 'Dostępne narzędzia',
+      name: 'Nazwa',
+      description: 'Opis',
+      method: 'Metoda',
+      path: 'Ścieżka',
+      action: 'Akcje',
+      test: 'Test',
+    },
+    authMethod: {
+      title: 'Metoda autoryzacji',
+      type: 'Typ autoryzacji',
+      keyTooltip:
+        'Klucz nagłówka HTTP, Możesz pozostawić go z "Autoryzacja" jeśli nie wiesz co to jest lub ustaw go na niestandardową wartość',
+      types: {
+        none: 'Brak',
+        api_key: 'Klucz API',
+        apiKeyPlaceholder: 'Nazwa nagłówka HTTP dla Klucza API',
+        apiValuePlaceholder: 'Wprowadź Klucz API',
+      },
+      key: 'Klucz',
+      value: 'Wartość',
+    },
+    authHeaderPrefix: {
+      title: 'Typ autoryzacji',
+      types: {
+        basic: 'Podstawowa',
+        bearer: 'Bearer',
+        custom: 'Niestandardowa',
+      },
+    },
+    privacyPolicy: 'Polityka prywatności',
+    privacyPolicyPlaceholder: 'Proszę wprowadzić politykę prywatności',
+  },
+  test: {
+    title: 'Test',
+    parametersValue: 'Parametry i Wartość',
+    parameters: 'Parametry',
+    value: 'Wartość',
+    testResult: 'Wyniki testu',
+    testResultPlaceholder: 'Wynik testu pojawi się tutaj',
+  },
+  thought: {
+    using: 'Używanie',
+    used: 'Użyty',
+    requestTitle: 'Żądanie do',
+    responseTitle: 'Odpowiedź od',
+  },
+  setBuiltInTools: {
+    info: 'Informacje',
+    setting: 'Ustawienia',
+    toolDescription: 'Opis narzędzia',
+    parameters: 'parametry',
+    string: 'ciąg znaków',
+    number: 'liczba',
+    required: 'Wymagane',
+    infoAndSetting: 'Informacje i Ustawienia',
+  },
+  noCustomTool: {
+    title: 'Brak niestandardowych narzędzi!',
+    content:
+      'Dodaj i zarządzaj niestandardowymi narzędziami tutaj, aby budować aplikacje AI.',
+    createTool: 'Utwórz Narzędzie',
+  },
+  noSearchRes: {
+    title: 'Przykro nam, brak wyników!',
+    content:
+      'Nie znaleźliśmy żadnych narzędzi pasujących do Twojego wyszukiwania.',
+    reset: 'Resetuj Wyszukiwanie',
+  },
+  builtInPromptTitle: 'Komunikat',
+  toolRemoved: 'Narzędzie usunięte',
+  notAuthorized: 'Narzędzie nieautoryzowane',
+  howToGet: 'Jak uzyskać',
+}
+
+export default translation

+ 354 - 0
web/i18n/pl-PL/workflow.ts

@@ -0,0 +1,354 @@
+const translation = {
+  common: {
+    editing: 'Edytowanie',
+    autoSaved: 'Autozapisano',
+    unpublished: 'Nieopublikowany',
+    published: 'Opublikowany',
+    publish: 'Opublikuj',
+    update: 'Aktualizuj',
+    run: 'Uruchom',
+    running: 'Uruchamianie',
+    inRunMode: 'W trybie Uruchom',
+    inPreview: 'Podgląd',
+    inPreviewMode: 'W trybie Podgląd',
+    preview: 'Podgląd',
+    viewRunHistory: 'Zobacz historię uruchomień',
+    runHistory: 'Historia Uruchomień',
+    goBackToEdit: 'Wróć do edytora',
+    conversationLog: 'Dziennik Konwersacji',
+    features: 'Funkcje',
+    debugAndPreview: 'Debugowanie i Podgląd',
+    restart: 'Uruchom Ponownie',
+    currentDraft: 'Aktualny Szkic',
+    currentDraftUnpublished: 'Aktualny Szkic Nieopublikowany',
+    latestPublished: 'Ostatnio Opublikowany',
+    publishedAt: 'Opublikowany',
+    restore: 'Przywróć',
+    runApp: 'Uruchom Aplikację',
+    batchRunApp: 'Uruchom Aplikację Partiami',
+    accessAPIReference: 'Dostęp do Referencji API',
+    embedIntoSite: 'Osadź na Stronie',
+    addTitle: 'Dodaj tytuł...',
+    addDescription: 'Dodaj opis...',
+    noVar: 'Brak zmiennej',
+    searchVar: 'Szukaj zmiennej',
+    variableNamePlaceholder: 'Nazwa zmiennej',
+    setVarValuePlaceholder: 'Ustaw zmienną',
+    needConnecttip: 'Ten krok nie jest połączony z niczym',
+    maxTreeDepth: 'Maksymalny limit {{depth}} węzłów na gałąź',
+    needEndNode: 'Należy dodać Blok Końcowy',
+    needAnswerNode: 'Należy dodać Blok Odpowiedzi',
+    workflowProcess: 'Proces Przepływu',
+    notRunning: 'Nie uruchamiany jeszcze',
+    previewPlaceholder: 'Wprowadź treść w poniższym polu, aby rozpocząć debugowanie Chatbota',
+    effectVarConfirm: {
+      title: 'Usuń Zmienną',
+      content: 'Zmienna jest używana w innych węzłach. Czy nadal chcesz ją usunąć?',
+    },
+    insertVarTip: 'Naciśnij klawisz \'/\' aby szybko wstawić',
+    processData: 'Przetwarzaj Dane',
+    input: 'Wejście',
+    output: 'Wyjście',
+    jinjaEditorPlaceholder: 'Wprowadź \'/\' lub \'{\' aby wstawić zmienną',
+    viewOnly: 'Tylko Podgląd',
+    showRunHistory: 'Pokaż Historię Uruchomień',
+    enableJinja: 'Włącz wsparcie dla szablonów Jinja',
+    learnMore: 'Czytaj więcej',
+  },
+  errorMsg: {
+    fieldRequired: '{{field}} jest wymagane',
+    authRequired: 'Autoryzacja jest wymagana',
+    invalidJson: '{{field}} jest nieprawidłowy JSON',
+    fields: {
+      variable: 'Nazwa Zmiennej',
+      variableValue: 'Wartość Zmiennej',
+      code: 'Kod',
+      model: 'Model',
+      rerankModel: 'Model Ponownej Klasyfikacji',
+    },
+    invalidVariable: 'Nieprawidłowa zmienna',
+  },
+  singleRun: {
+    testRun: 'Testuj Uruchomienie ',
+    startRun: 'Uruchomienie',
+    running: 'Uruchamianie',
+  },
+  tabs: {
+    'searchBlock': 'Szukaj Bloku',
+    'blocks': 'Bloki',
+    'builtInTool': 'Wbudowany Narzędzie',
+    'customTool': 'Niestandardowe Narzędzie',
+    'question-understand': 'Zrozumienie Pytania',
+    'logic': 'Logika',
+    'transform': 'Transformacja',
+    'utilities': 'Użyteczność',
+    'noResult': 'Brak pasujących wyników',
+  },
+  blocks: {
+    'start': 'Start',
+    'end': 'Koniec',
+    'answer': 'Odpowiedź',
+    'llm': 'LLM',
+    'knowledge-retrieval': 'Odzyskiwanie Wiedzy',
+    'question-classifier': 'Klasyfikator Pytań',
+    'if-else': 'IF/ELSE',
+    'code': 'Kod',
+    'template-transform': 'Szablon',
+    'http-request': 'Żądanie HTTP',
+    'variable-assigner': 'Przypisywacz Zmiennych',
+  },
+  blocksAbout: {
+    'start': 'Definiuje początkowe parametry uruchamiania przepływu',
+    'end': 'Definiuje koniec i typ wyniku przepływu',
+    'answer': 'Definiuje treść odpowiedzi w rozmowie czatowej',
+    'llm': 'Wywołuje duże modele językowe do odpowiedzi na pytania lub przetwarzania języka naturalnego',
+    'knowledge-retrieval': 'Pozwala na wyszukiwanie treści tekstowych związanych z pytaniami użytkowników z Wiedzy',
+    'question-classifier': 'Definiuje warunki klasyfikacji pytań użytkowników, LLM może określić, jak postępuje rozmowa na podstawie opisu klasyfikacji',
+    'if-else': 'Pozwala na podział przepływu na dwie gałęzie na podstawie warunków if/else',
+    'code': 'Wykonuje fragment kodu Pythona lub NodeJS w celu zastosowania niestandardowej logiki',
+    'template-transform': 'Konwertuje dane na ciąg za pomocą składni szablonu Jinja',
+    'http-request': 'Pozwala na wysyłanie żądań serwera za pośrednictwem protokołu HTTP',
+    'variable-assigner': 'Przypisuje zmienne w różnych gałęziach do tej samej zmiennej w celu uzyskania zharmonizowanej konfiguracji post-węzłów',
+  },
+  operator: {
+    zoomIn: 'Powiększ',
+    zoomOut: 'Pomniejsz',
+    zoomTo50: 'Powiększ do 50%',
+    zoomTo100: 'Powiększ do 100%',
+    zoomToFit: 'Dopasuj do rozmiaru',
+  },
+  panel: {
+    userInputField: 'Pole Wejściowe Użytkownika',
+    changeBlock: 'Zmień Blok',
+    helpLink: 'Link Pomocniczy',
+    about: 'O Autorze',
+    createdBy: 'Utworzone przez',
+    nextStep: 'Następny Krok',
+    addNextStep: 'Dodaj następny blok w tym przepływie',
+    selectNextStep: 'Wybierz Następny Blok',
+    runThisStep: 'Uruchom ten krok',
+    checklist: 'Lista kontrolna',
+    checklistTip: 'Upewnij się, że wszystkie problemy są rozwiązane przed opublikowaniem',
+    checklistResolved: 'Wszystkie problemy zostały rozwiązane',
+    organizeBlocks: 'Organizuj bloki',
+    change: 'Zmień',
+  },
+  nodes: {
+    common: {
+      outputVars: 'Zmienne Wyjściowe',
+      insertVarTip: 'Wstaw Zmienną',
+      memory: {
+        memory: 'Pamięć',
+        memoryTip: 'Ustawienia pamięci czatu',
+        windowSize: 'Rozmiar Okna',
+        conversationRoleName: 'Nazwa Roli Konwersacji',
+        user: 'Prefiks użytkownika',
+        assistant: 'Prefiks asystenta',
+      },
+      memories: {
+        title: 'Wspomnienia',
+        tip: 'Pamięć czatu',
+        builtIn: 'Wbudowane',
+      },
+    },
+    start: {
+      required: 'wymagane',
+      inputField: 'Pole Wejściowe',
+      builtInVar: 'Zmienne Wbudowane',
+      outputVars: {
+        query: 'Wejście użytkownika',
+        memories: {
+          des: 'Historia rozmowy',
+          type: 'typ wiadomości',
+          content: 'treść wiadomości',
+        },
+        files: 'Lista plików',
+      },
+      noVarTip: 'Ustaw wejścia, które można użyć w Przepływie',
+    },
+    end: {
+      outputs: 'Wyjścia',
+      output: {
+        type: 'typ wyjścia',
+        variable: 'zmienna wyjścia',
+      },
+      type: {
+        'none': 'Brak',
+        'plain-text': 'Tekst Prosty',
+        'structured': 'Strukturyzowany',
+      },
+    },
+    answer: {
+      answer: 'Odpowiedź',
+      outputVars: 'Zmienne Wyjściowe',
+    },
+    llm: {
+      model: 'model',
+      variables: 'zmienne',
+      context: 'kontekst',
+      contextTooltip: 'Możesz zaimportować Wiedzę jako kontekst',
+      notSetContextInPromptTip: 'Aby włączyć funkcję kontekstu, proszę wypełnić zmienną kontekstu w PROMPT.',
+      prompt: 'prompt',
+      roleDescription: {
+        system: 'Daj instrukcje na wysokim poziomie dla rozmowy',
+        user: 'Dostarcz instrukcje, zapytania lub jakiekolwiek wejście oparte na tekście do modelu',
+        assistant: 'Odpowiedzi modelu na wiadomości użytkownika',
+      },
+      addMessage: 'Dodaj Wiadomość',
+      vision: 'wizja',
+      files: 'Pliki',
+      resolution: {
+        name: 'Rozdzielczość',
+        high: 'Wysoka',
+        low: 'Niska',
+      },
+      outputVars: {
+        output: 'Generuj zawartość',
+        usage: 'Informacje o użyciu modelu',
+      },
+      singleRun: {
+        variable: 'Zmienna',
+      },
+      sysQueryInUser: 'sys.query w wiadomości użytkownika jest wymagane',
+    },
+    knowledgeRetrieval: {
+      queryVariable: 'Zmienna Zapytania',
+      knowledge: 'Wiedza',
+      outputVars: {
+        output: 'Odzyskane dane podzielone',
+        content: 'Zawartość podzielona',
+        title: 'Tytuł podzielony',
+        icon: 'Ikona podzielona',
+        url: 'URL podzielony',
+        metadata: 'Inne metadane',
+      },
+    },
+    http: {
+      inputVars: 'Zmienne Wejściowe',
+      api: 'API',
+      apiPlaceholder: 'Wprowadź URL, wpisz \'/\' aby wstawić zmienną',
+      notStartWithHttp: 'API powinno rozpoczynać się od http:// lub https://',
+      key: 'Klucz',
+      value: 'Wartość',
+      bulkEdit: 'Edycja Masowa',
+      keyValueEdit: 'Edycja Klucz-Wartość',
+      headers: 'Nagłówki',
+      params: 'Parametry',
+      body: 'Treść',
+      outputVars: {
+        body: 'Zawartość Odpowiedzi',
+        statusCode: 'Kod Stanu Odpowiedzi',
+        headers: 'Lista Nagłówków Odpowiedzi w formacie JSON',
+        files: 'Lista plików',
+      },
+      authorization: {
+        'authorization': 'Autoryzacja',
+        'authorizationType': 'Typ Autoryzacji',
+        'no-auth': 'Brak',
+        'api-key': 'Klucz API',
+        'auth-type': 'Typ Autoryzacji',
+        'basic': 'Podstawowa',
+        'bearer': 'Bearer',
+        'custom': 'Niestandardowa',
+        'api-key-title': 'Klucz API',
+        'header': 'Nagłówek',
+      },
+      insertVarPlaceholder: 'wpisz \'/\' aby wstawić zmienną',
+      timeout: {
+        title: 'Limit czasu',
+        connectLabel: 'Limit czasu połączenia',
+        connectPlaceholder: 'Wprowadź limit czasu połączenia w sekundach',
+        readLabel: 'Limit czasu odczytu',
+        readPlaceholder: 'Wprowadź limit czasu odczytu w sekundach',
+        writeLabel: 'Limit czasu zapisu',
+        writePlaceholder: 'Wprowadź limit czasu zapisu w sekundach',
+      },
+    },
+    code: {
+      inputVars: 'Zmienne Wejściowe',
+      outputVars: 'Zmienne Wyjściowe',
+    },
+    templateTransform: {
+      inputVars: 'Zmienne Wejściowe',
+      code: 'Kod',
+      codeSupportTip: 'Obsługuje tylko Jinja2',
+      outputVars: {
+        output: 'Przekształcona zawartość',
+      },
+    },
+    ifElse: {
+      if: 'Jeśli',
+      else: 'W przeciwnym razie',
+      elseDescription: 'Służy do zdefiniowania logiki, która powinna być wykonana, gdy warunek if nie jest spełniony.',
+      and: 'i',
+      or: 'lub',
+      operator: 'Operator',
+      notSetVariable: 'Najpierw ustaw zmienną',
+      comparisonOperator: {
+        'contains': 'zawiera',
+        'not contains': 'nie zawiera',
+        'start with': 'zaczyna się od',
+        'end with': 'kończy się na',
+        'is': 'jest',
+        'is not': 'nie jest',
+        'empty': 'jest pusty',
+        'not empty': 'nie jest pusty',
+        'null': 'jest pusty',
+        'not null': 'nie jest pusty',
+      },
+      enterValue: 'Wprowadź wartość',
+      addCondition: 'Dodaj Warunek',
+      conditionNotSetup: 'Warunek NIE jest ustawiony',
+    },
+    variableAssigner: {
+      title: 'Przypisz zmienne',
+      outputType: 'Typ Wyjścia',
+      outputVarType: 'Typ Zmiennej Wyjściowej',
+      varNotSet: 'Zmienna nieustawiona',
+      noVarTip: 'Dodaj zmienne do przypisania',
+      type: {
+        string: 'Tekst',
+        number: 'Liczba',
+        object: 'Obiekt',
+        array: 'Tablica',
+      },
+      outputVars: {
+        output: 'Wartość zmiennej przypisanej',
+      },
+    },
+    tool: {
+      toAuthorize: 'Aby autoryzować',
+      inputVars: 'Zmienne Wejściowe',
+      outputVars: {
+        text: 'wygenerowana zawartość narzędzia',
+        files: {
+          title: 'wygenerowane pliki narzędzia',
+          type: 'Typ wsparcia. Obecnie obsługuje tylko obraz',
+          transfer_method: 'Metoda transferu. Wartość to remote_url lub local_file',
+          url: 'URL obrazu',
+          upload_file_id: 'Identyfikator przesyłanego pliku',
+        },
+      },
+    },
+    questionClassifiers: {
+      model: 'model',
+      inputVars: 'Zmienne Wejściowe',
+      outputVars: {
+        className: 'Nazwa Klasy',
+      },
+      class: 'Klasa',
+      classNamePlaceholder: 'Wpisz nazwę swojej klasy',
+      advancedSetting: 'Ustawienia Zaawansowane',
+      topicName: 'Nazwa Tematu',
+      topicPlaceholder: 'Wpisz nazwę swojego tematu',
+      addClass: 'Dodaj Klasę',
+      instruction: 'Instrukcja',
+      instructionPlaceholder: 'Wpisz swoją instrukcję',
+    },
+  },
+  tracing: {
+    stopBy: 'Zatrzymano przez {{user}}',
+  },
+}
+
+export default translation