pfSense用户界面汉化翻译教程

为了记录自己的汉化过程,同时也为了方便网友自己制作汉化版本,我把自己汉化pfSense2.32的过程在此分享。

一、汉化的方法和步骤

1、取得语言文件

首先要开启系统的shell端口,用浏览器登陆PFSENSE管理界面,在System→Advanced→Admin Access →  Secure Shell Server 勾上(Enable Secure Shell)这个选项。

图片1.png

下载并安装最新版的winscp,运行winscp,新建连接,IP地址写防火墙的lan地址,端口是22,用户名是root,密码是你自己的WEB配置密码,初始是“pfsense”。

图片2.png

登陆进PFSENSE文件系统,到/usr/local/share/locale/en/LC_MESSAGES目录,将pfsense.pot文件下载到本地硬盘。

图片3.png

2、开始汉化语言文件

下载poedit软件,版本越新越好,将下载的pfsense.pot改名为pfsense.po,用poedit软打开,开始启动逐条翻译。最笨的方法,当然是一条条的翻译了^_^。如果都向我学习,可以省事不少。方法是多下载一些同类的已翻译完成的po文件,让他跟TM同步,然后打开要翻译的语言文件 ,选择从TM同步,选择仅填补完全匹配的项,这样可以节省不少的汉化时间。整个要汉化的条目6518条(pfsense.2.32)。从TM同步后,自己大概只要汉化3000多条了。当然TM也不是100%准确,还是要仔细检查的。

图片20.png

将剩余未翻译的条目,按“翻译顺序”排序,导出为HTML格式,然后用编辑器打开,转为普通文本格式,为下一步的翻译做好准备。

翻译建议采用Google浏览器加谷歌翻译插件来进行,因为国内不能直接访问google,所以还要采取一些其他的方法,这个网上有教程,自己可以找一下。我是采用了“谷歌访问助手”这个插件来实现访问的。

图片4.png

将转化的文本格式的翻译条目复制到谷歌翻译上,一次可以翻译5000个字符,然后再逐条粘贴到poedit上的对应的翻译条目上。你也可以在POEDIT上直接将一条条原文粘贴到谷歌翻译上,再把翻译结果粘贴回来(没人反对你这么做,只是效率有点低。)。这个没捷径可走,必须一条条的来。如果翻译的语句中有变量(%%)就要注意了,围绕着他进行翻译,不要删除他,否则变量就不会正确显示。

图片5.png

3、翻译成果的初步应用

pfsense.po文件汉化完成后,每次保存,在同一目录下,有一个pfsense.mo文件 ,这个才是我们要用的语言文件。用Winscp登陆到pfsense文件系统,把pfsense.mo文件复制到/usr/local/share/locale/zh_CN/LC_MESSAGES目录下。这个时候还看不到汉化的结果,因为在System→General Setup→Language选项下并没有简体中文的选项,只有英语、葡萄语和土耳其语,我们还要修改一个文件。在/etc/inc下,找到pfsense-utils.inc文件,用editplus或其他的PHP编辑器打开,找到3001行,根据这一行的格式在下面添加一栏中文语言选项。保存文件,重启就能看到简体中文切换的选项了。

图片6.png

4、汉化界面的进一步完善

切换中文后,大部分的页面已经是中文了,汉化率估计在95%以上了,如果没什么特别嗜好,这样用用也就可以了。可是如果你是跟我一样的完美控,可能也希望把看到的英文都翻译成中文吧。这个没其他办法,只能翻译相关的PHP文件。界面上可执行的PHP文件,都在/usr/local/www目录下,先把这个目录的文件全部导到本地。先一个页面一个页面的点,看哪个页面上还有英文的显示,注意浏览器的地址栏,找到需要汉化的PHP文件,在本地打开。常规设置对应的就是WWW目录下的system.php文件,高级设置对应的就是www目录下的system_advanced_admin.php文件,其它的自己看!

图片7.png

下一步,启动PHP汉化工作。为了减少工作量,我们只对切换中文显示后还遗留的英文进行汉化。找到还有英文显示的对应的PHP文件 ,用editplus打开,在搜索里点要翻译的英文,一般都在gettext和setHelp后面,把双引号里对应的英文翻译成中文就行了。如果找不到,试着把语句缩短进行查找。如果翻译的语句中有变量($%)就要注意了,围绕着它进行翻译,不要删除。采用这种办法,把要翻译的PHP文件都翻译了,这个量不大,只涉及到30多个PHP文件(当然,你如果闲的蛋疼,把各类出错提示都翻译了,那可就远远不止这些了)。翻译完成后,替换系统WWW目录下同名文件,点击页面就能看到效果。也可以在Winscp中找到要翻译的PHP文件 ,点鼠标右鍵选择用editplus打开,翻译完后保存直接刷新一下浏览器页面就能看到翻译效果(这个方法更直接省事)。

图片8.png

图片9.png

如果PHP文件都汉化完了,还有页面上显示了英文怎么办? 这就说明这个英文不在这个PHP文件里,在其他关联的文件上。这就要用到editplus在文件中查找文本的功能。把pfsense2.32的光盘安装文件(ISO)映射为一个驱动器,editplus查找范围设为这个驱动器,文件类型选*.*,范围选择包含子目录,输入要查找的英文,一般就能找到这个文件。翻译完后替换系统目录内的同名文件就可以了。

图片10.png

在/usr/local/www/wizards目录中,有配置向导、流量整形向导和Open***向导的XML文件 ,这些文件要单独翻译。在对setup_wizard.xml(第一次进入系统时弹出的的配置向导)文件进行对照翻译时,有些字条不要随便翻译,否则会造成程序不能执行、或设置不能保存的问题(这是目前唯一不能完全汉化的地方,有点遗憾……)。

5、去除或增加某些菜单(进阶)

在汉化过程中,如果发现某些菜单用不上想去除,或想给系统增加某些其他功能(比如ARP绑定)怎么办? 这个就必须修改/usr/local/www目录下的head.inc文件了。用editplus打开head.inc文件,找到241行,从这一行开始往下,对应的都是系统菜单目录。如果要删除某个菜单,你直接删除那个菜单对应的那一行就行了。如果要增加,就在相应的某个类目下增加,并把对应的PHP文件放在/usr/local/www目录下。在这里,你也可以直接汉化整个系统菜单!

图片11.png

6、其他问题(进阶)

  • 语言文件(pfsense.po)和PHP文件都翻译了,会显示哪个翻译结果?

只显示PHP文件翻译的结果,语言文件没影响。

  • 如果翻译了某个PHP文件 ,导致pfsense运行出错怎么办?

用原文件进行替换就行了。如果不是gettext和sethelp后面的文本翻译,最好小心点!系统出错会有提示哪个PHP文件的多少行出错,自己找原因就行了。

  • 我替换了pfsense.mo文件,但是看不到汉化效果怎么办?

重启一下pfsense!

  • 有什么好办法能即时验证php文件的汉化效果?

用虚拟机,通过WinSCP用editplus直接在pfsense文件系统中打开要汉化的PHP文件,汉化一段就点保存,刷新浏览器页面看汉化效果。

  • 谷歌上不去,用百度翻译行不?

翻译效果,谷歌最好,很多已经接近人工翻译了。百度就算了吧……….

  • 我有mo后缀的语言文件 ,怎么转换成PO类型的语言文件用于编辑?

用PO和MO互转工具,网上自己找。

二、IMG安装文件的制作

汉化都弄完了,我想做个中文版的安装文件怎么弄?别急,让我一步一步来教你。

1、在虚拟机中安装pfsense

我用的VMware Workstation,你也可以用其他的,都大同小异。到官方网站下载2G的光盘安装版的pfsense,在虚拟机中挂上ISO文件把pfsense装上。你也可以直接用一个PE工具光盘(ISO),把RoadkilsDiskImage写盘工具和IMG映像文件集成进去,在PE下写盘。虚拟机的配置如下:

图片12.png

硬盘只要2G,因为我们下的是2G的安装版本。网卡两个,其他的随意。

2、配置文件的修改

通过浏览器把pfsense配置好,把要替换的PHP文件和语言文件都放进系统中。如果想在安装完成后直接显示中文界面,还必须修改一个文件。 在WinSCP中找到by防火墙/usr/local/www/目录下globals.inc文件,用editplus打开,找到115行,把language的后面修改为”zh_CN”。其实在这个文件中,可以修改的东西很多,包括初始的用户名和密码也可以修改!

图片13.png

3、制作pfsense安装映像

点恢复出厂设置,等pfsense重启后关闭虚拟机。再挂接上PE启动光盘(PE工具光盘ISO)和物理硬盘分区。

图片14.png

图片15.png

图片16.png

单个分区选择一个空闲的硬盘分区,不要与虚拟机存储文件在同一分区。

下面这一步很关键,点绿色启动按钮右侧的倒三角小图标,选择“打开电源时进入固件”,进入虚拟机BIOS,选择BOOT,把第一启动顺序调整为光驱。按F10保存后,启动虚拟机进入PE界面。

图片17.png

图片18.png

图片19.png

在PE系统上运行写盘工具RoadkilsDiskImage,选择创建映像,驱动器选2G的那个,保存位置选择开始挂载的物理硬盘分区,点开始,等待写完就就行了。

至此,中文版的安装映像制作完成了,是不是很有成就感&_&!