古腾堡在《反应》中是如何处理翻译的?

时间:2018-08-22 作者:Bologer

我正在浏览古腾堡的源代码,例如。this 无法理解他们如何处理翻译。。。

他们确实导入了这个import { __ } from \'@wordpress/i18n\' 然后在源代码中他们使用这个speak( __( \'Block settings closed\' ) );.

有谁能告诉我他们是如何在ReactJS中管理这些翻译的,以便在一个普通的。采购订单文件?

我想他们有一些构建过程,可以遍历所有文件,包括JS并收集它们,但不确定。

2 个回复
最合适的回答,由SO网友:kero 整理而成

Gutenberg\'s GitHub repository 您可以看到所使用的i18n包的源代码。在这个源代码中,您将看到Jed 正在导入(line 4 of gutenberg/packages/i18n/src/index.js) 然后被用来完成大部分的翻译任务。

Jed 介绍;用于现代JavaScript应用程序的Gettext风格i18n“;(或者至少在他们的网站上是这样说的)。

你的问题是针对。采购订单文件。杰德在他们的网站上解释道:

有很多可用的。采购订单收件人。json转换器。获取文本。po文件是大多数体面的翻译公司的标准输出,因为这是一个旧标准。

我目前使用:po2json

但是,我想在将来的版本中将此功能添加到单独的Jed模块中。

However, this does not seem to apply here.

进一步挖掘发现,setLocaleData( data: Object, domain: string ) 用于传递翻译,in a manner like so:

$locale_data = gutenberg_get_jed_locale_data( \'gutenberg\' );
wp_add_inline_script(
    \'wp-i18n\',
    \'wp.i18n.setLocaleData( \' . json_encode( $locale_data ) . \' );\'
);

(gutenberg_get_jed_locale_data( $domain ) being more or less a wrapper for get_translations_for_domain( $domain ) )

因此,WordPress似乎通过PHP检索翻译数据,然后将其传递给Jed。Jed本身似乎没有加载任何翻译文件。

包裹的readme also explains how to properly generate the .pot file 包含本地化字符串。

该软件包还包括pot-to-php 用于生成包含中列出的消息的php文件的脚本。pot文件。这对欺骗WordPress很有用。org翻译字符串发现自此刻起,WordPress。org无法直接从JavaScript文件解析字符串。

npx pot-to-php languages/myplugin.pot languages/myplugin-translations.php text-domain

SO网友:Mark Kaplun

至少现在,只要没有更好的自动化流程,我建议不要生成。来自JS的pot文件。

正如@kero在他的回答中所解释的,现在GB翻译作为一种blob数组从中传递。将mo文件转换为JS。此工作流将破坏所有依赖筛选结果的本地化篡改插件__ 和合伙人。更好的工作流程是从正在转换的字符串显式生成blob数组__ 调用,类似于在非GB上下文中进行JS转换的方式。这也将解决生成的问题。pot文件。

这里缺少的是一些自动过程,它将在JS文件上运行并生成相关的PHP代码,而这些代码又可以通过poedit等工具进行分析。

结束

相关推荐