Aller au contenu

Noms de personnes

phil/contact

Une ContactCard garde le nom d'une personne en un seul texte, name, et peut aussi le garder en ses parties, structuredName, un PersonName. Les parties permettent d'écrire et de trier le nom comme le fait sa culture : Charles de Gaulle se trie sous Gaulle en français, Herman Van Rompuy sous Van Rompuy en néerlandais de Belgique, et Bartók Béla s'écrit avec le nom de famille en premier en hongrois.

$name = PersonName::of(given: 'Charles', family: 'Gaulle', particle: 'de', culture: 'fr');

$name->display();   // "Charles de Gaulle"
$name->sortKey();   // "Gaulle, Charles de"

$card = ContactCard::of(structuredName: $name);
$card->name;        // "Charles de Gaulle"

Les parties

PartieExempleRemarque
givenAdaLe prénom
additional['Augusta']Les prénoms du milieu, au plus PersonName::MAX_ADDITIONAL (10)
particlede, van der, d'Accompagne un nom de famille ; une particule élidée, qui se termine par ' ou ’, s'écrit collée au nom
familyGaulleLe nom de famille, sans sa particule
secondFamilyMárquezUn second nom de famille, comme en espagnol
honorificDr.Écrit par formal()
generationJr., IIIÉcrit après le nom
credentialPhDÉcrit par formal(), après une virgule
culturefr-CAUne étiquette de langue BCP 47 ; _ est lu comme -
orderNameOrder::FamilyFirstL'emporte sur l'ordre de la culture ; aucun par défaut

PersonName::of() rogne chaque texte ; un texte vide n'en est pas un. Un nom a un prénom ou un nom de famille, chaque partie compte 255 caractères ou moins et ne contient aucun caractère de contrôle, et une étiquette de langue a une langue de deux ou trois lettres suivie de parties d'une à huit lettres ou chiffres, 35 caractères en tout. InvalidContact est levée sinon. Sur une fiche, la forme d'affichage du nom est le name de la fiche quand on ne lui en donne pas, et elle compte aussi 255 caractères ou moins.

Écrire et trier

MéthodeDonneCharles de Gaulle en français
display()Le nom tel qu'on l'écrit tous les jours, génération compriseCharles de Gaulle
formal()Avec le titre honorifique et le titre de compétenceGén. Charles de Gaulle, PhD
familyName()Le nom de famille tel qu'écrit, particule et second nom de famille comprisde Gaulle
surname()Le nom de famille avec sa particule, sans le second nom de famillede Gaulle
sortFamily()Le nom de famille sous lequel une liste se trieGaulle
sortKey()Le texte sous lequel une liste se trieGaulle, Charles de
separator()Ce qui sépare les partiesune espace
displayOrder()L'ordre dans lequel le nom s'écritNameOrder::GivenFirst
equals()Si deux noms ont les mêmes parties

Prénom d'abord, display() écrit le prénom, les prénoms additionnels et le nom de famille ; nom de famille d'abord, il écrit le nom de famille, les prénoms additionnels et le prénom, comme le vietnamien écrit Võ Nguyên Giáp. Les noms chinois, japonais et coréens écrits dans leurs propres caractères sont joints sans espace, 毛泽东, et avec une espace quand ils sont romanisés, Mao Zedong.

sortKey() met d'abord le nom de famille trié, puis le prénom et les prénoms additionnels, puis ce que le tri laisse de côté de la particule : Gogh, Vincent van. Ce que la clé garde d'une particule commence par une majuscule, comme l'imprime une liste triée : Du Bellay, Joachim. Une culture qui trie par le prénom le met en premier : Giáp, Võ Nguyên. Triez les clés avec un collationneur de la langue du lecteur, Collator::compare() de ext-intl : la clé ordonne les parties, le collationneur ordonne les lettres.

Chaque méthode prend en argument facultatif une NameConvention, qui l'emporte sur la culture du nom.

Les conventions de la bibliothèque

NameConventions::for($culture) donne la convention d'une culture, selon sa langue et, pour le néerlandais, son pays :

CultureOrdreClé de triExemple
Chinois, japonais, coréenNom de famille d'abord, caractères propres jointsNom de famille毛泽东 → 毛, 泽东
HongroisNom de famille d'abordNom de familleBartók Béla → Bartók, Béla
VietnamienNom de famille d'abordPrénomVõ Nguyên Giáp → Giáp, Võ Nguyên
IslandaisPrénom d'abordPrénomBjörk Guðmundsdóttir → Björk, Guðmundsdóttir
Néerlandais des Pays-BasPrénom d'abordSans la particuleVincent van Gogh → Gogh, Vincent van
Allemand, portugaisPrénom d'abordSans la particuleUrsula von der Leyen → Leyen, Ursula von der
FrançaisPrénom d'abordSans un de ou un d' initialJean de La Fontaine → La Fontaine, Jean de
EspagnolPrénom d'abordSans un de initialBartolomé de las Casas → Las Casas, Bartolomé de
Toute autre, néerlandais de Belgique comprisPrénom d'abordAvec la particuleHerman Van Rompuy → Van Rompuy, Herman

Un nom sans culture suit la dernière ligne. Une application qui connaît mieux une culture construit sa propre NameConvention — son ordre, les premiers mots d'une particule retirés de la clé de tri, si toute la particule est retirée, si les noms se trient par le prénom, si les noms en caractères chinois, japonais ou coréens sont joints — et la donne aux méthodes.

Dans les autres formats

FormatLe nom structuré
vCardN, avec le second nom de famille et la génération de la RFC 9554 quand le nom les a, LANGUAGE tiré de la culture et SORT-AS quand la culture trie le nom autrement qu'il est écrit
schema.orggivenName, additionalName, familyName, honorificPrefix et honorificSuffix (génération et titre de compétence) du Person
JSContactLes composantes de name, son sortAs et le language de la fiche — voir JSContact
StockageLa clé structuredName — voir Stockage