Appearance
13.1 国际化基础
在完成了主题的基本功能后,我们可以为主题添加国际化支持,使其能够在不同语言环境下正常显示。本章节将详细介绍主题国际化的基础知识,包括什么是国际化、为什么需要国际化、如何实现国际化等方面。
什么是国际化
国际化(Internationalization,简称 i18n)是指设计和开发软件产品,使其能够适应不同语言和地区的需求,而不需要对软件代码进行修改。在WordPress主题开发中,国际化是指使主题能够支持不同语言,让用户可以使用自己熟悉的语言来使用主题。
为什么需要国际化
国际化对于WordPress主题来说非常重要,因为:
- 扩大用户群体:国际化可以使主题被全球更多的用户使用,扩大主题的市场范围
- 提高用户体验:用户可以使用自己熟悉的语言来使用主题,提高用户体验
- 符合WordPress标准:WordPress官方推荐主题开发者为主题添加国际化支持
- 便于主题翻译:国际化使得主题更容易被翻译成不同的语言
实现国际化的方法
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. 测试翻译
在不同语言环境下测试主题,确保翻译能够正确显示。
小结
国际化是主题开发的重要步骤,它可以使主题被全球更多的用户使用。通过本章节的学习,你应该:
- 了解什么是国际化,以及为什么需要国际化
- 掌握如何使用gettext函数来实现国际化
- 了解如何为主题添加文本域
- 掌握如何使用翻译函数来包装需要翻译的文本
- 了解如何创建语言文件,包括使用Poedit创建PO和MO文件
- 掌握国际化的最佳实践,包括使用明确的文本域、避免在翻译字符串中使用变量、使用上下文、保持翻译字符串的简洁和测试翻译
通过以上步骤,你可以为主题添加国际化支持,使其能够在不同语言环境下正常显示,提高主题的用户体验和市场范围。
