千羽兰 發表於 2026-5-5 09:02:56

gettext 翻译介绍和简单使用

<h1><img class="" src="https://storage.deepin.org/thread/202310191340559519_中.png" alt="" width="1203" height="512" /></h1>
<h1><span id="i">基础知识介绍</span></h1>
<h2><span id="poedit">poedit 介绍</span></h2>
<p>Poedit是一个流行的跨平台的翻译编辑器,用于编辑.po文件。它提供了一个直观的界面和丰富的功能,使得翻译人员能够轻松地编辑和管理软件本地化的翻译。</p>
<h2><span id="gettext">gettext 介绍</span></h2>
<ul>
<li>Gettext工具集:Gettext提供了一组命令行工具,用于管理和处理翻译相关的任务。其中包括以下工具:<br />
xgettext:用于从源代码中提取文本字符串,并生成.pot文件(模板文件)。<br />
msginit:用于创建新的.po文件,并提供基本的翻译环境。<br />
msgmerge:用于合并更新的.pot文件到现有的.po文件中,保留已有的翻译。<br />
msgfmt:用于将.po文件编译成二进制的.mo文件,供程序在运行时加载。</li>
</ul>
<h3><span id="pot">.pot 文件</span></h3>
<p>.pot文件(Portable Object Template):.pot文件是一种模板文件,用于创建.po文件。它包含了源语言的文本,但没有目标语言的翻译。开发人员通常使用.pot文件作为基础,提取应用程序中的所有文本字符串,并将其转化为.pot文件。然后,翻译人员可以使用.pot文件创建对应的.po文件,并进行翻译工作。</p>
<h3><span id="po">.po文件</span></h3>
<p>.po文件是一种文本文件,包含源语言(通常是英语)和对应的目标语言翻译。每个翻译条目都包括一个独特的标识符、源文本和目标文本。.po文件是可编辑的,可以使用文本编辑器或专门的翻译工具进行修改。</p>
<h3><span id="mo">.mo文件</span></h3>
<p>.mo文件是一种二进制文件,是.po文件的编译版本。它包含了.po文件中的翻译条目的二进制表示。软件在运行时通常使用.mo文件来加载正确的翻译文本。.mo文件是机器可读的,因此在运行时能够提高翻译的效率和性能。</p>
<h1><span id="i-2">环境准备</span></h1>
<h2><span id="i-3">软件安装</span></h2>
<p><em>sudo apt <span class="hljs-keyword">install</span> gettext </em></p>
<p><em>sudo apt <span class="hljs-keyword">install</span> poedit</em></p>
<h2><span id="i-4">示例程序</span></h2>
<p><img loading="lazy" src="https://storage.deepin.org/thread/202310191129368250_企业微信截图_16976850375079.png" alt="" width="700" height="406" /></p>
<h2>编译</h2>
<p><em><span class="hljs-attribute">gcc</span> myapp.c -o myapp</em></p>
<h2>生成po文件</h2>
<p><em><span class="hljs-selector-tag">xgettext</span> <span class="hljs-selector-tag">-a</span> <span class="hljs-selector-tag">myapp</span><span class="hljs-selector-class">.c</span> <span class="hljs-selector-tag">-o</span> <span class="hljs-selector-tag">myapp</span><span class="hljs-selector-class">.pot</span></em></p>
<p><em>注意删除多余的翻译行</em></p>
<h2><span id="po-2">生成po 文件</span></h2>
<p><em><span class="hljs-selector-tag">msginit</span> <span class="hljs-selector-tag">-l</span> <span class="hljs-selector-tag">zh_CN</span> <span class="hljs-selector-tag">-i</span> <span class="hljs-selector-tag">myapp</span><span class="hljs-selector-class">.pot</span> <span class="hljs-selector-tag">-o</span> <span class="hljs-selector-tag">zh_CN</span><span class="hljs-selector-class">.po</span></em></p>
<p><em>翻译 po 文件,可使用poedit</em></p>
<h2><span id="mo-2">生成mo 文件</span></h2>
<p><em><span class="hljs-selector-tag">msgfmt</span> <span class="hljs-selector-tag">zh_CN</span><span class="hljs-selector-class">.po</span> <span class="hljs-selector-tag">-o</span> <span class="hljs-selector-tag">zh_CN</span><span class="hljs-selector-class">.mo</span></em></p>
<h2><span id="i-6">安装</span></h2>
<p><em><span class="hljs-attribute">mkdir</span> -p locale/zh_CN/LC_MESSAGES </em></p>
<p><em>cp zh_CN.mo locale/zh_CN/LC_MESSAGES/myapp.mo</em></p>
<h2><span id="i-7">运行</span></h2>
<p><em>./myapp</em></p>
<h1><span id="i-8">翻译问题排查</span></h1>
<ol>
<li>翻译文件路径是否正确</li>
<li>翻译内容是否正确查看方式,将mo转化为po文件,使用poedit 打开pot 文件查看</li>
</ol>
<p><em><span class="hljs-selector-tag">msgunfmt</span> <span class="hljs-selector-tag">example</span><span class="hljs-selector-class">.mo</span> <span class="hljs-selector-tag">-o</span> <span class="hljs-selector-tag">example</span><span class="hljs-selector-class">.po</span></em></p>
<ol>
<li>查看程序语言相关环境变量是否正常在初始化函数前打印</li>
</ol>
                        </div>
頁: [1]
查看完整版本: gettext 翻译介绍和简单使用