UI glossary: one name per concept, in the web app and in the Chrome extension
The web app and the BoostEcom Spy extension show the same store records. A reader who sees "Similar Shops" in one and "Similar stores" in the other has to wonder whether they are two features. This file fixes ONE name…
The web app and the BoostEcom Spy extension show the same store records. A reader who sees "Similar Shops" in one and "Similar stores" in the other has to wonder whether they are two features. This file fixes ONE name per concept, in English and French (the extension ships those two languages; the web app ships six, whose translations already follow the same concept).
Rules used to decide:
- The web app is the product; the extension is a companion. Where the app already has a consistent name, the extension adopts it.
- Where the app itself is inconsistent, the term with the most uses, the closest to the data field and to the platform's own vocabulary wins.
- American English, Shopify lexicon ("store", not "shop"), sentence case for
labels ("Active ads", not "Active Ads"). Sentence case is enforced by
pnpm copy:caseon the web app. - A concept keeps its name in prose too, unless the sentence needs a description rather than the feature name.
Canonical names
| Concept | EN | FR | Rejected variants | Why |
|---|---|---|---|---|
| Lookalike stores of a store | Similar stores | Boutiques similaires | Similar Shops | "Store" is the lexicon; the app's own tool names, the extension and the data field (similar_stores) already say it. |
| Apps detected on a storefront | Shopify apps | Apps Shopify | Apps, Applications, Shopify Apps | Names what the list is (a bare "Apps" is ambiguous next to the marketplace). The app's store record, its empty states and the marketplace nav already use it. |
| Ad, analytics and pixel tags detected on a storefront | Pixels | Pixels | Tracking pixels, Pixels de suivi | Short label already used by the app's detail view, the Store Spy filters and the field list. "Tracking pixel" stays fine in running prose. |
| Ads the library shows as running now | Active ads | Pubs actives | Live Ads, Publicités actives, Annonces actives | Matches the Ad Library vocabulary, the data field (active_creatives), the public pages and the extension. One FR short form for labels. |
| The platform's store index (search, filter, rank, open a store record) | Store Spy | Veille boutiques | Stores Spy, Spy (alone) | Singular, like "Brand Tracker". The FR navigation already calls it "Veille boutiques". The extension itself is "BoostEcom Spy" and its tab may be labelled "Spy"; any sentence that points to the platform's index says "Store Spy". |
| Shared, server-side competitor watchlist with digests | Brand Tracker | Suivi de marques | Team competitor tracking, Suivi concurrentiel de l'équipe, Watchlist | The app's navigation, row actions and digest emails. |
| Add a store to the Brand Tracker | Track in Brand Tracker | Ajouter au suivi de marques | Track this website, Suivre ce site | Row action in the app. |
| Remove a store from the Brand Tracker | Untrack this store | Ne plus suivre cette boutique | Stop tracking, Arrêter le suivi | Row action in the app. |
| Browser-only bookmark kept in the extension's Library | Save locally | Enregistrer localement | Save this store, Save this website, Mettre de côté, Enregistrer ici | The word "locally" is what separates it from the Brand Tracker, which is shared and server-side. Saved state: "Saved locally" / "Enregistré localement". |
The two "save" actions must never share a name. "Save locally" never leaves the browser (unless the user pushes the library to the cloud); "Track in Brand Tracker" writes to the team's list on the platform.
Words that are NOT the same thing (do not unify)
| Term | Meaning | Keep |
|---|---|---|
| BoostEcom Spy | The Chrome extension (product name, in legal pages and the Web Store). | Always the full name when naming the extension. |
| Spy Intelligence, Spy brief, Spy record | The extension's feature family and its briefs. | Untouched; they name the companion product. |
| Active ads vs Total ads | Running now vs held by the library. Two different numbers. | Both, never one for the other. |
| Estimate vs Measured | A modelled figure vs a disclosed one (see the contract below). | Always the word that says which. |
Applied in the web app (this change)
Message keys in messages/*.json; English and French changed, the four other
locales already used the equivalent term (German "Aktive Anzeigen", Spanish
"Anuncios activos", Portuguese "Anúncios ativos"). Italian keeps "Inserzioni
attive" inside the store detail panel for internal consistency with its other
labels there.
| Key | EN before | EN after | FR before | FR after |
|---|---|---|---|---|
hub.intelDetail.similarShops | Similar Shops | Similar stores | (unchanged) | Boutiques similaires |
hub.intelDetail.noSimilarShops | No similar shops indexed yet | No similar stores indexed yet | (unchanged) | Aucune boutique similaire indexée pour l'instant |
hub.intelDetail.shopifyApps | Shopify Apps | Shopify apps | Apps Shopify | Apps Shopify |
hub.marketplace.nav.install.subs.apps.label | Shopify Apps | Shopify apps | Apps Shopify | Apps Shopify |
hub.intelDetail.liveAds | Live Ads | Active ads | Publicités actives | Pubs actives |
hub.intelDetail.liveAdsOverTime | Live Ads Over Time | Active ads over time | Évolution des publicités actives | Évolution des pubs actives |
hub.intelDetail.historicLiveAds | Historic of Live Ads | Active ads history | Historique des publicités actives | Historique des pubs actives |
hub.intelDetail.activeAds | {count} Active Ads | {count} active ads | {count} pubs actives | {count} pubs actives |
hub.intelDetail.back | Back to Stores Spy | Back to Store Spy | Retour à la veille boutiques | Retour à la veille boutiques |
hub.marketplace.nav.intel.subs.intelStores.label | Stores Spy | Store Spy | Veille boutiques | Veille boutiques |
watchDigest.adsUp, adsDown, adsLocked, board.minAds, board.sortLiveAds, board.sortLiveAdsDelta, board.tipAds | "Live ads ..." | "Active ads ..." | "Annonces actives ..." | "Pubs actives ..." |
spyFinish.adPeakHint, peakHeaderTip, legend.metric.ads, legend.ads | "live ads" | "active ads" | (already "pubs actives") | (unchanged) |
directories.directory.row.ads, directories.dossier.bands.ads.label | (already "Active ads") | (unchanged) | Publicités actives | Pubs actives |
savedSearches.email.subject, eyebrow, cta | Store Spy | (unchanged) | Store Spy | Veille boutiques |
directories.directory.method.items.bands.text | Store Spy | (unchanged) | Store Spy | veille boutiques |
Known residuals, deliberately left: German, Spanish, Italian and Portuguese
emails and directory text still say "Store Spy" as a proper noun (those four
locales have no extension counterpart); src/services/discovery/categories.ts
carries the literal label "Top Shopify Apps" (a ranking title, not a UI label);
marketing prose that says "tracking pixels" in a sentence.
Extension keys to change (for the extension agent)
File: _locales/en/messages.json and _locales/fr/messages.json. Change the
message value only; keep the key name (renaming trackerOff and friends
would break stored references and tests for no gain). Every t("key", "fallback")
call in sidebar/*.js and ui/*.js whose fallback string repeats an old
value must change with it.
Shopify apps
| Key | EN now | EN new | FR now | FR new |
|---|---|---|---|---|
intelApps | Apps | Shopify apps | Apps | Apps Shopify |
briefApps | Apps | Shopify apps | Applications | Apps Shopify |
Pixels
| Key | EN now | EN new | FR now | FR new |
|---|---|---|---|---|
intelPixels | Tracking pixels | Pixels | Pixels de suivi | Pixels |
briefPixels | Tracking pixels | Pixels | Pixels de suivi | Pixels |
intelNoPixels | No tracking pixels observed in Spy | No pixels observed in Store Spy | Aucun pixel observé dans Spy | Aucun pixel observé dans la veille boutiques |
localNoPixels | No tracking pixel recognised on this page | No pixel recognized on this page | Aucun pixel de suivi reconnu sur cette page | Aucun pixel reconnu sur cette page |
Active ads
| Key | EN now | EN new | FR now | FR new |
|---|---|---|---|---|
intelActiveAdsTitle | Active Ads | Active ads | Pubs actives | (unchanged) |
(intelAds and intelAdsPageAds already match.)
Store Spy (sentences that point to the platform's index)
The tab label "Spy" and the names "BoostEcom Spy", "Spy Intelligence", "Spy brief" stay. Change only where the text names the platform's store index.
| Key | EN now | EN new | FR now | FR new |
|---|---|---|---|---|
pageSpyPixelsSee | Open Spy | Open Store Spy | Ouvrir Spy | Ouvrir la veille boutiques |
intelNotIndexed | This store isn’t in Spy yet. | This store isn’t in Store Spy yet. | Cette boutique n’est pas encore dans Spy. | Cette boutique n’est pas encore dans la veille boutiques. |
metricScriptsHint | Third-party hosts on this tab. Not the Shopify apps list on Spy. | Third-party hosts on this tab. Not the Shopify apps list in Store Spy. | Hôtes tiers sur cet onglet. Pas la liste d’apps Shopify de Spy. | Hôtes tiers sur cet onglet. Pas la liste d’apps Shopify de la veille boutiques. |
supplierSharedHint | Same product fingerprint sold by other stores in Spy. | Same product fingerprint sold by other stores in Store Spy. | Même empreinte produit vendue par d’autres boutiques Spy. | Même empreinte produit vendue par d’autres boutiques de la veille boutiques. |
radarOpportunityHint | Composite opportunity score from Spy history. | Composite opportunity score from Store Spy history. | Score d’opportunité composite d’après l’historique Spy. | Score d’opportunité composite d’après l’historique de la veille boutiques. |
seoPageBriefSection | Store homepage on-page SEO. source: last Spy scan | Store homepage on-page SEO. source: last Store Spy scan | SEO on-page de l’accueil boutique. source : dernier scan Spy | SEO on-page de l’accueil boutique. source : dernier scan de la veille boutiques |
Brand Tracker
| Key | EN now | EN new | FR now | FR new |
|---|---|---|---|---|
trackerTitle | Team competitor tracking | Brand Tracker | Suivi concurrentiel de l’équipe | Suivi de marques |
trackerAdd | Track this website | Track in Brand Tracker | Suivre ce site | Ajouter au suivi de marques |
trackerRemove | Stop tracking | Untrack this store | Arrêter le suivi | Ne plus suivre cette boutique |
libraryTracking | Tracking | Brand Tracker | Suivi | Suivi de marques |
sectionWatchlistHint | The same saved websites as Library and the footer bookmark. Team competitor tracking is managed separately. | The same saved websites as Library and the footer bookmark. Brand Tracker is managed separately. | Les mêmes boutiques enregistrées que dans la Bibliothèque et via le favori du pied de page. Le suivi concurrentiel partagé se gère dans la section dédiée. | Les mêmes boutiques enregistrées que dans la Bibliothèque et via le favori du pied de page. Le suivi de marques se gère dans la section dédiée. |
trackerDailyBudget | Daily limit of full store records reached. You can track a new website again tomorrow. | Daily limit of full store records reached. You can track a new store again tomorrow. | Limite quotidienne de fiches complètes atteinte. Vous pourrez suivre un nouveau site demain. | Limite quotidienne de fiches complètes atteinte. Vous pourrez suivre une nouvelle boutique demain. |
Local save (browser only)
| Key | EN now | EN new | FR now | FR new |
|---|---|---|---|---|
trackerOff | Save this store | Save locally | Mettre de côté | Enregistrer localement |
trackerOn | Saved | Saved locally | Enregistrée | Enregistrée localement |
savedCurrent | Save this website | Save locally | Enregistrer ce site | Enregistrer localement |
savedCurrentLocal | Save locally | (unchanged) | Enregistrer ici | Enregistrer localement |
Optional (American English)
The extension catalogue uses British spellings in places ("recognised"). The platform is American English; align when touching the key.
How to keep this true
- A new label for one of these concepts goes through this table first.
- The web app's copy gates (
pnpm copy:case,pnpm copy:dashes) already catch Title Case and dashes inmessages/*.json. - The extension has no copy gate for this; the extension agent should add a small test that its catalogue contains none of the "rejected variants" above as a whole label.