Using WordPress ‘ngettext_with_context_{$domain}’ PHP filter

The ngettext_with_context_{$domain} WordPress PHP filter allows you to filter the singular or plural form of a string with gettext context for a specific domain.

Usage

add_filter( 'ngettext_with_context_' . $domain, 'my_custom_function', 10, 6 );

function my_custom_function( $translation, $single, $plural, $number, $context, $domain ) {
    // Your custom code here

    return $translation;
}

Parameters

  • $translation (string) – Translated text.
  • $single (string) – The text to be used if the number is singular.
  • $plural (string) – The text to be used if the number is plural.
  • $number (int) – The number to compare against to use either the singular or plural form.
  • $context (string) – Context information for the translators.
  • $domain (string) – Text domain. Unique identifier for retrieving translated strings.

More information

See WordPress Developer Resources: ngettext_with_context_{$domain}

Examples

Simple Translation

This example filters the singular and plural form for a specific text domain, “my-text-domain”.

add_filter( 'ngettext_with_context_my-text-domain', 'my_custom_translation', 10, 6 );

function my_custom_translation( $translation, $single, $plural, $number, $context, $domain ) {
    if ( 'fruit' === $context ) {
        if ( 1 === $number ) {
            $translation = 'apple';
        } else {
            $translation = 'apples';
        }
    }

    return $translation;
}

Custom Number Logic

This example filters the translation based on custom number logic, where the plural form is used for any number greater than 3.

add_filter( 'ngettext_with_context_example-domain', 'custom_number_logic', 10, 6 );

function custom_number_logic( $translation, $single, $plural, $number, $context, $domain ) {
    if ( 'quantity' === $context ) {
        if ( $number <= 3 ) {
            $translation = $single;
        } else {
            $translation = $plural;
        }
    }

    return $translation;
}

Dynamic Context

This example filters the translation based on a dynamic context that is passed to the function.

add_filter( 'ngettext_with_context_example-domain', 'dynamic_context', 10, 6 );

function dynamic_context( $translation, $single, $plural, $number, $context, $domain ) {
    if ( 'custom_context' === $context ) {
        $translation = $number === 1 ? 'custom_single' : 'custom_plural';
    }

    return $translation;
}

Custom Domain

This example filters the translation for a custom domain, “my-custom-domain”.

add_filter( 'ngettext_with_context_my-custom-domain', 'custom_domain_filter', 10, 6 );

function custom_domain_filter( $translation, $single, $plural, $number, $context, $domain ) {
    // Your custom code here

    return $translation;
}