WordPress 语言文件
像素鱼丸
2024-05-04
644

一,WordPress 创建语言文件

通常 WordPress 的语言文件在 ./wp-content/languages 下,文件的扩展名,是“mo”和“po”,

po文件
用程序msginit来分析pot文件,生成各语言对应的po文件,比如中文就是zh_CN.po,法语就是fr.po文件。
PO是Portable Object(可移植对象)的缩写形式,它是面向翻译人员的、提取于源代码的一种资源文件。
po文件可以用任何编辑器如poEdit,vi,Emacs,editplus打开,交给翻译人员来将其中的文字翻译成本国语言。

mo文件
用msgfmt将.po文件编译成mo文件,这是一个二进制文件,不能直接编辑。
MO是Machine Object(机器对象)的缩写形式,它是面向计算机的、由.po文件通过GNU gettext工具包编译而成的二进制文件,应用程序通过读取.mo文件使自身的界面转换成用户使用的语言,如简体中文。

创建一个 po 文件:

bash
msgid ""
msgstr ""

#. translators: %s: wp-config.php
#: wp-admin/includes/network.php:463
msgid "You should back up your existing %s file."
msgstr "您应备份现有的 %s 文件。"

#. translators: %s: wp-config.php
#: wp-admin/includes/network.php:463
msgid "dada"
msgstr "哒哒"

msgid "dodo"
msgstr "兜兜"

使用命令生成“mo”文件:

msgfmt -o languages/zh_CN.mo languages/zh_CN.po

二,载入本地化语言文件

WordPress 做一个多语言网站,或者让我们的主题支持多种语言,那么就可以使用 load_theme_textdomain() 函数来定义主题的语言路径,只要将语言放到该目录下面且命名正确,就可以生效。 load_theme_textdomain() 位于 wp-includes/l10n.php

在主题的functions.php中加入以下代码:

add_action('after_setup_theme', 'la_theme_setup');
function la_theme_setup(){
    load_theme_textdomain('la_theme', get_template_directory() . '/languages');
}

三,使用语言文件

1.字符串翻译 要使字符串在您的插件中可翻译,请将原始字符串包装在__()函数调用中,如下所示:

$text = __( 'Hello, SitePoint Readers!', 'espw-plugin' );

如果要向浏览器回显字符串,而不是echo语言构造,请使用_e函数:

_e( 'Hello, SitePoint Readers!', 'espw-plugin' );

2.使用占位符 作为PHP和WordPress开发人员,我假设您知道什么是placeholders 。 您可以快速浏览sprintf和printf() PHP文档以获得更多信息。 如果要在字符串中使用变量(例如下面的示例),则应使用占位符。

echo 'Your city is $city.'

正确的方法是如下使用printf()函数:

printf(
  __( 'Your city is %s.', 'espw-plugin' ),
  $city
);

浏览WordPress插件存储库中托管的一些插件的代码,我确实看到了类似这样的信息:

echo __('Your city is $city', 'espw-plugin');
_e('Your city is $city', 'espw-plugin');

尽管字符串现在可以翻译了,但是PHP变量$city也可以翻译。

这是一种不好的做法,因为翻译人员可能会错误地更改变量或将恶意代码注入插件代码库中,这最终会使插件发生故障。

sprintf函数与printf相似,因为它们使用占位符格式化字符串,而printf输出格式化的字符串,而sprintf返回该字符串。

示例:以下代码将格式化的字符串分配给变量$text 。

$text = sprintf( __('Your city is %s.', 'espw-plugin'), $city );

 

收藏
打赏
WordPress 数据库操作
上一篇
WordPress 输入安全
下一篇

发表评论

注册不是必须的

像素鱼丸
157 文章
2 评论
4 喜欢
最新文章

付费资源下载时间限制有什么用?

这个功能确实挺常见的,它背后的逻辑其实不是“防君子”,而是“防小人”和“控成本”。有没有必要做,主要取决于你平台上的资源类型和你的运营阶段。 我们可以从三个角度来看看这个“10天有效期”到底有什么用: 增加倒卖和二次传播的成本(防黄牛) 这是最核心的意义。如果你的资源是虚拟商品(比如教程、源码、素材包),用户付一次钱理论上可以无限复制。 如果没有有效期: 一个人买了,转手挂到闲鱼或者别的群里卖,你 […]

退款和取消订单接口要不要合并

很多开发者在设计初期的常见思路。将“取消”和“退款”分开,从功能上看似乎很清晰,但在实际的复杂业务场景中,这种设计可能会带来一些问题。 更主流和推荐的设计是提供一个统一的“申请取消订单”接口,由后端服务根据订单的当前状态,自动路由到不同的处理逻辑。  为什么统一接口是更好的选择? 前端逻辑简化: 对于用户而言,他的诉求只有一个:“我不想要这个订单了”。无论订单是否支付,他在前端点击的都是“取消订单 […]

Mirage 主题 v3.7.0 发布

Mirage 主题 v3.7.0 发布 feat 增加拉黑用户功能 feat 移动端向下滑动时隐藏header,向上滑动时显示header 下载地址 https://gitee.com/vthemecn/mirage/releases/tag/v3.7.0 https://github.com/vthemecn/mirage/releases/tag/v3.7.0 新增功能截图
生成中...
扫描二维码
扫描二维码