Locale override for getName() (with multiple fallbacks) #195
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR is an alternative to #184. This PR additionally adds support for multiple fallback locales.
Sometimes you need multiple translations for the same holiday.
Pre v2.2.0 you could easily access all translations in
$holiday->translations
. With the introduction of locale fallback in #176, things got more complicated, especially with substitute holidays (introduced in #162), so accessing thetranslations
property is difficult.I suggest adding an optional
$locales
parameter to$holiday->getName()
. This allows passing an array of locales to be searched for translations. E.g if['es_ES', 'de_AT']
is provided, the following lookup priority is used:es_ES
→es
→de_AT
→de
.If no parameter is provided, use the display locale with fallback to
DEFAULT_LOCALE
and the short name. E.g. if the display locale ises_ES
, the following lookup priority is used:es_ES
→es
→en_US
→en
→ short name.Note that when providing the optional
$locales
parameter,DEFAULT_LOCALE
and the short name is not used as fallbacks unless explicitly requested. This offers the user better control over fallback behaviour while preserving backwards compatibility.Parent locales (e.g.
de
is the parent locale ofde_AT
) are always used, even when not specified explicitly. Parent locales are not considered a “fallback”. Instead, all strings in a parent locale are considered to be identical in the child locales unless explicitly overridden. I believe this convention is also used elsewhere, e.g. in CLDR.