ianm/iso-639
Provides ISO 639 language code data for PHP, mapping codes to language names so apps can display, validate, and look up locale or language identifiers. A lightweight dependency used by Flarum extensions for consistent language handling.
en/pt-BR column into something a catalogue or search facet can display.language_code and language_name reduces integration friction and cuts a class of support tickets.The opportunity score here is low and the adoption signals are effectively nil (no stars, no dependents). Treat this as a reference implementation and dataset, not as infrastructure. The product decision it most cleanly supports is: do we vendor a small static language map, or do we standardise on an ICU/CLDR-backed library? That is a decision worth making deliberately once, because it determines whether you can later show language names in the user's own locale (e.g. "German" vs "Deutsch" vs "Allemand"), which is a genuinely different product capability from a single-locale label.
Consider it when all of the following hold:
ext-intl and no symfony/intl already pulled in — in which case this adds a small amount of value rather than duplicating it.Look elsewhere — or build in-house — when any of these apply:
pt-BR, zh-Hant) are out of scope; reach for symfony/intl, ICU/CLDR data, or a maintained language-list package.\Locale::getDisplayLanguage() or Languages::getName() covers this and far more, with a maintenance story you already pay for.Net recommendation: do not adopt as a runtime dependency. Either vendor the dataset behind your own small interface (so the source can be swapped later), or standardise on symfony/intl if localized names are anywhere on the roadmap. If you do adopt, wrap it — never call it from views or controllers directly.
For executives: This is a ~180-entry lookup table that turns a two-letter language code into a readable name. It is not a platform or a strategic bet. The package itself has no meaningful adoption or maintenance signal, so I do not recommend taking it on as a dependency. The underlying need — showing "French" instead of "fr" in settings, filters, and dashboards — is real but small, and we can meet it in an afternoon with a vendored data file. The one decision worth your attention is whether language names eventually need to appear in the user's own language; if international expansion is on the roadmap, we should adopt a CLDR-backed library now rather than accrue a series of one-off tables we later have to unpick.
For engineering: The ask is a code-to-name map with no behaviour beyond lookup. Two viable paths: (1) vendor the dataset behind a LanguageNameResolver interface with a single name(string $code): ?string method, keeping the third-party source an implementation detail we can replace; or (2) add symfony/intl if we want localized display names, script and region data, and a maintained data pipeline. Please do not call the package directly from Blade templates or controllers, and do not use it for input validation — validation belongs to a whitelist we control. Whatever we choose, keep the interface narrow so the choice stays reversible.
How can I help you explore Laravel packages today?