- Date: 2026-07-30
- Locale tree:
~/mozilla/git/firefox-l10n/tr@ commitb44618a6c48bcce20863f425fdd20e441dad9741 - en-US reference:
~/mozilla/git/firefox-quarantine@ commit80731a59444a4beee5113950b54f9dab5276afe5 - Scope: 240
.ftlfiles, ~13,850 translated patterns - Method: runbook
~/Desktop/firefox-l10n-review-runbook.md— Phase 1 automated (moz.l10nparser checks + hunspell against the locale's owntr.dic), Phase 2 eight parallel per-directory reviewers against en-US with developer comments.
All findings are keyed by string ID, never by line number.
| Check | Result |
|---|---|
Fluent syntax (l10n-lint) |
Clean — 0 parse errors |
| Variable / placeholder mismatches | 0 |
| Access keys not present in their label | 0 |
| Obsolete strings | 0 |
| Missing strings | 109 across 13 files |
| Files entirely missing | 1 — toolkit/toolkit/global/theme-picker.ftl |
tr is one of the healthiest locales reviewed so far: no functional breakage from the automated layer, and the completeness gap is small.
| File | Missing |
|---|---|
browser/browser/newtab/newtab.ftl |
27 |
toolkit/toolkit/about/url-classifier.ftl |
26 |
browser/browser/ipProtection.ftl |
12 |
browser/browser/firefoxView.ftl |
11 |
browser/browser/newtab/asrouter.ftl |
11 |
browser/browser/newtab/onboarding.ftl |
5 |
browser/browser/aiWindow.ftl |
4 |
browser/browser/appmenu.ftl |
3 |
browser/browser/aiFeatures.ftl |
3 |
browser/browser/menubar.ftl |
2 |
browser/browser/preferences/formAutofill.ftl |
2 |
toolkit/toolkit/about/aboutNetworking.ftl |
2 |
browser/browser/aboutPrivateBrowsing.ftl |
1 |
Counted over message values only (comments, .style, data-l10n-name attributes and markup excluded):
| Convention | Count | Verdict |
|---|---|---|
“…” (U+201C/U+201D) |
206 open / 181 close | established convention |
’ (U+2019) apostrophe |
564 | established convention |
straight ' in values |
17 | deviation → section I |
straight " in values |
2 (rest are HTML attributes) | deviation → section I |
… (U+2026) |
362 | established |
... (three dots) |
10 (all inside code/technical strings) | fine |
Register: the locale uses the formal/polite 2nd person plural (siz, -iniz) throughout. Deviations are enumerated in section F.
Suffixes on brand terms: the locale correctly attaches Turkish suffixes to term references. Where the term resolves to a common noun (-smart-window-brand-name = "Akıllı pencere", -fxaccount-brand-name = "Firefox Hesabı") suffixes are written without an apostrophe — that is correct Turkish and not a defect. Only genuine proper nouns (Firefox’u, Mozilla Vakfı’nın) need the apostrophe.
These are decisions, not N separate bugs. Affected IDs are listed so they can be fixed in one mechanical pass.
reader-view-enter-button.aria-label (browser/browser.ftl), menu-view-enter-readerview.label (browser/menubar.ftl), connection-dns-over-https-url-item-default.tooltiptext (browser/preferences/connection.ftl), policy-DisableSafeMode, policy-FirefoxHome2 (browser/policies/policies-descriptions.ftl), about-glean-label-for-tag-pings-with-requirements (toolkit/about/aboutGlean.ftl), profiles-opendir (toolkit/about/aboutProfiles.ftl), rights-intro-point-3, rights-intro-point-4, rights-webservices-term-1, rights-webservices-term-5, rights-webservices-term-6 (toolkit/about/aboutRights.ftl), show-dir-label (toolkit/about/aboutSupport.ftl), about-webrtc-save-page-dialog-title (toolkit/about/aboutWebrtc.ftl), experimental-features-media-jxl-description (both toolkit/featuregates/features.ftl and toolkit/firefoxlabs/features.ftl), neterror-unknown-socket-type-psm-installed (toolkit/neterror/netError.ftl).
pin-tabs-callout-1-subtitle, pin-tabs-callout-2-subtitle (browser/featureCallout.ftl); import-safari-permissions-string (browser/migration.ftl); tab-groups-onboarding-create-group-title-3, tab-groups-onboarding-saved-groups-title-3, tab-groups-onboarding-session-restore-title-2 (browser/newtab/onboarding.ftl); about-logging-invalid-output, about-logging-unknown-logging-preset, about-logging-unknown-profiler-preset, about-logging-unknown-option (toolkit/about/aboutLogging.ftl); about-telemetry-data-details-current (toolkit/about/aboutTelemetry.ftl); neterror-net-offline (toolkit/neterror/netError.ftl, “…" mixed).
Also ‘:‘ and ‘!‘ in xpath-bad-colon / xpath-bad-bang (dom/dom/xslt.ftl).
Upstream note: en-US carries the same
“…“defect inimport-safari-permissions-string,about-logging-*andabout-telemetry-data-details-current. The locale copied it rather than introducing it. Fixing forward in tr is still correct.
set-password-reminder (security/…/pippki.ftl), protections-vpn-header-content-subscribed (browser/protections.ftl), permissions-block-popups-exceptions-button4.description (browser/preferences/preferences.ftl), mr2022-onboarding-pin-primary-button-label [macos variant] (browser/newtab/onboarding.ftl), profiles-delete-profile-confirm (toolkit/about/aboutProfiles.ftl), rights-webservices-term-3, rights-webservices-term-4 (toolkit/about/aboutRights.ftl), about-telemetry-data-details-current (toolkit/about/aboutTelemetry.ftl), experimental-features-link-previews-description-no-ai [macos] (toolkit/firefoxlabs/features.ftl), csp-xfo-blocked-long-desc (toolkit/neterror/certError.ftl). Plus a stray space before the full stop in tou-existing-user-spotlight-body (browser/termsofuse.ftl).
The same English string is rendered with different capitalization in different files (~45 pairs found by the cross-file consistency scan). Representative examples: about-glean-about-data-header "Veriler Hakkında" vs about-glean-category-about-data "Veriler hakkında"; clear-site-data-window2.title "Verileri Temizle" vs clear-data-for-site-dialog-accept-button "Verileri temizle"; about-performance-title "Görev Yöneticisi" vs menu-tools-task-manager.label "Görev yöneticisi"; the four fission-status-* strings (two capitalized, two not); the about-webrtc-*-hide-msg / -show-msg pairs (section-level capitalized, item-level not). This is a normalization decision, not a set of individual bugs.
toolkit/toolkit/neterror/nsserrors.ftl uses two renderings for several fixed security terms. This file is large and low-visibility; treat as one normalization pass rather than ~15 line items:
| Term | Renderings in use |
|---|---|
| peer | "eş" (~25) vs "karşı taraf" (~10) |
| protocol | "protokol" vs "iletişim kuralı" |
| algorithm | "algoritma" vs "çözüm yolu" |
| cipher suite | "şifreleme takımı" vs "şifreleme paketi" |
| token | "jeton" vs "işaret" (sec-error-no-slot-selected) |
| module | "modül" vs "birim" (sec-error-js-invalid-module-name, sec-error-js-invalid-dll, sec-error-module-stuck) |
| CRL | left as "CRL" vs "hükümsüzler listesi" vs "Sertifika İptal Listesi" (sec-error-crl-invalid, sec-error-crl-invalid-version) |
ai-window-learn-from-browsing-activity.label(browser/browser/aiFeatures.ftl) — the tr definition of-smart-window-brand-nameintoolkit/toolkit/branding/brandings.ftlselects on$form(uppercase-singular/uppercase-plural/lowercase-singular/lowercase-plural), but this call passes the en-US parameterplural-form: "true".$formis never supplied, so the selector falls through to the default and the intended parameter is dead. →{ -smart-window-brand-name(form: "lowercase-plural") }.fxa-signout-dialog-body-aiwindow(browser/browser/aiWindow.ftl) — same$plural-formvs$formmismatch. →{ -smart-window-brand-name(form: "lowercase-plural") }.xml-nostylesheet-xslt-disabled(dom/dom/XMLPrettyPrint.ftl) — stray leading space inside the anchor:<a data-l10n-name="addons-link"> tarayıcı uzantısı…→ remove the space so the link text doesn't start with whitespace.about-processes-remote-sandbox-broker-process(toolkit/toolkit/about/aboutProcesses.ftl) — parentheses around{ $pid }dropped. CurrentUzak sandbox aracısı { $pid }→Uzak sandbox aracısı ({ $pid })(every siblingabout-processes-*-processstring has them).
about-networking-networkid-status-known(toolkit/toolkit/about/aboutNetworking.ftl) — meaning reversed. Current "Bağlantı durumu bilinmiyor" → "Bağlantı durumu biliniyor" (en "Link status is known").performance-limit-content-process-blocked-desc(browser/browser/preferences/preferences.ftl) — meaning reversed. "Çok işlemin etkin olmadığını kontrol etmeyi öğrenin" → "…etkin olup olmadığını kontrol etmeyi öğrenin" (en "check if multiprocess is enabled").ssl-error-rx-unexpected-uncompressed-record(toolkit/toolkit/neterror/nsserrors.ftl) — meaning reversed. "beklenmeyen bir sıkıştırılmış kayıt" → "…sıkıştırılmamış kayıt" (en "unexpected uncompressed record"); as written it duplicatesssl-error-decompression-failure.pdfjs-editor-ink-opacity-input(toolkit/toolkit/pdfviewer/viewer.ftl) — inverse property. "Saydamlık" (transparency) → "Matlık" (en "Opacity").webrtc-sharing-menu.label(browser/browser/webrtcIndicator.ftl) — subject/object inverted. "Sekme paylaşan cihazlar" → "Cihaz paylaşan sekmeler" (en "Tabs sharing devices"; the menu lists tabs).bookmarks-tools-toolbar-visibility-menuitem.label(browser/browser/browser.ftl) — "Yer imleri kenar çubuğunu gizle" (sidebar) → "Yer imleri araç çubuğunu gizle" (en "Hide Bookmarks Toolbar"); duplicates the sidebar string.windows-10-eos-challenger-callout-title(browser/browser/newtab/asrouter.ftl) — "gereksiz özelliklerle dolu halde gelmez" ≠ en "isn't preloaded like other Big Tech browsers" (= not pre-installed on the device). The second sentence "That's the point." is also dropped.spotlight-better-internet-header(browser/browser/newtab/asrouter.ftl) — "Daha iyi bir interneti seçtiniz" (you chose) → "Daha iyi bir internet sizinle başlıyor" (en "A better internet starts with you").mr2022-background-update-toast-title(browser/browser/newtab/asrouter.ftl) — the fourth sentence "No compromises." is dropped entirely.graph-week-summary(browser/browser/protections.ftl) — "geçen hafta" (the previous calendar week) → "son bir haftada" (en "over the past week", a rolling window).protections-vpn-header-content-subscribed(browser/browser/protections.ftl) — "up to" dropped: "{ $count } ayrı cihazınızda" → "en fazla { $count } cihazınızda".popup-warning-exceeded-message(browser/browser/browser.ftl) — "more than" dropped; siblingpopup-warning-exceeded-with-redirect-messageincludes "en az".urlbar-result-weather-title(browser/browser/browser.ftl) — city and region swapped:{ $region }, { $city }→{ $city }, { $region }(cf.urlbar-result-weather-title-with-country).containers-disable-alert-cancel-button(browser/browser/preferences/preferences.ftl) — "Vazgeç" → "Etkin kalsın" (en "Keep enabled", not a generic Cancel).sitedata-option-block-all.label(browser/browser/preferences/preferences.ftl) — en "will cause websites to break" rendered as "may". → "Tüm çerezler (Siteler düzgün çalışmaz)";preferences-etp-custom-cookie-behavior-block-allalready gets this right.content-blocking-cross-site-tracking-cookies-plus-isolate(browser/browser/preferences/preferences.ftl) — "takip kodları ve" added; en lists only "Cross-site tracking cookies".settings-keyboard-shortcuts-group.description(browser/browser/preferences/preferences.ftl) — "kolaylaştırın" (make it easier) ≠ en "Control how you move around and interact with".permissions-exceptions-cookie-desc(browser/browser/preferences/permissions.ftl) — "hiç kullanmayacağını" (the site will never use) → "hiçbir zaman kullanamayacağını" (permission sense);sitedata-cookies-exceptions2.descriptionis correct.browsing-use-full-keyboard-navigation.label(browser/browser/preferences/preferences.ftl) — "Form düğmeleri" ≠ en "form controls"; also uses descriptive "kullanabilirsiniz" where every other checkbox in the pane uses the imperative.fonts-langgroup-header(browser/browser/preferences/fonts.ftl) — "Karakter kümesi" (character set) ≠ en "Fonts for" (a language-group selector).set-background-stretch.label(browser/browser/setDesktopBackground.ftl) — "Genişlet", identical toset-background-span; two distinct wallpaper modes collide. → "Uzat".set-background-center.label(browser/browser/setDesktopBackground.ftl) — "Merkez" (the noun) → "Ortala" (matching the sibling imperatives "Döşe", "Doldur", "Sığdır").tab-context-send-to-device2.label(browser/browser/tabContextMenu.ftl) — "Cihazıma gönder" → "Cihazlarıma gönder" (en "Send to Your Devices", plural).newtab-widget-timer-label-play(browser/browser/newtab/newtab.ftl) — "Oynat" (media playback) → "Başlat"; this is the Timer widget's start control.newtab-widget-lists-name-label-checklist(browser/browser/newtab/newtab.ftl) — "Görev listesi" is identical to the Task-list label, so Checklist and Task list collide. → "Kontrol listesi". Same innewtab-widget-lists-name-placeholder-checklist2,newtab-widget-lists-name-default.set-default-menu-message-row-layout-title-variant(browser/browser/newtab/asrouter.ftl) — 1st person "tarayıcım" for en "your default browser" → "varsayılan tarayıcınız yapın".media-count.label(browser/browser/pageInfo.ftl),processes-count,place-database-stats-count(toolkit/toolkit/about/aboutSupport.ftl) — "Sayaç" (counter/meter) → "Sayı" (en "Count" is a quantity column).content-analysis-connected-to-agent,content-analysis-agent-path,content-analysis-agent-failed-signature-verification(toolkit/toolkit/about/aboutSupport.ftl) — "İstemci" (client) → "Aracı" (en "Agent", the external DLP agent process).certificate-viewer-critical-extension.title(toolkit/toolkit/about/certviewer.ftl) — en "clients must reject the certificate if they do not understand it" refers to the extension; also "anlamadılarsa" is a malformed conditional. → "…bu uzantıyı anlamıyorlarsa sertifikayı reddetmelidir."rights-webservices-term-4(toolkit/toolkit/about/aboutRights.ftl) — "yazılı veya sözlü" (written or oral) → "açık veya zımni" (en "express or implied").rights-webservices-term-7(toolkit/toolkit/about/aboutRights.ftl) — "korunur" (is protected by) → "tabidir" (en "are governed by the laws of…").about-webauthn-auth-info-max-rpids-for-set-min-pin-length(toolkit/toolkit/about/aboutWebauthn.ftl) — "relying" dropped from "relying party IDs", leaving "taraf kimliği" ambiguous.about-webauthn-auth-info-preferred-platform-uv-attempts(toolkit/toolkit/about/aboutWebauthn.ftl) — parses as "platform user's verification" instead of "platform user verification".discopane-intro(toolkit/toolkit/about/aboutAddons.ftl) — "tarayıcınızın görünümü değiştirmenize" → "görünümünü";discopane-intro3is correct.details-notification-soft-blocked-other-disabled(toolkit/toolkit/about/aboutAddons.ftl) — this is the add-on ("other") variant but says "Uzantıyı";…-disabled2correctly says "Eklentiyi".profile-directory-explanation(toolkit/toolkit/global/createProfileWizard.ftl) — "yer imleriniz ve parolalarınız" is not in en ("preferences and other user-related data").unknowncontenttype-open-with.label(toolkit/toolkit/global/unknownContentType.ftl) — "Birlikte aç" (open together) → "Şununla aç" (en "Open with").csp-error-illegal-protocol(toolkit/toolkit/global/cspErrors.ftl) — the colon belongs to{ $scheme }: "yasaklı bir { $scheme } içeriyor: protokol kaynağı" → "yasaklı bir { $scheme }: protokol kaynağı içeriyor".experimental-features-css-masonry-description(toolkit/toolkit/featuregates/features.ftl) — "anlatıcıya" (narrator) → "açıklama belgesine" (en "the explainer", a document).neterror-nss-failure-not-verified(toolkit/toolkit/neterror/netError.ftl) — "yetkinliği" (competence) → "özgünlüğü" (en "authenticity").mozilla-pkix-error-validity-too-long(toolkit/toolkit/neterror/nsserrors.ftl) — "fazla uzun süredir geçerli olan" (has been valid too long) → "geçerlilik süresi fazla uzun olan".ssl-error-server-cache-not-configured(toolkit/toolkit/neterror/nsserrors.ftl) — "cache" dropped: "SSL sunucusu" → "SSL sunucu önbelleği".ssl-error-handshake-failure-alert— "kabul edilebilir sayıda güvenlik değişkeniyle" ≠ en "an acceptable set of security parameters".ssl-error-renegotiation-not-allowed— "yeniden işleme" → "yeniden görüşmeye";ssl-error-no-renegotiation-alertis correct.ssl-error-sym-key-context-failure— "içeriği" (content) → "bağlamı" (en "context").ssl-error-md5-digest-failure,ssl-error-sha-digest-failure— "derleme" (compilation) → "özet" (en "digest");sec-error-digest-not-foundalready uses "özet".sec-error-krl-bad-signature— "anahtarı geçersiz" → "imzası geçersiz" (en "invalid signature").sec-error-ocsp-bad-http-response,sec-error-ocsp-unknown-response-status— "aldı"/"karşılaştı" → "döndürdü" (en "returned").sec-error-ocsp-malformed-request— "yarıda kesilmiş" (interrupted) → "bozulmuş" (en "corrupted").sec-error-unsupported-elliptic-curve,sec-error-unsupported-ec-point-form— "oval eğri" → "eliptik eğri".sec-error-out-of-search-limits— "Belge doğrulama araması" → "Sertifika doğrulama araması" (en "Cert validation search").sec-error-no-memory— "Bellek paylaşım hatası" → "Bellek ayırma hatası" (en "memory allocation failure").xp-java-remove-principal-error,xp-java-cert-not-exists-error— "Baş bölüm" → "Asıl (principal)".ssl-error-bad-client,ssl-error-bad-server— locative for en "from the client/server": "istemcide" → "istemciden gelen".network-connection-status-looked-up,-read,-wrote(netwerk/netwerk/necko.ftl) — completed actions rendered as progressive;-looked-upis currently byte-identical to-looking-up, so the two states are indistinguishable.xpath-bad-colon(dom/dom/xslt.ftl) — meaning reversed. "‘:‘ bekleniyordu" (expected) → en is "‘:’ unexpected". Cf. the neighbouringxpath-bad-bang.xslt-bad-node-name(dom/dom/xslt.ftl) — "bileşen" (component) → "öğe" (the locale's term for a DOM element).pk11-bad-password(security/…/certManager.ftl) — "Geçerli parola girişi hatalı" introduces a "current password" notion absent from en "The password entered was incorrect."cert-format-base64-chain,cert-format-pkcs7-chain(security/…/certManager.ftl) — "with chain" dropped; each is now byte-identical to its non-chain sibling, so the two export formats cannot be told apart.pkcs12-unknown-err-restore(security/…/certManager.ftl) — "yenilenmesi" (renewal) → "geri yüklenemedi" (en "restore").exception-mgr-supplemental-warning(security/…/certManager.ftl) — "Legitimate" dropped; the whole point of the warning is that legitimate sites never ask this.devmgr-button-unload.label(security/…/deviceManager.ftl) — "Boşalt" (empty/pour out) → "Kaldır" (en "Unload" a PKCS#11 module).fips-nonempty-primary-password-required(security/…/deviceManager.ftl) — two nominative subjects, no case marking; ungrammatical. → "FIPS kipi, her güvenlik aygıtı için bir ana parola belirlemenizi gerektirir."pippki-pw-change2empty-in-fips-mode(security/…/pippki.ftl) — adds "ana" (Primary) where en says only "a non-empty password"; this is the security-device password dialog.about-debugging-runtime-profile-button2(devtools/client/aboutdebugging.ftl) — "Profil performansı" (the profile's performance) → "Performans profili çıkar" (en "Profile performance", a verb phrase).storage-table-type-indexeddb-hint(devtools/client/storage.ftl) — "Bir sunucu seçerek" → "Bir veritabanı seçerek" (en "by selecting a database").storage-table-type-cache-hint(devtools/client/storage.ftl) — en "View and delete the cache storage entries by selecting a storage"; both the object and the verb are wrong.toolbox-mode-everything-container.title(devtools/client/toolbox.ftl) — "hataları yakala" (catch errors) → "hata ayıkla" (en "Debug everything in all processes").perftools-request-to-stop-profiler(devtools/client/perftools.ftl) — transient status rendered as a button label: "Kaydı durdur" → "Kayıt durduruluyor".inactive-css-at-position-try-not-supported(devtools/client/tooltips.ftl) —{ $property }is a CSS property, called a "kural" (rule) here.inactive-css-no-principal-box,inactive-css-ruby-element(devtools/client/tooltips.ftl) — wrong subject: the tr says the property does not create a principal box / is a ruby element; en says the element is.console-stacktrace(mobile/android/mobile/android/geckoViewConsole.ftl) — missing ablative for en "Stack trace from { $filename }".
toolkit/toolkit/intl/languageNames.ftl:
| ID | en-US | Current | Suggest | Why |
|---|---|---|---|---|
language-name-gl |
Galician | Galce | Galiçyaca | "Galce" is Welsh — and is already language-name-cy. Two languages, one name. |
language-name-gd |
Scottish Gaelic | İskoçça | İskoç Gaelcesi | "İskoçça" is Scots — already language-name-sco. |
language-name-ab |
Abkhazian | Abazaca | Abhazca | Abaza (abq) is a different language. |
language-name-kab |
Kabyle | Berberice | Kabilce | "Berberice" names the whole Berber family. |
language-name-se |
Northern Sami | Nord Sami | Kuzey Samicesi | "Nord" is not Turkish. |
language-name-si |
Sinhala | Seylanca | Sinhalaca | outdated exonym from "Ceylon". |
language-name-nn |
Norwegian Nynorsk | Norveççe (Nynorsk) | Norveççe Nynorsk | sibling -nb is "Norveççe Bokmål", no parentheses. |
language-name-jv |
Javanese | Cava dili | Cava Dili | every other "… Dili" entry is capitalized. |
toolkit/toolkit/intl/regionNames.ftl:
| ID | en-US | Current | Suggest | Why |
|---|---|---|---|---|
region-name-nr |
Nauru | Nauruca | Nauru | "Nauruca" is the language, already language-name-na. |
region-name-to |
Tonga | Tongaca | Tonga | "Tongaca" is the language, already language-name-to. |
region-name-cy |
Cyprus | Güney Kıbrıs Rum Kesimi | Kıbrıs | en is the plain ISO 3166 country name; the current string names a different political entity. |
region-name-xu |
Johnston Atoll | Johnston Atoll | Johnston Atolü | untranslated; the parallel region-name-xl is "Palmyra Atolü". |
region-name-re |
Réunion | Reunion | Réunion | diacritic dropped (present in en). |
region-name-bl |
Saint Barthélemy | Saint Barthelemy | Saint Barthélemy | diacritic dropped. |
Related:
experimental-features-ime-search-description(toolkit/featuregates/features.ftlandtoolkit/firefoxlabs/features.ftl) — "Hintçe yazı dillerinde" → "Hint yazı dillerinde" (en "Indic written languages" is the script family, not Hindi).fonts-langgroup-latin.label(browser/browser/preferences/fonts.ftl) — developer comment not followed. The#comment says to translate "Latin" as the script name, not the language. "Latince" → "Latin".
genai-settings-chat-chatgpt-links(browser/browser/genai.ftl) — the brand is written "OpenAl" with a lowercase L (U+006C) instead of a capital I. → "OpenAI".trademarkInfo(browser/branding/official/brand.ftl) — "tescilli markalarıdır" (registered trademarks) ≠ en "are trademarks of the Mozilla Foundation"; also "Mozilla Vakfının" needs the apostrophe → "Mozilla Vakfı'nın" (with’).extension-colorways-bold-name(browser/browser/appExtensionFields.ftl) — developer comment not followed. The comment states "Bold" is used in the sense of bravery. Current "Koyu" means dark and duplicatesextension-firefox-compact-dark-name. → "Cesur".accessibility-text-label-issue-document-title(devtools/client/accessibility.ftl) — the token inside<code>is the HTMLtitleattribute name and must stay English. Current<code>başlığı</code>→<code>title</code>.about-debugging-worker-fetch-listening/-not-listening.label(devtools/client/aboutdebugging.ftl) —.labelis the Fetch API event name; translated to "Getir" while the same string's.valuecorrectly keeps "fetch".plugins-openh264-description(toolkit/toolkit/about/aboutAddons.ftlandtoolkit/toolkit/about/aboutPlugins.ftl) — stalehttp://www.openh264.org/; en specifieshttps://.load-device.title(security/…/deviceManager.ftl) — "PKCS #11" with a space; en and the file's ownload-device-modname-default/load-pk11-module-file-picker-titleuse "PKCS#11".
about-logins-confirm-remove-all-sync-dialog-title(browser/browser/aboutLogins.ftl) — the singular variant reads "{ $count } hesap hepsi tüm cihazlardan kaldırılsın mı?"; "hepsi" is copied from the plural variant and is ungrammatical here.ip-protection-site-exceptions-all-sites-button.description(browser/browser/ipProtection.ftl) — "{ $count } web site" (both variants) → "{ $count } web sitesi" (compound suffix required; the rest of the file uses "web sitesi").content-sharing-modal-too-many-pages.message(browser/browser/contentSharing.ftl) — doubled suffix: "Sayfalarınızınızdan" → "Sayfalarınızdan".update-otherInstanceHandlingUpdates/settings-update-other-instance-handling-updates.label(browser/browser/aboutDialog.ftl) — missing genitive: "{ -brand-short-name } başka bir kopyası" → "{ -brand-short-name }'un başka bir kopyası".about-httpsonly-button-continue-to-site(toolkit/toolkit/about/aboutHttpsOnlyError.ftl) — "HTTP siteye" → "HTTP sitesine".rights-webservices-term-5(toolkit/toolkit/about/aboutRights.ftl) — "{ -brand-short-name } ürünün" → "ürününün".webext-perms-host-description-one-site(toolkit/toolkit/global/extensions.ftl) — missing locative: "{ $domain } verilerinize erişme" → "{ $domain } sitesindeki verilerinize erişme".webauthn-pin-auth-blocked-prompt(toolkit/toolkit/webauthnDialog.ftl) — missing postposition: "{ $hostname } kullanıcı doğrulaması" → "{ $hostname } sitesinde kullanıcı doğrulaması" (all four siblings have one).sec-error-bad-info-access-method(toolkit/toolkit/neterror/nsserrors.ftl) — stray dative: "bilgiye erişime yöntemi" → "bilgi erişim yöntemi".perftools-thread-jvm-nimbus.title,perftools-thread-jvm-glean.title(devtools/client/perftools.ftl) — "SDK'inin" → "SDK'sının" (SDK is read es-de-ka, ending in /a/).genai-settings-chat-gemini-links(browser/browser/genai.ftl) — "Google Gemini'ı" → "Google Gemini'yi" (front-vowel word needs-yiplus the buffer letter; cf. the correct "Mistral'ı" in the same file).policy-FirefoxHome2(browser/browser/policies/policies-descriptions.ftl) — vowel harmony: the term resolves to "Firefox Başlangıç", so the accusative is'ı, not'i.policy-PopupBlocking(browser/browser/policies/policies-descriptions.ftl) — missing genitive: "Belirli web sitelerin" → "Belirli web sitelerinin".cert-error-unsupported-keyalg(toolkit/toolkit/neterror/certError.ftl) — wrong case: "bu siteye ziyaret etmenizi" → "bu siteyi ziyaret etmenizi" (all 15 siblingcert-error-*strings use the accusative).sync-account-in-use-description-merge(browser/browser/sync.ftl) — active voice with an inanimate subject: "veriler … birleştirecektir" → "birleştirilecektir";sync-profile-different-account-description-mergeis correct.custom-avatar-crop-view.aria-label(browser/browser/profiles.ftl) — "Resim görünümü kırp" is ungrammatical either way. → "Resim kırpma görünümü".
onboarding-many-tabs-title(browser/browser/newtab/onboarding.ftl) — informal sen: "Senin sekmelerin, senin kararın" → "Sizin sekmeleriniz, sizin kararınız".onboarding-refresh-sync-title(browser/browser/newtab/onboarding.ftl) — informal sen imperatives: "İstediğin yere git, istediğin şeyi eşitle." → "İstediğiniz yere gidin, istediğiniz şeyi eşitleyin."- "Learn more" rendered as the informal singular "Daha fazla bilgi al" where the locale otherwise uses "Daha fazla bilgi alın":
protections-panel-description-shim-allowed-learn-more(browser/protectionsPanel.ftl),restored-profile-page-learn-more(browser/profiles.ftl),translations-panel-learn-more-link(browser/translations.ftl),existing-user-tou-learn-more(browser/termsofuse.ftl). (The locale is split 71 vs 23 on this phrase overall; these four sit next to a correct sibling in the same file, which is why they're enumerated rather than left to S4.) bookmark-overlay-folders-expander-hide.tooltiptext/.tooltiptextup,bookmark-overlay-tags-expander-hide.tooltiptext/.tooltiptextup(browser/browser/editBookmarkOverlay.ftl) — "Gizler" (3rd-person aorist) → "Gizle" (imperative UI command).preferences-doh-descriptionandpreferences-doh-description2(browser/browser/preferences/preferences.ftl) — malformed verb: "başkalarının görmesi zorlaştır." → "…görmesi zorlaşır."feature-disable-requires-restart(browser/browser/preferences/preferences.ftl) — "için" misplaced, producing "must be restarted for Firefox": "Bu özelliği devre dışı bırakmak { -brand-short-name } için yeniden başlatılmalıdır." → "Bu özelliği devre dışı bırakmak için { -brand-short-name } yeniden başlatılmalıdır." (cf. the correctfeature-enable-requires-restart).report-broken-site-panel-intro-text(browser/browser/reportBrokenSite.ftl) — extra "için" after a dative that is already the complement of "yardımcı oluyor".toolbox-local-mode-notice(devtools/client/toolbox.ftl) — passive stem + 2nd-person participle: "etkinleştirilebileceğiniz" → "etkinleştirebileceğiniz".rights-webservices(toolkit/toolkit/about/aboutRights.ftl) — "aşağıdaki açıklanan koşullar" → "aşağıda açıklanan koşullar".whypaused-breakpoint"duraklandı" /whypaused-event-breakpoint"duraklatıldı" /whypaused-promise-rejection"durakladı" (devtools/shared/debugger-paused-reasons.ftl) — the identical en pattern "Paused on X" takes three different verb forms in one file.
Confirmed by hunspell against the locale's own extensions/spellcheck/hunspell/tr.dic, then verified in context:
| ID | File | Current | Suggest |
|---|---|---|---|
space-alert-over-5gb-message2 |
browser/preferences/preferences.ftl |
kulllanılabilen | kullanılabilen |
space-alert-under-5gb-message2 |
browser/preferences/preferences.ftl |
kulllanılabilen … deneyimi içi | kullanılabilen … için |
preferences-copy-profile-header.description |
browser/preferences/preferences.ftl |
parolarar | parolalar |
pane-experimental-description4 |
browser/preferences/preferences.ftl |
oldıkları | oldukları |
preferences-etp-advanced-settings-group.description |
browser/preferences/preferences.ftl |
"çoğu takip kodunu olarak engelleyerek" | "…otomatik olarak engelleyerek" (word dropped) |
webrtc-reason-for-no-permanent-allow-audio |
browser/webrtcIndicator.ftl |
paylacağınızı | paylaşacağınızı |
monitor-partial-breaches-motivation-description |
browser/protections.ftl |
ihallerinizi | ihlallerinizi |
firefox-relay-must-login-to-fxa |
browser/firefoxRelay.ftl |
kullanak için | kullanmak için |
callout-firefox-view-tab-pickup-title |
browser/featureCallout.ftl |
Sekma taşıma | Sekme taşıma |
onboarding-refresh-import-subtitle |
browser/newtab/onboarding.ftl |
"geçmişinizi ve ve diğer" | "…ve diğer" |
newtab-weather-menu-temperature-option-celsius |
browser/newtab/newtab.ftl |
Celcius | Celsius |
newtab-shortcuts-highlight-title |
browser/newtab/newtab.ftl |
Favorileri siteleriniz | Favori siteleriniz |
newtab-sports-widget-message-survey-body |
browser/newtab/newtab.ftl |
Dünya Kupaları sona erdi | Dünya Kupası sona erdi (singular; verb disagrees) |
cfr-doorhanger-video-support-header |
browser/newtab/asrouter.ftl |
{ -brand-short-name }’ güncelleyin |
…’u güncelleyin (dangling apostrophe, no suffix) |
site-data-settings-description |
browser/preferences/siteDataSettings.ftl |
"bilgisayarınızda ve çerez ve site verisi" | stray "ve" |
backup-folder-name |
browser/backupSettings.ftl |
Geri Yukleme | Geri Yükleme |
place-database-last-integrity-corruption-date |
toolkit/about/aboutSupport.ftl |
sütünlük | bütünlük |
media-capabilities-title |
toolkit/about/aboutSupport.ftl |
Çoku ortam | Çoklu ortam |
profiles-rename |
toolkit/about/aboutProfiles.ftl |
değiștir (U+0219, Romanian s-comma) | değiştir (U+015F) |
rights-webservices-term-7 |
toolkit/about/aboutRights.ftl |
ihtilafi | ihtilafı |
privacy-spoof-english |
toolkit/global/resistFingerPrinting.ftl |
değştirmek | değiştirmek |
elevation-error-manual |
toolkit/updates/elevation.ftl |
"ziyaretip edip" | "ziyaret edip" |
ssl-error-cert-kea-mismatch |
toolkit/neterror/nsserrors.ftl |
anahtar değiş algoritması | anahtar değişim algoritması |
sec-error-not-fortezza-issuer |
toolkit/neterror/nsserrors.ftl |
"zinciri has FORTEZZA olmayan" | stray English word "has" |
file-browse-pkcs12-spec |
security/…/certManager.ftl |
PKSC12 | PKCS12 |
styleeditor-filter-input.placeholder |
devtools/client/styleeditor.ftl |
Stil dosyalarını filtrelere | …filtrele |
(Surface only — many may be legitimate context differences. Full cross-file scan found 133 divergent groups; these are the ones where a same-file sibling proves one rendering is the intended one.)
menu-application-set-as-default.label(browser/menubar.ftl) andset-default-menu-message-split-layout-subtitle[macos] (browser/newtab/asrouter.ftl) — "saptanmış tarayıcı"; every other string in the locale uses "varsayılan".lockwise-header-content-logged-in(browser/protections.ftl) — "senkronize edebilirsiniz" → "eşitleyebilirsiniz" (Sync is "eşitleme" throughout).migration-wizard-safari-permissions-sub-header(browser/migrationWizard.ftl) — "yer işaretleri"; the only occurrence in the whole locale — everywhere else bookmarks are "yer imleri".places-view-sortby-name.label(browser/places.ftl) — "İsme göre sırala" vsplaces-sortby-name"Ada göre sırala" for the same en string in the same file.remove-engine-remove(browser/preferences/preferences.ftl) — "Sil" vs the triggering controlsearch-remove-engine"Kaldır".security-privacy-issue-warning-safe-browsing.label(browser/preferences/preferences.ftl) — "yanıltıcı" vs "aldatıcı" used for en "deceptive" insecurity-enable-safe-browsing,security-browsing-protection,browsing-protection-group2.preferences-text-zoom-override-warning2.message(browser/preferences/preferences.ftl) — quotes the option as "Yalnızca metni yakınlaştır" but its actual labelpreferences-zoom-text-onlyis "Sadece metni yakınlaştır".preferences-ai-controls-translations-control.label(browser/preferences/preferences.ftl) — "Çeviri" vs "Çeviriler" everywhere else.contextual-manager-password-login-line-with-alert.aria-label/.title(browser/contextual-manager.ftl) — "(Dikkat)" vs "(Uyarı)" in the two parallel strings.reset-pbm-panel-description(browser/browser.ftl) — "özel sekmeleri" vs "gizli" used for "private" everywhere, includingreset-pbm-panel-description2right above.profiles-cyan-theme-title.title(browser/profiles.ftl) — tooltip says "Cyan temayı uygula" but the theme's own labelprofiles-cyan-themeis "Açık mavi".safeb-blocked-unwanted-page-learn-more(browser/safebrowsing/blockedSite.ftl) — "kötü amaçlı yazılım" vs "zararlı yazılım" in the three sibling strings.webext-perms-update-text2(toolkit/global/extensions.ftl) — quotes the Cancel button as "İptal", but it is labelledwebext-perms-cancel= "Vazgeç";webext-perms-update-textgets it right.user-context-color-cyan.label(toolkit/global/contextual-identity.ftl) — "Açık mavi" (light blue) for en "Cyan" → "Camgöbeği"; as-is it is confusable withuser-context-color-blue.wizard-macos-button-next.label(toolkit/global/wizard.ftl) — "İleri" for the macOS "Continue" variant, whileprofile-creation-explanation-4tells macOS users to press "Devam düğmesine".main-thread-no-omtc(toolkit/about/aboutSupport.ftl),about-telemetry-slow-sql-main,about-telemetry-slow-sql-other(toolkit/about/aboutTelemetry.ftl) — "(işlem) parçacığı" for thread; bare "parçacık" means particle. The locale's term elsewhere (aboutProcesses.ftl) is "iş parçacığı".about-telemetry-slow-sql-statement(toolkit/about/aboutTelemetry.ftl) — "İfade" vs the section headingabout-telemetry-slow-sql-section"Deyimleri".about-webrtc-nominated(toolkit/about/aboutWebrtc.ftl) — "Aday", the same word already used for Candidate, making the Nominated column meaningless → "Aday gösterildi".certificate-viewer-given-name(toolkit/about/certviewer.ftl) — "Adı", identical tocertificate-viewer-name; the two certificate fields become indistinguishable → "Ön adı".about-glean-label-for-tag-pings(toolkit/about/aboutGlean.ftl) — "pinglerinizi"; every other occurrence in the file uses "ping'ler" with an apostrophe.printui-sheets-count(toolkit/printing/printUI.ftl) — "{ $sheetCount } sayfa" for en "sheets of paper", while "sayfa" is already page;printui-pages-per-sheetuses "yaprak".print-setup.title(toolkit/printing/printDialogs.ftl) — "Sayfa Yapısı" vs the menu item that opens it,printpreview-page-setup"Sayfa düzeni…".margin-group-label-inches,margin-group-label-metric(toolkit/printing/printDialogs.ftl) — "Kenarlar" (edges) vsprintui-margins"Kenar boşlukları".pdfjs-editor-alt-text-button-labeland siblings (toolkit/pdfviewer/viewer.ftl) — "Alternatif metin" in 4 strings vs "Alt metin" in ~20.pdfjs-editor-undo-bar-message-stamp(toolkit/pdfviewer/viewer.ftl) — "Görsel silindi" vs "Resim" used in every other image string.pdfjs-find-match-diacritics-checkbox-label(toolkit/pdfviewer/viewer.ftl) andfindbar-match-diacritics/findbar-match-diacritics-status(toolkit/main-window/findbar.ftl) — "Fonetik işaretleri" → "Ayırıcı işaretleri" (diacritics are not phonetic marks).pdfjs-editor-new-alt-text-description,pdfjs-editor-alt-text-settings-create-model-description(toolkit/pdfviewer/viewer.ftl) — "Görme engelli kişilere" narrows en "people who can't see the image";pdfjs-editor-alt-text-dialog-descriptionrenders the same source correctly.exception-mgr.title,exception-mgr-extra-button.label,exception-mgr-permanent.label,delete-ssl-override-title.title,delete-ssl-override-confirm,delete-ssl-override-impact,add-exception-valid-long(security/…/certManager.ftl) — "ayrıcalık" (privilege) for en "exception", whilecertmgr-add-exceptionandcertmgr-serveruse "istisna".fips-nonempty-primary-password-required(security/…/deviceManager.ftl),protected-auth-prompt(security/…/pippki.ftl) — "güvenlik cihazı" vs "güvenlik aygıtı" used indevmgr-window,unable-to-toggle-fips,pkcs12-dup-data,certmgr-token-name,change-password-token.xslt-call-to-key-not-allowed(dom/dom/xslt.ftl) — "işlev" vs "fonksiyon" used inxpath-unknown-function,xpath-bad-argument-count,xpath-bad-extension-function; also "the key function" is the XSLTkey()function name, not a generic "anahtar işlev".styleeditor-filter-input,styleeditor-visibility-toggle-system,styleeditor-stylesheet-all-filteredvsstyleeditor-new-button,styleeditor-visibility-toggle,styleeditor-save-button(devtools/client/styleeditor.ftl) andoptions-stylesheets-in-the-debugger-labelvs-tooltip(devtools/client/toolbox-options.ftl) — "stil dosyası" vs "stil sayfası" for stylesheet in adjacent strings.options-context-triggers-page-refresh-persists(devtools/client/toolbox-options.ftl) — "(sayfayı tazeler)" vs "sayfayı yeniden yükler" in the two sibling strings.newtab-sports-widget-match-aria-label-upcoming-suspended(browser/newtab/newtab.ftl) — "ara verildi" vs the status stringnewtab-sports-widget-suspended"Askıya alındı".newtab-clock-widget-input-nickname(browser/newtab/newtab.ftl) — ".label = Ad" for en "Nickname";newtab-clock-widget-edit-item-with-nicknameuses "takma adı", and plain "Ad" collides with a real name field (the dev comment warns about this).about-glean-about-data-header/about-glean-category-about-data,autofill-add-new-address-title/autofill-addresses-add-button,add-engine-dialog.buttonlabelaccept/add-engine-dialog2.buttonlabelaccept— see also S4.
rights-webservices(toolkit/about/aboutRights.ftl) —("Hizmetler")with straight double quotes →(“Hizmetler”).rights-webservices-term-4(toolkit/about/aboutRights.ftl) —"oldukları gibi"straight quotes →“oldukları gibi”.about-glean-label-for-tag-pings-with-requirements(toolkit/about/aboutGlean.ftl) —"-"straight quotes →“-”.monitor-breaches-unresolved-description(browser/protections.ftl) —"çözüldü"straight quotes →“çözüldü”.connection-proxy-noproxy-localhost-desc-2(browser/preferences/connection.ftl) — serial comma before "ve" carried over from English: "127.0.0.1/8, ve ::1" → "127.0.0.1/8 ve ::1".
autofill-address-country— "Ülke" for en "Country or Region"; "or Region" dropped, and it now collides withautofill-address-country-only= "Ülke".autofill-address-county— "İlçe", already used byautofill-address-district(District). County is a first-level division listed next to Province/State.autofill-address-department— "Bölüm"; the#comment says this is a primary administrative division in Nicaragua/Colombia, not an organizational section → "Departman".autofill-address-name— "Ad", identical toautofill-address-given-name(First Name) → "Ad soyad".
more-from-moz-mozilla-monitor-us-description(browser/preferences/moreFromMozilla.ftl) — "Automatically" dropped.sitedata-total-size(browser/preferences/preferences.ftl) — "cookies" dropped from "Your stored cookies, site data, and cache".preferences-ai-controls-on-device-group.description(browser/preferences/preferences.ftl) — the condition "if you use the feature" dropped, implying unconditional downloads.should-restart-ok(browser/preferences/preferences.ftl) — "now" dropped; the OK button is now byte-identical toshould-restart-title.firefoxview-search-text-box-history.placeholder(browser/firefoxView.ftl) — developer comment not followed ("search" is a verb). "Arama geçmişi" (search history, a noun) → "Geçmişte ara", matching the sibling placeholders.
| Area | Findings |
|---|---|
browser/browser/preferences/ |
34 |
browser/browser/*.ftl (a–l) |
24 |
browser/browser/*.ftl (m–z) |
24 |
browser/browser/newtab/ + policies/branding/safebrowsing |
26 |
toolkit/toolkit/about/ |
38 |
toolkit/ (excl. about/) |
44 |
devtools/ |
17 |
dom/ + security/ + netwerk/ + mobile/ |
22 |
| Total enumerated | ~229 |
| Systemic buckets | 5 (S1–S5, ~90 affected IDs) |
- The
“…“closing-quote bug inimport-safari-permissions-string,about-logging-invalid-output,about-logging-unknown-logging-preset,about-logging-unknown-profiler-preset,about-logging-unknown-optionandabout-telemetry-data-details-currentis present in en-US too. tr inherited it. Worth fixing in tr regardless, and worth filing upstream. toolkit/toolkit/global/theme-picker.ftlexists in en-US but not in tr — a new file, i.e. a completeness gap, not a regression.tr/extensions/spellcheck/hunspell/(the Turkish dictionary) has no en-US counterpart and is legitimately locale-only.
tr is a well-maintained, near-complete locale: zero syntax errors, zero variable mismatches, zero access-key defects, only 109 missing strings, and consistent typographic and register conventions. The defects found are almost entirely quality-level — a handful of genuine typos, a set of reversed or narrowed meanings, and terminology drift concentrated in the low-visibility nsserrors.ftl and in intl/languageNames.ftl / regionNames.ftl.
The highest-value fixes, in order:
ai-window-learn-from-browsing-activity.labelandfxa-signout-dialog-body-aiwindow— the only functional defects ($plural-formvs the tr term's$formselector).- Language and region names (section C) — user-visible, unambiguous, and two pairs of distinct languages currently share one name.
- The reversed meanings in section B —
about-networking-networkid-status-known,performance-limit-content-process-blocked-desc,ssl-error-rx-unexpected-uncompressed-record,pdfjs-editor-ink-opacity-input,xpath-bad-colon,webrtc-sharing-menu.label. - The 26 spelling typos in section G — mechanical, zero-risk.
- S1 and S2 (straight apostrophes, unbalanced quotes) — mechanical, 29 strings total.