### 测试翻译
您需要将WordPress安装设置为世界语(Esperanto)语言。请前往“设置”>“常规”,将站点语言更改为世界语。
设置好语言后,创建一篇新文章,添加区块,您将看到所使用的翻译内容。
### 过滤翻译
翻译函数(`__()`、`_x()`、`_n()` 和 `_nx()`)的输出是可过滤的,完整信息请参阅 [国际化过滤器](/docs/reference-guides/filters/i18n-filters.md)。
# 国际化
## 什么是国际化?
国际化是指为软件提供多语言支持的过程,在本文中特指 WordPress 的国际化。国际化通常缩写为 **i18n**,其中 18 代表首字母 _i_ 和末字母 _n_ 之间的字母数量。
为您的插件和主题提供 i18n 支持能够最大限度地扩大其受众范围,甚至无需您亲自提供额外的语言翻译。当您将软件上传至 WordPress.org 时,所有 JS 和 PHP 文件都将被自动解析。检测到的翻译字符串会被添加到 [translate.wordpress.org](https://translate.wordpress.org/),供社区成员进行翻译,从而确保 WordPress 插件和主题能够支持尽可能多的语言。
对于 PHP,WordPress 已建立成熟的流程,请参阅[如何为您的插件进行国际化](https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/)。随着 WordPress 5.0 的发布,JavaScript 代码的翻译也引入了类似流程。
## 如何在 JavaScript 中使用 i18n
WordPress 5.0 引入了 wp-i18n JavaScript 工具包,它提供了与 PHP 类似的翻译字符串所需功能。
首先,在注册脚本时将 **wp-i18n** 添加为依赖项:
```php
3,
'editor_script' => 'myguten-script',
) );
}
add_action( 'init', 'myguten_block_init' );
```
在代码中,您可以引入 i18n 函数。最常用的函数是 **__**(双下划线),用于简单字符串的翻译。以下是一个基础区块示例:
```js
import { __ } from '@wordpress/i18n';
import { registerBlockType } from '@wordpress/blocks';
import { useBlockProps } from '@wordpress/block-editor';
registerBlockType( 'myguten/simple', {
apiVersion: 3,
title: __( '简单区块', 'myguten' ),
category: 'widgets',
edit: () => {
const blockProps = useBlockProps( { style: { color: 'red' } } );
return
{ __( '你好世界', 'myguten' ) }
;
},
save: () => {
const blockProps = useBlockProps.save( { style: { color: 'red' } } );
return { __( '你好世界', 'myguten' ) }
;
},
} );
```
在上述示例中,该函数将使用第一个参数作为要翻译的字符串。第二个参数是文本域,必须与插件指定的文本域标识符匹配。
常用函数(这些函数与它们的 PHP 版本相对应)包括:
- `__( '你好世界', 'my-text-domain' )` - 翻译特定字符串。
- `_n( '%s 条评论', '%s 条评论', numberOfComments, 'my-text-domain' )` - 根据给定数字翻译并返回单数或复数形式。
- `_x( '默认', '区块样式', 'my-text-domain' )` - 在特定上下文中翻译字符串。
注意:所有向用户显示的字符串都应使用 i18n 函数进行包装。
当代码中的所有字符串都完成包装后,最后一步是使用 [wp_set_script_translations()](https://developer.wordpress.org/reference/functions/wp_set_script_translations/) 函数告知 WordPress 您的 JavaScript 包含翻译内容。
```php
\n"
"Language-Team: 语言团队 \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2019-03-08T11:26:56-08:00\n"
"PO-Revision-Date: 年-月-日 时:分+时区\n"
"X-Generator: WP-CLI 2.1.0\n"
"X-Domain: myguten\n"
#. 插件名称
msgid "Scratch Plugin"
msgstr ""
#: block.js:6
msgid "Simple Block"
msgstr ""
#: block.js:13
#: block.js:21
msgid "Hello World"
msgstr ""
```
此处 `msgid` 为待翻译字符串,`msgstr` 为实际翻译内容。在 POT 文件中,`msgstr` 将始终为空。
此 POT 文件可作为新翻译的模板。您需要**复制文件**并使用目标语言代码进行重命名,本例使用世界语(eo):
```bash
cp myguten.pot myguten-eo.po
```
对于简单示例,您可以直接在编辑器中修改 `.po` 文件,为所有 `msgstr` 添加翻译内容。对于更复杂的大型翻译项目,可使用 [GlotPress](https://glotpress.blog/) 和 [Poedit](https://poedit.net/) 工具辅助完成。
同时需要添加 `Language: eo` 参数。以下是完整翻译后的 `myguten-eo.po` 文件:
```
# Copyright (C) 2019
# 本文件遵循与 Scratch 插件相同的许可协议进行分发。
msgid ""
msgstr ""
"Project-Id-Version: Scratch Plugin\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/scratch\n"
"Last-Translator: Marcus Kazmierczak \n"
"Language-Team: Esperanto \n"
"Language: eo\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2019-02-18T07:20:46-08:00\n"
"PO-Revision-Date: 2019-02-18 08:16-0800\n"
"X-Generator: Poedit 2.2.1\n"
"X-Domain: myguten\n"
#. 插件名称
msgid "Scratch Plugin"
msgstr "Scratch 扩展插件"
#: block.js:6
msgid "Simple Block"
msgstr "简单区块"
#: block.js:13 block.js:21
msgid "Hello World"
msgstr "世界你好"
```
创建翻译文件的最后一步是将 `myguten-eo.po` 转换为所需的 JSON 格式。可使用 WP-CLI 的 [`wp i18n make-json` 命令](https://developer.wordpress.org/cli/commands/i18n/make-json/)(要求 WP-CLI v2.2.0 及以上版本):
```bash
wp i18n make-json myguten-eo.po --no-purge
```
这将生成包含以下内容的 JSON 文件 `myguten-eo-[md5].json`:
```json
{
"translation-revision-date": "2019-04-26T13:30:11-07:00",
"generator": "WP-CLI/2.2.0",
"source": "block.js",
"domain": "messages",
"locale_data": {
"messages": {
"": {
"domain": "messages",
"lang": "eo",
"plural-forms": "nplurals=2; plural=(n != 1);"
},
"Simple Block": [ "简单区块" ],
"Hello World": [ "世界你好" ]
}
}
}
```
### 加载翻译文件
最后一步是告知 WordPress 翻译文件的存放位置。`wp_set_script_translations` 函数支持可选的第三个参数,用于指定优先查找翻译文件的路径。例如:
```php