当前浏览:首页 / WordPress函数 / _n()

_n( string $single, string $plural, int $number, string $domain = 'default' )

基于提供的数字翻译和检索单数或复数形式

e 翻译more...

  • __() 检索$text的翻译
  • _e() 显示翻译文本
  • _ex() 使用gettext上下文显示翻译后的字符串
  • _n_noop() 在POT文件中注册多个字符串,但不翻译它们
  • _n() 基于提供的数字翻译和检索单数或复数形式
  • _nx_noop() 在POT文件中使用gettext上下文注册多个字符串,但不翻译它们
  • _nx() 使用gettext上下文,根据提供的数字检索单/复数形式进行翻译
  • _x() 使用gettext上下文检索已翻译的字符串
  • esc_attr__() 检索$text的翻译并将其转义,以便在属性中安全使用
  • esc_attr_e() 显示为在属性中安全使用而转义的翻译文本

esc 转义more...

  • esc_attr__() 检索$text的翻译并将其转义,以便在属性中安全使用
  • esc_attr_e() 显示为在属性中安全使用而转义的翻译文本
  • esc_attr_x() 使用gettext上下文翻译字符串,并将其转义以在属性中安全使用。
  • esc_attr() 转义HTML属性
  • esc_html__() 检索$text的翻译并将其转义,以便在HTML输出中安全使用。
  • esc_html_e() 显示为在HTML输出中安全使用而转义的翻译文本。
  • esc_html_x() 使用gettext上下文翻译字符串,并将其转义,以便在HTML输出中安全使用
  • esc_html() 转义HTML块
  • esc_js() 转义单引号、"、 、&,并修复行尾。
  • esc_textarea() 转义textarea值

描述

当您希望根据数字是单数还是复数使用适当的字符串形式时使用。

例子:

printf( _n( '%s person', '%s people', $count, 'text-domain' ), number_format_i18n( $count ) );

参数

$single

(string)(必填) 数字是单数时使用的文本。

$plural

(string)(必填) 数字为复数时使用的文本。

$number

(int)(必填) 使用单数或复数形式进行比较的数字。

$domain

(string)(可选) 文本域,检索已翻译字符串的唯一标识符。

默认值: 'default'


返回

(string) 翻译的单数或复数形式。



源码

查看源码 官方文档


更新日志

版本描述
5.5.0引入 ngettext-{$domain} 过滤器
2.8.0开始引入

使用示例

  • 示例1

    显示星级插件的“1星”或“x星”。

    $rating = '3';
    
    $text = sprintf( _n( '%s star', '%s stars', $rating, 'wpdocs_textdomain' ), $rating );
    
    // "3 stars"
    echo $text;
    

    重要提示:永远不要在sprintf()函数中进行计算!以下操作不起作用:

    $text = sprintf( 
    	_n( '%s star', '%s stars', $rating, 'wpdocs_textdomain' ), 
    	2 <= $rating ? $rating -1 : $rating
    );
    
    
  • 示例2

    正如@sergeybiryukov所说,这个函数不应该在一个项目或多个项目的情况下使用,而是用于单数形式和复数形式,这不是一回事。另外,两个字符串都应该有占位符。

    如他所说:

    在具有复杂复数结构的语言中,单数形式可以用于除1以外的数字,因此如果目标是显示正好1项的字符串,则显式检测如下

    1 === count( $items )

    应使用

    _n()

    该问题也在Codex中涵盖。

    虽然改变俄语和其他斯拉夫语的复数形式可以解决这个问题,但正如这里所解释的那样,这会带来太大的工作量。

  • 示例3

    来自/wp-admin/edit-comments.php的示例,不使用文本域进行翻译。

    if ( $approved > 0 ) {
    	$messages[] = sprintf( _n( '%s comment approved', '%s comments approved', $approved ), $approved );
    }