| Date | 2026-08-06 |
| Locale tree | ~/mozilla/git/firefox-l10n/pl @ c700cb6b7d0f0837cab4566a7e298b5ab7de6511 |
| en-US reference | ~/mozilla/git/firefox-quarantine @ 7a5fe5860e3d227bb7e55d00772339a25f12af49 |
| Method | moz.l10n parser checks (syntax, variables, selectors, accesskeys, markup parity, plural categories, typography), hunspell with the in-repo pl dictionary, cross-file consistency grouping by en-US source string, plus per-directory manual review against en-US and its developer comments |
Findings are keyed by Fluent string ID, never by line number. Completeness/sync status is out of scope and not reported.
| Check | Result |
|---|---|
Fluent syntax (l10n-lint) |
Clean — 0 parse errors |
| Access keys not present in their label | 0 — Polish remaps accesskeys properly throughout |
| Variable/placeholder set mismatches | 2 (both benign, see A1–A2) |
| Plural selector variable mismatches | 2 real (A3–A4) + 1 benign brand-term extension |
Markup / data-l10n-name parity vs en-US |
Clean (18 raw hits, all artifacts of pl having 3 plural variants vs en-US 1) |
| Plural categories | Correct one/few/*[many] almost everywhere; 6 real gaps (A5–A6) |
Straight " / ' in translated values |
0 |
... instead of … in translated values |
0 |
Wrong closing quote “ in translated values |
0 (all 70 occurrences are inside # comments copied from en-US) |
| Double spaces / space-before-punctuation in values | 0 real |
Spellcheck (hunspell, in-repo pl.dic) |
No genuine misspellings in running text; all unknown tokens are technical terms, proper nouns, deliberate quickactions-cmd-* slang keywords, or the deliberately-unaccented example in findbar-match-diacritics |
Typographic conventions detected in this locale (counts over translated values):
| Convention | Usage |
|---|---|
| Quotes | „…” (U+201E / U+201D) — 449 / 529 |
| Ellipsis | … — 356, zero ... |
| Apostrophe | ’ where needed — 34 |
NBSP after single-letter words (w z i a o u) |
3607 applied vs 45 missed → ~99% consistent |
| Dashes | em dash — 159, en dash – 16 |
The locale is typographically disciplined; the deviations below are individually enumerated rather than treated as systemic problems.
S1 — "Service Workers" is translated despite an explicit do-not-translate comment.
toolkit/toolkit/about/aboutServiceWorkers.ftl carries the resource comment ### The term "Service Workers" and "Workers" should not be translated, yet every string renders it as wątki usługowe: about-service-workers-title, about-service-workers-main-title, about-service-workers-warning-not-enabled, about-service-workers-warning-no-service-workers, plus app-basics-service-workers (aboutSupport.ftl) and about-processes-web-isolated-property-serviceworker (aboutProcesses.ftl). Consistent across the locale, so this is a standing decision to confirm or reverse — not N separate bugs.
S2 — -mdn-brand-name is translated and declined.
toolkit/toolkit/branding/brandings.ftl opens with ## The following feature names must be treated as a brand … They cannot be: Transliterated. Translated. Declension should be avoided. en-US is MDN Web Docs; pl renders every case/capitalization variant as dokumentacja MDN / Dokumentacji MDN / dokumentacją MDN …, i.e. "Web Docs" is replaced by a Polish common noun and the whole term is declined. Same decision applies to whether the case-parameterized brand terms in general should be declined (they are, deliberately and consistently — that part is fine and idiomatic for Polish).
S3 — "bounce tracker" is translated despite a do-not-translate comment.
toolkit/toolkit/global/antiTracking.ftl, dev comment Do not translate "bounce tracker". Affects btp-warning-tracker-classified and btp-warning-tracker-purged (all plural variants), rendered as przekierowujący element śledzący.
S4 — DevTools name is inconsistent across the tree.
narzędzia dla programistów — 17 occurrences; narzędzia dla twórców witryn — 4 (customkeys-dev-tools, enable-devtools-popup-description2, appmenu-developer-tools-extensions, …). Pick one. quickactions-inspector2 uses the majority form, so aligning the four outliers is the smaller change.
S5 — Missed NBSP after a one-letter word — 45 occurrences vs 3607 correct.
Concentrated in browser/browser/genai.ftl (16 — these are AI prompt bodies, arguably not UI text) and toolkit/toolkit/about/aboutRights.ftl (8). Most of the rest are string-initial (rights-title "O prawach…", title-label "O wtyczkach", languages-customize-moveup "W górę"), where no orphan can occur. Low priority; listed here so it isn't mistaken for pervasive.
S6 — "logins" → "passwords/entries" rename only half-applied.
The …2 string series in browser/browser/aboutLogins.ftl exists to carry the en-US logins → passwords / entries rename. about-logins-import-dialog-items-added2 was migrated to hasło/hasła, but about-logins-import-dialog-items-modified2, about-logins-import-dialog-items-no-change2, about-logins-import-report-modified2, about-logins-import-report-no-change2, about-logins-import-report-row-description-modified2 and about-logins-import-report-row-description-no-change2 still say dane logowania where en-US says entries.
tab-group-editor-action-copy-links(browser/browser/tabbrowser.ftl) — A3, functional. The plural select keys on$tabCount, but the source (and the calling code) passes$linkCount.$tabCountis never supplied, so the selector cannot match and the message always falls through to*[many](and Fluent logs a resolver error). Current:{ $tabCount -> [one] … [few] … *[many] … }→ Suggest:{ $linkCount -> … }.monitor-partial-breaches-title(browser/browser/protections.ftl) — A4. Selector changed from$numBreachesto$numBreachesResolved. That is defensible for Polish agreement, but the[one]variant then also drops thez { $numBreaches }part that both other variants and the source have. Current[one]: "{ $numBreachesResolved } wyciek jest oznaczony jako rozwiązany" → Suggest: "{ $numBreachesResolved } z { $numBreaches } wycieków jest oznaczony jako rozwiązany".tabbrowser-confirm-open-multiple-tabs-message(browser/browser/tabbrowser.ftl) — A5, plural. Only*[other]exists: "Nastąpi otwarcie { $tabCount } kart jednocześnie…". Polish needs[few]→ "{ $tabCount } karty" for 2–4. Addone/few/many.download-ui-confirm-quit-cancel-downloads,download-ui-confirm-quit-cancel-downloads-mac,download-ui-confirm-offline-cancel-downloads,download-ui-confirm-leave-private-browsing-windows-cancel-downloads,download-ui-cancel-downloads-ok(toolkit/toolkit/downloads/downloadUI.ftl) — A6, plural. All five use only[1]+*[other]with "{ $downloadsCount } plików", so 2/3/4 render as "2 plików" instead of "2 pliki". Add a[few]variant to each.pdfjs-editor-comments-sidebar-title(toolkit/toolkit/pdfviewer/viewer.ftl) — A7, plural. Only[one]/[other]("Komentarz" / "Komentarze"). Polish needs[many]→ "Komentarzy" for 5+.popup-warning-exceeded-messageandpopup-warning-exceeded-with-redirect-message(browser/browser/browser.ftl) — A8. The[one]variant drops "more than": "…uniemożliwił tej witrynie otwarcie wyskakującego okna." → Suggest: "…otwarcie więcej niż { $popupCount } wyskakującego okna." (the[few]/[many]variants keep it).state-dd-enabled(toolkit/toolkit/about/aboutPlugins.ftl) — A9, markup. Colon is inside the span and outside it, so the page renders "Stan:: włączony". Current:<span data-l10n-name="state">Stan:</span>: włączony→ Suggest:<span data-l10n-name="state">Stan</span>: włączony(matching the three siblingstate-dd-*strings).protections-panel-cookie-banner-blocker-view-turn-on-for-site(browser/browser/protectionsPanel.ftl) — A1, note. pl introduces{ $host }where the source says "this site".$hostis documented for this comment block and used by the sibling…-turn-off-for-site, so it should resolve — but it is an added dependency on a variable the source doesn't require. Worth a runtime check.mr2022-onboarding-live-language-continue-in(browser/browser/newtab/onboarding.ftl) — A2, note. pl drops{ $appLanguage }("Nie przełączaj języka" vs "Continue in { $appLanguage }"). Harmless at runtime; flagged only for completeness.
window-minimize-command(browser/browser/browserSets.ftl) —.label= "Miniaturka" (= thumbnail) for "Minimize". → "Minimalizuj" (the form used inbrowser.ftl,webrtcIndicator.ftl,newtab.ftl).main-context-menu-bookmark-page-with-shortcut(browser/browser/browserContext.ftl) — carries the Edit Bookmark text and is byte-identical tomain-context-menu-edit-bookmark-with-shortcut, so the a11y label announces the wrong action. Current:.aria-label = Edytuj zakładkę…,.tooltiptext = Edytuj zakładkę ({ $shortcut })→ Suggest:.aria-label = Dodaj zakładkę do tej strony…,.tooltiptext = Dodaj zakładkę do tej strony ({ $shortcut }).newtab-wallpaper-dark-green(browser/browser/newtab/newtab.ftl) — "Ciemnoniebieski" (= dark blue), duplicatingnewtab-wallpaper-dark-blue. → "Ciemnozielony".user-context-color-purple(toolkit/toolkit/global/contextual-identity.ftl) — "Fioletowy", identical touser-context-color-violet; two container swatches become indistinguishable, notably for screen-reader users. →purple= "Purpurowy", keepviolet= "Fioletowy".netReset-title(toolkit/toolkit/neterror/certError.ftl) — "Przerwane połączenie", identical tonetInterrupt-title; "connection was reset" and "connection was interrupted" collapse into one message. → "Połączenie zostało zresetowane".unknowncontenttype-intro(toolkit/toolkit/global/unknownContentType.ftl) — "Rozpoczęto pobieranie pliku:" for "You have chosen to open:". Nothing has been downloaded yet; it also contradicts the "Czy zapisać ten plik?" prompt below. → "Wybrano otwarcie pliku:".profile-creation-intro(toolkit/toolkit/global/createProfileWizard.ftl) — invents a constraint absent from the source. Current: "Tworzony profil musi mieć nazwę różną od już istniejących profili…" → Suggest: "Jeśli utworzysz kilka profili, możesz je rozróżniać po nazwach. Użyj podanej nazwy lub wprowadź własną."pictureinpicture-unpip-btn(toolkit/toolkit/pictureinpicture/pictureinpicture.ftl) — "Wyłącz „Obraz w obrazie”" for Send back to tab / Back to tab; the button returns the video to its tab, it does not turn the feature off. The two distinct source values are also collapsed. →.aria-label = Odeślij z powrotem do karty,.tooltip = Z powrotem do karty.experimental-features-newtab-widget-timer-description(toolkit/toolkit/firefoxlabs/features.ftl) — "przypomni o konieczności naładowania baterii" for "remind you to recharge", which refers to the user taking a break. → "…przypomni Ci o odpoczynku." Same text repeated inexperimental-features-newtab-widget-lists-and-timer-description.crashed-send-report-2(browser/browser/aboutTabCrashed.ftl) — turns a one-off action into a recurring setting, colliding with the actual auto-submit checkbox below. Current: "Automatycznie przesyłaj zgłoszenia awarii…" → Suggest: "Wyślij automatyczne zgłoszenie awarii, abyśmy mogli naprawiać takie problemy".urlbar-serial-notification-anchor(browser/browser/browser.ftl) —.tooltiptext= "Wyświetl urządzenia podłączone przez port szeregowy" for "Open Serial panel"; this anchor opens the permission panel and breaks the pattern of its sibling anchors. → "Otwórz panel portu szeregowego".backup-file-intro(browser/browser/backupSettings.ftl) — lists the wrong data category: "zakładki, hasła i pozostałe dane" for "bookmarks, history, and other data".settings-data-backup-header2in the same file has it right. → "zakładki, historię i pozostałe dane".firefoxview-recentlyclosed-empty-header(browser/browser/firefoxView.ftl) — reverses the agent: "Karta zamknęła się za wcześnie?" for "Closed a tab too soon?". → "Za szybko zamknięta karta?"main-context-menu-send-to-device/main-context-menu-link-send-to-device(browser/browser/browserContext.ftl) — dangling preposition: "Wyślij stronę do" / "Wyślij odnośnik do". → "Wyślij stronę na urządzenie" / "Wyślij odnośnik na urządzenie" (cf.main-context-menu-send-to-device-2).custom-avatar-crop-view(browser/browser/profiles.ftl) —.aria-label= "Przytnij widoczny obraz" reads as an instruction; "Crop image view" names the view. → "Widok przycinania obrazu".mobile-app-title(browser/browser/protections.ftl) — "na wszystkich urządzeniach" overstates "across more devices". → "na większej liczbie urządzeń".report-broken-site-panel-reason-checkoutand…-checkout-moz-box-button(browser/browser/reportBrokenSite.ftl) — "pay" and "check out" rendered as two synonyms. Current: "Nie można zapłacić, dokonać płatności ani zrobić zakupów" → Suggest: "Nie można zapłacić, sfinalizować zamówienia ani zrobić zakupów".fxa-qrcode-pair-step1(browser/browser/preferences/fxaPairDevice.ftl) — narrows "mobile device" to "telefon", contradicting the dialog title (fxa-qrcode-pair-title= "…na telefonie lub tablecie"). → "…na urządzeniu mobilnym."newtab-widget-timer-reset(browser/browser/newtab/newtab.ftl) —.title= "Przywróć" (= Restore) for a timer "Reset". → "Wyzeruj".autofill-card-network(browser/browser/preferences/formAutofill.ftl) — "Wystawca karty" (= card issuer, i.e. the bank) for "Card Type"; the values listed underautofill-card-network-*are networks (Visa, Mastercard…). → "Typ karty" / "Rodzaj karty".space-alert-over-5gb-message2(browser/browser/preferences/preferences.ftl) — "Przechowywane dane może wyczyścić w Ustawienia → …" → "Przechowywane dane można wyczyścić w Ustawieniach → …".more-from-moz-solo-title(browser/browser/preferences/moreFromMozilla.ftl) — drops the "AI" qualifier present in en-US ("{ -solo-ai-brand-name } AI") and in the siblingmore-from-moz-solo-title-2("Kreator SI stron internetowych…").
about-networking-networkid-status-known(toolkit/toolkit/about/aboutNetworking.ftl) — meaning reversed. "Stan łącza jest nieznany" for "Link status is known". It sits next toabout-networking-networkid-is-up= "Łącze jest aktywne"; both are meant to be positive. → "Stan łącza jest znany".about-webrtc-aec-logging-msg-label,-off-state-label,-on-state-label,-on-state-msg,-toggled-on-state-msg(toolkit/toolkit/about/aboutWebrtc.ftl) — the group comment says "AEC is an abbreviation for Acoustic Echo Cancellation", but pl renders it as redukcja szumów otoczenia (ambient-noise reduction), a different feature.about-webrtc-aec-logging-unavailable-sandboxin the same file already keeps "AEC", so the file is internally inconsistent. → "…usuwania echa akustycznego (AEC)".place-database-last-vacuum-date(toolkit/toolkit/about/aboutSupport.ftl) — "Data ostatniego odkurzania". The dev comment warns "Vacuum refers to a type of database maintenance process". → "Data ostatniej operacji VACUUM" / "Data ostatniego oczyszczania bazy".media-video-robustness/media-audio-robustness(toolkit/toolkit/about/aboutSupport.ftl) — "Siła wideo" / "Siła dźwięku". EME robustness is the CDM security level. → "Poziom zabezpieczeń wideo" / "Poziom zabezpieczeń dźwięku".certificate-viewer-modulus(toolkit/toolkit/about/certviewer.ftl) — "Modulo" (the arithmetic operation) for the RSA modulus. → "Moduł".certificate-viewer-locality/certificate-viewer-inc-locality(toolkit/toolkit/about/certviewer.ftl) — "Region" / "Region założenia" for X.509L=(city/town), which also blurs the line withcertificate-viewer-state-province= "Województwo". → "Miejscowość" / "Miejscowość założenia".abuse-report-unwanted-reason-v2(toolkit/toolkit/about/abuseReports.ftl) — "Samo się zainstalowało i nie wiem, jak je usunąć" for "I never wanted it and don't know how to get rid of it"; the self-installation claim duplicatesabuse-report-unwanted-example. → "Nigdy tego nie chciałem(-am) i nie wiem, jak to usunąć".shortcuts-invalid(toolkit/toolkit/about/aboutAddons.ftl) — "Nieprawidłowe połączenie" (reads as connection) for "Invalid combination". → "Nieprawidłowa kombinacja".about-glean-metrics-table-settings-timelines-vertical-line-y-offset(toolkit/toolkit/about/aboutGlean.ftl) — "Przesunięcie osi Y względem osi Y" is self-referential and meaningless. → "Pionowe przesunięcie osi Y".about-glean-metrics-table-settings-timelines-vertical-line-x-offset(toolkit/toolkit/about/aboutGlean.ftl) — relation inverted: it is the X offset of the Y axis. Current: "Przesunięcie osi X względem osi Y" → Suggest: "Poziome przesunięcie osi Y".third-party-message-no-duration(toolkit/toolkit/about/aboutThirdParty.ftl) — "Nie nagrano" (audio/video sense) for "Not recorded". → "Nie zarejestrowano".url-classifier-provider-back-off-time(toolkit/toolkit/about/url-classifier.ftl) — "Wycofano" reads as a status in a column of timestamps. → "Czas wycofania".about-webauthn-auth-info-max-rpids-for-set-min-pin-length(toolkit/toolkit/about/aboutWebauthn.ftl) — "Maksymalne identyfikatory…" for a count. → "Maksymalna liczba identyfikatorów stron zależnych…" (cf.about-webauthn-auth-info-max-credential-count-in-list).rights-webservices-term-5(toolkit/toolkit/about/aboutRights.ftl) — the damages enumeration lists "wyjątkowe" twice and includes the unfinished-looking "będące skutkiem czegoś" for "indirect, special, incidental, consequential, punitive, or exemplary". Needs a rewrite of the list.
csp-error-illegal-host-wildcard(toolkit/toolkit/global/cspErrors.ftl) — "nieogólną domenę" for "non-generic sub-domain"; the sub-domain level is the whole point (*.example.comvs*.com). → "nieogólną poddomenę".process-type-utility-actor-windows-file-dialog(toolkit/toolkit/global/processTypes.ftl) — narrows "Windows File Dialog" (open and save) to opening. Current: "Narzędziowy okna otwierania pliku w systemie Windows" → Suggest: "Narzędziowy okna dialogowego plików systemu Windows".popup-notification-more-actions-button(toolkit/toolkit/global/popupnotification.ftl) —.aria-label= "Więcej interakcji" for "More actions". → "Więcej działań".elevation-finished-background-page(toolkit/toolkit/updates/elevation.ftl) — "ważną aktualizację" loses the characterization that is the point of the notice ("A security and stability update"). → "Pobrano aktualizację zabezpieczeń i stabilności programu { -brand-short-name(case: "gen") }. Jest gotowa do zainstalowania."experimental-features-cookie-samesite-none-requires-secure2(+…-description) (toolkit/toolkit/featuregates/features.ftl) — "wymaga atrybutu bezpieczeństwa"; the source means the literalSecurecookie attribute. → "wymaga atrybutu Secure".perftools-thread-timer(devtools/client/perftools.ftl) — head noun inverted: "Minutniki obsługi wątków" for "The thread handling timers". → "Wątek obsługujący minutniki (setTimeout, setInterval, nsITimer)".whypaused-assert(devtools/shared/debugger-paused-reasons.ftl) — "Wstrzymane na warunku" for "Paused on assertion"; warunek is a different debugger concept already used bywhypaused-breakpoint-condition-thrown. → "Wstrzymane na asercji".inactive-css-property-because-of-display(devtools/client/tooltips.ftl) — "ponieważ wyświetla{ $display }" for "since it has a display of…". → "ponieważ jego własnośćdisplayma wartość{ $display }".css-compatibility-deprecated-message(+-supported-,-experimental-,-experimental-supported-variants) (devtools/client/tooltips.ftl) — "została zastąpiona standardami W3C" for "is deprecated by W3C standards". → "została uznana za przestarzałą w standardach W3C".network-menu-summary-finish(devtools/client/netmonitor.ftl) — the label text is dropped, leaving a bare number. Current: "{ $formattedTime }" → Suggest: "Ukończono: { $formattedTime }" (cf.network-menu-summary-transferred, which keeps "Przesłano:").exception-mgr-supplemental-warning(security/manager/security/certificates/certManager.ftl) — "stores" dropped and the factual "will not ask you to do this" weakened to a deontic "nie powinny", which blunts the warning. Current: "Godne zaufania witryny, banki i inne witryny publiczne nie powinny tego żądać." → Suggest: "Wiarygodne banki, sklepy i inne witryny publiczne nie będą o to prosić."network-connection-status-looked-up(netwerk/netwerk/necko.ftl) — breaks the Looking up / Looked up pair (rendered "Ustalanie adresu serwera" / "Odnaleziono"). → "Ustalono adres serwera { $host }…".config-new-pref-value-integer(mobile/android/mobile/android/aboutConfig.ftl) — "Liczba" for the specificIntegerpref type; also collides withconfig-new-pref-number("Wprowadź liczbę"). → "Liczba całkowita".
language-name-mh(toolkit/toolkit/intl/languageNames.ftl) — "Marshall" names the islands, not the language. → "Marszalski".language-name-na(toolkit/toolkit/intl/languageNames.ftl) — "Nauru" is the country; neighbouring Pacific languages in the same file are adjectivised (Samoański, Tongański, Fidżyjski). → "Nauruański".language-name-ii(toolkit/toolkit/intl/languageNames.ftl) — "Syczuański" alone denotes Sichuanese Mandarin, a different language; the Yi/Nuosu qualifier identifies this entry. → "Yi syczuański".language-name-rw(toolkit/toolkit/intl/languageNames.ftl) — "Kinya-ruanda" uses the obsolete Polish spelling of Rwanda. → "Kinyarwanda".language-name-mr(toolkit/toolkit/intl/languageNames.ftl) — "Marathijski" is non-standard; Polish uses the invariant form. → "Marathi".language-name-meh,language-name-mix,language-name-zam(toolkit/toolkit/intl/languageNames.ftl) — the same Mesoamerican family term is handled three ways ("Południowo-zachodni Tlaxiaco Mixtec" / "Mixtepec Mixtec" / "Zapotecki Miahuatlán"): Mixtec is left in English in two entries while Zapotec is polonised in the third, and English modifier-noun order is kept. → one pattern, e.g. "Mikstecki z południowo-zachodniego Tlaxiaco" / "Mikstecki z Mixtepec" / "Zapotecki z Miahuatlán".region-name-fm(toolkit/toolkit/intl/regionNames.ftl) — the country name appears twice: "Mikronezja, Sfederowane Stany Mikronezji". → "Mikronezja, Sfederowane Stany".region-name-nlandregion-name-bq-2018(toolkit/toolkit/intl/regionNames.ftl) — judgment call. "Holandia" / "Holandia Karaibska"; the official Polish names per KSNG are "Niderlandy" / "Niderlandy Karaibskie". "Holandia" remains the dominant colloquial form, so this is a policy decision rather than an outright error.policy-ShowHomeButton(browser/browser/policies/policies-descriptions.ftl) — "przycisku strony domowej"; the product uses strona startowa everywhere else (includingpolicy-Homepagein the same file). "Strona domowa" is reserved for add-on homepages inaboutAddons.ftl. → "przycisku strony startowej".
regionNames.ftl is otherwise in very good shape — all renamed states are current (Czechy, Macedonia Północna, Eswatini, Sudan Południowy, Timor Wschodni), and "Turcja"/"Birma" correctly mirror en-US "Turkey"/"Burma".
See also S1–S3 above.
genai-settings-chat-lechat-links(browser/browser/genai.ftl) — "Mistral AI" is a company name and should not be translated. Current: "…zasady ochrony prywatności sztucznej inteligencji Mistral." → Suggest: "…zasady ochrony prywatności Mistral AI." (the sibling strings correctly keep OpenAI, Microsoft, Anthropic).cert-error-trust-symantecandcert-error-symantec-distrust-description(toolkit/toolkit/neterror/certError.ftl) — brand miscapitalised: "Verisign" → "VeriSign".unified-extensions-empty-reason-zero-extensions-onboarding(browser/browser/unifiedExtensions.ftl) — the dev comment states "Level up" means enhancing the browsing experience. Current: "Podnieś poziom przeglądarki za pomocą rozszerzeń" → Suggest: "Podnieś poziom przeglądania za pomocą rozszerzeń".newtab-widget-lists-empty-cta(browser/browser/newtab/newtab.ftl) — the dev comment says "Add one" refers to adding a task. Current: "Możliwości są nieograniczone. Dodaj jedną." reads as "add one possibility". → "…Dodaj pozycję."xslt-load-recursion(dom/dom/xslt.ftl) — the source ends with a colon because the offending stylesheet URI is appended; pl ends with a period, so the URI will follow a sentence-final dot. Siblingsxslt-network-error,xslt-wrong-mime-typekeep the colon. → end with ":".console-stacktrace-anonymous-function(mobile/android/mobile/android/geckoViewConsole.ftl) —<anonymous>translated to<anonimowa>. This is a literal stack-trace marker; worth confirming whether it should stay English.
tab-groups-list-create-group-button(browser/browser/tabbrowser.ftl) — "Nowe grupa" (neuter adj. + feminine noun). → "Nowa grupa".tab-group-menu-closed-tab-group,tab-group-label-tooltip-collapsed,tab-group-label-tooltip-expanded(browser/browser/tabbrowser.ftl) — the adjective refers to grupa (fem.): "— zamknięte", "— zwinięte", "— rozwinięte". The paralleltabbrowser-manager-closed-tab-groupcorrectly uses "— zamknięta". → "— zamknięta", "— zwinięta", "— rozwinięta".unified-extensions-mb-blocklist-warning-multiple2(browser/browser/unifiedExtensions.ftl) — subject is "Część" (fem. sg.) and the two predicates also disagree with each other. Current: "Część zainstalowanych rozszerzeń jest objętych ograniczeniami i zostały wyłączone." → Suggest: "Część zainstalowanych rozszerzeń jest objęta ograniczeniami i została wyłączona."unified-extensions-mb-blocklist-warning-multipleandunified-extensions-mb-blocklist-error-multiple(browser/browser/unifiedExtensions.ftl) — "Część zainstalowanych rozszerzeń zostało wyłączonych…" → "…została wyłączona…".safeb-blocked-unwanted-page-short-desc(browser/browser/safebrowsing/blockedSite.ftl) — "ponieważ może one próbować" with a feminine singular subject ("ta strona"); the parallel malware/harmful strings use "może ona". → "ponieważ może ona próbować".cfr-doorhanger-extension-total-users(browser/browser/newtab/asrouter.ftl) —[few]= "{ $total } użytkowników"; 2/3/4 take the nominative plural. →[few]= "{ $total } użytkownicy" (the adjacentcfr-doorhanger-extension-ratinghandles this correctly).newtab-sports-widget-loading-moreandnewtab-sports-widget-pagination-dot(browser/browser/newtab/newtab.ftl) — non-standard genitive plural "meczy". → "meczów".eme-notifications-drm-content-playing(browser/browser/browser.ftl) — alternative subjects joined by "lub" take a singular predicate. Current: "Dźwięk lub obraz na tej stronie używają oprogramowania DRM…" → Suggest: "…używa oprogramowania DRM…".bookmarks-menu-button(browser/browser/browser.ftl) —.label= "Menu zakładki" reads as "menu of a bookmark". → "Menu Zakładki" (cf.bookmarks-tools-menu-button-visibility) or "Menu zakładek".permanent-override/temporary-override(security/manager/security/certificates/deviceManager.ftlcolumn values,certManager.ftl) — the two values of one column mix an adverbial phrase and an adjective: "Na stałe" / "Tymczasowy". → "Stały" / "Tymczasowy" (both agreeing with wyjątek).certerror-mitm-what-can-you-do-about-it-antivirus(toolkit/toolkit/neterror/netError.ftl) — subject in the wrong case: "Jeśli oprogramowania antywirusowe zawiera…" → "Jeśli oprogramowanie antywirusowe zawiera…".
shopping-avatar-tooltip(browser/browser/profiles.ftl) — "Użyj" requires the genitive: "Użyj wózku sklepowego" → "Użyj wózka sklepowego" (all sibling avatar tooltips use the genitive correctly).places-forget-about-this-site-confirmation-msg(browser/browser/places.ftl) — after "usunięcie danych …, w tym …" the enumeration must stay genitive. Current: "…, w tym historię, ciasteczka, pamięć podręczną i preferencje dotyczące treści." → Suggest: "…, w tym historii, ciasteczek, pamięci podręcznej i preferencji dotyczących treści."preonboarding-checklist-interaction-data-description(browser/browser/preonboarding.ftl) — parallel members of "Informacje o …" must all be locative: "…konfiguracji sprzętowej i sposobu korzystania…" → "…i sposobie korzystania…".identity-credential-policy-title(browser/browser/identityCredentialNotification.ftl) — "jako" agrees with its referent, and "używać" governs the genitive. Current: "Używaj konta { $provider } jako dostawcę logowania" → Suggest: "…jako dostawcy logowania".default-browser-guidance-notification-title,default-browser-guidance-notification-v2-title,default-browser-guidance-notification-v2-title-only(browser/browser/defaultBrowserNotification.ftl) — same "jako" agreement problem with a genitive referent. → "…jako domyślnej przeglądarki".toolbar-button-logins(browser/browser/browser.ftl) — "wyświetlić" takes the accusative, "zarządzać" the instrumental; one shared object is ungrammatical. Current:.tooltiptext = Wyświetl i zarządzaj zachowanymi hasłami→ Suggest: "Wyświetl zachowane hasła i zarządzaj nimi".newtab-topic-selection-privacy-link(browser/browser/newtab/newtab.ftl) — same defect. Current: "Dowiedz się, jak chronimy i zarządzamy danymi" → Suggest: "Dowiedz się, jak chronimy dane i jak nimi zarządzamy".refresh-blocked-refresh-labelandrefresh-blocked-redirect-label(browser/browser/browser.ftl) — "uniemożliwić" takes a noun phrase, not an infinitive. Current: "…uniemożliwił tej stronie automatycznie odświeżyć stronę." / "…automatycznie przekierować…" → Suggest: "…uniemożliwił automatyczne odświeżenie tej strony." / "…uniemożliwił tej stronie automatyczne przekierowanie do innej strony."tabbrowser-allow-dialogs-to-get-focus(browser/browser/tabbrowser.ftl) — "zezwalać komuś na coś", not "zezwalać komuś robić coś". Current: "Zezwalaj powiadomieniom … przełączać na kartę…" → Suggest: "…na przełączanie na kartę…".content-sharing-modal-description-2/content-sharing-modal-description-signed-in(browser/browser/contentSharing.ftl) — mixed aspect in a coordinated pair. Current: "Nie można jej zmieniać ani usunąć…" → Suggest: "…zmieniać ani usuwać…".update-setting-write-failure-message2(browser/browser/preferences/preferences.ftl) — "może móc" is not valid Polish (calque of "may be able to"). → "Ty lub administrator komputera może rozwiązać ten błąd, udzielając grupie „Użytkownicy” pełnej kontroli nad tym plikiem."preferences-web-appearance-link(browser/browser/preferences/preferences.ftl) — UI section name left in the nominative after "w". Current: "…w Rozszerzenia i motywy" → Suggest: "…w sekcji „Rozszerzenia i motywy”" (cf.extension-controlled-enable, which uses "przejdź do sekcji …").webrtc-reason-for-no-permanent-allow-screen/webrtc-reason-for-no-permanent-allow-audio(browser/browser/webrtcIndicator.ftl) — source is present tense. Current: "{ -brand-short-name } nie mógł zezwolić…" → Suggest: "…nie może zezwolić…".restore-from-backup-title(browser/browser/newtab/onboarding.ftl) — the relative pronoun takes the case governed by its own clause. Current: "…takiego, jak lubisz" → Suggest: "…takiego, jakiego lubisz".neterror-clock-skew-error(toolkit/toolkit/neterror/netError.ftl) — wrong case on the verbal noun after "uniemożliwia": "…nawiązania bezpiecznego połączenia." → "…nawiązanie bezpiecznego połączenia." (cf.certerror-expired-cert-second-para).protected-auth-prompt/protected-auth-alert(security/manager/security/pippki/pippki.ftl) — "uwierzytelnić się" governs "w" + locative. Current: "Proszę uwierzytelnić się do urządzenia zabezpieczającego…" / "…do tokenu „{ $tokenName }”." → Suggest: "…w urządzeniu zabezpieczającym ({ $tokenName })." / "…w tokenie „{ $tokenName }”."load-device-info(security/manager/security/certificates/deviceManager.ftl) — "informacje dla modułu" means information addressed to the module. → "informacje o module".inactive-css-not-display-block-on-floatedand-2(devtools/client/tooltips.ftl) — "element tofloated" is a word-for-word calque and not grammatical Polish ("floated" is an English adjective here, not a CSS keyword). → "…ponieważ element jest przestawiony (float)."printui-margins-none(toolkit/toolkit/printing/printUI.ftl) — "Bez" is a dangling preposition as a standalone dropdown option; the siblings are adjectives (Domyślne, Minimalne, Niestandardowe). → "Brak".printpreview-custom(toolkit/toolkit/printing/printPreview.ftl) — "Użytkownika…" as a dangling genitive for "Custom…". → "Własny…" (ashf-customalready does).options-disable-http-cache-label(devtools/client/toolbox-options.ftl) — the participle of "otworzyć" is "otwarty". Current: "(gdy otworzone są narzędzia)" → Suggest: "(gdy narzędzia są otwarte)" (cf.options-enable-service-workers-http-labelin the same file).policy-DisableRemoteImprovements(browser/browser/policies/policies-descriptions.ftl) — "zastosowywania" is not a valid verbal noun. → "stosowania".
toolbar-button-email-linkandtoolbar-button-save-page(browser/browser/browser.ftl) — the.labelbegins with a SOFT HYPHEN (U+00AD). "Wyślij odnośnik", "Zapisz stronę". These are the only two U+00AD characters in the whole pl locale and serve no purpose before the first letter. → remove.collection-usage-ping(browser/browser/preferences/preferences.ftl) —.label= "Wysyłaj dzienny sygnału o użyciu…" (adjective/noun case clash). The newer duplicatedata-collection-usage-pingalready has "dzienny sygnał". → "Wysyłaj dzienny sygnał o użyciu do…".webext-perms-header-unsigned(toolkit/toolkit/global/extensions.ftl) — "Dodaj rozszerzanie jedynie…" (= expanding). Same typo inwebext-perms-header-unsigned-with-perms,webext-perms-list-intro-unsignedandwebext-site-perms-header-unsigned-with-perms. → "rozszerzenie".experimental-features-contextual-password-manager-description(toolkit/toolkit/firefoxlabs/features.ftl) — missing word: "dostęp do haseł prostu z panelu bocznego". → "…po prostu z panelu bocznego" (or "bezpośrednio z panelu bocznego").connection-proxy-noproxy-localhost-desc-2(browser/browser/preferences/connection.ftl) — "Połączania z localhost…" → "Połączenia z localhost…".crashed-include-URL-2(browser/browser/aboutTabCrashed.ftl) — "adresy otworzonych stron"; the participle of "otworzyć" is "otwarty" and every other string in the locale uses it. → "adresy otwartych stron".options-netmonitor-body-limit-tooltip(devtools/client/toolbox-options.ftl) — "będą skrócane" is not a Polish form; the imperfective participle is "skracane". → "będą skracane".styleeditor-pretty-print-button-disabled-read-only(devtools/client/styleeditor.ftl) — non-standard genitive plural "arkuszów"; the rest of the file uses "arkuszy". → "arkuszy stylów".screenshots-connection-error-title(browser/browser/screenshots.ftl) — the preposition must be "ze" before the zrz- cluster. Current: "połączyć się z zrzutami ekranu" → Suggest: "połączyć się ze zrzutami ekranu".mozilla-pkix-error-invalid-integer-encoding(toolkit/toolkit/neterror/nsserrors.ftl) andcert-error-invalid-integer-encoding(toolkit/toolkit/neterror/certError.ftl) — "ujemne moduli RSA" leaves the English plural of modulus. → "ujemne moduły RSA".autofill-insecure-field-warning-description(toolkit/toolkit/formautofill/formAutofill.ftl) — missing sentence-final period after "…wypełnianie formularzy".no-config-label(toolkit/crashreporter/aboutcrashes.ftl) — missing sentence-final period after<code>breakpad.reportURL</code>.qrcode-copy-success(browser/browser/browser.ftl) —.messagemissing a sentence-final period, unlikeqrcode-panel-errorandqrcode-copy-error.no-page-title(browser/browser/pageInfo.ftl) —.value= "Strona bez nazwy" drops the trailing colon that the source and every sibling.valuelabel in the dialog have. → "Strona bez nazwy:".certmgr-begins-label(security/manager/security/certificates/certManager.ftl) — stray trailing colon on a tree column header:.label = "Ważny od dnia:"; the pairedcertmgr-expires-labelhas none. → "Ważny od dnia".create-backup-screen-1-title(browser/browser/newtab/onboarding.ftl) — trailing space at the end of the first line of the multiline value ("Aktualizujesz system do Windows 11? "); Fluent preserves it. Same inpsmerr-hostreusedissuerandserial(toolkit/toolkit/neterror/nsserrors.ftl), where en-US has no trailing space.safeb-blocked-phishing-page-error-desc-no-override(browser/browser/safebrowsing/blockedSite.ftl) — stranded noun: "została zgłoszona jako strona <a …>próba oszustwa". The-overridevariant is already correct. → "…została zgłoszona jako <a …>próba oszustwa."safeb-blocked-phishing-page-learn-more(browser/browser/safebrowsing/blockedSite.ftl) — participle in the wrong case: "o stronach będącymi próbami oszustwa" → "o stronach będących próbami oszustwa".
open-desktop-prefs(browser/browser/setDesktopBackground.ftl) — "Otwórz preferencje biurka" (a physical desk); the same file uses "pulpit" everywhere else. → "Otwórz preferencje pulpitu".about-telemetry-keyed-scalar-section(toolkit/toolkit/about/aboutTelemetry.ftl) — left in English ("Keyed scalars") whileabout-telemetry-scalar-section= "Skalary" andabout-telemetry-keyed-histogram-section= "Indeksowane histogramy". → "Indeksowane skalary".enableSafeBrowsing-label(toolkit/toolkit/about/aboutRights.ftl) — quotes a preferences label verbatim, but with different wording: "Blokowanie niebezpiecznych i podejrzanych treści." vs the actualsecurity-enable-safe-browsing= "Blokuj niebezpieczne i podejrzane treści."site-data-removing-table(browser/browser/preferences/siteDataSettings.ftl) — redundant double possessive: "dane stron następujących witryn"; the file consistently uses "dane witryn". → "Ciasteczka i dane następujących witryn zostaną usunięte:".tabmodalprompt-username(toolkit/toolkit/global/tabprompts.ftl) —.value = "Użytkownik:"; the identical field incommon-dialog-usernameis "Nazwa użytkownika". → "Nazwa użytkownika:".webext-perms-extra-warning-userScripts-long(toolkit/toolkit/global/extensionPermissions.ftl) — uses "działania użytkownika w Internecie", which this file reserves for browsing activity; the source here says website activity. → "działania użytkownika na witrynach".unable-to-toggle-fips(security/manager/security/certificates/deviceManager.ftl) — the only occurrence of "urządzenie bezpieczeństwa" in the locale; everything else, includingfips-nonempty-primary-password-requiredtwo entries above, says "urządzenie zabezpieczające".pkcs12-unknown-err-restore,pkcs12-unknown-err-backup(security/manager/security/certificates/certManager.ftl),set-password-window,set-password-backup-pw,set-password-repeat-backup-pw(security/manager/security/pippki/pippki.ftl) — "kopia bezpieczeństwa" (6 occurrences, all here) vs "kopia zapasowa" (79 elsewhere, includingcertmgr-backupin the same dialog). → standardize on "kopia zapasowa".add-exception-domain-mismatch-long,add-exception-expired-long(security/manager/security/certificates/certManager.ftl) — end with "podszywanie się pod stronę" while the first half of the same sentence, and the whole locale, use witryna. → "…pod tę witrynę".pkcs12-info-no-smartcard-backup(security/manager/security/certificates/certManager.ftl) — "inteligentna karta"; the established Polish term is "karta inteligentna".download-cert-message+download-cert-trust-ssl/download-cert-trust-email/download-cert-view-text(security/manager/security/pippki/pippki.ftl) — the source introduces the abbreviation ("a new Certificate Authority (CA)") so the following labels can say "this CA". pl drops "(CA)" from the intro but still uses the bare abbreviation afterwards. → add "(CA)" to the intro, or replace "temu CA" with "temu organowi".accessibility-best-practices(devtools/client/accessibility.ftl) —.alt = "Dobre wzory"(patterns/templates) for "Best Practices". → "Dobre praktyki".storage-add-button(devtools/client/storage.ftl) — "Item" is "obiekt" here and instorage-context-menu-add-item/storage-refresh-button, but "element" instorage-search-box; "obiekt" also collides with the JS sense of object.media-count(browser/browser/pageInfo.ftl) —.label = "Ilość"for a count of discrete items; the locale uses "Liczba" elsewhere (processes-count,place-database-stats-count, "Liczba wizyt" inplaces.ftl). → "Liczba".newtab-sports-widget-round-32/newtab-sports-widget-round-16(browser/browser/newtab/newtab.ftl) — "Pierwsza runda" / "Druga runda" for "Round of 32" / "Round of 16"; Polish football usage names these by fraction, and the current wording is ambiguous against the preceding group stage. → "1/16 finału" / "1/8 finału".sidebar-close-button(browser/browser/sidebarMenu.ftl) —.tooltiptext = "Zamyka panel boczny"(3rd-person descriptive) while every other sidebar tooltip/label is imperative. → "Zamknij panel boczny".
Missing comma before a subordinate clause (Polish requires it; each is a concrete, mechanical fix):
about-private-browsing-felt-privacy-v1-info-link,about-private-browsing-nova-info-link(browser/browser/aboutPrivateBrowsing.ftl) — "Kto może zobaczyć co robię?" → "Kto może zobaczyć**,** co robię?"windows-10-eos-feature-toast-whats-new-button(browser/browser/newtab/asrouter.ftl),mr2022-onboarding-gratitude-primary-button-label(browser/browser/newtab/onboarding.ftl) — "Zobacz co nowego" → "Zobacz, co nowego" (cf.windows-10-eos-sync-callout-privacy-info-button, which is correct).fxa-menu-sync-description(browser/browser/sync.ftl) — "Korzystaj ze swojej sieci gdziekolwiek jesteś" → "…sieci, gdziekolwiek jesteś".mr2022-onboarding-welcome-pin-subtitle,mr2022-onboarding-existing-pin-subtitle(browser/browser/newtab/onboarding.ftl) — "…gdziekolwiek jesteś jednym kliknięciem." → "…jednym kliknięciem, gdziekolwiek jesteś."mr2022-onboarding-colorway-description-activist(browser/browser/newtab/onboarding.ftl) — "lepszym miejscem niż go zastałaś" → "lepszym miejscem**,** niż go zastałaś".preferences-etp-level-warning-message(browser/browser/preferences/preferences.ftl) —.heading"…mogą nie działać jak powinny." → "…mogą nie działać**,** jak powinny."webext-perms-sideload-text(toolkit/toolkit/global/extensions.ftl) — "Przejrzyj jakich wymaga uprawnień i zdecyduj…" → "Przejrzyj, jakich wymaga uprawnień, i zdecyduj…"webext-perms-update-text2/webext-perms-update-text(toolkit/toolkit/global/extensions.ftl) — "zaakceptowane zanim uaktualniona wersja…" → "zaakceptowane**,** zanim…"webauthn-select-sign-result-prompt(toolkit/toolkit/webauthnDialog.ftl) — comma in the wrong place: "Wybierz którego użyć, lub anuluj." → "Wybierz, którego użyć, lub anuluj."
Unclosed embedded relative clause (needs the closing comma):
restore-page-try-this(browser/browser/aboutSessionRestore.ftl) — "…te, których nie potrzeba przywracać i wybierz „Przywróć”." → "…przywracać**,** i wybierz…"genai-shortcuts-selected-warning,genai-shortcuts-selected-warning-generic(browser/browser/genai.ftl, all plural variants) — "…wysłać do { $provider } to około…" → "…do { $provider }, to około…"ipprotection-feature-introduction-link-text-privacy-1,-privacy-2(browser/browser/ipProtection.ftl) — "…miejsce, z którego przeglądasz było bardziej prywatne." → "…przeglądasz**,** było…"
Adverbial participle phrase not set off by a comma:
about-unloads-intro(browser/browser/aboutUnloads.ftl) — "…uśpienie karty klikając przycisk…" → "…uśpienie karty**,** klikając…"rosetta-translated-message(toolkit/toolkit/global/rosettaNotification.ftl) — "działa korzystając z oprogramowania Rosetta…" → "działa**,** korzystając…"elevation-more-elevated(toolkit/toolkit/updates/elevation.ftl) — "kontynuuj pracę uruchamiając ponownie później lub…" → "kontynuuj pracę**,** uruchamiając ponownie później**,** lub…"autofill-use-payment-method-os-prompt-windows,autofill-edit-payment-method-os-prompt-windows(toolkit/toolkit/formautofill/formAutofill.ftl) — "Potwierdź poniżej używając konta Windows." → "Potwierdź poniżej**,** używając…"
Spurious comma (Polish takes none here):
browser-languages-description(browser/browser/preferences/languages.ftl) — "W razie potrzeby, następne języki…" → "W razie potrzeby następne języki…"options-source-maps-tooltip(devtools/client/toolbox-options.ftl) — "Po włączeniu tej funkcji**,** źródła będą mapowane…" → remove the comma.profile-creation-explanation-3(toolkit/toolkit/global/createProfileWizard.ftl) — "Na przykład, możesz mieć…" → "Na przykład możesz mieć…"appmenuitem-fxa-sync-off-description(browser/browser/appmenu.ftl) — no comma before a single "oraz": "…i inne dane**,** oraz miej…" → "…i inne dane oraz miej…"error-long-desc1(browser/browser/aboutRobots.ftl) — no comma before a single (non-repeated) "ani": "…skrzywdzić człowieka**,** ani przez zaniechanie…" → remove the comma.newtab-privacy-modal-paragraph-2(browser/browser/newtab/newtab.ftl) — comma before "i" copied from the English source: "…my jej nie widzimy**,** i nasi sponsorzy też nie." → remove the comma.
Other:
create-backup-screen-1-subtitle(browser/browser/newtab/onboarding.ftl) — hyphen used for a numeric range: "w ciągu 1-2 minut" → "w ciągu 1–2 minut" (en dash, as in the source).password-manager-update-password-message(toolkit/toolkit/passwordmgr/passwordmgr.ftl) — "hasło dla { $host }?" without quotes, while the siblingpassword-manager-save-password-messagein the same doorhanger uses „{ $host }”.plugins-openh264-description(toolkit/toolkit/about/aboutPlugins.ftlandtoolkit/toolkit/about/aboutAddons.ftl) — stale URL "http://www.openh264.org"; the source uses "https://www.openh264.org/".
| Area | Findings |
|---|---|
browser/browser/*.ftl (a–l) |
28 |
browser/browser/*.ftl (m–z) |
21 |
browser/browser/preferences/ |
11 |
browser/browser/newtab/ + policies/ + safebrowsing/ |
21 |
toolkit/toolkit/about/ |
19 |
toolkit/ (excl. about/) |
33 |
devtools/ |
12 |
dom/ + security/ + netwerk/ + mobile/ |
13 |
| Automated-only (plural gaps, selectors, trailing space) | 11 |
| Total enumerated | ≈169 |
| Systemic decisions (S1–S6) | 6 |
certificate-viewer-tab-unkonwn(toolkit/toolkit/about/certviewer.ftl) — misspelled string ID ("unkonwn"); present in en-US too.content-sharing-modal-more-tabs,about-logins-import-dialog-items-*and several other{ $count -> *[other] … }messages have no plural distinction in en-US either; the Polish single-variant rendering is a faithful mirror, and the affected strings show the count in a separate span, so no Polish plural is required.- The pl-only grammatical-case parameters on brand terms (
{ -brand-short-name(case: "gen") },nom/gen/dat/acc/ins/loc) and the platform selectors (macos/windows/linux) are correct Fluent and correct practice — they are not defects despite showing up in naive category checks.
Report generated from an automated + manual review pass. No files were modified.