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.

$options An associative array of additional options, with the following keys:

  • 'langcode' (default to the current language) The language code to translate to a language other than what is used to display the page.
  • 'context' (default to the empty context) The context the source string belongs to.

Return value

A translated string.

Related topics

▾ 37 functions call format_plural()

actions_synchronize in includes/actions.inc
Synchronizes actions that are provided by modules in hook_action_info().
comment_node_search_result in modules/comment/comment.module
Implement hook_node_search_result().
comment_node_view in modules/comment/comment.module
Implement hook_node_view().
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_node_search_result in modules/node/node.api.php
The node is being displayed as a search result.
node_multiple_delete_confirm in modules/node/node.admin.inc
node_node_type_insert in modules/node/content_types.inc
Implement hook_node_type_insert().
node_node_type_update in modules/node/content_types.inc
Implement hook_node_type_update().
node_requirements in modules/node/node.module
Implement hook_requirements().
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.
simpletest_clean_database in modules/simpletest/simpletest.module
Removed prefixed tables from the database that are left over from crashed tests.
simpletest_clean_environment in modules/simpletest/simpletest.module
Remove all temporary database tables and directories.
simpletest_clean_temporary_directories in modules/simpletest/simpletest.module
Find all leftover temporary directories and remove them.
statistics_node_view in modules/statistics/statistics.module
Implement hook_node_view().
system_modules_confirm_form in modules/system/system.admin.inc
Display confirmation form for required modules.
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.
theme_field_formatter_number in modules/field/modules/number/number.module
Proxy theme function for number field formatters.
tracker_page in modules/tracker/tracker.pages.inc
Menu callback; prints a listing of active nodes on the site.
trigger_example_form in developer/examples/trigger_example.module
A form to help fire our triggers.
update_fetch_data_finished in modules/update/update.fetch.inc
Batch API callback when all fetch tasks have been completed.
upload_node_links in modules/upload/upload.module
Inject links into $node for attachments.
upload_node_search_result in modules/upload/upload.module
Implement hook_node_search_result().
user_block_view in modules/user/user.module
Implement hook_block_view().
user_login_final_validate in modules/user/user.module
The final validation handler on the login form.
_aggregator_characters in modules/aggregator/aggregator.processor.inc
Helper function for teaser length choices.
_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_characters in modules/node/content_types.inc
Helper function for teaser length choices.
_node_mass_update_batch_finished in modules/node/node.admin.inc
Node Mass Update Batch 'finished' callback.
_simpletest_format_summary_line in modules/simpletest/simpletest.module

Code

includes/common.inc, line 2127

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

  // Get the plural index through the gettext formula.
  $index = (function_exists('locale_get_plural')) ? locale_get_plural($count, isset($options['langcode']) ? $options['langcode'] : NULL) : -1;
  // Backwards compatibility.
  if ($index < 0) {
    return t($plural, $args, $options);
  }
  else {
    switch ($index) {
      case "0":
        return t($singular, $args, $options);
      case "1":
        return t($plural, $args, $options);
      default:
        unset($args['@count']);
        $args['@count[' . $index . ']'] = $count;
        return t(strtr($plural, array('@count' => '@count[' . $index . ']')), $args, $options);
    }
  }
}
?>
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.