Accessing Locale Data from Templates

Yii, the framework Craft is built on, ships with a tremendous amount of data for various locales, pulled from the Unicode Common Locale Data Repository. (You can see it all by peeking in craft/app/framework/i18n/data/.)

Craft exposes it in its templates, via craft.i18n.getLocaleData():

{% set localeData = craft.i18n.getLocaleData() %}

<select name="month">
  {% for month in localeData.getMonthNames() %}
    <option value="{{ loop.index }}">{{ month }}</option>
  {% endfor %}
</select>

By default, getLocaleData() will return data for the active locale (whatever craft.locale returns), but it’s possible to override that by passing in a different locale ID:

{% set month0 = now.month - 1 %}

{% for locale in craft.i18n.getSiteLocales() %}
  {% set localeData = craft.i18n.getLocaleData(locale.id) %}

  <p>
    Month in {{ locale.name }}:
    {{ localeData.getMonthName(month0) }}
  </p>
{% endfor %}

Applies to Craft CMS 3.