From 3ba450b92ac4de276dcc3775cde726f7faba1f7d Mon Sep 17 00:00:00 2001 From: Robert Szachnowski Date: Sun, 18 Oct 2026 22:43:03 +0200 Subject: [PATCH 1/3] Add Polish translation Adds pl.json, registers Polski in LocalizationService (auto-picked for pl OS culture) and adds pl to localization and render tests. Co-Authored-By: Claude Opus 5.5 --- src/Filee.App/Assets/i18n/pl.json | 682 ++++++++++++++++++ src/Filee.App/Services/LocalizationService.cs | 3 + tests/Filee.App.Tests/LocalizationTests.cs | 2 +- tests/Filee.App.Tests/RenderTests.cs | 1 + 4 files changed, 687 insertions(+), 1 deletion(-) create mode 100644 src/Filee.App/Assets/i18n/pl.json diff --git a/src/Filee.App/Assets/i18n/pl.json b/src/Filee.App/Assets/i18n/pl.json new file mode 100644 index 00000000..088a1933 --- /dev/null +++ b/src/Filee.App/Assets/i18n/pl.json @@ -0,0 +1,682 @@ +{ + "app.name": "Filee", + "app.tagline": "Przeciągnij, upuść, gotowe.", + + "nav.home": "Start", + "nav.general": "Ogólne", + "nav.triggers": "Skróty", + "nav.toolbar": "Pasek-pierścień", + "nav.presets": "Ustawienia wstępne", + "nav.watch": "Obserwowane foldery", + "nav.theme": "Motyw", + "nav.engines": "Silniki", + "nav.about": "O programie", + + "tray.open": "Otwórz Filee", + "tray.pause": "Wstrzymaj skróty", + "tray.resume": "Wznów skróty", + "tray.quit": "Zakończ", + "tray.update": "Aktualizuj do {0}", + "tray.tooltip": "Filee: przytrzymaj {0} i przeciągnij pliki", + "close.title": "Zostawić Filee uruchomione?", + "close.text": "W zasobniku pasek-pierścień i obserwowane foldery dalej działają.\nMożesz to później zmienić w Ustawienia → Ogólne.", + "close.tray": "Zostaw w zasobniku", + "close.quit": "Zakończ", + "close.dont_ask": "Nie pytaj ponownie", + + "home.title": "Start", + "home.drop_title": "Upuść pliki tutaj", + "home.drop_hint": "Albo przytrzymaj {0}, przeciągając pliki w Eksploratorze. Pasek-pierścień otworzy się przy kursorze.", + "home.drop_hint_macos": "Albo przytrzymaj {0}, przeciągając pliki w Finderze. Pasek-pierścień otworzy się przy kursorze.", + "home.drop_hint_linux": "Albo przytrzymaj {0}, przeciągając pliki w menedżerze plików. Pasek-pierścień otworzy się przy kursorze.", + "home.accessibility_needed": "Aby otwierać pierścień przeciąganiem z ⌥ Option, zezwól Filee w Dostępności.\nZadziała od razu po włączeniu.", + "home.recent": "Ostatnie konwersje", + "home.recent_empty": "Tu pojawią się przekonwertowane pliki.", + "home.open_folder": "Otwórz folder", + "home.clear_history": "Wyczyść", + "home.files": "Pliki: {0}", + "home.failed_files": "Błędy: {0}", + + "donut.center_drag": "Przenieś pliki tutaj", + "donut.files_same": "{0} × {1}", + "donut.files_mixed": "Pliki: {0}", + "donut.drop_to": "Upuść → {0}", + "donut.pick_in_group": "Przesuń na zewnątrz, by wybrać", + "donut.group_empty": "W tej grupie nie ma już ustawień. Edytuj ją w Ustawienia → Pasek-pierścień", + "donut.click_to": "Kliknij → {0}", + "donut.cancel": "Upuść tu, by anulować", + "donut.close_hint": "Esc zamyka", + "donut.edit": "Edytuj ustawienie", + "donut.empty": "Przeciągnij tu ustawienia", + "donut.same_format": "Ten sam format", + "donut.group_caption": "Grupa: {0}", + + "toast.converting": "{0} → {1}", + "toast.done": "Gotowe", + "toast.done_errors": "Nieudane: {0} z {1}", + "toast.failed": "Konwersja nieudana", + "toast.cancelled": "Anulowano", + "toast.skipped": "Pominięto (plik istnieje)", + "toast.open_folder": "Pokaż", + "toast.cancel": "Anuluj", + + "error.unsupported_source": "Ten typ pliku nie jest obsługiwany", + "error.no_route": "Żaden silnik nie wykona tej konwersji", + "error.cannot_turn": "Obracanie i odbicie działają tylko na obrazach", + "error.conversion_failed": "Silnik zgłosił błąd", + + "engine.reason.not_installed": "Nie zainstalowano", + "engine.reason.error": "Błąd podczas sprawdzania", + "engine.reason.unsupported_platform": "Niedostępne na tej platformie", + "engine.reason.needs_package": "Wymaga {0}. Zainstaluj w Ustawienia → Silniki", + "engine.magick.description": "JPG, PNG, WEBP, AVIF, HEIC, TIFF, GIF, APNG, PSD, RAW z aparatów i inne.\nJakość, rozmiar i DPI zgodnie z ustawieniem.", + "engine.pdfium.description": "Renderuje strony PDF do PNG, JPG i TIFF (także wielostronicowy TIFF i GIF) w rozdzielczości z ustawienia.", + "engine.pdfsharp.description": "Tworzy PDF z obrazów oraz łączy, dzieli i wycina zakresy stron z plików PDF.", + "engine.rhwp.description": "Renderuje HWP/HWPX do PDF i konwertuje HWP ↔ HWPX.\nRysuje też dokumenty, które trafiają do PDF przez HWPX (DOCX, XLSX, PPTX, e-booki…).", + "engine.unhwp.description": "Wyodrębnia tekst, Markdown i HTML z HWP i HWPX.", + "engine.markdown.description": "Markdown → HTML i zwykły tekst.", + "engine.spreadsheet.description": "XLSX, XLS, ODS, CSV i TSV między sobą (XLS tylko do odczytu).\nJeden CSV na arkusz.", + "engine.ooxml.description": "Pliki z makrami i szablony (DOCM, XLSM, PPTM, DOTX…) ↔ DOCX, XLSX, PPTX.\nMakra są usuwane.", + "engine.hwpx-writer.description": "Zapisuje HWPX z Worda, Excela, PowerPointa, PDF, HTML, e-booków i Markdown.\nPierwszy krok zamiany dokumentów na PDF bez Office.", + "engine.docx-writer.description": "Zapisuje dokumenty Word (DOCX) z PDF, HWP/HWPX, Markdown, HTML, arkuszy, slajdów i e-booków.", + "engine.pdf-text.description": "Wyodrębnia tekst z PDF w kolejności czytania, także ze stron dwukolumnowych (bez OCR skanów).", + "engine.pdf-slides.description": "Zamienia PDF na slajdy PowerPoint: każda strona staje się obrazem na osobnym slajdzie (wygląda jak PDF, bez edycji), a tekst strony trafia do notatek prelegenta.", + "engine.email.description": "E-maile (EML, Outlook MSG) do HTML i tekstu z nadawcą, odbiorcami i datą, razem z obrazami; załączniki do ZIP.\nMSG do EML.", + "engine.data.description": "JSON, JSON Lines, YAML, TOML, XML i CSV między sobą.\nKontakty vCard do CSV i z powrotem.\nKomentarze są pomijane. CSV przechowuje tylko tabele.", + "engine.vector.description": "SVG i SVGZ do wektorowego PDF, obrazów i DXF; obrazy wektoryzowane do SVG; pliki Illustratora zapisane z zawartością PDF.", + "engine.icns.description": "Ikony aplikacji macOS (ICNS) z obrazów i do obrazów.", + "engine.font.description": "Czcionki: TTF, OTF, WOFF, WOFF2 i EOT między sobą.", + "engine.cad.description": "Rysunki AutoCAD: DWG ↔ DXF, oba także do PDF, SVG i PNG.", + "engine.model3d.description": "Modele 3D: GLB, glTF, STL, OBJ, 3MF i PLY między sobą oraz podgląd PNG.", + "engine.archive.description": "Rozpakowuje ZIP, 7Z, RAR, TAR, ISO i inne, pakuje do ZIP, 7Z lub TAR.GZ (7-Zip).", + "engine.ebook.description": "EPUB, MOBI, AZW3, FB2 i komiksy (CBZ, CBR) do PDF, EPUB, DOCX i tekstu.\nTakże dokumenty do EPUB, EPUB do KEPUB dla Kobo i PDF do CBZ.", + "engine.subtitle.description": "Napisy: SRT, ASS/SSA, WebVTT, SAMI (SMI), LRC, TTML, MicroDVD i SCC między sobą, zapisywane w UTF-8.\nKoreańskie pliki SMI i SRT w CP949 / EUC-KR są odczytywane poprawnie.", + "engine.ffmpeg.description": "Wideo i audio: MP4, MOV, MKV, WEBM, MP3, M4A, WAV, FLAC i inne.\nWyodrębnia też dźwięk i napisy, tworzy animacje GIF i APNG oraz zapisuje obrazy jako HEIC.", + "engine.pandoc.description": "Markdown i HTML ↔ ODT i RTF, DOCX → Markdown\nreStructuredText, LaTeX, Org, AsciiDoc, Typst, MediaWiki, DocBook, Jupyter i inne ↔ Markdown, HTML, DOCX i ODT\nMarkdown i Org → slajdy PPTX", + "engine.ghostscript.description": "EPS, PostScript i starsze pliki Illustratora do PDF i obrazów; PDF do EPS i PS.", + "engine.calibre.description": "Rzadkie formaty e-booków (LIT, LRF, CHM, PDB, RB…) i zapis dla Kindle (MOBI, AZW3).", + "engine.libreoffice.description": "Odczytuje starsze i rzadsze formaty: DOC, PPT, Pages, Keynote, Numbers, WordPerfect, ClarisWorks, Publisher, Visio…\nZapisuje też jako DOC, XLS, PPT, ODT, ODP, szablony OpenDocument i EMF.", + + "profile.images": "Obrazy", + "profile.pdf": "PDF", + "profile.office": "Dokumenty", + "profile.spreadsheets": "Arkusze", + "profile.presentations": "Prezentacje", + "profile.hwp": "HWP / HWPX", + "profile.text": "Tekst i Markdown", + "profile.ebooks": "E-booki", + "profile.video": "Wideo", + "profile.audio": "Audio", + "profile.subtitles": "Napisy", + "profile.vector": "Grafika wektorowa", + "profile.archives": "Archiwa", + "profile.cad": "Rysunki CAD", + "profile.fonts": "Czcionki", + "profile.data": "Dane", + "profile.models": "Modele 3D", + "profile.mixed": "Różne pliki", + + "preset.half_size": "Połowa rozmiaru", + "preset.grayscale": "Skala szarości", + "preset.remove_background": "Usuń tło", + "preset.group_rotate": "Obróć", + "preset.rotate_left": "Obróć w lewo", + "preset.rotate_left.short": "W lewo", + "preset.rotate_right": "Obróć w prawo", + "preset.rotate_right.short": "W prawo", + "preset.rotate_180": "Obróć o 180°", + "preset.rotate_180.short": "180°", + "preset.group_flip": "Odbij", + "preset.flip_horizontal": "Odbij w poziomie", + "preset.flip_horizontal.short": "Poziomo", + "preset.flip_vertical": "Odbij w pionie", + "preset.flip_vertical.short": "Pionowo", + "preset.merge_pdf": "Połącz PDF", + "preset.split_pdf": "Podziel PDF", + "preset.long_image": "Długi obraz", + "preset.pdf_slides": "PPTX (slajdy)", + "preset.extract": "Rozpakuj", + "preset.zip_all": "Jeden ZIP", + "preset.extract_subtitles": "Wyodrębnij napisy", + "preset.trace_svg": "Wektoryzuj do SVG", + "preset.trace_line_art": "Rysunek do SVG", + + "format.folder": "Folder", + "format.category.Image": "Obraz", + "format.category.Pdf": "PDF", + "format.category.Document": "Dokument", + "format.category.Spreadsheet": "Arkusz", + "format.category.Presentation": "Prezentacja", + "format.category.Hwp": "HWP", + "format.category.Text": "Tekst", + "format.category.Video": "Wideo", + "format.category.Audio": "Audio", + "format.category.Ebook": "E-book", + "format.category.Archive": "Archiwum", + "format.category.Vector": "Wektor", + "format.category.Cad": "CAD", + "format.category.Font": "Czcionka", + "format.category.Subtitle": "Napisy", + "format.category.Data": "Dane", + "format.category.Model3D": "Model 3D", + + "general.title": "Ogólne", + "general.language": "Język", + "general.language_auto": "Domyślny systemu", + "general.start_with_system": "Uruchamiaj Filee po zalogowaniu", + "general.context_menu": "Pokazuj „Konwertuj w Filee” w menu kontekstowym Eksploratora", + "general.context_menu_label": "Konwertuj w Filee", + "general.context_menu_macos": "Pokazuj „Konwertuj w Filee” po kliknięciu plików prawym przyciskiem w Finderze", + "general.context_menu_linux": "Dodaj „Konwertuj w Filee” do menedżera plików", + "general.integration_macos": "Finder pokazuje to w menu prawego przycisku (w Szybkich czynnościach lub Usługach, gdy menu jest długie).\nTrzymaj Filee w Aplikacjach.", + "general.integration_linux": "Dodaje akcje plików do Thunara, Nautilusa, Nemo i Dolphina.\nAby zmienić skrót w Thunarze, najpierw zamknij Thunara, a potem otwórz go ponownie.", + "general.integration_failed": "Nie udało się zastosować integracji z systemem: {0}", + "general.modern_menu_hint": "W Windows 11 ta pozycja jest w „Pokaż więcej opcji”.\nMoże też trafić do głównego menu (Windows raz poprosi o uprawnienia administratora).", + "general.modern_menu_on": "„Konwertuj w Filee” jest w głównym menu Windows 11.", + "general.modern_menu_outdated": "Pozycja w głównym menu należy do starszej lub przeniesionej kopii Filee.\nDodaj ją ponownie, aby ją zaktualizować.", + "general.modern_menu_add": "Dodaj do głównego menu", + "general.modern_menu_remove": "Usuń z głównego menu", + "general.modern_menu_busy": "Czekam na Windows…", + "general.modern_menu_cancelled": "Anulowano. Pozycja zostaje w „Pokaż więcej opcji”.", + "general.modern_menu_failed": "Windows nie dodał pozycji: {0}", + "general.modern_menu_remove_failed": "Windows nie usunął pozycji: {0}", + "general.default_output": "Domyślne miejsce zapisu", + "general.default_output_hint": "Ustawienia z „Domyślne miejsce zapisu” zapisują tutaj.\nUstawienie z własnym miejscem je zachowuje.", + "general.keep_dates": "Zachowuj oryginalne daty plików przy każdej konwersji", + "general.keep_dates_hint": "Przekonwertowane pliki zachowują daty utworzenia i modyfikacji oryginału, w każdym ustawieniu.\nWyłączone: robią to tylko ustawienia z „Zachowaj oryginalne daty plików”.", + "general.check_updates": "Automatycznie sprawdzaj aktualizacje", + "general.close_action": "Po zamknięciu okna", + "general.close.Ask": "Pytaj za każdym razem", + "general.close.Tray": "Zostaw Filee w zasobniku", + "general.close.Quit": "Zakończ Filee", + "general.history": "Historia konwersji", + "general.no_history": "Nie zapisuj historii ostatnich konwersji", + "general.clear_history": "Wyczyść historię", + "general.history_count": "Konwersje w historii: {0}", + "general.history_cleared": "Historia wyczyszczona.", + "general.check_now": "Sprawdź teraz", + "general.update_available": "Dostępna jest wersja {0}", + "general.update_none": "Masz najnowszą wersję ({0})", + "update.sidebar": "Aktualizuj do {0}", + "update.notice_title": "Dostępne jest Filee {0}", + "update.notice_text": "Naciśnij Aktualizuj, a Filee pobierze i zainstaluje nową wersję. Ustawienia zostaną zachowane.", + "update.download": "Pobierz", + "update.later": "Później", + "update.install": "Aktualizuj", + "update.notice_text_portable": "To wersja przenośna.\nPobierz nowy plik zip i rozpakuj go do tego folderu. Ustawienia zostaną zachowane.", + "update.downloading": "Pobieranie aktualizacji… {0}%", + "update.installing_short": "Instalowanie…", + "update.installing": "Instalator działa. Filee uruchomi się ponownie po zakończeniu.", + "update.failed": "Nie udało się zaktualizować automatycznie. Pobierz nową wersję z filee.sh.", + "update.failed_alert": "Nie udało się pobrać aktualizacji.\nNaciśnij OK, aby otworzyć filee.sh i pobrać tam nową wersję.", + "update.cancelled": "Aktualizacja anulowana. Naciśnij Aktualizuj ponownie, aby ją zainstalować.", + "update.level.Required": "Wymagana aktualizacja", + "update.level.Recommended": "Zalecana aktualizacja", + "update.level.Optional": "Opcjonalna aktualizacja", + "update.level_hint.Required": "Naprawia problemy dotyczące Twoich plików. Zaktualizuj.", + "update.level_hint.Recommended": "Naprawia błędy.", + "update.level_hint.Optional": "Nowe funkcje. Zaktualizuj, kiedy chcesz.", + "update.pill.Required": "Wymagana", + "update.pill.Optional": "Opcjonalna", + "update.more_changes": "… i jeszcze {0}", + "general.data_folder": "Folder ustawień", + "general.open_data_folder": "Otwórz", + "general.library": "Ustawienia wstępne i paski", + "general.export": "Eksportuj…", + "general.import": "Importuj…", + "general.reset_library": "Przywróć domyślne", + "general.reset_confirm": "Zastąpić wszystkie ustawienia wstępne i profile pasków domyślnymi?", + "general.imported": "Zaimportowano elementów: {0}", + + "triggers.title": "Skróty", + "triggers.description": "Wybierz, jak otwiera się pasek-pierścień. Możesz dodać dowolnie wiele gestów.", + "triggers.macos_permissions": "Zezwól Filee w Ustawienia systemowe > Prywatność i ochrona > Dostępność.\nFinder poprosi też o uprawnienie Automatyzacji przy pierwszym użyciu skrótu zaznaczenia.", + "triggers.linux_x11": "Gesty przeciągania działają w X11.\nPrzy włączonej integracji z menedżerem plików pierwszy skrót klawiszowy uruchamia akcję Filee w Thunarze (po zmianie otwórz Thunara ponownie).\nGesty przytrzymania i skróty w innych menedżerach plików są niedostępne. Użyj menu Filee lub strefy upuszczania.", + "triggers.linux_wayland": "Gesty podążające za kursorem są niedostępne w Waylandzie.\nUżyj sesji X11 albo konwertuj przez menu menedżera plików i strefę upuszczania.\nThunar może używać pierwszego skrótu klawiszowego po ponownym uruchomieniu.", + "triggers.open_accessibility": "Otwórz ustawienia Dostępności", + "triggers.retry_hook": "Ponów gesty", + "triggers.hook_running": "Globalne wykrywanie wejścia działa.", + "triggers.hook_stopped": "Globalne wykrywanie wejścia jest zatrzymane.\nAkcje menedżera plików i strefa upuszczania są nadal dostępne.", + "triggers.hook_failed": "Globalne wykrywanie wejścia nie powiodło się: {0}", + "triggers.hook_linux_backend": "Gesty nie uruchomiły się, bo biblioteki wejścia X11 się nie załadowały.\nUżyj sesji X11 i zainstaluj libxtst6 oraz libxt6 (Ubuntu/Debian: sudo apt install libxtst6 libxt6), potem ponów.\nAkcje menedżera plików i strefa upuszczania są nadal dostępne.", + "triggers.add": "Dodaj gest", + "triggers.remove": "Usuń", + "triggers.enabled": "Wł.", + "triggers.kind": "Gest", + "triggers.kind.Drag": "Modyfikator + przeciąganie plików", + "triggers.kind.Hold": "Modyfikator + naciśnij i przytrzymaj", + "triggers.kind.KeyChord": "Skrót klawiszowy (zaznaczone pliki)", + "triggers.modifiers": "Klawisze modyfikujące", + "triggers.button": "Przycisk myszy", + "triggers.button.None": "Brak", + "triggers.button.Left": "Lewy", + "triggers.button.Right": "Prawy", + "triggers.button.Middle": "Środkowy", + "triggers.button.X1": "Wstecz (X1)", + "triggers.button.X2": "Dalej (X2)", + "triggers.key": "Klawisz", + "triggers.record": "Nagraj", + "triggers.recording": "Naciśnij kombinację klawiszy…", + "triggers.clear": "Wyczyść", + "triggers.threshold": "Odległość przeciągania", + "triggers.threshold_system": "Domyślna systemu", + "triggers.hold_ms": "Czas przytrzymania", + "triggers.scope": "Aktywne w", + "triggers.scope.FileManager": "Eksplorator i pulpit", + "triggers.scope.FileManager_macos": "Finder i pulpit", + "triggers.scope.FileManager_linux": "Menedżer plików i pulpit", + "triggers.scope.Anywhere": "Wszędzie", + "triggers.excluded": "Nigdy nie uruchamiaj w tych aplikacjach", + "triggers.excluded_hint": "Wpisz nazwę aplikacji i naciśnij Enter, np. photoshop", + "triggers.excluded_pick": "Wybierz uruchomioną aplikację", + "triggers.excluded_none_running": "Żadna inna aplikacja nie ma otwartego okna.", + "triggers.excluded_note": "Gesty i skróty nic nie robią, gdy wskaźnik jest nad tymi aplikacjami.", + "triggers.paused": "Skróty są wstrzymane", + + "toolbar.title": "Pasek-pierścień", + "toolbar.step_profile": "1. Wybierz profil", + "toolbar.step_arrange": "2. Ułóż ustawienia", + "toolbar.add_profile": "Nowy profil", + "toolbar.profile_new": "Nowy profil", + "toolbar.delete_profile": "Usuń profil", + "toolbar.name": "Nazwa", + "toolbar.extensions": "Używany dla tych rozszerzeń", + "toolbar.extensions_hint": "Dodaj rozszerzenie, np. jpg", + "toolbar.available": "Dostępne ustawienia", + "toolbar.hint_add": "Przeciągnij element na pierścień, by go dodać", + "toolbar.hint_remove": "Przeciągnij wycinek tutaj, by go usunąć", + "toolbar.hint_reorder": "Przeciągaj wycinki na siebie, by zmienić kolejność", + "toolbar.hint_edit": "Kliknij wycinek prawym przyciskiem lub użyj ✎, by edytować", + "toolbar.max_reached": "Pierścień mieści do {0} ustawień", + "toolbar.appearance": "Wygląd", + "toolbar.size": "Rozmiar", + "toolbar.hole": "Otwór", + "toolbar.opacity": "Krycie", + "toolbar.new_preset": "Nowe ustawienie", + "toolbar.new_group": "Nowa grupa", + "group.editor_title": "Grupa", + "group.hint": "Grupa to jeden wycinek pierścienia dla kilku ustawień: zatrzymaj się na nim lub przesuń na zewnątrz, a rozłożą się wokół.", + "group.members": "Ustawienia ({0} / {1})", + "group.empty": "Brak ustawień. Dodaj je poniżej.", + "group.add": "Dodaj", + "group.add_placeholder": "Wybierz ustawienie", + "group.full": "Grupa mieści do {0} ustawień.", + "group.move_up": "W górę", + "group.move_down": "W dół", + "group.remove": "Usuń z grupy", + "group.delete": "Usuń grupę", + "group.delete_confirm": "Usunąć grupę „{0}”? Jej ustawienia zostaną.", + "toolbar.ext_none": "Brak rozszerzeń. Ten profil będzie używany dopiero po ich dodaniu.", + "toolbar.ext_invalid": "„{0}” to nie jest rozszerzenie pliku (np. jpg lub tar.gz).", + "toolbar.ext_duplicate": "{0} jest już na liście.", + "toolbar.ext_also_in": "Także w „{0}”", + "toolbar.ext_in_profile": "w {0}", + "toolbar.ext_claimed_first": "{0}: także w „{1}”, który jest wcześniej na liście, więc te pliki nadal otwierają „{1}”.", + "toolbar.ext_claimed_later": "{0}: także w „{1}”.\nTen profil jest wcześniej na liście, więc te pliki otwierają teraz ten profil.", + "toolbar.ext_unknown": "{0}: Filee nie zna tego typu pliku.\nMożesz go zostawić, ale tych plików nie da się przekonwertować.", + "toolbar.ext_unknown_tip": "Nieznany typ pliku", + "toolbar.mixed_toggle": "Używaj dla mieszanych zaznaczeń (pliki różnych typów)", + "toolbar.mixed_locked": "Filee potrzebuje co najmniej jednego profilu dla mieszanych zaznaczeń, więc ten zostaje.", + "toolbar.mixed_badge": "Dla mieszanych zaznaczeń", + "toolbar.mixed_title": "Pokaż ten pasek, gdy każdy zaznaczony plik jest jednym z:", + "toolbar.mixed_expand": "Pokaż rozszerzenia", + "toolbar.mixed_other_group": "Inne rozszerzenia", + "toolbar.mixed_catch_all": "Nic nie zaznaczono: używany dla każdej mieszanki plików, której nie bierze inny profil.", + "toolbar.mixed_shadowed": "Nic nie zaznaczono, więc „{0}”, wcześniej na liście, bierze każdą mieszankę.\nZaznacz rozszerzenia, by używać tego profilu.", + "toolbar.mixed_covered": "„{0}” jest pierwszy i dopuszcza każde zaznaczone tu rozszerzenie, więc ten profil nigdy nie jest używany.", + "toolbar.mixed_others": "Inne mieszanki plików otwierają „{0}”.", + "toolbar.mixed_others_self": "Nie został żaden mieszany profil bez zaznaczeń, więc ten jest używany także dla każdej innej mieszanki.", + "tags.remove": "Usuń", + + "presets.title": "Ustawienia wstępne", + "presets.add": "Nowe", + "presets.duplicate": "Duplikuj", + "presets.delete": "Usuń", + "presets.save": "Zapisz", + "presets.revert": "Cofnij", + "presets.name": "Nazwa", + "presets.target": "Konwertuj do", + "presets.same_as_source": "Ten sam format co źródło", + "presets.group.image": "Obraz", + "presets.quality": "Jakość", + "presets.resize": "Zmień rozmiar", + "presets.resize.None": "Oryginalny rozmiar", + "presets.resize.Percent": "Skaluj procentowo", + "presets.resize.LongEdge": "Ogranicz dłuższy bok", + "presets.resize.Width": "Ustaw szerokość", + "presets.rotation": "Obróć", + "presets.rotation.None": "Nie obracaj", + "presets.rotation.Right90": "W prawo 90°", + "presets.rotation.Left90": "W lewo 90°", + "presets.rotation.Rotate180": "180°", + "presets.flip": "Odbij", + "presets.flip.None": "Nie odbijaj", + "presets.flip.Horizontal": "Lewo ↔ prawo", + "presets.flip.Vertical": "Góra ↔ dół", + "presets.percent": "Procent", + "presets.long_edge": "Dłuższy bok (px)", + "presets.width": "Szerokość (px)", + "presets.dpi": "DPI", + "presets.dpi_keep": "Zachowaj", + "presets.keep_metadata": "Zachowaj metadane (EXIF)", + "presets.keep_color_profile": "Zachowaj profil kolorów (ICC)", + "presets.keep_color_profile_hint": "Dostępne, gdy metadane są usuwane.\nBez niego zdjęcia o szerokiej gamie (Display P3 z telefonów) mogą wyglądać na wyblakłe.", + "presets.grayscale": "Skala szarości", + "presets.remove_background": "Usuń tło", + "presets.remove_background_hint": "Robi jednolite tło przezroczystym: papier za podpisem lub pieczątką, tło logo.\nKolor przy krawędzi liczy się jako tło, więc zostaw trochę papieru wokół grafiki.\nJPG nie ma przezroczystości i dostaje kolor poniżej. Nie do zdjęć ludzi.", + "presets.background_tolerance": "Tolerancja tła", + "presets.background_tolerance_hint": "Wyżej usuwa więcej, np. cieniowany papier lub smugi. Za wysoko wyszczupla jasne linie.\nAby zachować jasne wypełnienie wewnątrz konturu, włącz „Zachowaj zamknięte obszary”.", + "presets.keep_enclosed_background": "Zachowaj zamknięte obszary", + "presets.keep_enclosed_background_hint": "Usuwa tylko tło stykające się z krawędzią, więc biel wewnątrz logo zostaje.\nWyłącz dla pisma odręcznego (zostawiłoby papier wewnątrz liter jak „o”).", + "presets.background": "Tło dla przezroczystości", + "presets.tiff_compression": "Kompresja TIFF", + "presets.webp_lossless": "Bezstratny WEBP", + "presets.multipage_tiff": "Umieść wszystkie pliki w jednym wielostronicowym TIFF", + "presets.multipage_tiff_hint": "Każdy obraz i każda strona PDF lub TIFF staje się stroną, po kolei.\nJeden PDF wystarczy do wielostronicowego TIFF.", + "presets.ico_sizes": "Rozmiary ikon", + "presets.group.pdf": "PDF", + "presets.merge": "Połącz wszystkie pliki w jeden PDF", + "presets.page_size": "Rozmiar strony", + "presets.page_size.FitImage": "Dopasuj do obrazu", + "presets.page_size.A4": "A4", + "presets.page_size.Letter": "Letter", + "presets.margin": "Margines (mm)", + "presets.render_dpi": "DPI renderowania (PDF → obraz)", + "presets.page_range": "Strony", + "presets.page_range_hint": "Wszystkie strony lub np. 1-3, 5", + "presets.split": "Jeden plik na stronę", + "presets.combine_pages_hint": "Układa wszystkie strony jedna pod drugą w jednym obrazie.\nBardzo długie wyniki są skalowane do limitu formatu (JPG 65 500 px, WebP 16 383 px).", + "presets.combine_pages": "Złóż strony w jeden wysoki obraz (przy konwersji PDF)", + "presets.trim_page_margins": "Wytnij puste miejsce nad i pod każdą stroną", + "presets.split_tall_image": "Za wysoki dla formatu: podziel na kilka obrazów", + "presets.split_tall_image_hint": "Wyłączone: długi obraz jest zmniejszany do limitu formatu (JPG 65 500 px, WebP 16 383 px).\nWłączone: zachowuje rozmiar i jest dzielony między stronami na kilka plików (nazwa_1, nazwa_2, …).", + "presets.group.document": "Dokumenty", + "presets.pdfa": "PDF/A (archiwalny)", + "presets.target_folder": "Folder (rozpakuj archiwa)", + "presets.group.media": "Wideo i audio", + "presets.media_quality": "Jakość", + "presets.media_quality_hint": "Gdy nowy format może przyjąć kodeki bez zmian (MOV z iPhone’a → MP4), wideo jest tylko przepakowywane.\nBez utraty jakości, z zachowaniem HDR, w kilka sekund.\nMała zawsze koduje ponownie, by zmniejszyć plik.", + "presets.media_quality.High": "Wysoka (większe pliki)", + "presets.media_quality.Balanced": "Zrównoważona", + "presets.media_quality.Small": "Mała (do udostępniania)", + "presets.max_height": "Maksymalna wysokość", + "presets.max_height.original": "Oryginalna", + "presets.audio_bitrate": "Bitrate audio", + "presets.audio_bitrate.auto": "Automatyczny", + "presets.remove_audio": "Usuń dźwięk", + "presets.audio_channels": "Kanały", + "presets.audio_channels.0": "Jak w źródle", + "presets.audio_channels.1": "Mono", + "presets.audio_channels.2": "Stereo", + "presets.sample_rate": "Częstotliwość próbkowania", + "presets.sample_rate.source": "Jak w źródle", + "presets.wav_format": "Głębia bitowa", + "presets.wav_format.Pcm16": "16-bit", + "presets.wav_format.Pcm8": "8-bit", + "presets.wav_format.Pcm24": "24-bit", + "presets.wav_format.Pcm32": "32-bit", + "presets.wav_format.Float32": "32-bit float", + "presets.video_codec": "Kodek wideo", + "presets.video_codec_hint": "H.264 odtwarza się wszędzie.\nPliki HEVC są mniej więcej o połowę mniejsze i działają na większości telefonów, telewizorów i nowszych komputerów.\nAV1 jest jeszcze mniejszy, ale wolno się koduje i wymaga nowego urządzenia.\nWideo już w wybranym kodeku jest tylko przepakowywane.", + "presets.video_codec.h264": "H.264 (działa wszędzie)", + "presets.video_codec.vp9": "VP9", + "presets.video_codec.hevc": "HEVC / H.265 (mniejszy)", + "presets.video_codec.av1": "AV1 (najmniejszy, wolny)", + "presets.audio_codec": "Kodek audio", + "presets.audio_codec.aac": "AAC", + "presets.audio_codec.alac": "ALAC (bezstratny)", + "presets.group.archive": "Archiwum", + "presets.archive_level": "Kompresja", + "presets.archive_level.Store": "Brak (tylko zapis)", + "presets.archive_level.Fast": "Szybka", + "presets.archive_level.Normal": "Normalna", + "presets.archive_level.Maximum": "Maksymalna (wolniej)", + "presets.combine": "Umieść wszystkie pliki w jednym archiwum", + "presets.extract_note": "Każde archiwum jest rozpakowywane do własnego folderu. Miejsce ustawisz w sekcji Wynik.", + "presets.group.trace": "Wektoryzacja", + "presets.trace_note": "Używane, gdy obraz (PNG, JPG, …) jest zamieniany na kształty wektorowe.", + "presets.trace_mode": "Tryb", + "presets.trace_mode.Color": "Kolor", + "presets.trace_mode.BlackAndWhite": "Czarno-biały (rysunek)", + "presets.trace_colors": "Kolory", + "presets.trace_detail": "Szczegóły", + "presets.trace_detail_hint": "Niskie wygładzają kontury i pomijają drobinki.\nWysokie wiernie śledzą piksele i zachowują drobne detale.", + "presets.group.output": "Wynik", + "presets.location": "Zapisz w", + "presets.location.Default": "Domyślne miejsce zapisu (Ustawienia > Ogólne)", + "presets.location.SameFolder": "Ten sam folder co źródło", + "presets.location.Subfolder": "Podfolder", + "presets.location.CustomFolder": "Stały folder", + "presets.subfolder": "Nazwa podfolderu", + "presets.custom_folder": "Folder", + "presets.browse": "Przeglądaj…", + "presets.pattern": "Nazwa pliku", + "presets.pattern_hint": "{name} {ext} {preset} {date} {time} {index}", + "presets.keep_dates": "Zachowaj oryginalne daty plików", + "presets.keep_dates_hint": "Przekonwertowane pliki dostają daty utworzenia i modyfikacji oryginału, więc zdjęcia nadal sortują się według daty.", + "presets.conflict": "Jeśli plik istnieje", + "presets.conflict.Rename": "Dodaj numer", + "presets.conflict.Overwrite": "Zastąp", + "presets.conflict.Skip": "Pomiń", + "presets.editor_title": "Edytuj ustawienie", + "presets.delete_confirm": "Usunąć „{0}”? Zostanie też usunięte z każdego paska i grupy.", + "presets.name_required": "Podaj nazwę", + "presets.select": "Wybierz ustawienie, aby je edytować", + + "theme.title": "Motyw", + "theme.mode": "Wygląd", + "theme.mode.System": "Systemowy", + "theme.mode.Light": "Jasny", + "theme.mode.Dark": "Ciemny", + "theme.accent": "Kolor akcentu", + "theme.custom_color": "Własny", + "theme.corner_radius": "Zaokrąglenie", + "theme.reduce_motion": "Ogranicz animacje", + "theme.reduce_motion_hint": "Zalecane na starszych komputerach. Wyłącza przejścia i odbijanie pierścienia.", + "theme.preview": "Podgląd", + + "engines.title": "Silniki konwersji", + "engines.description": "Filee wybiera najlepszy dostępny silnik dla każdej konwersji.\nGdy kilka potrafi to samo, wygrywa wyższy.", + "engines.available": "Gotowy", + "engines.unavailable": "Niedostępny", + "engines.move_up": "W górę", + "engines.move_down": "W dół", + "engines.recheck": "Sprawdź ponownie", + "engines.conversions": "Konwersje: {0}", + "engines.optional_title": "Silniki opcjonalne", + "engines.optional_description": "Duże silniki są pobierane tylko wtedy, gdy ich chcesz.\nZostają przy aktualizacji Filee i są usuwane przy odinstalowaniu.", + "engines.all_title": "Wszystkie silniki", + "engines.update": "Aktualizuj", + "engines.state.update_available": "Nowa wersja {0}", + "engines.update_notice_title": "Zainstalowane silniki mają nową wersję", + "engines.settings": "Ustawienia", + "engines.all_description": "Przeciągnij kartę (lub użyj strzałek), by zmienić kolejność.", + "engines.lo_title": "Gdy LibreOffice jest zainstalowany", + "engines.lo_description": "LibreOffice może przejąć konwersje, które wykonuje wierniej.\nBez LibreOffice te przełączniki nic nie zmieniają.", + "engines.lo_slides": "Używaj LibreOffice dla prezentacji → PDF", + "engines.lo_slides_hint": "Tła slajdów i położenie kształtów wychodzą jak w PowerPoincie.\nWyłączone: wbudowana ścieżka, która może gubić tła lub przesuwać kształty.", + "engines.lo_documents": "Używaj LibreOffice dla dokumentów Word → PDF", + "engines.lo_documents_hint": "Układ jak w Wordzie, łącznie z zasadami interpunkcji chińskiej i japońskiej.\nWyłączone: wbudowana ścieżka.", + "engines.lo_sheets": "Używaj LibreOffice dla arkuszy → PDF", + "engines.lo_sheets_hint": "Drukowane jak w Excelu, z obszarem wydruku, ustawieniami strony i podziałami stron.\nWyłączone: wbudowana ścieżka dopasowuje każdy arkusz do szerokości strony (podziały stron zachowane).", + "engines.lo_hwp": "Używaj LibreOffice dla HWP·HWPX → PDF", + "engines.lo_hwp_hint": "Domyślnie wyłączone: rhwp zwykle wygląda bardziej jak 한글.\nWłącz, by porównać, gdy rhwp źle odda dokument (nakładający się tekst, przesunięte tabele).", + "engines.package.libreoffice.name": "LibreOffice (starsze i rzadkie formaty)", + "engines.package.libreoffice.description": "Potrzebny dla starych lub nietypowych formatów: DOC·PPT, prezentacje OpenDocument, WordPerfect, ClarisWorks·MacWrite, Apple Pages·Numbers·Keynote, Publisher·Visio i inne.\nZapisuje też jako DOC·XLS·PPT·ODT·ODP·EMF i daje wierniejsze prezentacje → PDF.\nWord, Excel, PowerPoint, PDF i HWP konwertują się bez niego.", + "engines.package.pandoc.name": "Pandoc (Markdown, LaTeX, Org i inne)", + "engines.package.pandoc.description": "Dodaje Markdown i HTML ↔ ODT i RTF, DOCX → Markdown oraz LaTeX, Org, AsciiDoc, Typst, Jupyter i inne języki znaczników.\nTworzy też slajdy PPTX z Markdown.\nMarkdown i HTML → PDF, DOCX i HWPX działają bez niego.", + "engines.package.ghostscript.name": "Ghostscript (EPS i PostScript)", + "engines.package.ghostscript.description": "EPS, PS i starsze pliki Illustratora → PDF i obrazy, PDF lub SVG → EPS/PS.\nSVG i pliki AI zgodne z PDF konwertują się bez niego.", + "engines.package.ffmpeg.name": "FFmpeg (wideo i audio)", + "engines.package.ffmpeg.description": "Dodaje konwersję wideo i audio, wideo → GIF lub klatka, dźwięk z wideo i GIF → MP4.\nPotrzebny tylko do wideo i audio.", + "engines.package.calibre.name": "Calibre (Kindle i rzadkie formaty e-booków)", + "engines.package.calibre.description": "Zapisuje MOBI i AZW3 dla Kindle i konwertuje rzadkie formaty e-booków (LIT, LRF, PDB, CHM…).\nEPUB, MOBI, AZW3, FB2 i komiksy są odczytywane bez niego.", + "engines.package.size": "Pobieranie {0} · {1} na dysku", + "engines.package.system_required": "Użyj kopii zainstalowanej na tym komputerze.", + "engines.guidance.macos": "Zainstaluj {0} dla tego Maca, potem wybierz „Użyj mojej kopii…” i wskaż jego program lub folder .app.", + "engines.guidance.macos.ffmpeg": "Zainstaluj przez Homebrew (brew install ffmpeg), potem wybierz „Sprawdź ponownie”.\nAlbo wybierz „Użyj mojej kopii…” i wskaż folder bin.", + "engines.guidance.macos.ghostscript": "Zainstaluj przez Homebrew (brew install ghostscript), potem wybierz „Sprawdź ponownie”.\nAlbo wybierz „Użyj mojej kopii…” i wskaż folder bin.", + "engines.guidance.linux": "Zainstaluj {0} menedżerem pakietów swojej dystrybucji, potem wybierz „Użyj mojej kopii…” i wskaż folder programu.", + "engines.guidance.linux.libreoffice": "Zainstaluj menedżerem pakietów (Ubuntu/Debian: sudo apt install libreoffice), potem wybierz „Sprawdź ponownie”.\nOtwieranie HWP wymaga też Javy i rozszerzenia H2Orestart.", + "engines.guidance.linux.ghostscript": "Zainstaluj menedżerem pakietów (Ubuntu/Debian: sudo apt install ghostscript), potem wybierz „Sprawdź ponownie”.", + "engines.guidance.windows": "Filee nie ma do pobrania {0} dla tego komputera.\nWybierz „Użyj mojej kopii…” i wskaż zainstalowaną kopię.", + "engines.use_own_app_folder": "Wybierz folder zawierający {0}.app", + "engines.progress_detail": "{0} z {1} · {2}/s · {3}", + "engines.eta.estimating": "szacowanie pozostałego czasu…", + "engines.eta.seconds": "zostało {0} s", + "engines.eta.minutes": "zostało {0} min", + "engines.install": "Zainstaluj", + "engines.cancel": "Anuluj", + "engines.remove": "Usuń", + "engines.remove_confirm": "Usunąć {0}? Możesz pobrać go później ponownie.", + "engines.state.own_copy": "Twoja kopia", + "engines.state.system_copy": "Znaleziono na tym komputerze", + "engines.update_recommended": "Zalecana aktualizacja: ta kopia to {0}, Filee jest testowane z {1}.\nWiększość konwersji nadal działa.", + "engines.use_own": "Użyj mojej kopii…", + "engines.use_own_hint": "Masz go już? Wskaż jego program, a Filee użyje go zamiast pobierać własny.", + "engines.use_own_title": "Wybierz program {0}", + "engines.use_own_missing": "W tym folderze brakuje czegoś, czego Filee potrzebuje: {0}.", + "engines.stop_own": "Przestań używać", + "engines.remove_failed": "Silnik jest w użyciu. Spróbuj ponownie po zakończeniu trwających konwersji.", + "engines.state.not_installed": "Nie zainstalowano", + "engines.state.queued": "Oczekiwanie…", + "engines.state.downloading": "Pobieranie {0}%", + "engines.state.unpacking": "Instalowanie…", + "engines.state.installed": "Zainstalowano", + "engines.state.failed": "Błąd: {0}", + + "about.title": "O programie", + "about.updates": "Aktualizacje", + "common.search": "Szukaj", + "common.retry": "Ponów", + "about.version": "Wersja {0}", + "about.license": "Filee to wolne oprogramowanie na licencji MIT.", + "about.notices": "Informacje o komponentach zewnętrznych", + "about.github": "Repozytorium GitHub", + "about.support_title": "Pomóż Filee się rozwijać", + "about.support_text": "Filee jest darmowe i otwartoźródłowe.\nGwiazdka na GitHubie, zgłoszenie błędu, pomysł czy sponsoring – wszystko pomaga.", + "about.sponsor": "Wesprzyj", + "sponsor.title": "Wesprzyj Filee", + "sponsor.lead": "Filee jest darmowe i takie zostanie. Jeśli chcesz wesprzeć rozwój, wybierz wygodny dla siebie sposób.", + "sponsor.note.github": "Co miesiąc lub jednorazowo, kartą przez GitHub", + "sponsor.note.fairy": "Koreańskie karty i szybkie płatności", + "sponsor.note.patreon": "Miesięczne członkostwo", + "sponsor.note.kofi": "Jednorazowa kawa, bez konta", + "sponsor.note.paypal": "Dowolna kwota przez PayPal", + "sponsor.thanks": "Dziękujemy naszym sponsorom", + "sponsor.star": "⭐ na GitHubie nic nie kosztuje i pomaga innym znaleźć Filee.", + "feedback.notice_title": "Czy Filee Ci pomaga?", + "feedback.notice_text": "Gwiazdka na GitHubie pomaga innym znaleźć Filee.\nProblemy i pomysły też są mile widziane.", + "feedback.star": "Gwiazdka na GitHubie", + "feedback.issue": "Zgłoś problem lub pomysł", + + "common.ok": "OK", + "common.cancel": "Anuluj", + "common.save": "Zapisz", + "common.close": "Zamknij", + "common.delete": "Usuń", + "common.yes": "Tak", + "common.no": "Nie", + + "setup.title": "Wybierz silniki konwersji", + "setup.description": "Obrazy, PDF, dokumenty Office, HWP, e-booki, archiwa, czcionki, CAD i modele 3D już się konwertują.\nPobieraj silniki tylko dla wideo i audio lub rzadkich formatów.", + "setup.note": "Silniki możesz w każdej chwili zainstalować lub usunąć w Ustawienia → Silniki.", + "setup.install": "Zainstaluj wybrane", + "setup.later": "Później", + "setup.background": "Kontynuuj w tle", + "setup.done": "Gotowe", + "setup.selection": "Pobieranie: {0}", + "setup.nothing_selected": "Nic nie wybrano", + "watch.title": "Obserwowane foldery", + "watch.description": "Pliki trafiające do tych folderów są konwertowane, gdy Filee działa.\nPobierane i kopiowane pliki czekają na zakończenie.", + "watch.add": "Dodaj folder", + "watch.empty": "Brak obserwowanych folderów.", + "watch.enabled": "Wł.", + "watch.remove": "Usuń", + "watch.folder": "Folder do obserwowania", + "watch.folder_placeholder": "Wybierz folder", + "watch.preset": "Konwertuj ustawieniem", + "watch.originals": "Po konwersji", + "watch.originals_keep": "Zostaw oryginał na miejscu", + "watch.originals_move": "Przenieś oryginał do „originals”", + "watch.originals_hint": "Przenoszenie oryginałów sprawia, że folder działa jak skrzynka odbiorcza, a pliki czekające w nim przy starcie Filee też są konwertowane.", + "watch.output": "Zapisuj przekonwertowane pliki w", + "watch.output_placeholder": "„converted” w obserwowanym folderze", + "watch.subfolders": "Uwzględnij podfoldery", + "watch.options": "Więcej opcji (opcjonalnie)", + "watch.include": "Pliki do konwersji", + "watch.include_placeholder": "Wpisz rozszerzenie lub nazwę, potem Enter (np. heic, scan_*)", + "watch.include_hint": "Zostaw puste, by konwertować każdy plik.\n· heic → pliki kończące się na .heic\n· scan → pliki z „scan” w nazwie\n· * oznacza dowolny tekst, ? jeden znak (np. scan_*.jpg)", + "watch.name": "Nazwa bazowa", + "watch.name_placeholder": "Jak w ustawieniu: {0}", + "watch.name_hint": "Przyciski dodają części nazwy. Zostaw puste, by użyć nazwy z ustawienia.", + "watch.rename": "Nazwy przekonwertowanych plików", + "watch.rename_find": "Znajdź, np. IMG_(\\d+)", + "watch.rename_replace": "Zamień na, np. Zdjecie_$1", + "watch.name_summary": "Nazwa: {0}", + "watch.name_summary_preset": "Nazwa: {0} (jak w ustawieniu)", + "watch.token.name": "Oryginalna nazwa", + "watch.token.ext": "Oryginalne rozszerzenie", + "watch.token.date": "Data", + "watch.token.time": "Godzina", + "watch.token.index": "Numer", + "watch.token.preset": "Nazwa ustawienia", + "watch.kind.Replace": "Zamień tekst", + "watch.kind.Remove": "Usuń tekst", + "watch.kind.Prefix": "Dodaj na początku", + "watch.kind.Suffix": "Dodaj na końcu", + "watch.kind.SpacesToUnderscores": "Spacje na _", + "watch.kind.RemoveCopyNumber": "Usuń numer kopii jak (2)", + "watch.kind.RemoveBrackets": "Usuń tekst w nawiasach", + "watch.kind.RemoveLeadingNumber": "Usuń numer na początku", + "watch.kind.RemoveSymbols": "Usuń symbole", + "watch.kind.Lowercase": "wszystko małymi", + "watch.kind.Uppercase": "WSZYSTKO WIELKIMI", + "watch.kind.Regex": "Zaawansowane: wyrażenie regularne", + "watch.ph.find": "Tekst do znalezienia, np. IMG_", + "watch.ph.replace": "Zamień na, np. Zdjecie_", + "watch.ph.remove": "Tekst do usunięcia, np. _kopia", + "watch.ph.prefix": "Tekst do dodania, np. 2026_", + "watch.ph.suffix": "Tekst do dodania, np. _final", + "watch.advanced": "Zaawansowane", + "watch.recipe.camera_to_photo": "Zmień IMG_ na Photo_", + "watch.recipe.lowercase": "Wszystko małymi", + "watch.rename_edit": "Edytuj reguły nazw", + "watch.rename_title": "Nazwy przekonwertowanych plików", + "watch.rename_intro": "Ustaw nazwę bazową, a w razie potrzeby zmień jej części regułami.\nPodgląd pokazuje nazwę, jaką dostanie każdy plik.", + "watch.rename_steps": "Zmiany (stosowane od góry do dołu)", + "watch.rename_no_steps": "Brak zmian. Wybierz jedną po lewej lub dodaj, jeśli potrzebujesz.", + "watch.step_up": "W górę (wykonaj wcześniej)", + "watch.rename_try": "Wypróbuj nazwę", + "watch.rename_try_placeholder": "Wpisz nazwę pliku, np. IMG_0412.jpg", + "watch.include_matches": "Pasujące pliki w folderze: {0}", + "watch.add_step": "Dodaj regułę", + "watch.remove_step": "Usuń tę regułę", + "watch.recipes": "Częste zamiany", + "watch.recipes_hint": "Kliknij dwukrotnie (lub naciśnij +), by dodać jako regułę, potem możesz ją zmienić.", + "watch.recipe_add": "Dodaj jako regułę", + "watch.recipe_removes": "(usunięte)", + "watch.recipe.drop_camera_prefix": "Usuń IMG_", + "watch.recipe.spaces": "Spacje na podkreślenia", + "watch.recipe.copy_number": "Usuń numer kopii jak (2)", + "watch.recipe.brackets": "Usuń tekst w nawiasach", + "watch.recipe.leading_number": "Usuń numer na początku", + "watch.recipe.date_dashes": "Dodaj myślniki w datach", + "watch.recipe.symbols": "Usuń symbole", + "watch.recipe.prefix": "Dodaj tekst na początku", + "watch.recipe.suffix": "Dodaj tekst na końcu", + "watch.invalid_regex": "Nieprawidłowe wyrażenie regularne: {0}", + "watch.preview": "Podgląd", + "watch.results": "Ostatnie wyniki", + "watch.results_ok": "Przekonwertowane pliki: {0}, bez błędów", + "watch.results_failed": "Przekonwertowane pliki: {0} · nieudane: {1}", + "watch.sample_file": "zdjecie.jpg", + "watch.preview_keep": "Oryginał zostaje na miejscu", + "watch.preview_move": "Oryginał trafia do „originals”", + "watch.status_off": "Wył.", + "watch.status_no_folder": "Wybierz folder, aby zacząć", + "watch.status_watching": "Obserwuję", + "watch.status_starting": "Uruchamianie…", + "watch.status_error": "Nie można obserwować tego folderu: {0}", + "watch.cli_hint": "Także w wierszu poleceń: filee watch --to " +} diff --git a/src/Filee.App/Services/LocalizationService.cs b/src/Filee.App/Services/LocalizationService.cs index f09685a0..6079b8a9 100644 --- a/src/Filee.App/Services/LocalizationService.cs +++ b/src/Filee.App/Services/LocalizationService.cs @@ -21,6 +21,7 @@ public sealed class LocalizationService : ILocalizer ("en", "English"), ("ko", "한국어"), ("zh-CN", "简体中文"), + ("pl", "Polski"), ]; private readonly ResourceDictionary _resources = new(); @@ -97,6 +98,8 @@ public static string Resolve(string setting) return "ko"; if (ui.StartsWith("zh", StringComparison.OrdinalIgnoreCase)) return "zh-CN"; + if (ui.StartsWith("pl", StringComparison.OrdinalIgnoreCase)) + return "pl"; return "en"; } diff --git a/tests/Filee.App.Tests/LocalizationTests.cs b/tests/Filee.App.Tests/LocalizationTests.cs index efef6284..e27a85f7 100644 --- a/tests/Filee.App.Tests/LocalizationTests.cs +++ b/tests/Filee.App.Tests/LocalizationTests.cs @@ -20,7 +20,7 @@ private static string I18nDirectory private static Dictionary Load(string code) => JsonSerializer.Deserialize>(File.ReadAllText(Path.Combine(I18nDirectory, code + ".json")))!; - public static TheoryData Languages => new() { "ko", "zh-CN" }; + public static TheoryData Languages => new() { "ko", "zh-CN", "pl" }; [Theory] [MemberData(nameof(Languages))] diff --git a/tests/Filee.App.Tests/RenderTests.cs b/tests/Filee.App.Tests/RenderTests.cs index 5e57037e..926f973c 100644 --- a/tests/Filee.App.Tests/RenderTests.cs +++ b/tests/Filee.App.Tests/RenderTests.cs @@ -26,6 +26,7 @@ public class RenderTests { "home", "en" }, { "general", "en" }, { "triggers", "en" }, { "toolbar", "en" }, { "presets", "en" }, { "theme", "en" }, { "engines", "en" }, { "about", "en" }, { "toolbar", "ko" }, { "home", "ko" }, { "presets", "zh-CN" }, { "toolbar", "zh-CN" }, { "home", "zh-CN" }, + { "toolbar", "pl" }, { "presets", "pl" }, { "home", "pl" }, }; [AvaloniaTheory] From 1982e818169ed7a20fa7d28019d38f47f909b61c Mon Sep 17 00:00:00 2001 From: KnifeLemon Date: Mon, 19 Oct 2026 09:07:21 +0900 Subject: [PATCH 2/3] Polish: the strings added in 1.12.0 The 31 keys that came with PDF compression, frame extraction, hardware encoding, format requests and the administrator notices, and the gesture scope's new name "File managers and desktop". Machine-assisted; native review welcome. Co-Authored-By: Claude Opus 5.5 --- src/Filee.App/Assets/i18n/pl.json | 33 ++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/Filee.App/Assets/i18n/pl.json b/src/Filee.App/Assets/i18n/pl.json index 088a1933..90db0a9c 100644 --- a/src/Filee.App/Assets/i18n/pl.json +++ b/src/Filee.App/Assets/i18n/pl.json @@ -30,6 +30,13 @@ "home.drop_hint_macos": "Albo przytrzymaj {0}, przeciągając pliki w Finderze. Pasek-pierścień otworzy się przy kursorze.", "home.drop_hint_linux": "Albo przytrzymaj {0}, przeciągając pliki w menedżerze plików. Pasek-pierścień otworzy się przy kursorze.", "home.accessibility_needed": "Aby otwierać pierścień przeciąganiem z ⌥ Option, zezwól Filee w Dostępności.\nZadziała od razu po włączeniu.", + "home.elevated": "Filee działa jako administrator, więc Eksplorator nie może upuszczać na nie plików ani używać jego menu.\nSkrót też nie odczyta zaznaczenia w Eksploratorze.\nUruchom Filee ponownie bez uprawnień administratora, aby to naprawić.", + "home.elevated_restart": "Uruchom ponownie bez uprawnień administratora", + "home.elevated_restart_failed": "Filee nie mogło uruchomić się ponownie.\nZamknij Filee z zasobnika i uruchom je jeszcze raz.", + "elevation.notice_title": "Filee działa jako administrator", + "elevation.notice_text": "W tym trybie Eksplorator nie może upuszczać plików na Filee ani używać jego menu.\nUruchom je ponownie bez uprawnień administratora.", + "startup.elevated_other": "Inne Filee działa jako administrator.\nEksplorator nie może przekazać mu plików.\nZamknij Filee z zasobnika i uruchom je jeszcze raz.", + "startup.no_answer": "Filee działa, ale nie odpowiada.\nJeśli działa jako administrator, zamknij je z zasobnika i uruchom jeszcze raz.", "home.recent": "Ostatnie konwersje", "home.recent_empty": "Tu pojawią się przekonwertowane pliki.", "home.open_folder": "Otwórz folder", @@ -61,9 +68,15 @@ "toast.cancel": "Anuluj", "error.unsupported_source": "Ten typ pliku nie jest obsługiwany", + "format_request.request": "Poproś o ten format", + "format_request.notice_title": "Filee nie potrafi jeszcze konwertować plików {0}", + "format_request.notice_text": "Napisz, jakiego formatu potrzebujesz.\nNa podstawie próśb wybieramy kolejne obsługiwane formaty.\nPlików zaszyfrowanych lub chronionych przed kopiowaniem (DRM) nie da się konwertować, niezależnie od formatu.", "error.no_route": "Żaden silnik nie wykona tej konwersji", "error.cannot_turn": "Obracanie i odbicie działają tylko na obrazach", + "error.too_many_frames": "Za dużo klatek do zapisania jako obrazy, zwiększ „Co N-ta klatka”", + "error.not_enough_space": "Za mało wolnego miejsca na dysku na obrazy", "error.conversion_failed": "Silnik zgłosił błąd", + "notice.pdf_not_smaller": "Nie udało się zmniejszyć pliku, więc skopiowano go bez zmian", "engine.reason.not_installed": "Nie zainstalowano", "engine.reason.error": "Błąd podczas sprawdzania", @@ -133,6 +146,7 @@ "preset.flip_vertical.short": "Pionowo", "preset.merge_pdf": "Połącz PDF", "preset.split_pdf": "Podziel PDF", + "preset.compress_pdf": "Kompresuj PDF", "preset.long_image": "Długi obraz", "preset.pdf_slides": "PPTX (slajdy)", "preset.extract": "Rozpakuj", @@ -140,6 +154,8 @@ "preset.extract_subtitles": "Wyodrębnij napisy", "preset.trace_svg": "Wektoryzuj do SVG", "preset.trace_line_art": "Rysunek do SVG", + "preset.extract_frames_png": "Wyodrębnij klatki (PNG)", + "preset.extract_frames_jpg": "Wyodrębnij klatki (JPG)", "format.folder": "Folder", "format.category.Image": "Obraz", @@ -262,7 +278,7 @@ "triggers.threshold_system": "Domyślna systemu", "triggers.hold_ms": "Czas przytrzymania", "triggers.scope": "Aktywne w", - "triggers.scope.FileManager": "Eksplorator i pulpit", + "triggers.scope.FileManager": "Menedżery plików i pulpit", "triggers.scope.FileManager_macos": "Finder i pulpit", "triggers.scope.FileManager_linux": "Menedżer plików i pulpit", "triggers.scope.Anywhere": "Wszędzie", @@ -373,6 +389,10 @@ "presets.webp_lossless": "Bezstratny WEBP", "presets.multipage_tiff": "Umieść wszystkie pliki w jednym wielostronicowym TIFF", "presets.multipage_tiff_hint": "Każdy obraz i każda strona PDF lub TIFF staje się stroną, po kolei.\nJeden PDF wystarczy do wielostronicowego TIFF.", + "presets.save_every_frame": "Zapisz każdą klatkę wideo", + "presets.save_every_frame_hint": "Wideo staje się folderem z obrazem każdej klatki zamiast jednej klatki.\nDługie wideo daje wiele plików.", + "presets.frame_interval": "Co N-ta klatka", + "presets.frame_estimate": "Minuta wideo w 30 kl./s daje {0} obrazów, najwyżej {1} na wideo.", "presets.ico_sizes": "Rozmiary ikon", "presets.group.pdf": "PDF", "presets.merge": "Połącz wszystkie pliki w jeden PDF", @@ -385,6 +405,15 @@ "presets.page_range": "Strony", "presets.page_range_hint": "Wszystkie strony lub np. 1-3, 5", "presets.split": "Jeden plik na stronę", + "presets.pdf_compression": "Kompresja", + "presets.pdf_compression.None": "Bez kompresji", + "presets.pdf_compression.Screen": "Najmniejszy (obrazy w 72 dpi)", + "presets.pdf_compression.Ebook": "Zrównoważony (obrazy w 150 dpi)", + "presets.pdf_compression.Print": "Wysoka jakość (obrazy w 300 dpi)", + "presets.pdf_compression_hint": "Obrazy są pomniejszane i zapisywane jako JPEG.\nTekst, czcionki i rysunki pozostają bez zmian.\nJeśli wynik nie jest mniejszy, zostaje oryginał.", + "presets.pdf_ghostscript": "Spróbuj też Ghostscript (jeśli jest zainstalowany)", + "presets.pdf_ghostscript_hint": "Często daje mniejszy plik, ale zapisuje cały plik od nowa.\nZostaje najmniejszy wynik.", + "presets.pdf_keep_metadata": "Zachowaj metadane stron i obrazów (XMP)", "presets.combine_pages_hint": "Układa wszystkie strony jedna pod drugą w jednym obrazie.\nBardzo długie wyniki są skalowane do limitu formatu (JPG 65 500 px, WebP 16 383 px).", "presets.combine_pages": "Złóż strony w jeden wysoki obraz (przy konwersji PDF)", "presets.trim_page_margins": "Wytnij puste miejsce nad i pod każdą stroną", @@ -422,6 +451,8 @@ "presets.video_codec.vp9": "VP9", "presets.video_codec.hevc": "HEVC / H.265 (mniejszy)", "presets.video_codec.av1": "AV1 (najmniejszy, wolny)", + "presets.hardware_encoding": "Użyj akceleracji sprzętowej (karta graficzna)", + "presets.hardware_encoding_hint": "Koduje H.264 i HEVC na karcie graficznej.\nZnacznie szybciej i przy mniejszym zużyciu energii.\nNieco niższa jakość przy tym samym rozmiarze pliku.\nBez obsługiwanej karty wideo jest kodowane jak zwykle.", "presets.audio_codec": "Kodek audio", "presets.audio_codec.aac": "AAC", "presets.audio_codec.alac": "ALAC (bezstratny)", From 88859eec7726e919ca730d7d173ee5735bd48c9e Mon Sep 17 00:00:00 2001 From: KnifeLemon Date: Mon, 19 Oct 2026 10:12:31 +0900 Subject: [PATCH 3/3] Polish: rhwp time-out messages and the calibre engine note Co-Authored-By: Claude Opus 5.5 --- src/Filee.App/Assets/i18n/pl.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Filee.App/Assets/i18n/pl.json b/src/Filee.App/Assets/i18n/pl.json index 90db0a9c..ec2d5a7e 100644 --- a/src/Filee.App/Assets/i18n/pl.json +++ b/src/Filee.App/Assets/i18n/pl.json @@ -75,6 +75,8 @@ "error.cannot_turn": "Obracanie i odbicie działają tylko na obrazach", "error.too_many_frames": "Za dużo klatek do zapisania jako obrazy, zwiększ „Co N-ta klatka”", "error.not_enough_space": "Za mało wolnego miejsca na dysku na obrazy", + "error.rhwp_timeout": "rhwp nie zdążył przetworzyć tego długiego dokumentu", + "error.rhwp_timeout_calibre": "rhwp nie zdążył przetworzyć tego długiego dokumentu. Dla e-booka przenieś Calibre nad HWPX writer w Ustawienia → Silniki, a Calibre zrobi PDF znacznie szybciej", "error.conversion_failed": "Silnik zgłosił błąd", "notice.pdf_not_smaller": "Nie udało się zmniejszyć pliku, więc skopiowano go bez zmian", @@ -107,7 +109,7 @@ "engine.ffmpeg.description": "Wideo i audio: MP4, MOV, MKV, WEBM, MP3, M4A, WAV, FLAC i inne.\nWyodrębnia też dźwięk i napisy, tworzy animacje GIF i APNG oraz zapisuje obrazy jako HEIC.", "engine.pandoc.description": "Markdown i HTML ↔ ODT i RTF, DOCX → Markdown\nreStructuredText, LaTeX, Org, AsciiDoc, Typst, MediaWiki, DocBook, Jupyter i inne ↔ Markdown, HTML, DOCX i ODT\nMarkdown i Org → slajdy PPTX", "engine.ghostscript.description": "EPS, PostScript i starsze pliki Illustratora do PDF i obrazów; PDF do EPS i PS.", - "engine.calibre.description": "Rzadkie formaty e-booków (LIT, LRF, CHM, PDB, RB…) i zapis dla Kindle (MOBI, AZW3).", + "engine.calibre.description": "Rzadkie formaty e-booków (LIT, LRF, CHM, PDB, RB…) i zapis dla Kindle (MOBI, AZW3).\nUmieszczony nad HWPX writer tworzy też PDF-y e-booków (znacznie szybciej przy długich książkach).", "engine.libreoffice.description": "Odczytuje starsze i rzadsze formaty: DOC, PPT, Pages, Keynote, Numbers, WordPerfect, ClarisWorks, Publisher, Visio…\nZapisuje też jako DOC, XLS, PPT, ODT, ODP, szablony OpenDocument i EMF.", "profile.images": "Obrazy",