Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. locale.module

function locale_get_plural

Returns plural form index for a specific number.

The index is computed from the formula of this language.

Parameters

int $count: Number to return plural for.

string|null $langcode: (optional) Language code to translate to a language other than what is used to display the page, or NULL for current language. Defaults to NULL.

Return value

int The numeric index of the plural variant to use for this $langcode and $count combination or -1 if the language was not found or does not have a plural formula.

1 call to locale_get_plural()
PluralTranslatableMarkup::getPluralIndex in core/lib/Drupal/Core/StringTranslation/PluralTranslatableMarkup.php
Gets the plural index through the gettext formula.
1 string reference to 'locale_get_plural'
PluralTranslatableMarkup::getPluralIndex in core/lib/Drupal/Core/StringTranslation/PluralTranslatableMarkup.php
Gets the plural index through the gettext formula.

File

core/modules/locale/locale.module, line 168

Code

function locale_get_plural($count, $langcode = NULL) {
    $language_interface = \Drupal::languageManager()->getCurrentLanguage();
    // Used to store precomputed plural indexes corresponding to numbers
    // individually for each language.
    $plural_indexes =& drupal_static(__FUNCTION__ . ':plurals', []);
    $langcode = $langcode ? $langcode : $language_interface->getId();
    if (!isset($plural_indexes[$langcode][$count])) {
        // Retrieve and statically cache the plural formulas for all languages.
        $plural_formulas = \Drupal::service('locale.plural.formula')->getFormula($langcode);
        // If there is a plural formula for the language, evaluate it for the given
        // $count and statically cache the result for the combination of language
        // and count, since the result will always be identical.
        if (!empty($plural_formulas)) {
            // Plural formulas are stored as an array for 0-199. 100 is the highest
            // modulo used but storing 0-99 is not enough because below 100 we often
            // find exceptions (1, 2, etc).
            $index = $count > 199 ? 100 + $count % 100 : $count;
            $plural_indexes[$langcode][$count] = $plural_formulas[$index] ?? $plural_formulas['default'];
        }
        elseif ($langcode == 'en') {
            $plural_indexes[$langcode][$count] = (int) ($count != 1);
        }
        else {
            $plural_indexes[$langcode][$count] = -1;
        }
    }
    return $plural_indexes[$langcode][$count];
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal