一篇文章带您了解如何实现WordPress主题/插件本地化翻译

news2024/12/28 19:49:47

在这里插入图片描述

要实现WordPress主题和插件的本地化翻译就需要了解什么是国际化和本地化以及WordPress是如何实现国际化和本地化的。

什么是国际化?

国际化是为软件(在本例中为 WordPress)提供多语言支持的过程。国际化通常缩写为 i18n,其中 18 代表第一个 i 和最后一个 n 之间的字母数。

为您的插件和主题提供 i18n 支持可以使其覆盖尽可能多的受众,即使不需要您提供额外的语言翻译。当您将软件上传到 WordPress.org 时,所有 JS 和 PHP 文件都将自动解析。任何检测到的翻译字符串都会添加到 translate.wordpress.org 中,以允许社区进行翻译,确保 WordPress 插件和主题以尽可能多的语言提供。

对于 PHP,WordPress 有一个由来已久的流程,请参阅如何国际化您的插件。WordPress 5.0 的发布带来了类似的 JavaScript 代码翻译过程。

如何国际化你的插件

为了使字符串在应用程序中可翻译,必须将原始字符串包装在对一组特殊函数之一的调用中。这些函数统称为“gettext”。

什么是本地化?

本地化描述了翻译国际化插件的后续过程。本地化通常缩写为(因为 l 和 n 之间有 10 个字母。l10n

本地化文件

POT(可移植对象模板)文件

此文件包含插件中的原始字符串(英文)。

PO (Portable Object)文件

每个翻译人员都会获取文件并将各个部分翻译成他们自己的语言。结果是一个与 格式相同的文件,但带有翻译和一些特定的标头。每种语言都有一个文件。POTmsgstrPOPOTPO

MO (Machine Object)文件

从每个翻译的文件中构建一个文件。这些是 gettext 函数实际使用的机器可读的二进制文件(它们不关心 OR 文件),并且是文件的“编译”版本。转换是使用命令行工具完成的。通常,应用程序可能会相应地使用多个大型逻辑可翻译模块和不同的文件。

以上内容来源于WordPress开发人员资源库,有需要的朋友可以去进行深入的解析和理解。对于新入门的朋友来说可能有些不太好理解,总的来说所谓的国际化就是通过(一系列)函数将文字(字符串、变量、单复数等)标记为可以被翻译的形式,那么相应的本地化就是将已经标记的文字翻译成某种语言。国际化是主题或插件的开发者需要考虑的问题,想要把主题和软件翻译成大美的中文就只需要了解如何本地化即可。

对于如何实现WordPress国际化以及Gettext函数的使用方法可以参考《如何国际化你的插件》

如何实现本地化

本文将着重解释如何实现本地化。

举个例子,当你打开了一个已经完成国际化的主题或者插件的源代码是你应该会看到很多类似

__( 'Blog Options', 'my-plugin' ); 这样的代码。函数的格式:__('文本域',"路径域");其中文本域表示可以被翻译的文本也就是前端将会显示的内容,域路径定义插件翻译的位置。

结合之前所说的.pot为模板.po为可以编辑的翻译文件.mo为编译后的翻译文件,简单理解为,当WordPress看到了__( 'Blog Options', 'my-plugin' );这样一条语句时会在众多的.mo文件中通过my-plugin来进行匹配,当匹配到的mo文件中如果包含了Blog Options的翻译条目时就会把Blog Options替换成翻译后的文本并输出到页面上。

这样是不是就很好理解了呢?那么接下来就看看怎么创建和编辑翻译文件。

当你下载了一个以及国际化的主题或插件,你应该可以找到languages或lang目录,而里面大概率会躺着一个.pot文件或很多.po文件;其他都不重要我们只需要.pot的模板文件,有了翻译模板文件就可以使用Poedit等软件创建对应语言的po文件进行编辑并生成mo文件供WordPress使用了。

解读po翻译文件

如果没有pot文件可以参考本文接下来讲到的如何创建pot模板文件。

接下来展示一个po文件的示例:

# Copyright (C) 2023 
# This file is distributed under the GPLv2.
msgid ""
msgstr ""
"Project-Id-Version: Smush Pro 3.14.0\n"
"Report-Msgid-Bugs-To: https://wpmudev.com\n"
"POT-Creation-Date: 2023-07-21 12:47+0800\n"
"PO-Revision-Date: 2023-08-15 15:14+0800\n"
"Last-Translator: cnuu <admin@cnuu.net>\n"
"Language-Team: \n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.3.2\n"
"X-Domain: wp-smushit\n"

#. Plugin Name of the plugin
#: app/class-admin.php:285 app/class-admin.php:324
#: app/pages/class-dashboard.php:110 app/pages/class-dashboard.php:353
#: app/views/directory/meta-box.php:43 core/modules/bulk/class-mail.php:65
msgid "Smush Pro"
msgstr "Smush 专业版"

这段代码是一个.pot文件的内容,用于国际化。下面是每一行的解释:

  1. "Project-Id-Version: Smush Pro 3.14.0\n": 定义项目的版本号。
  • "Report-Msgid-Bugs-To: https://wpmudev.com\n": 提供报告消息ID和bug的URL。
  • "POT-Creation-Date: 2023-07-21 12:47+0800\n": 创建此模板的日期和时间。
  • "PO-Revision-Date: 2023-08-15 15:14+0800\n": 上次修订此模板的日期和时间。
  • "Last-Translator: cnuu <admin@cnuu.net>\n": 最后翻译此模板的人的名字和电子邮件地址。
  • "Language-Team: \n": 语言团队的名称或标识,通常用于指定负责特定语言的翻译团队。
  • "Language: zh_CN\n": 指定此模板的语言版本,这里是简体中文。
  • "MIME-Version: 1.0\n": MIME版本号。
  • "Content-Type: text/plain; charset=UTF-8\n": 内容类型和字符集,这里是纯文本和UTF-8字符集。
  • "Content-Transfer-Encoding: 8bit\n": 内容传输编码方式,这里是8位编码。
  • "Plural-Forms: nplurals=1; plural=0;\n": 定义复数形式的规则。这里表示该语言只有一种复数形式。
  • "X-Generator: Poedit 3.3.2\n": 用于生成此模板的工具的名称和版本号。
  • "X-Domain: wp-smushit\n": 指定与这个模板相关的域名或项目名称,这里是wp-smushit插件。
  • 然后是双引号包围的字符串,这些是消息ID和对应的原始字符串(msgid)以及翻译后的字符串(msgstr)。例如:

    • msgid "Smush Pro" 表示原始字符串是 "Smush Pro"。
  • msgstr "Smush 专业版" 表示翻译后的字符串是 "Smush 专业版"。
  • 其中,#: app/class-admin.php:285 app/class-admin.php:324 等行表示这些字符串在哪些源代码文件中出现,以及它们在文件中的具体位置。这对于翻译者来说非常有用,因为他们可以知道这些字符串在哪里使用,以便更好地进行翻译。

    如果你理解了上面的内容那么不需要借助其他软件也可以手动创建.po文件了。

    文件的命名规则:

    例如wp-plugin-name-zh_CN.po

    不用说,文件名必须是中文,单词间用-分隔连接,最后zh_CN代表使用ISO 639-1标准规定的语言代码,例如:

    • en_US(英语)
  • zh_CN(简体中文)
  • fr_FR(法语)
  • de_DE(德语)
  • es_ES(西班牙语)
  • 编辑完成后创建的对应.mo文件应放置在主题或插件目录下的languages文件夹内或者wp-content/languages/对应目录下,不同作者写的方法肯定也不一样,区别对待。

    有了以上的知识储备本地化翻译已经不再深奥,相信阅读到这里你已经迫不及待跃跃欲试了,别急,下面的内容可能是你在其他地方找寻不到的实用经验总结。

    有可能你会遇到这样的问题,一段文字已经在翻译文件中添加了并且翻译都已生效就是某一部分仍旧无法翻译。

    这时候你需要找出这段文字在源代码中出现的位置,确定这段文字(文本)是否已经进行了国际化定义,也就是之前提到的函数__('文本域',"路径域");,并且路径域是否和你的翻译文件匹配。

    如果没有定义函数那么你可以手动修改源代码添加定义函数,你需要了解函数的实用方法以及__()_e()_x()_ex()_n()_nx()等不同函数的区别和用法。如果路径域和你的翻译文件不匹配你也可以修改路径域或者创建一个对应路径域的翻译文件。

    还有一种可能就是这段文字最终确定是由JS文件输出的。

    如何在 WordPress中翻译JavaScript 中的内容

    WordPress 5.0 引入了 wp-i18n JavaScript 包,它提供了添加可翻译字符串所需的功能,就像在 PHP 中一样。原文链接

    简单来说,一般情况下由PHP文件输出的文本内容可以直接由mo文件进行翻译,而由JS文件输出的文本内容则需要生成对应的JSON文件才能翻译。

    要生成JSON翻译文件可以使用WP-CLI

    安装WP-CLI 

    WP-CLI 是 WordPress 的命令行界面。该项目的目标是为 WordPress 管理员提供一个完整的替代方案;对于您可能想在 WordPress 管理中执行的任何操作,都应该有一个等效的 WP-CLI 命令。

    安装 WP-CLI 的推荐方法是下载 Phar 构建(类似于 Java JAR 文件的存档,有关详细信息,请参阅本文),将其标记为可执行文件,并将其放在 PATH 上。

    在安装 WP-CLI 之前,请确保您的环境满足最低要求:

    • 类 UNIX 环境(OS X、Linux、FreeBSD、Cygwin);Windows 环境中的有限支持
  • PHP 5.6 或更高版本
  • WordPress 3.7 或更高版本。早于最新 WordPress 版本的版本可能功能降级
  • 验证要求后,使用 或 下载 wp-cli.phar 文件:wgetcurl

    curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
    

    接下来,检查 Phar 文件以验证它是否正常工作:

    php wp-cli.phar --info
    

    要从命令行使用 WP-CLI,请键入 ,使文件可执行并将其移动到 PATH 中的某个位置。例如:wp

    chmod +x wp-cli.phar
    sudo mv wp-cli.phar /usr/local/bin/wp
    

    如果WP-CLI安装成功,则在运行时应看到如下内容:wp --info

    $ wp --info
    OS:     Linux 5.10.60.1-microsoft-standard-WSL2 #1 SMP Wed Aug 25 23:20:18 UTC 2021 x86_64
    Shell:  /usr/bin/zsh
    PHP binary:     /usr/bin/php8.1
    PHP version:    8.1.0
    php.ini used:   /etc/php/8.1/cli/php.ini
    MySQL binary:   /usr/bin/mysql
    MySQL version:  mysql  Ver 8.0.27-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
    SQL modes:
    WP-CLI root dir:        /home/wp-cli/
    WP-CLI vendor dir:      /home/wp-cli/vendor
    WP_CLI phar path:
    WP-CLI packages dir:    /home/wp-cli/.wp-cli/packages/
    WP-CLI global config:
    WP-CLI project config:  /home/wp-cli/wp-cli.yml
    WP-CLI version: 2.9.0
    

    在Windows上安装wp-cli

    先安装php然后将php.exe所在的目录添加到系统环境变量Path

    然后下载wp-cli.phar放置到指定目录例如我的目录为D:\Tools\wp-cli

    在D:\Tools\wp-cli目录下创建wp.bat

    输入:

    @ECHO OFF
    php "D:/Tools/wp-cli/wp-cli.phar" %*

    最后在环境变量Path中添加D:\Tools\wp-cli\

    更新

    您可以使用 (doc) 或重复安装步骤来更新 WP-CLI。wp cli update

    如果 WP-CLI 归 root 或其他系统用户所有,则需要运行 .sudo wp cli update

    WP-CLI生成JSON翻译文件

    wp i18n make-json <po-file-name>.po --no-purge
    

    其中<po-file-name>.po为已经编辑好的po文件。

    此命令将生成数个类似plugin-name-zh_CN-[md5].json

    md5值不可修改,将生成的json文件放置到对应的目录下即可实现对js输出的文本内容的翻译了。

    WP-CLI生成POT翻译模板

    1. 运行以下命令来生成POT文件:
    wp i18n make-pot <pot-file-name>.pot <plugin-or-theme-directory>

    在上述命令中,将<pot-file-name>替换为你想要生成的POT文件的名称,例如myplugin。将<plugin-or-theme-directory>替换为你想要提取翻译字符串的插件或主题的目录路径。
    2. 执行命令后,WP-CLI将自动扫描你指定的插件或主题目录中的翻译字符串,并将它们提取到指定的POT文件中。
    3. 你将得到一个名为<pot-file-name>.pot的文件,其中包含你的WordPress插件或主题的翻译字符串。你可以使用任何文本编辑器打开该文件进行查看和编辑。

    wp-cli的安装和使用可访问https://wp-cli.org/进行深度的了解和学习。

    本文是作者[@avenjan](https://www.cnuu.net/)对WordPress本地化翻译的一些心得和总结,分享给想要了解此部分知识和技能的朋友,部分内容可能不是十分准确和专业,但也希望能给有需要的朋友带来一些执导和帮助。如有疑问和意见欢迎评论区讨论,感谢关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368537.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zoho Mail企业邮箱:跨境协作的利器,荣登Top榜单

在全球化的商业环境中&#xff0c;高效的协作工具对于企业及个人来说都至关重要。邮件因其自身规格正式、全球通用等特点&#xff0c;在跨境通信场景中仍然是最高频使用的工具之一。 Zoho Mail企业邮箱因邮件抵达率高&#xff0c;数据加密严&#xff0c;纯净无广告&#xff0c;…

数据分析求职-常见面试题前言

今天和大家聊聊数据分析求职常见面试题&#xff0c;这是这个系列的第一篇文章&#xff0c;但是我不想开始就直接罗列题目&#xff0c;因为这样的文章实在太多了&#xff0c;同学们的兴趣程度肯定一般。所以&#xff0c;我想先和大家聊聊在准备面试题时候通常遇到的困扰&#xf…

京东年度数据报告-2023全年度打印机十大热门品牌销量(销额)榜单

2023年度&#xff0c;打印机消费市场的销售总量呈现下滑。根据鲸参谋平台的数据显示&#xff0c;京东平台上打印机市场的年度销量为650万&#xff0c;同比下滑约9%&#xff1b;销售额将近55亿&#xff0c;同比下滑约10%。 在这里&#xff0c;鲸参谋平台综合了京东平台上电脑办公…

第17集《佛法修学概要》

戊四、业果轻重 诸位法师慈悲&#xff01;陈会长慈悲&#xff01; 诸位学员&#xff01;阿弥陀佛&#xff01; 请大家打开讲义第四十二页。 我们讲到戊四、业果轻重。业果的轻重有三段&#xff1a;第一个约心&#xff1b;第二个约境&#xff1b;第三个约相续。我们讲到第二…

Vue3+Vite打包跨平台(七牛、阿里OSS)上传部署前端项目

1、业务场景 阅读之前&#xff0c;想了解一下各位观众老爷们&#xff0c;你们公司的项目是怎么部署的&#xff1a; 1.本地打包手动上传服务器&#xff1b; 2.本地打包自动上传服务器&#xff1b; 3.代码仓库流水线自动构建&#xff1b; 4.其他…&#xff1b; 我们用的第3种部…

认知能力测验,⑦如何破解类比推理类测试题?

关于认知能力测评&#xff0c;今天这稿算是最后一篇&#xff0c;一共写了7篇&#xff0c;分别是数字推理、逻辑思维、语言常识、数量关系、图形推理、逻辑判断、和类比推理。 不论是校招、社招、网申、还是行测&#xff0c;在线人才测评已经是普遍普及的想象&#xff0c;而认知…

BUUCTF--ciscn_2019_s_31

这题是一题ret2csu,先查看下保护&#xff1a; 64位架构的程序&#xff0c;那么传参就是寄存器传参了。开启了NX&#xff0c;也不存在ret2shellocde。接下来黑盒测试下&#xff1a; 输入一个字节都能触发段错误&#xff0c;并且还跟了一串不知道啥来的东西&#xff0c;盲猜是栈上…

HTML5+CSS3小实例:弹出式悬停效果

实例:弹出式悬停效果 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><m…

[Markdown] Markdown常用快捷键分类汇总

文章目录 Markdown1、标题2、列表3、强调4、链接和图片5、代码和公式6、表格和任务列表7、引用8、分割线9、脚注10、目录11、注释12、定义 Markdown Markdown是一种轻量级的标记语言&#xff0c;可以让你用简单的语法来编写格式丰富的文档。 Markdown编辑器是一种专门用于编辑…

c++学习:文件输入输出类模板

目录 头文件 常用类模板 basic_ifstream文件输入类模板 模板原型 模板的成员类型和成员对象和成员函数 文件输入类模板的容器对象 实例 basic_ifstream文件输出类模板 模板原型 模板的成员类型和成员对象和成员函数 实例 basic_ifstream文件输出类模板 模板原型 …

Certum与Geotrust的SSL证书区别

Certum和GeoTrust都是知名的CA认证机构&#xff0c;这两个品牌下的SSL证书在多个方面存在一些差异。今天就随SSL盾小编了解Certum与Geotrust证书的区别。 一、Certum机构背景 Certum是波兰的一家CA认证机构&#xff0c;成立于2002年&#xff0c;至今已有近20多年的历史。旗下有…

在NR中,什么是PDCCH order?

根据38.300中触发RA的场景&#xff0c;PDCCH Order 发起的随机接入对应的上图中橙框中的过程&#xff0c;即用于上行失步后&#xff0c;当gNB有下行数据要发送时&#xff0c;会使用PDCCH Order强制UE发起RACH以重新完成上行同步。 配置有SUL的小区进行RA时&#xff0c;网络可以…

深入了解pnpm:一种高效的包管理工具

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…

Golang 交叉编译之一文详解

博客原文 文章目录 Golang 中的交叉编译不同操作系统间的编译Linux 下编译windowsmacos windows 下编译Linuxmacos macos 下编译Linuxwindows 不同架构下的编译amd64x86 参考 Golang 中的交叉编译 在 Golang 中&#xff0c;交叉编译指的是在同一台机器上生成针对不同操作系统或…

关于最近VSCode的Python代码格式化失效问题的解决办法

隔了一段时间再次打开VSCode写Python脚本&#xff0c;Python扩展弹出一条警告 查看日志输出发现Python的代码格式化设置发生了变化 简单来说就是Python扩展已经将原有的默认代码格式化工具 "ms-python.python" 弃用&#xff0c;格式化功能已移交到单独的格式化工具…

CUDA安装一直卡在检查系统兼容性,或花费极长的时间检查兼容性,但最后显示NVIDIA安装程序失败

CUDA安装一直卡在检查系统兼容性&#xff0c;或花费极长的时间检查兼容性&#xff0c;但最后显示NVIDIA安装程序失败 ⚙️1.软件环境⚙️&#x1f50d;2.问题描述&#x1f50d;&#x1f421;3.解决方法&#x1f421;&#x1f914;4.结果预览&#x1f914; ⚙️1.软件环境⚙️ W…

【算法与数据结构】70、LeetCode爬楼梯

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;因为每次可以爬1阶或者2阶台阶&#xff0c;若想到达第i阶&#xff0c;则有两种情况&#xff1a;在第i-…

【数据结构专题】「延时队列算法」史上手把手带你认识一下数据结构的基本概念与术语

在本节中&#xff0c;我们将对一些概念和术语赋以确定的含义&#xff0c;以便与读者取得“共同的语言”。这些概念和术语将在以后的章节中多次出现。 数据 概念 数据(data) 是对客观事物的符号表示&#xff0c; 在计算机科学中是指所有能输人到计算机中并被计算机程序处理的…

强烈推荐!2024年设计师必备的10款Sketch插件

在现在的设计领域内&#xff0c;Sketch 已然成为设计师们最信赖的工具之一。为了更高效、更便捷地完成设计任务&#xff0c;Sketch 插件市场还提供了丰富的辅助插件。本文将深入盘点Sketch设计中不可或缺的10款插件&#xff0c;为广大设计师提供更丰富的设计体验。 1、摹客插件…

预付费平台在转供电的应用

安科瑞 崔丽洁 前言 国家从2018年开始对转供电加价开展规范清理以来&#xff0c;已经出来了一系列政策&#xff0c;不仅包括专门针对转供电问题的政策&#xff0c;18-20年间还在每次降电价政策中突出强调了转供电主体不得截留降价红利的要求。从具体内容看&#xff0c;各地政策…