format_plural

Versions
4.6 – 5
format_plural($count, $singular, $plural)
6
format_plural($count, $singular, $plural, $args = array(), $langcode = NULL)
7
format_plural($count, $singular, $plural, array $args = array(), array $options = array())

Format a string containing a count of items.

This function ensures that the string is pluralized correctly. Since t() is called by this function, make sure not to pass already-localized strings to it.

For example:

<?php

$output = format_plural($node->comment_count, '1 comment', '@count comments');

?>

Example with additional replacements:

<?php

$output = format_plural($update_count,
'Changed the content type of 1 post from %old-type to %new-type.',
'Changed the content type of @count posts from %old-type to %new-type.',
array('%old-type' => $info->old_type, '%new-type' => $info->new_type)));

?>

Parameters

$count The item count to display.

$singular The string for the singular case. Please make sure it is clear this is singular, to ease translation (e.g. use "1 new comment" instead of "1 new"). Do not use @count in the singular string.

$plural The string for the plural case. Please make sure it is clear this is plural, to ease translation. Use @count in place of the item count, as in "@count new comments".

$args An associative array of replacements to make after translation. Incidences of any key in this array are replaced with the corresponding value. Based on the first character of the key, the value is escaped and/or themed:

  • !variable: inserted as is
  • @variable: escape plain text to HTML (check_plain)
  • %variable: escape text and theme as a placeholder for user-submitted content (check_plain + theme_placeholder)

Note that you do not need to include @count in this array. This replacement is done automatically for the plural case.

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

Return value

A translated string.

Related topics

▾ 28 functions call format_plural()

actions_synchronize in includes/actions.inc
Synchronize actions that are provided by modules.
aggregator_view in modules/aggregator/aggregator.admin.inc
Displays the aggregator administration page.
comment_link in modules/comment/comment.module
Implementation of hook_link().
comment_nodeapi in modules/comment/comment.module
Implementation of hook_nodeapi().
format_interval in includes/common.inc
Format a time interval with the requested granularity.
format_size in includes/common.inc
Generate a string representation for the given byte count.
hook_link in developer/hooks/core.php
Define internal Drupal links.
menu_delete_menu_confirm in modules/menu/menu.admin.inc
Build a confirm form for deletion of a custom menu.
menu_edit_menu_validate in modules/menu/menu.admin.inc
Validates the human and machine-readable names when adding or editing a menu.
node_node_type in modules/node/content_types.inc
Implementation of hook_node_type().
node_title_list in modules/node/node.module
Gather a listing of links to nodes.
node_type_delete_confirm in modules/node/content_types.inc
Menu callback; delete a single content type.
poll_page in modules/poll/poll.pages.inc
Menu callback to provide a simple list of all polls available.
search_admin_settings in modules/search/search.admin.inc
Menu callback; displays the search module settings page.
statistics_link in modules/statistics/statistics.module
Implementation of hook_link().
system_modules_confirm_form in modules/system/system.admin.inc
Display confirmation form for dependencies.
template_preprocess_forum_list in modules/forum/forum.module
Process variables to format a forum listing.
template_preprocess_forum_topic_list in modules/forum/forum.module
Preprocess variables to format the topic listing.
throttle_exit in modules/throttle/throttle.module
Implementation of hook_exit().
tracker_page in modules/tracker/tracker.pages.inc
Menu callback. Prints a listing of active nodes on the site.
upload_link in modules/upload/upload.module
Implementation of hook_link().
upload_nodeapi in modules/upload/upload.module
Implementation of hook_nodeapi().
user_block in modules/user/user.module
Implementation of hook_block().
_aggregator_items in modules/aggregator/aggregator.module
Helper function for drupal_map_assoc.
_locale_batch_language_finished in includes/locale.inc
Finished callback of language addition locale import batch. Inform the user of translation files imported.
_locale_batch_system_finished in includes/locale.inc
Finished callback of system page locale import batch. Inform the user of translation files imported.
_locale_import_po in includes/locale.inc
Parses Gettext Portable Object file information and inserts into database
_node_mass_update_batch_finished in modules/node/node.admin.inc
Node Mass Update Batch 'finished' callback.

Code

includes/common.inc, line 1173

<?php
function format_plural($count, $singular, $plural, $args = array(), $langcode = NULL) {
  $args['@count'] = $count;
  if ($count == 1) {
    return t($singular, $args, $langcode);
  }

  // Get the plural index through the gettext formula.
  $index = (function_exists('locale_get_plural')) ? locale_get_plural($count, $langcode) : -1;
  // Backwards compatibility.
  if ($index < 0) {
    return t($plural, $args, $langcode);
  }
  else {
    switch ($index) {
      case "0":
        return t($singular, $args, $langcode);
      case "1":
        return t($plural, $args, $langcode);
      default:
        unset($args['@count']);
        $args['@count['. $index .']'] = $count;
        return t(strtr($plural, array('@count' => '@count['. $index .']')), $args, $langcode);
    }
  }
}
?>
Login or register to post comments
 
 

All source code and documentation on this site is released under the terms of the GNU General Public License, version 2 and later. Drupal is a registered trademark of Dries Buytaert.