Update filter labels for conciseness and consistency across components and translations.

This commit is contained in:
MartinBraquet
2026-07-26 14:52:22 +02:00
parent fdc57f80af
commit 20732a5cbe
24 changed files with 93 additions and 90 deletions

View File

@@ -383,28 +383,28 @@
"events.why_description": "Events sind das Herzbedeutungsvoller Verbindungen. Ob online oder in Person, sie schaffen Raum für tiefere Gespräche, gemeinsame Erlebnisse und dauerhafte Beziehungen.",
"events.why_organize": "Warum Events organisieren?",
"filter.age.age": "Alter",
"filter.age.any": "Alle",
"filter.age.any": "Alter",
"filter.age.label": "Alter",
"filter.age.up_to": "bis zu",
"filter.age.years": "Jahre",
"filter.any": "Alle",
"filter.any_cannabis": "Beliebiges Cannabis",
"filter.any_causes": "Jedes Anliegen",
"filter.any_diet": "Jede Ernährung",
"filter.any_drinks": "Jedes Getränk",
"filter.any_education": "Alle Bildungsniveaus",
"filter.any_interests": "Jedes Interesse",
"filter.any_language": "Alle Sprachen",
"filter.any_mbti": "Jeder MBTI",
"filter.any_neurotype": "Beliebiger Neurotyp",
"filter.any_cannabis": "Cannabis",
"filter.any_causes": "Moralische Anliegen",
"filter.any_diet": "Ernährung",
"filter.any_drinks": "Getränke",
"filter.any_education": "Bildungsniveau",
"filter.any_interests": "Interessen",
"filter.any_language": "Sprachen",
"filter.any_mbti": "MBTI",
"filter.any_neurotype": "Neurotyp",
"filter.any_new_users": "Jegliche neue Nutzer",
"filter.any_orientation": "Jede Orientierung",
"filter.any_politics": "Jede politische Ausrichtung",
"filter.any_psychedelics": "Beliebige Psychedelika",
"filter.any_relationship": "Jede romantische Beziehung",
"filter.any_religion": "Jede Religion",
"filter.any_work": "Jede Arbeit",
"filter.big5.any": "Beliebige Big 5",
"filter.any_orientation": "Orientierung",
"filter.any_politics": "Politische Ausrichtung",
"filter.any_psychedelics": "Psychedelika",
"filter.any_relationship": "Beziehungsstil",
"filter.any_religion": "Religion",
"filter.any_work": "Arbeit",
"filter.big5.any": "Big 5",
"filter.big5.custom": "Benutzerdefinierte Big 5",
"filter.card_size": "Kartengröße",
"filter.card_size.large": "Groß",
@@ -412,7 +412,7 @@
"filter.card_size.small": "Klein",
"filter.clear_all": "Alle löschen",
"filter.drinks.per_month": "pro Monat",
"filter.gender.any": "Alle",
"filter.gender.any": "Geschlecht",
"filter.gender.gender": "Geschlecht",
"filter.gender.genders": "Geschlechter",
"filter.gender.show_more": "Mehr Geschlechter anzeigen",
@@ -449,12 +449,12 @@
"filter.last_active.3days": "Letzte 3 Tage",
"filter.last_active.3months": "Letzte 3 Monate",
"filter.last_active.any": "Jederzeit",
"filter.last_active.label": "Aktiv",
"filter.last_active.label": "Zuletzt aktiv",
"filter.last_active.month": "Letzter Monat",
"filter.last_active.now": "Jetzt online",
"filter.last_active.today": "Heute",
"filter.last_active.week": "Letzte Woche",
"filter.location": "Wohnhaft",
"filter.location": "Standort",
"filter.location.any": "überall",
"filter.location.search_city": "Stadt suchen...",
"filter.location.set_any_city": "Auf jede Stadt einstellen",
@@ -464,8 +464,8 @@
"filter.neurotype.show_more": "Mehr Neurotypen anzeigen",
"filter.orientation.show_more": "Mehr Orientierungen anzeigen",
"filter.raised_in": "Aufgewachsen",
"filter.relationship.any_connection": "Jede Beziehung",
"filter.relationship_status.any": "Jeder romantische Status",
"filter.relationship.any_connection": "Beziehung",
"filter.relationship_status.any": "Status",
"filter.reset": "Zurücksetzen",
"filter.selected": "Filter ausgewählt",
"filter.selected_plural": "Filter ausgewählt",
@@ -486,6 +486,7 @@
"filter.show_photos": "Profilfotos anzeigen",
"filter.show_seeking": "Was sie suchen",
"filter.show_smoking": "Rauchen",
"filter.tobacco": "Tabak",
"filter.wants_kids.any_preference": "Alle Präferenzen",
"filter.wants_kids.doesnt_want_kids": "Möchte keine Kinder",
"filter.wants_kids.either": "Egal",

View File

@@ -383,28 +383,28 @@
"events.why_description": "Les événements sont au cœur de relations qui ont du sens. Qu'ils soient en ligne ou en personne, ils créent un espace pour des conversations plus profondes, des expériences partagées et des relations durables.",
"events.why_organize": "Pourquoi organiser des événements ?",
"filter.age.age": "âge",
"filter.age.any": "Tout",
"filter.age.any": "Âge",
"filter.age.label": "Âge",
"filter.age.up_to": "jusqu'à",
"filter.age.years": "ans",
"filter.any": "Tous",
"filter.any_cannabis": "Tout cannabis",
"filter.any_causes": "Toute cause",
"filter.any_diet": "Tout régime alimentaire",
"filter.any_drinks": "Toute boisson",
"filter.any_education": "Tous niveaux d'études",
"filter.any_interests": "Tout intérêt",
"filter.any_language": "Toutes les langues",
"filter.any_mbti": "Tout MBTI",
"filter.any_neurotype": "Tout neurotype",
"filter.any_cannabis": "Cannabis",
"filter.any_causes": "Causes morales",
"filter.any_diet": "Régime alimentaire",
"filter.any_drinks": "Boissons",
"filter.any_education": "Niveau d'études",
"filter.any_interests": "Intérêts",
"filter.any_language": "Langues",
"filter.any_mbti": "MBTI",
"filter.any_neurotype": "Neurotype",
"filter.any_new_users": "Tout nouvel utilisateur",
"filter.any_orientation": "Toute orientation",
"filter.any_politics": "Toute orientation politique",
"filter.any_psychedelics": "Tout psychédélique",
"filter.any_relationship": "Toute relation amoureuse",
"filter.any_religion": "Toute religion",
"filter.any_work": "Tout travail",
"filter.big5.any": "Tout Big 5",
"filter.any_orientation": "Orientation",
"filter.any_politics": "Orientation politique",
"filter.any_psychedelics": "Psychédéliques",
"filter.any_relationship": "Style de relation",
"filter.any_religion": "Religion",
"filter.any_work": "Domaine de travail",
"filter.big5.any": "Big 5",
"filter.big5.custom": "Certains Big 5",
"filter.card_size": "Taille de la carte",
"filter.card_size.large": "Grand",
@@ -412,7 +412,7 @@
"filter.card_size.small": "Petit",
"filter.clear_all": "Tout effacer",
"filter.drinks.per_month": "par mois",
"filter.gender.any": "Tout",
"filter.gender.any": "Genre",
"filter.gender.gender": "genre",
"filter.gender.genders": "genres",
"filter.gender.show_more": "Afficher plus de genres",
@@ -449,12 +449,12 @@
"filter.last_active.3days": "3 derniers jours",
"filter.last_active.3months": "3 derniers mois",
"filter.last_active.any": "N'importe quand",
"filter.last_active.label": "Actif",
"filter.last_active.label": "Dernière activité",
"filter.last_active.month": "Dernier mois",
"filter.last_active.now": "En ligne",
"filter.last_active.today": "Aujourd'hui",
"filter.last_active.week": "Dernière semaine",
"filter.location": "Habite",
"filter.location": "Lieu",
"filter.location.any": "n'importe où",
"filter.location.search_city": "Rechercher une ville...",
"filter.location.set_any_city": "N'importe quelle ville",
@@ -464,8 +464,8 @@
"filter.neurotype.show_more": "Afficher plus de neurotypes",
"filter.orientation.show_more": "Afficher plus d'orientations",
"filter.raised_in": "A grandi",
"filter.relationship.any_connection": "Toute relation",
"filter.relationship_status.any": "Tout statut romantique",
"filter.relationship.any_connection": "Relation",
"filter.relationship_status.any": "Statut",
"filter.reset": "Réinitialiser",
"filter.selected": "filtre sélectionné",
"filter.selected_plural": "filtres sélectionnés",
@@ -486,6 +486,7 @@
"filter.show_photos": "Afficher les photos",
"filter.show_seeking": "Ce qu'ils cherchent",
"filter.show_smoking": "Fumeur",
"filter.tobacco": "Tabac",
"filter.wants_kids.any_preference": "N'importe",
"filter.wants_kids.doesnt_want_kids": "Ne veut pas d'enfants",
"filter.wants_kids.either": "N'importe",

View File

@@ -26,12 +26,7 @@ export function AgeFilterText(props: {
const t = useT()
if (noMinAge && noMaxAge) {
return (
<span>
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.age.any', 'Any')}
</span>{' '}
<span className="">{t('filter.age.age', 'age')}</span>
</span>
<span className={clsx('text-semibold', highlightedClass)}>{t('filter.age.any', 'Age')}</span>
)
}
if (noMinAge) {

View File

@@ -49,9 +49,7 @@ export function Big5FilterText(props: {filters: Partial<FilterFields>; highlight
const hasAny = hasAnyBig5Filter(filters)
if (!hasAny) {
return (
<span className={clsx(!hasAny && 'text-ink-600')}>{t('filter.big5.any', 'Any Big 5')}</span>
)
return <span className={clsx(!hasAny && 'text-ink-600')}>{t('filter.big5.any', 'Big 5')}</span>
}
return (

View File

@@ -17,7 +17,7 @@ export function CannabisFilterText(props: {
if (!options || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.any_cannabis', 'Any cannabis')}
{t('filter.any_cannabis', 'Cannabis')}
</span>
)
}

View File

@@ -18,7 +18,7 @@ export function DietFilterText(props: {
if (!options || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.any_diet', 'Any diet')}
{t('filter.any_diet', 'Diet')}
</span>
)
}

View File

@@ -36,7 +36,7 @@ export function DrinksFilterText(props: {
if (noMin && noMax) {
return (
<span>
<span className="">{t('filter.any_drinks', 'Any drinks')}</span>
<span className="">{t('filter.any_drinks', 'Drinks')}</span>
</span>
)
}

View File

@@ -20,7 +20,7 @@ export function EducationFilterText(props: {
if (!options || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.any_education', 'Any education')}
{t('filter.any_education', 'Education')}
</span>
)
}

View File

@@ -349,7 +349,7 @@ function Filters(props: {
selection={
<RelationshipStatusFilterText
options={filters.relationship_status as string[]}
defaultLabel={t('filter.relationship_status.any', 'Any status')}
defaultLabel={t('filter.relationship_status.any', 'Status')}
// highlightedClass={
// hasAny(filters.relationship_status || undefined)
// ? 'text-primary-600'
@@ -755,7 +755,7 @@ function Filters(props: {
selection={
<MbtiFilterText
options={filters.mbti as string[] | undefined}
defaultLabel={t('filter.any_mbti', 'Any MBTI')}
defaultLabel={t('filter.any_mbti', 'MBTI')}
// highlightedClass={hasAny(filters.mbti) ? 'text-primary-600' : 'text-ink-900'}
/>
}
@@ -932,7 +932,7 @@ function FilterGroup(props: {
const {title, children, openGroup, setOpenGroup, icon} = props
const isOpen = openGroup === title
// A group is a container for sections, and nothing about the old layout said so: an open "Background"
// and its "Any education" / "Any work" children sat at identical indent, weight and colour, so the
// and its "Education" / "Work" children sat at identical indent, weight and colour, so the
// children read as siblings. The header now takes a filled pill when open and the children hang off
// an indented accent rail, which is what actually communicates "these belong to that".
return (

View File

@@ -18,11 +18,8 @@ export function GenderFilterText(props: {gender: Gender[] | undefined; highlight
const t = useT()
if (!gender || gender.length < 1) {
return (
<span>
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.gender.any', 'Any')}
</span>{' '}
<span className="">{t('filter.gender.gender', 'gender')}</span>
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.gender.any', 'Gender')}
</span>
)
}

View File

@@ -20,7 +20,7 @@ export function InterestFilterText(props: {
if (!options || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t(`filter.any_${label}`, `Any ${label}`)}
{t(`filter.any_${label}`, `${label.charAt(0).toUpperCase()}${label.slice(1)}`)}
</span>
)
}

View File

@@ -19,7 +19,7 @@ export function LanguageFilterText(props: {
if (!options || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.any_language', 'Any language')}
{t('filter.any_language', 'Language')}
</span>
)
}

View File

@@ -20,7 +20,7 @@ export function LastActiveFilterText(props: {
return (
<Row className="items-center gap-0.5">
<span className={highlightedClass}>
{t('filter.last_active.label', 'Active')}: {label}
{key === DEFAULT_KEY ? t('filter.last_active.label', 'Last active') : label}
</span>
</Row>
)

View File

@@ -29,16 +29,9 @@ export function LocationFilterText(props: {
const t = useT()
const locationLabel = labelPrefix
? t('filter.raised_in', labelPrefix)
: t('filter.location', 'Living')
: t('filter.location', 'Location')
if (!location) {
return (
<span>
<span className="">{locationLabel} </span>
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.location.any', 'anywhere')}
</span>
</span>
)
return <span className={clsx('text-semibold', highlightedClass)}>{locationLabel}</span>
}
const formattedDistance = formatDistance(radius, measurementSystem)

View File

@@ -1,7 +1,7 @@
import {CheckIcon} from '@heroicons/react/24/outline'
import clsx from 'clsx'
import {Profile} from 'common/profiles/profile'
import {Row} from 'web/components/layout/row'
import {Checkbox} from 'web/components/widgets/checkbox'
import {useT} from 'web/lib/locale'
export function MyMatchesToggle(props: {
@@ -18,9 +18,28 @@ export function MyMatchesToggle(props: {
const label = t('filter.mine_toggle', 'Your filters')
// Same chip styling as IncompleteProfilesToggle so the two boolean toggles in this panel
// read as one consistent control, not a checkbox next to a pill.
return (
<Row className={clsx('mr-2', checked && 'font-semibold')}>
<Checkbox label={label} checked={checked} toggle={setYourFilters} />
<Row className="mr-2">
<label
className={clsx(
'group relative inline-flex cursor-pointer select-none items-center gap-1.5 rounded-full border px-3.5 py-1.5 text-sm font-medium transition-all duration-150',
'focus-within:ring-2 focus-within:ring-primary-400 focus-within:ring-offset-1 focus-within:ring-offset-canvas-50',
checked
? 'border-cta bg-cta text-white shadow-[0_2px_8px_rgba(193,127,62,0.28)]'
: 'border-canvas-300 bg-canvas-0 text-ink-600 hover:border-primary-400 hover:text-primary-700',
)}
>
<input
type="checkbox"
className="sr-only"
checked={checked}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => setYourFilters(e.target.checked)}
/>
{checked && <CheckIcon className="h-3.5 w-3.5 flex-shrink-0" strokeWidth={3} />}
<span className="whitespace-nowrap">{label}</span>
</label>
</Row>
)
}

View File

@@ -25,7 +25,7 @@ export function NeurotypeFilterText(props: {
if (!options || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.any_neurotype', 'Any neurotype')}
{t('filter.any_neurotype', 'Neurotype')}
</span>
)
}

View File

@@ -25,7 +25,7 @@ export function OrientationFilterText(props: {
if (!options || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.any_orientation', 'Any orientation')}
{t('filter.any_orientation', 'Orientation')}
</span>
)
}

View File

@@ -20,7 +20,7 @@ export function PoliticalFilterText(props: {
if (!options || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.any_politics', 'Any politics')}
{t('filter.any_politics', 'Politics')}
</span>
)
}

View File

@@ -17,7 +17,7 @@ export function PsychedelicsFilterText(props: {
if (!options || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.any_psychedelics', 'Any psychedelics')}
{t('filter.any_psychedelics', 'Psychedelics')}
</span>
)
}

View File

@@ -17,7 +17,7 @@ export function RelationshipFilterText(props: {
if (!relationship || relationshipLength < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.relationship.any_connection', 'Any connection')}
{t('filter.relationship.any_connection', 'Connection')}
</span>
)
}

View File

@@ -16,7 +16,7 @@ export function RelationshipStatusFilterText(props: {
const t = useT()
const length = (options ?? []).length
const label = defaultLabel || t('filter.any', 'Any Status')
const label = defaultLabel || t('filter.any', 'Status')
if (!options || length < 1) {
return <span className={clsx('text-semibold', highlightedClass)}>{label}</span>

View File

@@ -20,7 +20,7 @@ export function ReligionFilterText(props: {
if (!options || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.any_religion', 'Any religion')}
{t('filter.any_religion', 'Religion')}
</span>
)
}

View File

@@ -18,7 +18,7 @@ export function RomanticFilterText(props: {
if (!relationship || length < 1) {
return (
<span className={clsx('text-semibold', highlightedClass)}>
{t('filter.any_relationship', 'Any relationship style')}
{t('filter.any_relationship', 'Relationship style')}
</span>
)
}

View File

@@ -15,9 +15,8 @@ export function SmokerFilterText(props: {
return (
<Row className="items-center gap-0.5">
<span className={clsx(highlightedClass, is_smoker != null && 'font-semibold')}>
{is_smoker == null && t('profile.smokes', 'Smokes') + ': '}
{is_smoker == null
? t('common.either', 'Either')
? t('filter.tobacco', 'Tobacco')
: is_smoker
? mobile
? t('common.yes', 'Yes')