到目前为止,我一直在处理Wordpress中的一些翻译,并试图阅读官方的gettext文档,但没有找到一件可能很简单的事情:像\\uu(,\\ u e(,等等)这样的开头之间有什么区别?甚至更多:旁边还有哪些其他的?提前谢谢!
直率的
到目前为止,我一直在处理Wordpress中的一些翻译,并试图阅读官方的gettext文档,但没有找到一件可能很简单的事情:像\\uu(,\\ u e(,等等)这样的开头之间有什么区别?甚至更多:旁边还有哪些其他的?提前谢谢!
直率的
__
(双下划线)是基本转换函数。它转换字符串并将其作为字符串返回。
_e
是否与相同__
, 但echo马上就是结果。
_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 );
这没有太多的用途,但对于组织来说很方便。例如,如果将所有字符串放在一个文件中,然后在其他地方引用它们,那么仅使用_n
, 你需要这样的东西_n_noop
这样做。_nx_noop
与相同_n_noop
, 但也可以为翻译人员提供上下文,与_x
.
请注意,您可以将域放入noop函数调用或translate\\u nooped\\u复数函数调用中。无论哪个对您的组织更有意义。如果两者都有一个域,那么传递给noop调用的域将获胜。
number_format_i18n
相当于PHP的内置number_format, 但它增加了对小数等事物的处理,这在其他地区是不同的。
date_i18n
相当于PHP的内置date, 以及所有相关的处理。月份名称、日期名称等。
而且never break the laws. 只是提醒一下。:)
__()
和_e()
本质上都是translate()
(不要直接使用)几乎相同。区别在于__()
返回翻译后的字符串,并_e()
与之呼应。两者都需要输入一个字符串作为必需参数,并且通常(尽管是可选的)还需要一个textdomain。
类似地,有_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页面有很好的文档,并解释了使用每个实例的原因。
From the codex pages:
__()
当消息作为参数传递给另一个函数时使用;_e()
用于将消息直接写入页面。关于这两个功能的更多详细信息:
__(\'message\')
在本地化模块中搜索“message”的翻译,并将翻译传递给PHP return语句。如果找不到“message”的翻译,它只返回“message”。
_e(\'message\')
在本地化模块中搜索“message”的翻译,并将翻译传递给PHP echo语句。如果找不到“message”的翻译,它只会回显“message”。
请注意,如果要国际化主题或插件,则应使用"Text Domain"
.
gettext框架负责大部分WordPress。但是,WordPress发行版中有几个地方无法使用gettext:
WordPress的主要自述文件——它是一个静态HTML文件,不是PHP文件,因此无法通过gettext函数运行
希望这能回答你的问题,如果不让我们知道,也许其他人可以帮助,或者我可以做更多的研究。我刚刚为wp构建了我的第一个插件,即使它不是一个伟大的“代码诗意”;)它正常工作。这是一个使用GalleryView 3.0 jquery插件转换默认wp库的插件(http://spaceforaname.com/galleryview).我唯一不能做的就是本地化。此插件的本地化意味着转换管理界面,在这里可以配置jquery插件选项来更改结果库的外观。我试着关注网络上数百万的教程,在论坛上阅读了很多关于这个问题的帖子,并遵循了codex的指南。。。但仍然没有运气。这就是我所做的:每个文本行都位于gette