Skip to content

Instantly share code, notes, and snippets.

@flodolo
Created August 6, 2026 06:07
Show Gist options
  • Select an option

  • Save flodolo/4d0502249a24d6415f00e0b8a8a4e582 to your computer and use it in GitHub Desktop.

Select an option

Save flodolo/4d0502249a24d6415f00e0b8a8a4e582 to your computer and use it in GitHub Desktop.
Polish Firefox localization QA (via LLM)

Firefox Polish (pl) localization review

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.


1. Health check

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.


2. Systemic items (decisions, not line items)

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.


3. A — Functional / markup

  • 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. $tabCount is 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 $numBreaches to $numBreachesResolved. That is defensible for Polish agreement, but the [one] variant then also drops the z { $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. Add one/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-message and popup-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 sibling state-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". $host is 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.

4. B — Mistranslation / wrong sense

browser/

  • window-minimize-command (browser/browser/browserSets.ftl) — .label = "Miniaturka" (= thumbnail) for "Minimize". → "Minimalizuj" (the form used in browser.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 to main-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), duplicating newtab-wallpaper-dark-blue. → "Ciemnozielony".
  • user-context-color-purple (toolkit/toolkit/global/contextual-identity.ftl) — "Fioletowy", identical to user-context-color-violet; two container swatches become indistinguishable, notably for screen-reader users. → purple = "Purpurowy", keep violet = "Fioletowy".
  • netReset-title (toolkit/toolkit/neterror/certError.ftl) — "Przerwane połączenie", identical to netInterrupt-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 in experimental-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-header2 in 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-checkout and …-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 under autofill-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 sibling more-from-moz-solo-title-2 ("Kreator SI stron internetowych…").

toolkit/about/

  • about-networking-networkid-status-known (toolkit/toolkit/about/aboutNetworking.ftl) — meaning reversed. "Stan łącza jest nieznany" for "Link status is known". It sits next to about-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-sandbox in 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.509 L= (city/town), which also blurs the line with certificate-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 duplicates abuse-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.

toolkit/ (other), devtools/, dom/, security/, netwerk/

  • 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.com vs *.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 literal Secure cookie 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 by whypaused-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ść display ma 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 specific Integer pref type; also collides with config-new-pref-number ("Wprowadź liczbę"). → "Liczba całkowita".

5. C — Wrong language / region names

  • 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-nl and region-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 (including policy-Homepage in the same file). "Strona domowa" is reserved for add-on homepages in aboutAddons.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".


6. D — Brand / do-not-translate

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-symantec and cert-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. Siblings xslt-network-error, xslt-wrong-mime-type keep 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.

7. E — Gender / number / agreement

  • 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 parallel tabbrowser-manager-closed-tab-group correctly 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-multiple and unified-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 adjacent cfr-doorhanger-extension-rating handles this correctly).
  • newtab-sports-widget-loading-more and newtab-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.ftl column 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…".

8. F — Verb government / case / mood / prepositions

  • 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-label and refresh-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-floated and -2 (devtools/client/tooltips.ftl) — "element to floated" 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…" (as hf-custom already 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-label in the same file).
  • policy-DisableRemoteImprovements (browser/browser/policies/policies-descriptions.ftl) — "zastosowywania" is not a valid verbal noun. → "stosowania".

9. G — Spelling / typos / stray characters

  • toolbar-button-email-link and toolbar-button-save-page (browser/browser/browser.ftl) — the .label begins 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 duplicate data-collection-usage-ping already 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 in webext-perms-header-unsigned-with-perms, webext-perms-list-intro-unsigned and webext-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) and cert-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) — .message missing a sentence-final period, unlike qrcode-panel-error and qrcode-copy-error.
  • no-page-title (browser/browser/pageInfo.ftl) — .value = "Strona bez nazwy" drops the trailing colon that the source and every sibling .value label 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 paired certmgr-expires-label has 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 in psmerr-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 -override variant 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".

10. H — Terminology inconsistency

  • 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") while about-telemetry-scalar-section = "Skalary" and about-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 actual security-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 in common-dialog-username is "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, including fips-nonempty-primary-password-required two 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, including certmgr-backup in 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 in storage-context-menu-add-item / storage-refresh-button, but "element" in storage-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" in places.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".

11. I — Typography / punctuation

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 sibling password-manager-save-password-message in the same doorhanger uses „{ $host }”.
  • plugins-openh264-description (toolkit/toolkit/about/aboutPlugins.ftl and toolkit/toolkit/about/aboutAddons.ftl) — stale URL "http://www.openh264.org"; the source uses "https://www.openh264.org/".

12. Findings by area

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

13. Not the locale's fault

  • 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment