## 什么是本地化?
本地化描述了翻译国际化插件的后续过程。 本地化缩写为l10n(因为l和n之间有10个字母)
## 本地化文件
POT(便携式对象模板)文件#POT(便携式对象模板)文件
该文件包含插件中的原始字符串(英文)。 这是一个POT文件的例子:
```
#: plugin-name.php:123
msgid "Page Title"
msgstr ""
```
## PO(便携式对象)文件
每个翻译器都会使用POT文件,并以自己的语言翻译msgstr部分。 结果是与POT具有相同格式的PO文件,但具有翻译和一些特定标题。 每个语言有一个PO文件。
## MO(机器对象)文件
从每个翻译的PO文件建立一个MO文件。 这些是gettext函数实际使用的机器可读的二进制文件(它们不关心.POT或.PO文件),是PO文件的“编译”版本。 转换使用msgfmt工具完成。 通常,应用程序可以相应地使用多个大的逻辑可翻译模块和不同的MO文件。 文本域是每个模块的句柄,它具有不同的MO文件。
## 生成POT文件
POT文件是您需要交给翻译人员的文件,以便他们可以做他们的工作。 POT和PO文件可以轻松地重新命名,以便更改文件类型,而不会有任何问题。 提供POT文件和插件是一个好主意,因此翻译人员不必专门询问您。 有几种方式为您的插件生成POT文件:
## 插件目录管理工具
如果您的插件托管在WordPress.org插件目录中,请转到您的“管理”页面,然后单击“生成POT文件”部分的“继续”。
- 插件管理区域
然后点击获取POT下载POT文件。
- 生成POT
## WordPress i18n工具
如果您的插件不在目录中,您可以从SVN中检出WordPress Trunk目录(请参阅使用Subversion了解SVN)。 您需要检出整个中继线,因为wordpress-i18n工具使用WordPress核心的代码生成POT。 您需要在您的服务器/计算机上安装gettext(GNU国际化实用程序)软件包和PHP才能运行以下命令。
打开命令行并将目录更改为语言文件夹。
```
cd theme-name/languages
```
您可以在命令行中运行makepot.php脚本,如下所示:
```
php path/to/makepot.php wp-plugin path/to/your-plugin-directory
```
完成之后,您应该在当前目录中看到POT文件。
## Poedit
您也可以在本地使用Poedit进行翻译。 这是所有主要操作系统的开源工具。 免费的Poedit默认版本支持使用Gettext函数手动扫描所有源代码。 它的专业版也具有一键扫描WordPress插件。 生成po文件后,您可以将文件重命名为POT。 如果生成了一个mo,那么您可以删除该文件,因为它不需要。 如果您没有专业版本,您可以轻松获取空白POT,并将其用作POT文件的基础。 将空白POT放入语言文件夹后,您可以单击Poedit中的“更新”,使用字符串更新POT文件。
国际化 - 本地化03
## Grunt 的任务
甚至有一些拙劣的任务可以用来创建POT。 grunt-wp-i18n&grunt-pot
要设置它,您需要安装node.js. 这是一个简单的安装。 然后,您需要在要使用grunt的目录中安装grunt。这通过命令行完成。 可以放置在插件根目录中的Grunt.js和package.json的例子。 您可以在命令行中使用简单的命令来执行grunt任务。
## 翻译PO文件
翻译PO文件有多种方法。
您可以使用文本编辑器输入翻译。 在文本编辑器中,它将如下所示。
```
#: plugin-name.php:123
msgid "Page Title"
msgstr ""
```
您输入引号之间的翻译。 对于德语翻译,它看起来像这样。
```
#: plugin-name.php:123
msgid "Page Title"
msgstr "Seitentitel"
```
您也可以在翻译时使用Poedit。 这是所有主要操作系统的开源工具。 免费的Poedit默认版本支持使用Gettext函数手动扫描所有源代码。 它的专业版也具有一键扫描WordPress插件和主题。
第三种选择是使用在线翻译服务。 一般的想法是您上传POT文件,然后您可以授权用户或翻译人员翻译您的插件。 这允许您跟踪更改,始终具有最新的翻译,并减少翻译两次。
François-XavierBénard正在运行WP-Translations,这是一个“翻译与开发人员会面”的社区。它运行在Transifex上,您可以提交作为开发人员翻译的项目,或翻译用于您的语言的现有插件和主题。 这是伟大的,因为那里有现有的翻译。
以下是一些可用于在线翻译PO文件的工具:
- Transifex
- WebTranslateIt
- Poeditor
- Google Translator Toolkit
- GlotPress
- You can even use WordPress plugins to do the translation.
## Codestyling本地化
翻译后的文件将被保存为my-plugin- {locale} .mo。 语言环境是您在文件wp-config.php中的常量WPLANG中定义的语言代码和/或国家/地区代码。 例如,德语的语言环境是de_DE。 从上面的代码示例,文本域是'my-plugin',因此德语MO和PO文件应该命名为my-plugin-de_DE.mo和my-plugin-de_DE.po。 有关语言和国家/地区代码的更多信息,请参阅使用语言安装WordPress。
#生成MO文件
## 命令行
程序msgfmt用于创建MO文件。 msgfmt是Gettext包的一部分。 否则可以使用命令行。 典型的msgfmt命令如下所示:
Unix操作系统
```
msgfmt -o filename.mo filename.po
```
Windows操作系统
```
msgfmt -o filename.mo filename.po
```
如果您有很多PO文件一次转换,您可以作为批处理运行它。 例如,使用bash命令:
Unix操作系统
```
# Find PO files, process each with msgfmt and rename the result to MO
for file in `find . -name "*.po"` ; do msgfmt -o ${file/.po/.mo} $file ; done
```
Windows操作系统
对于Windows,您需要先安装Cygwin。
创建一个potomo.sh
```
#! /bin/sh
# Find PO files, process each with msgfmt and rename the result to MO
for file in `/usr/bin/find . -name '*.po'` ; do /usr/bin/msgfmt -o ${file/.po/.mo} $file ; done
```
您可以在命令行中运行此命令。
```
cd C:/path/to/language/folder/my-plugin/languages & C:/cygwin/bin/bash -c /cygdrive/c/path/to/script/directory/potomo.sh
```
## Poedit
msgfmt也集成在Poedit中,允许您使用它来生成MO文件。 首选项中有一个设置可以启用或禁用它。
国际化 - 本地化04
## Grunt task
有grunt-po2mo将转换所有的文件。
#好翻译提示
## 不要翻译字面,有机地翻译
双语或多语言你无疑知道你所说的语言有不同的结构,节奏,色调和变化。翻译的消息不需要像英语一样的结构:采取所提出的想法,并提出一种以自然的方式表达目标语言的消息。创建相同消息和等效消息之间的区别是:不要复制,替换。即使在消息中有更多的结构性项目,如果您觉得对目标受众更合乎逻辑或更适合您,您就有创造性的许可来适应和改变。
尝试保持相同水平的手续(或非正式)
每个消息具有不同的正式或非正式级别。您的目标语言中每个消息使用的正式或非正式级别都是您自己(或与您的团队)进行比较,但是WordPress消息(特别是信息性消息)往往会有礼貌的非正式英语口音尝试在您的文化背景下完成目标语言中的等效项目。
##不要使用俚语或受众特定的术语
在博客中可以预期一些术语,但不要使用只有“在”人群中获得的口语化。如果未经开发的博主以您的语言安装WordPress,他们会知道这个术语是什么意思吗?像pingback,trackback和feed这样的字是这个规则的例外;它们是通常很难翻译的术语,许多翻译选择以英文留下。
以其语言阅读其他软件的本地化
如果您遇到困难或需要方向,请尝试阅读其他流行的软件工具的翻译,以了解常用的术语,如何解决方法等等。当然,WordPress有自己的语气和感觉,所以保持在阅读其他本地化时,请记住,但是请随意挖掘UI术语等来保持与您的语言的其他软件的一致性。
##使用本地化
将本地化文件放在语言文件夹中,无论是插件语言文件夹还是通常在wp-content下的插件语言文件夹中的WordPress 3.7。完整的路径将是wp-content / languages / plugins / my-plugin-fr_FR.mo。
从WordPress 4.0开始,您可以在“常规设置”中更改语言。如果您没有看到任何选项或要切换到的语言,请执行以下步骤:
将wp-config.php内的WPLANG定义为您选择的语言。例如,如果你想使用法语,你会有:
```
define ('WPLANG', 'fr_FR');
```
转到wp-admin / options-general.php或“设置” - >“常规”
在“网站语言”下拉列表中选择您的语言
转到wp-admin / update-core.php
点击“更新翻译”,如果可用
核心翻译文件(如有)可以下载
##资源
- 为您的主题或插件创建.pot文件
- 如何国际化WordPress插件
- 翻译你的主题
- 空白WordPress POT
- 改进了i18n WordPress工具
- 如何快速更新翻译
- GitHub / Transifex之间的工作流程
- Gist:完成本地化Grunt任务
- WordPress.tv标签:i18n,国际化和翻译
- 简介
- 主题开发
- WordPress许可证
- 什么是主题
- 开发环境
- 主题开发示例
- 主题基础
- 模板文件
- 主样式表(style.css)
- 文章类型
- 规划主题文件
- 模板层级
- 模板标签
- 循环
- 主题函数
- 连接主题文件和目录
- 使用CSS和JavaScript
- 条件标签
- 类别,标签和自定义分类
- 模板文件
- 内容模板文件
- 页面模板文件
- 附件模板文件
- 自定义内容类型
- 部分和其他模板文件
- 评论模板
- 分类模板
- 404页面
- 主题功能
- 核心支持的功能
- 管理菜单
- 自定义Headers
- 自定义Logo
- 文章格式
- 置顶文章
- Sidebars
- Widgets
- 导航菜单
- 分页
- 媒体
- Audio
- Images
- Galleries
- Video
- 精选图片和缩略图
- 国际化
- 本地化
- 辅助功能
- 主题选项 – 自定义API
- 定制对象
- 改进用户体验的工具
- 定制JavaScript API
- JavaScript / Underscore.js渲染的自定义控件
- 高级用法
- 主题安全
- 数据消毒/逃避
- 数据验证
- 使用随机数
- 常见漏洞
- 高级主题
- 子主题
- UI最佳实践
- JavaScript最佳做法
- 主题单元测试
- 验证你的主题
- Plugin API Hooks
- 发布你的主题
- 所需的主题文件
- 测试
- 主题评论指南
- 写文档
- 提交你的主题到WordPress.org
- 参考文献
- 模板标签列表
- 条件标签列表
- 编码标准
- HTML编码标准
- CSS编码标准
- JavaScript编码标准
- PHP编码标准
- 插件开发
- 插件开发简介
- 什么是插件
- 插件基础
- 头部要求
- 包括软件许可证
- 启用 / 停用 Hooks
- 卸载方法
- 最佳做法
- 插件安全
- 检查用户功能
- 数据验证
- 保护输入
- 保护输出
- 随机数
- Hooks
- Actions
- Filters
- 自定义Hooks
- 高级主题
- 管理菜单
- 顶级菜单
- 子菜单
- 短代码
- 基本短码
- 封闭短码
- 带参数的短代码
- TinyMCE增强型短码
- 设置
- 设置API
- 使用设置API
- 选项API
- 自定义设置页面
- 元数据
- 管理帖子元数据
- 自定义元数据
- 渲染元数据
- 自定义文章类型
- 注册自定义文章类型
- 使用自定义文章类型
- 分类
- 使用自定义分类
- 在WP 4.2+中使用“split术语”
- 用户
- 创建和管理用户
- 使用用户元数据
- 角色和功能
- HTTP API
- JavaScript
- jQuery
- Ajax
- 服务器端PHP和入队
- Heartbeat API
- 概要
- 计划任务
- 了解WP-Cron计划
- 安排WP-Cron 事件
- 将WP-Cron挂接到系统任务计划程序中
- WP-Cron简单测试
- 国际化
- 本地化
- 如何国际化您的插件
- 国际化安全
- WordPress.org
- 详细插件指南
- 规划您的插件
- 如何使用Subversion
- 插件开发者常见问题
- 开发工具
- Debug Bar 和附加组件
- 辅助插件
- REST API手册
- 资源
- 文章
- 文章修订
- 文章类型
- 文章状态
- 类别
- 标签
- 页面
- 评论
- 分类
- 媒体
- 用户
- 设置
- 使用REST API
- 全局参数
- 分页
- 链接和嵌入
- 发现
- 认证
- 经常问的问题
- 骨干JavaScript客户端
- 客户端库
- 扩展REST API
- 添加自定义端点
- 自定义内容类型
- 修改回应
- 模式
- 词汇表
- 路由和端点
- 控制器类