function test_translate_plural()
 {
     $entry_incomplete = new Translation_Entry(array('singular' => 'baba', 'plural' => 'babas', 'translations' => array('babax')));
     $entry_toomany = new Translation_Entry(array('singular' => 'wink', 'plural' => 'winks', 'translations' => array('winki', 'winka', 'winko')));
     $entry_2 = new Translation_Entry(array('singular' => 'dyado', 'plural' => 'dyados', 'translations' => array('dyadox', 'dyadoy')));
     $domain = new Translations();
     $domain->add_entry($entry_incomplete);
     $domain->add_entry($entry_toomany);
     $domain->add_entry($entry_2);
     $this->assertEquals('other', $domain->translate_plural('other', 'others', 1));
     $this->assertEquals('others', $domain->translate_plural('other', 'others', 111));
     // too few translations + cont logic
     $this->assertEquals('babas', $domain->translate_plural('baba', 'babas', 2));
     $this->assertEquals('babas', $domain->translate_plural('baba', 'babas', 0));
     $this->assertEquals('babas', $domain->translate_plural('baba', 'babas', -1));
     $this->assertEquals('babas', $domain->translate_plural('baba', 'babas', 999));
     // proper
     $this->assertEquals('dyadox', $domain->translate_plural('dyado', 'dyados', 1));
     $this->assertEquals('dyadoy', $domain->translate_plural('dyado', 'dyados', 0));
     $this->assertEquals('dyadoy', $domain->translate_plural('dyado', 'dyados', 18881));
     $this->assertEquals('dyadoy', $domain->translate_plural('dyado', 'dyados', -18881));
 }
/**
 * 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:
 * @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 singular 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.
 * @param $langcode
 *   Optional language code to translate to a language other than
 *   what is used to display the page.
 * @return
 *   A translated string.
 */
function format_plural($count, $singular, $plural, $args = array(), $langcode = NULL, $context = NULL)
{
    global $language, $cfg;
    $args['@count'] = $count;
    if ($count == 1) {
        return _t($singular, $args, $langcode);
    }
    $po = new Translations();
    $po->merge_with($language['translate']);
    // Get the plural index through the gettext formula.
    $plural = $po->translate_plural($singular, $plural, $count, $context);
    return _t($plural, $args, $langcode);
}