介绍
Machine-gettext 是一个跨平台的 gettext 包装器,可以让你与 gettext 文件(.po / .mo)交互,并将它们转换成 JavaScript 对象或 JSON 字符串,以供前端应用使用。
在编写多语言 Web 应用时,gettext 是一个非常受欢迎的工具。gettext 常被用于 PHP 和 Python 等后端语言,但 machine-gettext 的出现,使得前端开发人员也可以使用 gettext 来管理国际化文本了。
安装
你可以使用 npm 命令来安装 machine-gettext:
npm install machine-gettext
使用方法
载入 gettext 文件
要开始使用 machine-gettext,首先需要将 gettext 文件载入到内存中:
const path = require('path'); const gettext = require('machine-gettext'); const options = { defaultLocale: 'en_US', directory: path.resolve(__dirname, '../locales') }; const catalog = gettext.load(options);
此处,我们通过指定 gettext 文件所在路径和默认语言来载入一个 gettext 编目(catalog)。
获取翻译
客户端上下文通常是浏览器。以这样的方式初始化 machine-gettext:
const ctx = new gettext.Context();
调用翻译方法:
const text = catalog.gettext('Hello, world!');
这样将返回视图环境下对应的“Hello,世界!”文本。
复数翻译
关于复数翻译(例如,用户数)的常见例子:
const track = 3; const text = catalog.ngettext('%d track', '%d tracks', track);
默认情况下,gettext 会使用字符串中的第一个百分号后的数字参数。在我们的例子中,这是百分号 %d。
此处将输出”3 tracks”。
翻译带变量的文本
有些文字需要变量来填充,这时候可以使用占位符:
const name = 'User'; const text = catalog.pgettext('Dashboard', 'Hello, %s!', name);
此代码会输出 “Dashboard: Hello,User!” 输出的结果中,“Dashboard” 是 gettext 的 context,即上下文。
转换为 JSON
最后,如果你想把 gettext 编目的内容转换成 JSON 字符串,可以使用 gettext 类的 stringify 方法:
const json = gettext.stringify(catalog); console.log(json);
这将返回 JSON 字符串, 示例:
-- -------------------- ---- ------- - ----------- - ---------- --- --------- ---------- --- ---------- ------ ----------- -------- --------------- ------------ --------- -- ---- -- --------------- - --- - ---------- - ----- ---- -- --- -------- - ----- ----- - -- ------------ - ------- ----- - ----- ----------- ------- - - - -展开代码
结语
获取和管理多语言文本是 Web 应用开发过程中的一个非常重要的部分,通过使用 gettext 和 machine-gettext,我们可以轻松地在前端开发中优雅地管理和维护多语言文本资源的管理,同时还能够同时兼容 Server 和 Client。希望能够对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60056bfa81e8991b448e5ae9