Skip to content

refactor(i18n): name gallery filters by property instead of "Show X" - #4149

Open
sdornan wants to merge 4 commits into
rommapp:masterfrom
sdornan:claude/filter-naming-review-1cd053
Open

refactor(i18n): name gallery filters by property instead of "Show X"#4149
sdornan wants to merge 4 commits into
rommapp:masterfrom
sdornan:claude/filter-naming-review-1cd053

Conversation

@sdornan

@sdornan sdornan commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Description

The gallery's bool filters are tri-state (All / Yes / No), but seven of them were labelled with a verb prefix. That made "Show missing" set to No read as a double negative, and the shared "Show" prefix was really just the section heading hoisted into each row.

They're now named after the property being filtered, matching the Has saves / Has save states / Has soundtrack trio that already read correctly:

Before After
Show matched / Show unmatched Matched / Unmatched
Show favourites Favorite (en_US) · Favourite (en_GB)
Show versions Has versions
Show playables Playable in browser
Show missing Missing from disk
Show verified Hash verified
Show Retroachievements Has RetroAchievements

Two labels also named the wrong thing: verified is a DAT/hash match via Hasheous rather than generic verification, and missing is specifically missing_from_fs. Neither was guessable from the old label.

The section heading moves from Show to Properties so it sits parallel with the drawer's other two headings (Platforms, Tags), and platform.show is renamed to platform.properties to match its value. Wording is picked per locale rather than mapped from one word: CJK takes the native 属性 / 屬性 / 속성 over the katakana loan, which reads as a file-properties dialog.

This also corrects the RetroAchievements casing, which disagreed with every other string referencing it.

Note

These keys are shared with the v1 filter drawer, so v1's labels change too. Forking them into v2-only keys would mean 8 duplicate keys across 18 locales for a UI slated for deletion, so the shared rename seemed like the right call. v1 was verified visually.

A second commit fixes an unrelated dialect problem found while auditing: en_US carried British spellings (favourites, catalogues), en_GB carried American ones (color).

All 18 locales are updated in the same change. Where a translation had drifted from the English meaning it was corrected rather than carried over: bg_BG had playables as "изпълнимите" (executable), de_DE had matched as "zugewiesene" (assigned).

Verification

vue-tsc, 667/667 vitest, npm run build, ESLint, i18n parity + sort, and Trunk all pass. Manually verified in the browser: v2 light/dark at 1440px plus 390px and 320px, the v1 drawer in both themes, and live renders in fr/de/ja/hu/ru with no label wrapping or clipping in any locale.

AI assistance disclosure

Written with Claude Code (Opus 5), which did the full change: label selection, all 18 locale translations, the key rename, and verification. Reviewed by me before submission.

Checklist

  • I've tested the changes locally
  • I've updated relevant comments (n/a, no comments affected)
  • I've assigned reviewers for this PR
  • I've added unit tests that cover the changes (updated the existing smartCollectionCriteria assertion; no new logic to test)

Screenshots

image-1786117691456 image-1786117697399 image-1786117702801 image-1786117707456

sdornan and others added 2 commits August 7, 2026 10:40
The bool filters are tri-state (All / Yes / No), so a verb-prefixed
label read as a double negative: "Show missing" set to No. Name them
after the property being filtered, matching the "Has saves" trio that
already did.

Several labels also named the wrong thing. "Show verified" is a DAT
hash match via Hasheous, not a generic verification, and "Show missing"
is specifically missing from disk.

The section heading becomes "Properties" so it sits parallel with the
drawer's other two headings (Platforms, Tags), and its key is renamed
to match. Also corrects the RetroAchievements casing, which disagreed
with every other string referencing it.

These keys are shared with the v1 filter drawer, so its labels change
too.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
en_US carried British spellings (favourites, catalogues) while en_GB
carried American ones (color). Each locale now uses its own throughout.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings August 7, 2026 15:47
@greptile-apps

greptile-apps Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR renames gallery boolean-filter labels to describe the filtered properties, replaces the section heading with “Properties,” and aligns all 18 locale dictionaries. It also corrects US/UK spelling differences and updates smart-collection fallback labels and their existing test.

  • Updates localized gallery filter terminology without changing filter storage or behavior.
  • Replaces the removed platform.show heading key with platform.properties across every enabled locale.
  • Corrects selected en_US and en_GB dialect spellings.

Confidence Score: 5/5

The PR appears safe to merge; no concrete functional, compatibility, localization-parity, or security defects were identified.

The renamed translation key is present in every enabled locale with no remaining consumer of the removed key, while smart-collection labels remain display-only and do not alter persisted filter criteria.

Important Files Changed

Filename Overview
frontend/src/v2/components/Gallery/FilterDrawer.vue Switches the boolean-filter section heading from the removed platform.show key to the new, consistently provided platform.properties key.
frontend/src/v2/utils/smartCollectionCriteria.ts Updates rendering-only fallback labels for boolean smart-collection criteria; serialized filter keys and values are unchanged.
frontend/src/v2/utils/smartCollectionCriteria.test.ts Updates the negative matched-filter assertion to the new “Unmatched” display contract.
frontend/src/locales/en_US/platform.json Adds the new heading key, updates property-oriented filter labels, and corrects American spelling while preserving key parity.
frontend/src/locales/en_GB/platform.json Adds the new heading key and updates property-oriented filter labels using British spelling.
frontend/src/locales/bg_BG/platform.json Representative non-English locale update adding the new heading and aligned property labels; the same key structure is maintained across all enabled locales.

Reviews (1): Last reviewed commit: "fix(i18n): use each English locale's own..." | Re-trigger Greptile

@Spinnich

Spinnich commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

There's probably a few other spots in the system that use only favourite / favourites as an fyi for consistency. Probably out of scope, and likely tricky for the default standard collection that gets seeded during the first game that is favorited.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors the gallery boolean tri-state filter labels to be property-based (instead of a repeated “Show …” verb prefix), renames the section heading from “Show” to “Properties”, and fixes en_US vs en_GB dialect spellings in a few strings.

Changes:

  • Update v2 smart-collection criteria defaults and the related test assertion to match the new property-style labels.
  • Update the v2 gallery filter drawer section heading to use platform.properties.
  • Update all 18 locale platform.json files for the renamed heading key and revised filter label strings, plus a few en_US/en_GB dialect corrections in other namespaces.

Reviewed changes

Copilot reviewed 25 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
frontend/src/v2/utils/smartCollectionCriteria.ts Updates default fallback labels for several boolean criteria to match the new property-style wording.
frontend/src/v2/utils/smartCollectionCriteria.test.ts Updates the negative tri-state summary assertion to the new “Unmatched” label.
frontend/src/v2/components/Gallery/FilterDrawer.vue Switches the boolean filter section heading from platform.show to platform.properties.
frontend/src/locales/bg_BG/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/cs_CZ/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/de_DE/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/en_GB/platform.json Adds properties and updates boolean filter labels, keeping en_GB spellings.
frontend/src/locales/en_US/platform.json Adds properties and updates boolean filter labels, using en_US spellings.
frontend/src/locales/es_ES/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/fr_FR/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/hu_HU/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/it_IT/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/ja_JP/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/ko_KR/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/pl_PL/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/pt_BR/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/ro_RO/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/ru_RU/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/tr_TR/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/zh_CN/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/zh_TW/platform.json Adds properties and updates boolean filter labels to property-based wording.
frontend/src/locales/en_US/setup.json Fixes en_US dialect spelling (“catalogues” to “catalogs”).
frontend/src/locales/en_US/rom.json Fixes en_US dialect spelling (“favourites” to “favorites”).
frontend/src/locales/en_GB/settings.json Fixes en_GB dialect spelling (“Color” to “Colour”).
frontend/src/locales/en_GB/play.json Fixes en_GB dialect spelling (“color” to “colour”).
Suppressed comments (1)

frontend/src/locales/en_US/platform.json:97

  • show-verified is now “Hash verified”, but show-verified-only / show-not-verified-only still refer to generic “verified/non-verified” ROMs.

To avoid reintroducing the ambiguity this PR is addressing, update the related “only” strings across locales to explicitly reference hash/DAT verification (for example, “Show hash-verified ROMs only”).

  "show-verified": "Hash verified",
  "show-verified-only": "Show verified ROMs only",

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread frontend/src/locales/en_US/platform.json Outdated
Comment thread frontend/src/locales/en_US/platform.json Outdated
sdornan and others added 2 commits August 7, 2026 11:00
The yes/no buttons kept the vaguer wording ("Show verified ROMs only")
while their row labels became specific ("Hash verified"). These strings
are the buttons' accessible names, so a screen reader announces them
without the row label alongside for context.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The message was a hardcoded English literal, so it stayed English in
every locale. It also carried a British spelling in a file the rest of
the app writes as American.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants