diff options
-rw-r--r-- | includes/common.inc | 41 | ||||
-rw-r--r-- | modules/node/content_types.inc | 6 | ||||
-rw-r--r-- | modules/system/system.module | 6 |
3 files changed, 40 insertions, 13 deletions
diff --git a/includes/common.inc b/includes/common.inc index 175f9c9c1..6c442e5b3 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -927,34 +927,63 @@ function format_xml_elements($array) { * 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: + * @code + * $output = format_plural($node->comment_count, '1 comment', '@count comments'); + * @endcode + * + * Example with additional replacements: + * @code + * $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))); + * @endcode + * * @param $count * The item count to display. * @param $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 singluar string. * @param $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". + * @param $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. * @return * A translated string. */ -function format_plural($count, $singular, $plural) { - if ($count == 1) return t($singular, array("@count" => $count)); +function format_plural($count, $singular, $plural, $args = array()) { + if ($count == 1) { + return t($singular, $args); + } + $args['@count'] = $count; // get the plural index through the gettext formula $index = (function_exists('locale_get_plural')) ? locale_get_plural($count) : -1; if ($index < 0) { // backward compatibility - return t($plural, array("@count" => $count)); + return t($plural, $args); } else { switch ($index) { case "0": - return t($singular, array("@count" => $count)); + return t($singular, $args); case "1": - return t($plural, array("@count" => $count)); + return t($plural, $args); default: - return t(strtr($plural, array("@count" => '@count['. $index .']')), array('@count['. $index .']' => $count)); + unset($args['@count']); + $args['@count['. $index .']'] = $count; + return t(strtr($plural, array('@count' => '@count['. $index .']')), $args); } } } diff --git a/modules/node/content_types.inc b/modules/node/content_types.inc index 7b2c55b95..b026292f6 100644 --- a/modules/node/content_types.inc +++ b/modules/node/content_types.inc @@ -351,9 +351,7 @@ function node_node_type($op, $info) { $update_count = node_type_update_nodes($info->old_type, $info->type); if ($update_count) { - $substr_pre = 'Changed the content type of '; - $substr_post = strtr(' from %old-type to %type.', array('%old-type' => theme('placeholder', $info->old_type), '%type' => theme('placeholder', $info->type))); - drupal_set_message(format_plural($update_count, $substr_pre .'@count post'. $substr_post, $substr_pre .'@count posts'. $substr_post)); + drupal_set_message(format_plural($update_count, 'Changed the content type of 1 post from %old-type to %type.', 'Changed the content type of @count posts from %old-type to %type.', array('%old-type' => $info->old_type, '%type' => $info->type))); } } } @@ -391,7 +389,7 @@ function node_type_delete_confirm($type) { $num_nodes = db_num_rows(db_query("SELECT * FROM {node} WHERE type = '%s'", $type->type)); if ($num_nodes) { - $caption .= '<p>'. strtr(format_plural($num_nodes, '<strong>Warning:</strong> there is currently @count %type post on your site. It may not be able to be displayed or edited correctly, once you have removed this content type.', '<strong>Warning:</strong> there are currently @count %type posts on your site. They may not be able to be displayed or edited correctly, once you have removed this content type.'), array('%type' => theme('placeholder', $type->name))) .'</p>'; + $caption .= '<p>'. format_plural($num_nodes, '<strong>Warning:</strong> there is currently 1 %type post on your site. It may not be able to be displayed or edited correctly, once you have removed this content type.', '<strong>Warning:</strong> there are currently @count %type posts on your site. They may not be able to be displayed or edited correctly, once you have removed this content type.', array('%type' => $type->name)) .'</p>'; } $caption .= '<p>'. t('This action cannot be undone.') .'</p>'; diff --git a/modules/system/system.module b/modules/system/system.module index 3bf4d19e6..206dc69bf 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -1398,10 +1398,10 @@ function system_modules_confirm_form($modules, $form_values = array()) { $missing_dependencies[$k] = $info['name'] ? $info['name'] : drupal_ucfirst($dependency); } $t_argument = array( - '%module' => $modules[$name]->info['name'], - '%dependencies' => implode(', ', $missing_dependencies), + '@module' => $modules[$name]->info['name'], + '@dependencies' => implode(', ', $missing_dependencies), ); - $items[] = strtr(format_plural(count($missing_dependencies), 'You must enable the %dependencies module to install %module.', 'You must enable the %dependencies modules to install %module.'), $t_argument); + $items[] = format_plural(count($missing_dependencies), 'You must enable the @dependencies module to install @module.', 'You must enable the @dependencies modules to install @module.', $t_argument); } $form['text'] = array('#value' => theme('item_list', $items)); } |