到目前为止,我已经在Wordpress中处理了一些翻译,并试图阅读官方的gettext文档,但并没有获得可能是一件简单的事情的意思:__(,_ e(等)这样的开头之间有什么区别?甚至更多:旁边还有其他人吗?
坦率
到目前为止,我已经在Wordpress中处理了一些翻译,并试图阅读官方的gettext文档,但并没有获得可能是一件简单的事情的意思:__(,_ e(等)这样的开头之间有什么区别?甚至更多:旁边还有其他人吗?
坦率
Answers:
__
(双下划线)是基本翻译功能。它翻译一个字符串并将其作为字符串返回。
_e
的作用与相同__
,但立即回显结果。
_x
是上下文翻译功能。它还有第二种选择,可以为进行翻译的人员提供上下文。
_ex
与相同_x
,但是echo是结果。
使用示例_x
:
$string = _x( 'Buffalo', 'an animal', 'plugin-domain' );
$string = _x( 'Buffalo', 'a city in New York', 'plugin-domain' );
$string = _x( 'Buffalo', 'a verb meaning to confuse somebody', 'plugin-domain' );
有时相同的字符串在其他语言中可能会有所不同。向翻译人员提供上下文可以帮助他们选择正确的单词。
快捷功能:
esc_attr__
:等效,__
但也通过来运行结果esc_attr
。esc_html__
:等效,__
但也通过来运行结果esc_html
。esc_attr_e
:等效,_e
但也通过来运行结果esc_attr
。esc_html_e
:等效,_e
但也通过来运行结果esc_html
。esc_attr_x
:等效,_x
但也通过来运行结果esc_attr
。esc_html_x
:等效,_x
但也通过来运行结果esc_html
。_n
是多元化处理程序。例:
$string = sprintf( _n(
'You have %d taco.',
'You have %d tacos.',
$number,
'plugin-domain'),
$number );
在该示例中,有两种方法可以说出炸玉米饼的数量,具体取决于是否为单数。$ number的首次使用告诉_n
函数要使用哪个版本。$ number的第二次使用发生在sprintf中,将%d替换为字符串中的实际数字。
没有等效的回显函数_n
,但有一个名为的函数_nx
。是_n
和的组合_x
。多元化和背景。
_n_noop
是一个特殊的。它用于翻译复数字符串,但实际上并不立即执行翻译。如果您想使字符串集中但实际上在其他地方进行工作,这将很有用。实际上在其他地方起作用的功能是translate_nooped_plural
。
例:
$holder = _n_noop('You have %d taco.', 'You have %d tacos.', 'plugin-domain');
// ... later ...
$string = sprintf( translate_nooped_plural( $holder, $count ), $count );
这用不了多少,但是对组织来说很方便。例如,如果将所有字符串都放在一个文件中,然后在其他地方引用它们,那么just不可能做到这_n
一点,您需_n_noop
要这样做。
_nx_noop
与相同_n_noop
,但也可以为翻译人员提供上下文,与相同_x
。
请注意,您可以将域放入noop函数调用中,也可以放入translate_nooped_plural函数调用中。对于您的组织而言,哪种更有意义。如果两者都具有域,则传递给noop调用的域将获胜。
number_format_i18n
与PHP的内置number_format等效,但是它增加了对小数等内容的处理,这在其他语言环境中是不同的。
date_i18n
与PHP的内置date等效,所有相关处理也在那里。月名,日名等
另外,切勿触犯法律。只是提醒。:)
__()
并且_e()
基本上都是translate()
(不直接使用)的包装,并且几乎是相同的。
区别在于__()
返回已转换的字符串并回显_e()
它。两者都需要输入一个字符串作为必需参数,并且通常(尽管是可选的)也输入一个文本域。
类似地,还有_x()
和_ex()
,可以让您指定可以描述字符串出现位置的上下文。如果您的项目包含数十个可翻译字符串,则使用上下文非常有意义。
$output = '<label for="some_field">' .
_x( 'Some Information.', 'Some Form Field', 'your-text-domain' ) .
'</label>' .
'<input type="text" name="some_field" value="" />' .
'<p class="description">' .
_x( 'Here you can enter some info.', 'Some Form Field', 'your-text-domain' ) .
'</p>';
return $output;
__( $text, $domain )
_e( $text, $domain )
_x( $text, $context, $domain )
_ex( $text, $context, $domain )
_n( $single, $plural, $number $domain )
_nx( $single, $plural, $number, $context, $domain )
所有参数$number
都是字符串。所有,但$domain
都是必需的。
如果您的字符串包含可变数字或单词,请使用sprintf()
:
$stars = get_post_meta( $post->ID, 'rating', true );
$title = get_the_title( $post->ID );
$output = '<p>' .
sprintf(
_x(
'The movie titled %2$s received a %1$d star rating.',
'Movie Description',
'your-text-domain'
),
$stars,
$title
) .
'</p>';
return $output;
即将推出的WordPress I18n Ninja的一些其他资源:
我不是翻译专家,但是WordPress Codex页面上有很好的文档,并说明了使用每个实例的原因。
从法典页面:
__()
当消息作为参数传递给另一个函数时使用;_e()
用于将消息直接写到页面。关于这两个功能的更多详细信息:
__('message')
在本地化模块中搜索“ message”的翻译,并将翻译传递给PHP return语句。如果找不到“ message”的翻译,则仅返回“ message”。
_e('message')
在本地化模块中搜索“ message”的翻译,并将翻译传递给PHP echo语句。如果未找到“消息”的翻译,则仅回显“消息”。
请注意,如果要国际化主题或插件,则应使用 "Text Domain"
。
gettext框架可处理大多数WordPress。但是,WordPress发行版中有一些地方无法使用gettext:
希望能回答您的问题,如果不告诉我们,也许有人可以提供帮助,或者我可以做更多研究。