当前位置: 首页 > article >正文

Linux系统之gettext详解

gettext 是一个用于国际化(i18n)和本地化(l10n)的工具集,旨在帮助开发者创建多语言支持的应用程序。它主要通过提供一系列工具和库来简化文本翻译过程。

gettext 工作流程

  1. 标记源代码:在源代码中用 _() 函数包装需要翻译的字符串。
  2. 提取字符串:使用 xgettext 提取所有标记的字符串到 POT (Portable Object Template) 文件。
  3. 翻译字符串:将 POT 文件转换为 PO (Portable Object) 文件,并进行翻译。
  4. 编译翻译:使用 msgfmt 将 PO 文件编译成二进制格式的 MO (Machine Object) 文件。
  5. 部署翻译:将生成的 MO 文件部署到适当的位置,以便应用程序加载。

基本语法

gettext [选项] [[文本域] 消息ID]
gettext [选项] -s [消息ID]...

选项

基本选项

  • -d, --domain=文本域
    从指定的文本域获取翻译消息
  • -e
    启用部分转义序列的扩展
  • -E
    为兼容性保留(被忽略)
  • -h, --help
    显示帮助信息并退出
  • -n
    抑制末尾的换行符
  • -V, --version
    显示版本信息并退出

特殊模式

  • -s
    模拟 echo 命令的行为(但会翻译参数中能在消息目录中找到的消息)

参数说明

  • [文本域] 消息ID
    从指定文本域中获取与消息ID对应的翻译消息
  • 如果未提供文本域参数,则从环境变量 TEXTDOMAIN 中获取

环境变量

  • TEXTDOMAIN
    指定默认的消息文本域(相当于 -d 选项)
  • TEXTDOMAINDIR
    指定消息目录的搜索路径(当在常规目录中找不到消息目录时使用)

默认搜索路径

/usr/share/locale

使用示例

基本翻译

# 使用默认文本域翻译消息
gettext "Hello World"# 指定文本域翻译
gettext -d myapp "Welcome message"
# 或等价的
gettext myapp "Welcome message"

模拟 echo 行为

# 会尝试翻译能翻译的部分
gettext -s "This is a test" "Another message"

在脚本中使用

#!/bin/bash
# 设置文本域
TEXTDOMAIN=myapp
TEXTDOMAINDIR=/usr/local/share/locale# 使用gettext翻译
echo $(gettext "File not found")

抑制换行

gettext -n "Processing..."

注意事项

  1. 当使用 -s 选项时,行为类似于 echo 命令,但会尝试翻译参数
  2. 消息目录通常位于 /usr/share/localeTEXTDOMAINDIR 指定的路径
  3. 实际开发中更常用 _() 宏(如 _("message")),这是 gettext 的常用简写形式
  4. 完整的国际化流程通常包括:
    • gettext 标记源代码中的字符串
    • 使用 xgettext 提取消息
    • 创建翻译文件(.po)
    • 编译为二进制格式(.mo)
http://www.lryc.cn/news/2395532.html

相关文章:

  • 基于Qt封装数据库基本增删改查操作,支持多线程,并实现SQLite数据库单例访问
  • EC800X QuecDuino开发板介绍
  • ARM P15协处理器指令详解:架构、编程与应用实践
  • PHP轻量级聊天室源码(源码下载)
  • MySQL数据表添加字段(三种方式)
  • leetcode hot100刷题日记——33.二叉树的层序遍历
  • 2、PyTorch基础教程:从张量到神经网络训练
  • 《数据结构初阶》【番外篇:快速排序的前世今生】
  • 【笔记】基于 MSYS2(MINGW64)的 Poetry 虚拟环境创建指南
  • PINNs案例——二维磁场计算
  • Hive SQL 中 BY 系列关键字全解析:从排序、分发到分组的核心用法
  • 数据类型检测有哪些方式?
  • 算法打开13天
  • Freeqwq 世界首个免费无限制 分布式 AI 算力平台 https://qwq.aigpu.cn/
  • 广告拦截器:全方位拦截,畅享无广告体验
  • .net Avalonia应用程序生命周期
  • 主数据编码体系全景解析:从基础到高级的编码策略全指南
  • Selenium操作指南(全)
  • Go语言中的数据类型转换
  • 35、请求处理-【源码分析】-自定义参数绑定原理
  • 智绅科技——科技赋能健康养老,构建智慧晚年新生态
  • STM32通过KEIL pack包轻松移植LVGL,并学会使用GUI guider
  • day43 python Grad-CAM
  • 在 Ubuntu 上挂载其他硬盘的步骤
  • SQL的查询优化
  • MCU如何从向量表到中断服务
  • 物联网基础概念
  • Linux线程同步实战:多线程程序的同步与调度
  • 【MySQL】事务及隔离性
  • Leetcode 3566. Partition Array into Two Equal Product Subsets