Skip to content

20 translations use placeholder names that the code never passes, values are blank #3310

Closed

Description

@owgreen-dev

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.

Locale Key Was → Now Effect
tr-TR filters.count.showing_all {total} → {count} " paket gösteriliyor" → "1,234 paket gösteriliyor"
tr-TR filters.count.showing_filtered {total} → {count} "10 / paket…" → "10 / 1,234 paket…"
tr-TR filters.count.showing_paginated {start}-{end} / {total} → {pageSize} / {count} blank range
ro-RO package.stats.published_tooltip {pachet}/{versiune} → {package}/{version} "…publicat @" → "…publicat vue@3.5.0"
nl shortcuts.disable_shortcuts {instellingen} → {settings} settings link missing
nl filters.pagination.showing {start}-{end} → {range} blank range (code passes formatRange)
de a11y.approach.p2 {about_link} → {about} <i18n-t> slot #about not rendered
pl-PL chart alt text {version_count} → {versions_count}, {package_analysis} → {packages_analysis} blank alt text
zh-TW copy_alt.compare, facet_bar_general_description {package_name}/{package} → {packages} blank alt text
ar-EG, tr-TR profile.seo_title, seo_description {name} → {handle} page title missing the handle
tr-TR compare.selector.remove_package {name} → {package} blank
tr-TR known_anomalies_range_named {name} → {packageName} blank

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 shipi18n check, which I authored and maintain. Each finding was verified by hand.

Activity

  1. 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
  2. owgreen-dev commented on Oct 8, 2026

    @owgreen-dev
    ContributorAuthor

    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.
    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-TR
    • code.binary_rendering_warning: ar-EG, es, id-ID, pt-BR
    • vacations.subtitle: bn-IN, es, id-ID
    • profile.not_found_message: ar-EG, tr-TR
    • package.versions.copy_alt.general_description: ar-EG, hu-HU
    • package.maintainers.maintainer_template: ar-EG, it-IT
    • compare.file_filter_option.all: ar-EG, tr-TR
    • compare.file_filter_option.added: ar-EG, tr-TR
    • compare.file_filter_option.removed: ar-EG, tr-TR
    • compare.file_filter_option.modified: ar-EG, tr-TR
    • compare.no_files_search: ar-EG, tr-TR
    • compare.no_files_filtered: ar-EG, tr-TR
    • shortcuts.disable_shortcuts: de, tr-TR
    • about.what_we_are.admin_description: ro-RO, tr-TR
    • account_menu.ops: tr-TR, zh-TW
    • compare.scatter_chart.copy_alt.description: zh-CN, zh-TW

    ar-EG only

    • blog.author.view_profile
    • blog.atproto.more_replies
    • profile.invite.compose_text
    • package.card.select_maximum
    • package.versions.distribution_range_date_same_year
    • package.versions.distribution_range_date_multiple_years
    • package.versions.copy_alt.per_version_analysis
    • package.versions.no_match_filter
    • package.trends.known_anomalies_range
    • package.trends.copy_alt.analysis
    • package.trends.copy_alt.compare
    • package.trends.copy_alt.single_package
    • package.trends.copy_alt.general_description
    • package.trends.copy_alt.facet_bar_general_description
    • package.trends.copy_alt.facet_bar_analysis
    • claim.modal.missing_permission
    • header.pr
    • compare.facets.select_all_category_facets
    • compare.facets.deselect_all_category_facets
    • compare.facets.selected_all_category_facets
    • compare.facets.deselected_all_category_facets
    • compare.version_invalid_url_format.hint
    • pds.community.description
    • pds.community.view_profile
    • pds.community.new_accounts
    • translation_status.welcome
    • translation_status.p1
    • translation_status.p2
    • translation_status.progress_label
    • translation_status.table.file_link
    • action_bar.shortcut
    • brand.guidelines.message

    tr-TR only

    • filters.more_keywords
    • filters.remove_filter
    • filters.pagination.per_page
    • about.what_we_are.description
    • about.what_we_are_not.package_managers_exist
    • about.contributors.view_profile
    • auth.modal.atmosphere_explanation
    • compare.selector.packages_selected
    • compare.no_dependency.tooltip_description
    • privacy_policy.welcome
    • privacy_policy.cookies.types.p1
    • privacy_policy.cookies.types.li1
    • privacy_policy.cookies.types.li2
    • privacy_policy.cookies.local_storage.p1
    • privacy_policy.cookies.local_storage.p2
    • privacy_policy.cookies.management.p1
    • privacy_policy.analytics.p1
    • privacy_policy.authenticated.p1
    • privacy_policy.authenticated.p2
    • privacy_policy.contact.p1
    • a11y.welcome
    • a11y.approach.p2
    • a11y.contact.p1

    Other single-locale

    • search.instant_search_advisory: de-AT
    • package.versions.filter_tooltip: es
    • package.stats.size_tooltip.total: nl

    I can also open a tracking issue for these if that's easier for pinging translators.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions