A casting call arrives in French. The talent's profile is written in English. The agent's interface is in French this morning, in English this afternoon. In a bilingual country, this crossing is the daily life of a casting platform, and it asks a question of pure logic: how do you make two vocabularies meet without ever translating?

One word, too many spellings

Open the "languages" column of a real talent roster. You will not find "Anglais" and "English" side by side and nothing else. You will find "Anglais (accent)", "Anglais (léger accent)", "anglais avec accent", "Anglais (Américain, Britannique)", "English (light accent)", "Coréen (notions)", "Créole haïtien", "LSQ". Every profile is written by a different person, in the language they chose, with the precision they chose. An exact comparator recognizes almost nothing.

The instinctive reaction would be to translate: push everyone into one common language before comparing. That is the tempting idea, and it fails twice. First, translation destroys exactly the information that matters: "accent" and "notions" are not details, they are hints about how a person performs. Second, a translation is a second source of truth: it must be maintained, kept in sync, and it can lie all by itself.

The decision: never translate

The automatic reading of casting calls was written on the same choice: every criterion stays in the language of the source call. So the meeting happens differently. Every spelling is attached to a canonical form, a standard shape computed by deterministic code. It is the old reflex of mathematics: you do not compare 6/8 and 3/4 by staring at the digits, you first reduce both to their simplest form. A filter on "Anglais" and a profile saying "anglais avec accent" are two spellings of the same canon, and the comparator only ever sees the canon.

Three rules, and one alias table

The canon is computed with three rules, in order:

  • Strip what sits inside parentheses. "Anglais (léger accent)" becomes "Anglais". The precision stays in the profile, displayed as written, but it no longer takes part in the criterion. The product rule is explicit: if the language is on the profile, that is enough to propose the talent. The accent is a nuance the agent weighs while watching the self-tape, not a matching criterion.
  • Split on separators, never inside parentheses. "Anglais (Américain, Britannique), Espagnol (accent d'Espagne)" yields two values, not three. Without the parenthesis, one comma would have cut a country into an invented language.
  • Keep the longest recognized token. "Créole haïtien" keeps both words, because "haïtien" is what sets it apart from the creole of the French Antilles. And anything nothing recognizes stays unknown: "ouvert à toutes les langues" does not become English, because it is not.

All of it rests on an alias table, kept by hand, for the spellings real data uses and no menu ever shows: Farsi and Persan point to the same canon, LSQ is Quebec sign language, Grecque joins grec. The table is small, honest, and grows with every new spelling found in a real roster.

What the database holdsWhat the matching keeps
"Anglais (léger accent)"english, the accent set aside
"Anglais (Américain, Britannique), Espagnol (accent d'Espagne)"two values: english, spanish
"Créole haïtien"haitian creole, not just creole
"LSQ"quebec sign language
"ouvert à toutes les langues"nothing, we do not guess

One function reads a profile's languages

The second half of the problem is not the canon, it is the number of readers. A talent roster is read by the tri, by the advanced filters, by the score, by the voice-language counters. If every surface re-cuts the column its own way, the same data starts answering differently from one screen to the next. The rule in the code is simple: one function reads a profile's languages, and every surface goes through it. A French filter finds the profile written in English because both talk to the same canon, not because anyone translated.

Translating a talent roster adds a second source of truth. Reducing every spelling to its canon adds none.

What the pattern teaches

The same pattern settles the other demographic criteria: gender and origin each have their canon and its synonym table, so that "femme", "Female" and "féminin" carry the same weight. And the general lesson fits in one sentence: when two vocabularies must meet, the question is not "who translates whom", it is "what is the smallest form in which they become identical". It is set theory applied to a bilingual address book, and it runs in microseconds.