Aller au contenu

Référence

phil/locale-dimensions

Chaque type public de la librairie, sous Phil\LocaleDimensions. Chacun est un objet valeur final et immuable, construit par un constructeur nommé qui refuse ce qui ne peut pas exister par Exception\InvalidLocaleDimension.

TypeRôle
LocaleUne langue, restreinte au besoin à une région
VersionUne version comptée à partir de un
FallbackChainLes locales essayées, dans l'ordre, pour une locale demandée
DeclaredLocalesLes locales que sert une application, chacune avec sa chaîne
Exception\InvalidLocaleDimensionUne valeur refusée à sa construction

Locale

Locale::fromString(string) accepte une seule graphie : une langue de deux ou trois lettres minuscules, suivie au besoin d'un trait de soulignement et d'une région de deux lettres majuscules (fr, fil, fr_CA), comme l'écrivent Symfony et intl. Les lignes sont trouvées par égalité sur cette chaîne : admettre fr-CA ou fr_ca à côté de fr_CA créerait des lignes qu'une recherche manquerait. Toute autre forme est refusée, jamais normalisée.

MembreRenvoie
$value, $language, $regionfr_CA, fr, CA (null sans région)
sharesLanguageWith(Locale)si les deux ont la même langue : fr et fr_CA oui, fr_CA et en_CA non
toLanguageTag()l'étiquette BCP 47, fr-CA, que lisent hreflang, lang et Content-Language
equals(Locale), toString(), __toString()comparaison et forme en chaîne

Les locales qui existent relèvent de la décision de l'application ; Locale refuse seulement ce qui ne peut pas en être une. Les écritures (zh_Hant) et les régions numériques (es_419) ne sont pas acceptées.

Version

Version compte à partir de un : Version::first(), Version::of(int), next(), isAfter(Version), equals(Version), et la propriété publique $number. Version::of() refuse zéro et les nombres négatifs, quelle que soit leur source : une version zéro se lirait comme « pas encore de version » à un endroit et comme une vraie ligne à un autre.

Une version publiée n'est jamais modifiée. La modifier crée la version suivante, et la version publiée reste telle qu'elle a été approuvée ou envoyée. L'événement qui fige une version relève de la décision de l'application ; la numérotation, non.

FallbackChain

La liste ordonnée des locales essayées pour une locale demandée, la locale demandée en premier.

MembreRenvoie
FallbackChain::of(array)la chaîne ; refuse une liste vide et une locale qui apparaît deux fois
$localesles locales, la locale demandée en premier
requested()la locale demandée
resolve(iterable)la première locale de la chaîne parmi celles données, ou null
leavesRequestedLanguage(Locale)si servir cette locale quitte la langue demandée
toString()fr_CA → fr → en
  • La chaîne est déclarée, jamais déduite. Retirer la région (fr_CA → fr) puis se replier sur une langue par défaut a l'air général et se trompe dès que deux variantes régionales d'une langue coexistent.
  • Une chaîne épuisée ne mène à rien. L'appelant refuse — une 404, null, une exception à lui — plutôt que de servir une locale que personne n'a déclarée.
  • Un changement de langue est signalé, un changement de région ne l'est pas. leavesRequestedLanguage() permet à l'application de le compter, ou de dire sur la page qu'elle s'affiche dans une autre langue.

Une chaîne résout ce qui est servi ; elle ne choisit pas la locale demandée. Ce choix — le _locale de la requête, une négociation Accept-Language, une préférence de la personne — se fait avant, dans l'application.

DeclaredLocales

Les locales que sert une application, à partir du tableau qu'elle déclare : chaque clé est une locale servie, chaque valeur les locales essayées après elle, dans l'ordre.

MembreRenvoie
DeclaredLocales::fromArray(array)les locales déclarées ; refuse une locale mal formée, une locale de repli qui n'est pas servie, des locales de repli qui ne forment pas une liste, une chaîne qui répète une locale
all()les locales servies, dans l'ordre de leur déclaration
isServed(Locale)si la locale est déclarée
chainFor(Locale)sa FallbackChain ; refuse une locale qui n'est pas servie

Une locale de repli doit elle-même être servie : une chaîne qui finit sur une locale que personne n'a déclarée servirait ce que l'application ne publie pas.

Exception\InvalidLocaleDimension

Une InvalidArgumentException, levée par chaque valeur refusée à sa construction. Son message nomme la valeur et s'adresse au développeur ou à l'administrateur qui l'a déclarée ; un bundle qui lit une locale dans une adresse ou un formulaire l'attrape et répond par une 404 ou une erreur de formulaire, ou lève sa propre exception avec celle-ci comme précédente.