You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
20 translations use placeholder names that the code never passes, values are blank #3310
fix(i18n): 20 translations use placeholder names that the code never passes, values are blank
Broken
In 7 locales, some of the strings reference a placeholder the component doesn’t supply, vue-i18n renders it as an empty string. Most are visible to the user. The toolbar count for Turkish currently shows " paket gösteriliyor" with no number and the Romanian tooltip ends in a bare "@".
Causes:
Translated variable names, e.g. ro-RO {pachet}/{versiune}, nl {instellingen}
English renamed param after translation written, e.g. {total} → {count}, {name} → {handle}
pnpm i18n:check and find-invalid-translations.ts compare keys only. Lunaria tracks per file, none of them catch a key that still exists but where placeholders are no longer matching.
Changes
The values were rendered with vue-i18n 11 before and after the change.
Needs native-speaker review: 3 strings reworded, not just renamed
Renaming the variable won’t work for these so the wording changed. Needs a sanity-check:
ar-EG anomalies range: نطاق الشذوذ: {name} → {packageName}: من {start} إلى {end}, to match the params the code passes
tr-TR vulnerabilities: the code passes only count/critical/high, so moderate/low were rendering blank. Now {count} ({critical} kritik/{high} yüksek)
tr-TR profile invite: the code passes only handle, so {url} was blank in the Bluesky compose link. Now Merhaba {'@'}{handle}! … https://npmx.dev, matching en
Verification
i18n:check: no new errors; non-missing errors 129 → 108 from my check Found with shipi18ncheck, which I authored and maintain. Each finding was verified by hand.
changed the title [-]20 translations use placeholder names that the code never passes, values
are blank[/-][+]20 translations use placeholder names that the code never passes, values are blank[/+]on Oct 6, 2026
When checking the locale files I also found translations that leave out something the English string has: a count, a name, a link, sometimes most of the sentence. The key is there, so nothing shows up as missing. I didn't touch these because fixing them needs someone who actually speaks the language. Listing them here to be addressed:
74 keys (104 key/locale pairs). The main pairs:
Most were translated without the value from the beginning, e.g. ar-EG "All ({count})" is just "الكل" ("All"), tr-TR "+{count} more" is "Daha fazla anahtar kelime" ("more keywords"), and the tr-TR privacy policy intro is one line ("npmx'e hoş geldiniz") where English has a full paragraph.
9 are out of date: English changed after translated. about.contributors.title was changed in feat: sort contributors list by role #1369 (Feb 13) to "... and {count} more contributors", and 8 locales (ar, fr-FR, hi-IN, id-ID, ja-JP, pl-PL, pt-BR, ru-RU) still say "Contributors". Same for code.binary_rendering_warning in id-ID. Five more locales (az-AZ, bn-IN, kn-IN, te-IN, tr-TR) were translated after that change and also just say "Contributors".
ar-EG and tr-TR account for 76 of the 104 (profile page, privacy policy, a11y page, compare, trends, translation status).
Some may be fine as written, e.g. es says "us" for "{some} of us", and tr-TR writes "npmx" where English has {app}. A native speaker can tell. package.maintainers.maintainer_template in ar-EG and it-IT uses a literal ~ instead of the {char126} slot, which renders the same.
Activity
[-]20 translations use placeholder names that the code never passes, values are blank[/-][+]20 translations use placeholder names that the code never passes, values are blank[/+]owgreen-dev commentedon Oct 8, 2026
When checking the locale files I also found translations that leave out something the English string has: a count, a name, a link, sometimes most of the sentence. The key is there, so nothing shows up as missing. I didn't touch these because fixing them needs someone who actually speaks the language. Listing them here to be addressed:
74 keys (104 key/locale pairs). The main pairs:
ar-EG"All ({count})" is just "الكل" ("All"),tr-TR"+{count} more" is "Daha fazla anahtar kelime" ("more keywords"), and thetr-TRprivacy policy intro is one line ("npmx'e hoş geldiniz") where English has a full paragraph.about.contributors.titlewas changed in feat: sort contributors list by role #1369 (Feb 13) to "... and {count} more contributors", and 8 locales (ar, fr-FR, hi-IN, id-ID, ja-JP, pl-PL, pt-BR, ru-RU) still say "Contributors". Same forcode.binary_rendering_warninginid-ID. Five more locales (az-AZ, bn-IN, kn-IN, te-IN, tr-TR) were translated after that change and also just say "Contributors".ar-EGandtr-TRaccount for 76 of the 104 (profile page, privacy policy, a11y page, compare, trends, translation status).essays "us" for "{some} of us", andtr-TRwrites "npmx" where English has{app}. A native speaker can tell.package.maintainers.maintainer_templateinar-EGandit-ITuses a literal~instead of the{char126}slot, which renders the same.Full list
about.contributors.title: ar, az-AZ, bn-IN, fr-FR, hi-IN, id-ID, ja-JP, kn-IN, pl-PL, pt-BR, ru-RU, te-IN, tr-TRcode.binary_rendering_warning: ar-EG, es, id-ID, pt-BRvacations.subtitle: bn-IN, es, id-IDprofile.not_found_message: ar-EG, tr-TRpackage.versions.copy_alt.general_description: ar-EG, hu-HUpackage.maintainers.maintainer_template: ar-EG, it-ITcompare.file_filter_option.all: ar-EG, tr-TRcompare.file_filter_option.added: ar-EG, tr-TRcompare.file_filter_option.removed: ar-EG, tr-TRcompare.file_filter_option.modified: ar-EG, tr-TRcompare.no_files_search: ar-EG, tr-TRcompare.no_files_filtered: ar-EG, tr-TRshortcuts.disable_shortcuts: de, tr-TRabout.what_we_are.admin_description: ro-RO, tr-TRaccount_menu.ops: tr-TR, zh-TWcompare.scatter_chart.copy_alt.description: zh-CN, zh-TWar-EG only
blog.author.view_profileblog.atproto.more_repliesprofile.invite.compose_textpackage.card.select_maximumpackage.versions.distribution_range_date_same_yearpackage.versions.distribution_range_date_multiple_yearspackage.versions.copy_alt.per_version_analysispackage.versions.no_match_filterpackage.trends.known_anomalies_rangepackage.trends.copy_alt.analysispackage.trends.copy_alt.comparepackage.trends.copy_alt.single_packagepackage.trends.copy_alt.general_descriptionpackage.trends.copy_alt.facet_bar_general_descriptionpackage.trends.copy_alt.facet_bar_analysisclaim.modal.missing_permissionheader.prcompare.facets.select_all_category_facetscompare.facets.deselect_all_category_facetscompare.facets.selected_all_category_facetscompare.facets.deselected_all_category_facetscompare.version_invalid_url_format.hintpds.community.descriptionpds.community.view_profilepds.community.new_accountstranslation_status.welcometranslation_status.p1translation_status.p2translation_status.progress_labeltranslation_status.table.file_linkaction_bar.shortcutbrand.guidelines.messagetr-TR only
filters.more_keywordsfilters.remove_filterfilters.pagination.per_pageabout.what_we_are.descriptionabout.what_we_are_not.package_managers_existabout.contributors.view_profileauth.modal.atmosphere_explanationcompare.selector.packages_selectedcompare.no_dependency.tooltip_descriptionprivacy_policy.welcomeprivacy_policy.cookies.types.p1privacy_policy.cookies.types.li1privacy_policy.cookies.types.li2privacy_policy.cookies.local_storage.p1privacy_policy.cookies.local_storage.p2privacy_policy.cookies.management.p1privacy_policy.analytics.p1privacy_policy.authenticated.p1privacy_policy.authenticated.p2privacy_policy.contact.p1a11y.welcomea11y.approach.p2a11y.contact.p1Other single-locale
search.instant_search_advisory: de-ATpackage.versions.filter_tooltip: espackage.stats.size_tooltip.total: nlI can also open a tracking issue for these if that's easier for pinging translators.