Anjuta專案的多國語言製作

Linux Swap 子系统:架构、内存管理与虚拟化 Swap Linux Swap机制通过将不活跃内存页移至磁盘或压缩内存,扩展系统有效内存容量,缓解内存压力。传统架构中,逻辑Swap槽与物理存储绑定,导致资源浪费,尤其在使用Zswap等压缩技术时。为此,Vswap与Xswap提出虚拟化方案:前者以XArray实现灵活映射,支持多后端迁移;后者采用稀疏映射,简化管理但容量固定。二者在架构设计、资源记账与动态扩展上各有权衡,反映了内核开发中对性能、可维护性与灵活性的深层考量。 阅读详情

http://zylix666.blogspot.com/2007/03/anjuta.html


Anjuta是一個專注在開發IDE工具上opensource專案,目前釋出的穩定版本為1.2.4a, 本文也以這個版本為基準. Anjuta還可以結合Glade做整合性的視覺開發, 運用托拉的方式快速建構GUI應用程式. 所以當我們用Anjuta產生的一個GTK 2.0專案時, 必須要勾選"啟用支援語言本地化"的選項.

當我們建立好一個專案並且可以正確執行後, 接下來就是製做翻譯檔. 到這個地方Anjuta巳經無法再幫助我們了, 請關掉它.

1, 首先要定義這個專案要支援那些語言
我們可以在configure.in裡找到一個叫ALL_LINGUAS的參數, 一般來說它是空的. 於是我們要把想要支援的語系參數寫在這裡.
假設我們要支援正體中文及簡體中文的utf-8格式, 還有法文, 義大利文, 那麼參數後面要加上
ALL_LINGUAS="zh_TW.UTF-8 zh_CN.UTF-8 fr it"

2, 接下來就是製做翻譯檔, 在專案資料夾下有一個資料夾叫po,裡面的檔案大致如下
.
|-- ChangeLog
|-- Makefile
|-- Makefile.in
|-- Makefile.in.in
|-- POTFILES
`-- POTFILES.in

接著我們到po這個目錄下.

2.1, 產生pot檔
為何要有pot檔呢? 那是因為每一種語言都需要一個翻譯檔, 也就是po檔, 這個pot檔就算是一個template. 我們可以用這個檔案複製後, 然後再去做修改. 我們用以下的命令來產生pot檔.
[aaa@bbb po]make update-po
雖然會有一些錯誤, 但是可以避免直接用xgettext所帶來的不便.
於是就會在目錄下看到一個以專案名稱為名的pot檔, 暫且稱為i18n_test.pot

2.2, 製做po檔
我們依照一開始所定義支援的語系, 將i18n_test.pot一個一個地複製成po檔,
[aaa@bbb po]cp i18n_test.pot zh_TW.UTF-8.po
[aaa@bbb po]cp i18n_test.pot zh_CN.UTF-8.po
[aaa@bbb po]cp i18n_test.pot fr.po
[aaa@bbb po]cp i18n_test.pot it.po
這些就是每一種不用語言的翻譯檔.

[2.2.1]
po檔的charset㯗位一定要設定, 否則轉換訊息至使用者字元集的功能將不會運作, 也就是無法翻 譯.
"Content-Type: text/plain; charset=CHARSET/n"
改成
"Content-Type: text/plain; charset=UTF-8/n"
[2.2.2]
原則上翻譯檔開頭的欄位都不能是預設值, 當然我們msgfmt的命令都還是可以編譯
"Project-Id-Version: 1.0/n"
"Report-Msgid-Bugs-To: /n"
"POT-Creation-Date: 2007-03-03 16:29+0800/n"
"PO-Revision-Date: 2007-03-03 HO:MI+ZONE/n"
"Last-Translator: Simon Zylix /n"
"Language-Team: Goddesstech /n"
"MIME-Version: 1.0/n"
"Content-Type: text/plain; charset=UTF-8/n"
"Content-Transfer-Encoding: 8bit/n"
[2.2.3]
其他的po檔也都是比照這樣. 不過就算我們只有改其中一個, 也一樣可以產生gmo檔, 只是只有改過的這個檔編譯的出來而巳.

2.3, 編譯成gmo檔
當2.2的部驟都做了以後, 接著就是編譯成gmo檔, 這個才是程式在執行時所要用到的檔案.
同樣地, 我們在po資料夾下, 打入make
[aaa@bbb po]make
Makefile會依照符合規定的po檔, 產出gmo檔.

當然我們也可以用以下的命令一個一個地產生gmo檔
[aaa@bbb po]msgfmt -v -o zh_CN.UTF-8.gmo zh_CN.UTF-8.po
[aaa@bbb po]msgfmt -v -o fr.gmo fr.po
[aaa@bbb po]msgfmt -v -o it.gmo it.po

3, 佈署mo檔
這裡的mo檔, 其實就是gmo檔, 二者沒有任何的不同. 所以若是直接用msgfmt命令就可以直接產生mo檔.

3.1, mo檔該放在何處?
mo檔必需要放在程式找得到的地方, 這樣才可以做字串的替換. Anjuta預設的mo檔都會放在"/usr/local/share/locale",
這可以在config.h中找到, 所以我們只要依照這個路徑把mo檔按照語系放好, 程式就會找到.如下
/usr/local/share/locale/
`-- zh_TW.UTF-8
`-- LC_MESSAGES
`-- i18n_test.mo

3.2, 改變預設的mo檔存放路徑
我們可以直接改config.h, 把PACKAGE_LOCALE_DIR這個參數改成自己想要的路徑就可以了.
#define PACKAGE_LOCALE_DIR "/home/zylix/Projects/i18n_test/locale"
但是若是project被clean build之後, 會造成這個參數被改回預設值, 這樣每次都要改完再重build是很麻煩的一件事
我們可以修改configure.in來改變預設路徑.

dnl Set PACKAGE_LOCALE_DIR in config.h.
if test "x${prefix}" = "xNONE"; then
AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${ac_default_prefix}/${DATADIRNAME}/locale", [Package local directory])
else
AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${prefix}/${DATADIRNAME}/locale", [Package local directory])
fi

改成

dnl Set PACKAGE_LOCALE_DIR in config.h.
if test "x${prefix}" = "xNONE"; then
AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "/home/zylix/Projects/i18n_test/locale", [Package local directory])
else
AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "/home/zylix/Projects/i18n_test/locale", [Package local directory])
fi


然後再執行一次autogen, 就會發現config.h裡的PACKAGE_LOCALE_DIR就是我們想要的路徑了.

4, 如何測試.
當mo檔佈署好了, 最後就是要測試. 在Linux下改變語言, 我們可以用LANG這個環境變數.
以轉換中文來說
[aaa@bbb po]export LANG=zh_TW.UTF-8
再執行你的程式, 看看中文是不是有顯示出來.

湿敏电阻HR202的两种驱动方案实测:IO充放电法 vs. 交流方波ADC法,哪个更适合你? 本文深入评测湿敏电阻HR202的两种驱动方案:IO充放电法和交流方波ADC法。通过原理图分析、精度实测和资源占用对比,揭示交流方波ADC法在精度和稳定性上的优势,特别适合长期监测场景。同时提供IO充放电法在资源受限情况下的应用建议,帮助工程师根据项目需求做出最优选择。 阅读详情

相关推荐

百度地图小区边界爬取

百度地图 小区边界爬取 完整项目地址-github 数据源:百度地图api 项目结构 RESIDENTIALAREABOUNDARY │ ResidentialAreaBoundaryControl.py 主函数 │ ResidentialAreaBoundaryFunc.py 方法库 │ ├─Auxiliary │ crawelFunc.p...

fulin9452的博客 6399

理解 Linux 动态库加载:LD_LIBRARY_PATH

flyfish

二分掌柜的 326

ubuntu为Docker配置代理

我们平常在ubuntu终端中使用curl或git命令时,往往会很慢。所以,首先需要给ubuntu终端环境添加代理。查看自身那个软件的端口号,我这里是7890。

不想随波逐流的大学生一枚,我们每个人都在努力奔跑 1643

Linux 磁盘满了怎么排查?df / du / find 三步定位大文件

Linux 磁盘满排查三步法:df -h 定位分区、du 逐层下钻、find 按大小和时间抓大文件,附 inode 耗尽、文件已删未释放、du 与 df 不一致等经典坑的解决方案。

weixin_38291577的博客 217

开关电源|控制方式PWM、PFM、混合调制

频率调制器根据误差放大器的输出大小来改变方波信号的频率,若负载电流突然增加,输出电压 Vout随之下降,反馈电压 VFB 减小,此时误 差放大器的输出增高,频率调制器输出方波信号的频率增大,增加电感充电次数;若负载电流突然增加,输出电压Vom随之下降,反馈电压Vr减小,此时误差放大器的输出增高,PWM比较器输出方波信号的占空比增大,增加电感充电时间:若负载电流突然下降,PWM比较器输出方波信号的占空比减小,减少电感充电时间,从而稳定输出电压。它是在固定开关频率下,通过改变脉冲宽度来调节占空比的。

weixin_46969363的博客 1万+

从仿真到器件:铌酸锂电光调制器Comsol建模避坑指南

本文详细介绍了铌酸锂电光调制器在Comsol中的建模全流程,涵盖晶体切向选择、材料参数配置、多物理场耦合等关键技术。通过实战案例和调试技巧,帮助工程师避开常见建模陷阱,提升仿真精度与效率,特别适用于高速光通信系统的器件设计与优化。

m2n3b4v5c6的博客 417

Linux-iostat命令详解

Linux命令学习记录

m0xin的博客 90

AI Agent开发大全第二十课-如何开发一个MCP(从0开发一个MCP Server)

大模型的MCP火了,可是无论是Claude官网本身自带Sample还是全网任何一本教程没有一个可以真正应用在生产环境中的。要么就是只能在本地以文件IO流的方式运行要么干脆连编译都出错,真正的mcp server和client是怎么编写的?如何运行在分布式环境?本教程就带大家真正从0开始以“AI计算食物热量“为例带大家真正学习mcp开发的全过程。

打造全国最全的AI Agent开发知识领域的博客 1801

【Linux】APT 本地 deb 安装与 `-f` 参数总结笔记

apt install ./xx.deb 可自动解析并安装依赖,无需 -f;-f 仅用于修复已损坏的依赖状态,非首次安装时必需。apt install -f 可单独运行,修复 broken dependencies。两者职责不同:前者是安装与依赖解决,后者是故障修复。完全离线时需提前准备依赖包或本地源。

hknaruto的专栏 209

深度解析电力负荷预测:基于深度学习的完整实战指南

电力负荷预测是智能电网运行中的核心技术之一,准确的负荷预测对于电网的稳定运行、电力市场交易以及能源调度具有重要意义。本文将详细介绍电力负荷预测的完整解决方案,从数据预处理、特征工程到模型构建与评估,提供完整的可执行代码。我们将使用LSTM(长短期记忆网络)和Transformer两种主流深度学习模型进行实现,并通过实际数据集验证模型效果。电力负荷预测是指根据历史负荷数据、气象因素、时间特征等多维信息,预测未来某一时段的电力需求。超短期负荷预测:未来几分钟到几小时短期负荷预测:未来1天到1周中期负荷预测。

YOLO 111

【机器学习-18】特征筛选:提升模型性能的关键步骤

我们将介绍不同类型的特征筛选方法,包括基于统计的方法、基于模型的方法和嵌入式方法等,并详细解释每种方法的原理和适用场景。通过特征筛选,我们可以减少数据集的维度,降低模型的复杂度,提高模型的泛化能力,并加速模型的训练过程。通过选择适当的特征筛选方法,我们可以减少模型的复杂度,提高模型的泛化能力,并加速模型的训练过程。然而,并非所有的特征都对模型的性能提升有所贡献,有些特征甚至可能是冗余的、噪声较大的或者与目标变量无关的。我们的目标是通过特征筛选选择出对欺诈检测最有用的特征,以提高模型的预测精度。

qq_38614074的博客 1万+

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 285

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux rm 误删文件恢复实操教程

Linux使用rm删除文件时,并不会直接抹除磁盘上的数据,只是移除文件索引,让系统不再识别这块空间。只要没有写入新数据,原有扇区内容就会保留。新文件写入才有可能覆盖这些区域,一旦覆盖就很难找回。恢复的本质就是扫描磁盘,找到这些还存在、但索引丢失的数据条目,再把它们导出保存到其他分区。越早停止写入,恢复成功的概率越高。

海天数据恢复-winhex数据恢复教程 206

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Windows/Linux下强实时运动控制内核(二):基于Qt的Delta机械手的开发应用

强实时运动控制内核MotionRT750下Qt开发Delta机械手的完整开发流程。

weixin_57350300的博客 240

Linux sudo

如果输出 → 无 sudo 权限 如果输出 → 拥有全部 sudo 权限 辅助验证命令 ⚠️ 注意:在 wheel 组 ≠ 一定能 sudo,必须 开启 Ubuntu/Debian: ✅ 重要:修改组之后,用户要重新登录才生效! 或者执行 临时生效 看到这行(没有 #注释)才生效: 方式 2:visudo 直接单独给用户授权(精细化权限) 找到 ,下面添加一行: 自带语法校验,写错会告警,不要直接 vim 改 ,写错直接 sudo 炸掉! 想免密 su

fengliyang_的博客 176

Linux 磁盘 100% 但 du 查不出东西,五种情况逐个排

监控告警说根分区 100%,登录上去 du -sh /* 加起来只有 12GB,df 显示 40GB 已用。差了快 30GB,du 找不到任何东西。这种情况基本都是"文件被删了但进程还开着",但也可能是别的原因。这篇按可能性排一下顺序。

2408_89646393的博客 162

Linux、Shell、MySQL 测试卷逐题细讲(下篇:MySQL)

本文为Linux、Shell、MySQL测试卷下半段MySQL部分逐题讲解,包含填空、选择与SQL分析三类题型。填空题覆盖COUNT、HAVING、DISTINCT、事务、约束、索引等核心语法;选择题辨析存储过程、索引类型、ACID、存储引擎、用户管理等考点。SQL大题围绕员工、部门、职位、地点四张关联表,考察多表连接、分组聚合、自连接、相关子查询、NULL处理等高频写法,标注LEFT JOIN统计计数、NULL判断、子查询别名等易错坑点,同时梳理试卷OCR识别带来的干扰问题,重点提示SQL实操中的常见失误

dongziwen1的博客 179

Linux 网络基础详解:IP、子网、路由与 ip、ss 命令实战

建库建表、增删改查、连接查询(内连左连右连)、聚合函数、权限控制 GRANT/REVOKE,每条命令配可运行示例,零基础也能跟着敲会 SQL 基础。

2502_91473995的博客 608

Linux 下 OpenCode 接入自定义大模型 API 教程:以 DeepSeek-V4.1-Flash-1017 为例

本文介绍在Linux下通过Python脚本配置OpenCode接入自定义大模型API(以DeepSeek-V4.1-Flash-1017为例),实现永久化、非侵入式配置。通过修改~/.config/opencode/opencode.json文件,添加OpenAI兼容服务商BLSC,注册模型并设置APIKey。支持命令行测试、默认模型设定及安全权限控制,操作简单且不影响原有配置。适用于各类支持OpenAI接口的自定义模型服务,提升开发灵活性与安全性。

qq_15060477的博客 120

【Linux 命令实战(02):文件与目录操作,掌握 pwd、ls、cd 三个核心命令】

命令作用cd /进入根目录cd ~进入当前用户家目录cd返回当前用户家目录cd …返回上一级目录cd …/…返回上两级目录cd -返回上一次所在目录进入指定目录命令核心用途常用参数pwd查看当前目录-L、-Pls查看文件和目录cd切换目录…、~、-Linux 文件系统的基本结构。绝对路径与相对路径的区别。Tab 自动补全。Shell 通配符。使用&&组合命令。这篇文章主要解决的是如何在 Linux 文件系统中快速定位目录。

一些微不足道的见解、希望能帮助各位 189

Linux Day29——HTTP与网络排障

*实测**:`traceroute -n -m 8 8.8.8.8` 的输出:第 1 跳 `172.17.144.1`(本机网关)、第 2 跳 `10.32.0.1`、第 3 跳 `10.50.255.253`、第 4 跳 `* * *`、第 5 跳 `221.226.71.193`、第 6 跳 `* * *`、第 7、8 跳有地址但夹着星号。`ping` 和 `traceroute` 都靠它。**实测**:`ss -lta` 看到三行 `domain`,加 `-n` 后变成 `53`。

2503_94114317的博客 150

【Linux】进程间通信的基础概念及基于匿名管道的进程池

前面我们介绍了进程的创建、退出和等待,接下来看看进程之间怎样传递数据。这篇从匿名管道入手,再用管道把父子进程联系起来,写一个简单的进程池小demo。而且我把发行版从CentOS切换成Ubuntu了,主要是CentOS已经不维护了,可惜了。。。

qeen87的博客 314

Linux的渲染与显示系统链路

Linux渲染与显示链路核心为DRM/KMS + EGL直连模式,绕过传统X11/Wayland中间层,实现低延迟、高效率的直接帧提交。相比X11的粗粒度权限控制与Wayland的合成开销,该方案链路短、资源消耗低,但仅支持单进程独占显示,缺乏窗口管理与系统级兜底。EGL作为跨平台桥梁,连接OpenGL ES与原生显示系统,通过Display、Surface、Context三要素构建渲染环境。内核层DRM管理GPU资源,KMS配置显示模式,用户态GDM负责登录会话,共同构成从硬件到应用的完整图形栈。

微小的鱼的博客 204

Linux 启动流程与故障修复:GRUB、systemd 与救援模式实战

密钥登录配置替代密码、sshd_config 禁 root 禁密码改端口、fail2ban 自动封爆破 IP、端口改不改的权衡,服务器被扫描爆破时的完整加固方案。

2502_91473995的博客 456

芯参谋(88):Linux 嵌入式系统开发指南

本文为面向MPU/Linux平台的用户态系统层开发指南,聚焦启动链各环节的可测量、可判据化工程实践。涵盖交叉工具链一致性、Bootloader交接、根文件系统构建与瘦身、init/systemd服务编排、进程与IO模型、网络接入、调试可观测性、实时性优化、安全加固、电源管理及OTA升级等核心内容。强调“启动时间、镜像大小、内存峰值、断电恢复”等量化指标,提出四条读者路径:从零搭建、启动优化、线上问题排查、实时性实现。以Linux 6.1/LTS内核、glibc2.36/musl1.2、systemd252等

qq520131714的专栏 464

Linux 定时任务:crontab 写法与常见失效原因

先用 crontab -l 确认任务存在,再看系统日志(journalctl -u cron 或 journalctl -u crond,也可看 /var/log/cron),再看自己重定向的日志文件,最后手动执行一次脚本命令验证。crontab -r:删除当前用户的任务,比较危险,执行前先备份:crontab -l > ~/crontab.bak;这样做的好处很直接:命令不会因为 PATH 不同而找不到,脚本出错时也能在日志文件里看到,而不是悄悄失败。*/5 * * * * 表示每 5 分钟执行一次;

云物缭绕 229
上一篇: GTK里的label控件 颜色 大小 等
下一篇: vector 如何得到最后一个元素
bitscro
博客等级 码龄21年 19粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值