Answers:
在Gutenberg的GitHub存储库中,您可以看到所使用的i18n软件包的源代码。在此源代码中,您将看到Jed导入(gutenberg / packages / i18n / src / index.js的第4行),然后被用于后台的大多数翻译任务。
Jed推出了“用于现代JavaScript应用程序的Gettext样式i18n”(或至少在其网站上这样说)。
您的问题是.po文件。杰德在他们的网站上解释说:
有很多可用的.po到.json转换器。Gettext .po文件是大多数体面的翻译公司的标准输出,因为它是旧标准。
我目前使用:po2json
但是,我想在以后的版本中将此功能添加到单独的Jed模块中。
但是,这似乎不适用于这里。
进一步的挖掘结果setLocaleData( data: Object, domain: string )
被用来通过翻译,如下所示:
$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 )
或多或少是的包装get_translations_for_domain( $domain )
)
因此,似乎WordPress通过PHP检索了翻译数据,然后将其传递给Jed。Jed本身似乎未加载任何翻译文件。
软件包的自述文件还说明了如何正确生成包含本地化字符串的.pot文件。
该软件包还包括一个
pot-to-php
脚本,用于生成包含.pot文件中列出的消息的php文件。这对欺骗WordPress.org翻译字符串发现很有用,因为目前WordPress.org无法直接从JavaScript文件中解析字符串。npx pot-to-php languages/myplugin.pot languages/myplugin-translations.php text-domain
window
属性,但是可以。PHP检索值并将其通过wp_add_inline_script
至少到目前为止,只要没有更好的自动化流程,我建议根本不要从JS生成.pot文件。
正如@kero在他的回答中所解释的那样,GB转换作为一种Blob数组从.mo文件传递到JS。此工作流程将破坏所有依赖过滤__
和关联结果的本地篡改插件。更好的工作流程是从正在通过__
调用转换的字符串中显式生成blob数组,类似于在非GB上下文中进行JS转换的方式。这也将解决生成.pot文件的问题。
这里缺少的是一些自动化过程,该过程将运行JS文件并生成相关的PHP代码,然后可以通过诸如poedit之类的工具对其进行分析。
window
属性中,作为wp_add_inline_script
PHP 通过JSON加载,然后在React端检索它并将其传递给Jed?...而Jed还有进一步的魔法吗?