locale_get_plural

locale_get_plural($count, $langcode = NULL)

Returns plural form index for a specific number.

The index is computed from the formula of this language.

Parameters

$count: Number to return plural for.

$langcode: Optional language code to translate to a language other than what is used to display the page.

Return value

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.

File

core/modules/locale/locale.module, line 275
Enables the translation of the user interface to languages other than English.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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', array());
 
  $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] = isset($plural_formulas[$index]) ? $plural_formulas[$index] : $plural_formulas['default'];
    }
    // In case there is no plural formula for English (no imported translation
    // for English), use a default formula.
    elseif ($langcode == 'en') {
      $plural_indexes[$langcode][$count] = (int) ($count != 1);
    }
    // Otherwise, return -1 (unknown).
    else {
      $plural_indexes[$langcode][$count] = -1;
    }
  }
  return $plural_indexes[$langcode][$count];
}
doc_Drupal
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.