Skip to content

13.1 国际化基础

在完成了主题的基本功能后,我们可以为主题添加国际化支持,使其能够在不同语言环境下正常显示。本章节将详细介绍主题国际化的基础知识,包括什么是国际化、为什么需要国际化、如何实现国际化等方面。

什么是国际化

国际化(Internationalization,简称 i18n)是指设计和开发软件产品,使其能够适应不同语言和地区的需求,而不需要对软件代码进行修改。在WordPress主题开发中,国际化是指使主题能够支持不同语言,让用户可以使用自己熟悉的语言来使用主题。

为什么需要国际化

国际化对于WordPress主题来说非常重要,因为:

  1. 扩大用户群体:国际化可以使主题被全球更多的用户使用,扩大主题的市场范围
  2. 提高用户体验:用户可以使用自己熟悉的语言来使用主题,提高用户体验
  3. 符合WordPress标准:WordPress官方推荐主题开发者为主题添加国际化支持
  4. 便于主题翻译:国际化使得主题更容易被翻译成不同的语言

实现国际化的方法

1. 使用gettext函数

WordPress使用gettext系统来实现国际化。gettext是一个开源的国际化和本地化系统,它允许开发者在代码中使用英文文本,然后通过翻译文件将这些文本翻译成其他语言。

在WordPress主题中,我们可以使用以下函数来实现国际化:

  • __():用于翻译字符串并返回翻译后的字符串
  • _e():用于翻译字符串并直接输出翻译后的字符串
  • _x():用于翻译字符串,允许指定上下文
  • _ex():用于翻译字符串并直接输出,允许指定上下文
  • esc_html__():用于翻译字符串,然后进行HTML转义
  • esc_html_e():用于翻译字符串并直接输出,然后进行HTML转义
  • esc_attr__():用于翻译字符串,然后进行属性转义
  • esc_attr_e():用于翻译字符串并直接输出,然后进行属性转义

2. 为主题添加文本域

文本域是一个唯一的标识符,用于识别主题的翻译文件。我们需要在主题的 style.css 文件中添加文本域,并且在 functions.php 文件中加载文本域。

style.css 文件中添加文本域:

css
/*
Theme Name: Simple Blog
Theme URI: https://example.com/simple-blog
Author: Your Name
Author URI: https://example.com
Description: A simple and clean WordPress blog theme
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: simple-blog
Tags: blog, clean, minimal, responsive, white

This theme, like WordPress, is licensed under the GPL.
Use it to make something cool, have fun, and share what you've learned with others.
*/

functions.php 文件中加载文本域:

php
/**
 * 加载文本域
 */
function simple_blog_load_textdomain() {
    load_theme_textdomain('simple-blog', get_template_directory() . '/languages');
}
add_action('after_setup_theme', 'simple_blog_load_textdomain');

3. 使用翻译函数

在主题代码中,我们需要使用翻译函数来包装所有需要翻译的文本。

示例1:使用 __() 函数

php
$text = __('Hello World', 'simple-blog');
echo $text;

示例2:使用 _e() 函数

php
_e('Hello World', 'simple-blog');

示例3:使用 esc_html__() 函数

php
$text = esc_html__('Hello World', 'simple-blog');
echo $text;

示例4:使用 esc_html_e() 函数

php
esc_html_e('Hello World', 'simple-blog');

示例5:使用 _x() 函数

php
$text = _x('Post', 'noun', 'simple-blog');
echo $text;

4. 创建语言文件

语言文件是包含翻译文本的文件,它们存储在主题的 languages 目录中。语言文件有两种类型:

  • PO文件:包含原始文本和翻译文本的文件,用于编辑和维护翻译
  • MO文件:编译后的PO文件,用于WordPress加载翻译

5. 使用Poedit创建语言文件

Poedit是一个开源的翻译编辑器,可以用来创建和编辑PO文件。

步骤1:下载并安装Poedit

Poedit官网 下载并安装Poedit。

步骤2:创建新的翻译文件

打开Poedit,点击"文件" > "新建",选择要翻译的语言,然后选择主题的 style.css 文件。

步骤3:扫描主题文件

点击"目录" > "从源代码更新",Poedit会扫描主题文件,提取所有需要翻译的文本。

步骤4:翻译文本

在Poedit中,为每个文本添加翻译。

步骤5:保存翻译文件

点击"文件" > "保存",保存为 simple-blog-zh_CN.po 文件。Poedit会自动生成 simple-blog-zh_CN.mo 文件。

6. 测试国际化

在WordPress后台,进入"设置" > "常规",将"站点语言"设置为你翻译的语言,然后检查主题是否正确显示翻译后的文本。

国际化最佳实践

1. 使用明确的文本域

使用明确的文本域,确保翻译文件能够正确加载。

php
__('Hello World', 'simple-blog');

2. 避免在翻译字符串中使用变量

尽量避免在翻译字符串中使用变量,因为这会使翻译变得困难。

不好的做法:

php
$name = 'John';
__('Hello ' . $name, 'simple-blog');

好的做法:

php
$name = 'John';
printf(__('Hello %s', 'simple-blog'), $name);

3. 使用上下文

当同一个单词在不同上下文中有不同的含义时,使用上下文来区分。

php
// 作为名词的 "Post"
_x('Post', 'noun', 'simple-blog');

// 作为动词的 "Post"
_x('Post', 'verb', 'simple-blog');

4. 保持翻译字符串的简洁

保持翻译字符串的简洁,避免使用过于复杂的句子结构。

5. 测试翻译

在不同语言环境下测试主题,确保翻译能够正确显示。

小结

国际化是主题开发的重要步骤,它可以使主题被全球更多的用户使用。通过本章节的学习,你应该:

  1. 了解什么是国际化,以及为什么需要国际化
  2. 掌握如何使用gettext函数来实现国际化
  3. 了解如何为主题添加文本域
  4. 掌握如何使用翻译函数来包装需要翻译的文本
  5. 了解如何创建语言文件,包括使用Poedit创建PO和MO文件
  6. 掌握国际化的最佳实践,包括使用明确的文本域、避免在翻译字符串中使用变量、使用上下文、保持翻译字符串的简洁和测试翻译

通过以上步骤,你可以为主题添加国际化支持,使其能够在不同语言环境下正常显示,提高主题的用户体验和市场范围。

© 2026 编程马·菜鸟教程 版权所有