1 需求

因为有个小孩上幼儿园了,想开始教他一些汉语拼音和基本的汉字,但通过一书本和卡片又有些枯燥乏味,于上就上网搜索一些辅助认字的应用,还购买了悟空识字APP,在用的过程中发现他设置了很严格的关卡,学什么字,也是被固定死的,也就是只有把今天的学习完成了才能进行下一课,这对于上小学的小朋友可能比较好,但是对于幼儿来说的话,太过严格的限制往往容易让其失去兴趣。而且,说实话他其中的一些动画做得太过牵强,本来基本没有联系的东西加在一起,扰乱视听。小孩子字没认几个,就想着完后面的游戏,可以说有一点本末倒置。

在搜寻的过程中还发现了GCompris-qt, 是一个非常优秀的辅助教育套件,集成了大量的应用。而且是支持多语言,也就是说有中文的翻译版本。其中有一个帮助学习词汇的应用 lang,因为其中有看图听音,听音辨字等小游戏,对于学习是已经够了。但是其中的图片全是 art4apps 项目中已有的图片,对于类似讲中文的用户来讲的话还是有点不合适。 于是就想,是否可以将自己的图片和声音加到GCompris中去,由我来安排他学什么字,根据实际随时调整。我虽没胡直接用QT开发过东西,但实际上是有一些接触的,经过一番折腾,真就实现了。现在想来其实不困难,主要是其上踩了一些坑,这里记下来以供参考,主要针对有一定开发能力的人群。

NOTE 这个过程会影响到letterinword、missingletter、hangman这三个应用,因为他们是其于lang/resources/content* 和 words.json 数据的。具体如何处理请看文章末尾。

想想购买悟空识字有些后悔了,我的近200人民币啊。

2 准备

首先,你需要学习Qt Quick development processVoice translation Qt这篇文章。总的来说,就是下载源码,准备开发环境,准备图片和声音。

2.1 准备源码

GCompris-qt源码,到Github上下载下来,他会依赖于另一个项目qml-box2d,如果你是通过 git clone 下来的源码的话,在cmake的时他会自动去下载,但如果你采取的下载ZIP格式的压缩包的话则需要手动将qml-box2d下载后放到GCompris-qt/external文件夹下。

2.2 准备开发环境

sudo apt-get install cmake
sudo apt-get install g++
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libssl-dev
sudo apt-get install qt5-default qtdeclarative5-dev qtmultimedia5-dev qml-module-qtquick-controls libqt5svg5-dev libqt5xmlpatterns5-dev libqt5sensors5-dev qml-module-qtquick-particles2 qttools5-dev-tools qml-module-qtmultimedia libqt5multimedia5-plugins

2.3 准备图片和声音

GCompris-qt的图片和声音在github 上的另一个项目中,GCompris-data,全部有约500M大小,下载的过程中可能出现服务器断开连接的情况,可以参照网上的一个教程,就是在gitee.com上建一个帐户,将github上的项目先克隆过来,然后通过国内的网络进行下载,失败的概率要小很多。

2.3.1 图片的处理

下载后压缩包解压后可以将自己准备的图片放到 GCompris-data/words/words/ 这下目录下,最好自己在给图片命名的时候有下特点,比如hz1.jpg等等。

2.3.2 声音的处理

声音用Audacity这个软件进行录制,如果你还没有安装的话,就sudo apt install audacity安装,录制的过程就简单了,可以一条一条的录,也可以一次性全部录好后进行批量导出。我采用的是后一种办法,但要求你先将你的图片对应的汉字按次充准备好,最好是打印出来,在录的过程中要方便一些,可以保证每个词中间的间隔的时间短一些,切分后加入到软件中播放的效果才好。录好了要先进行混音,就是把立体声转单声道,尔后分段设置好标记才可以批量导出。这里要注意的是设置标记不可以用中文,软件会卡死。我就依次用数字给进行标记的,你可以用hz1,hz2等这样的标记,跟图片对应起来。当然如果你不想每次都输入hz,也可只输字母,等导出来了后再写两行代码全部重命名就是了。如果在录的过程中读的顺序错了或者少读了两个字,这也没有关系,一会再补上就是了,没有必要全部重录一遍。最后有一个配置文件设置图片和声音的对应关系,所以图和音的名字具体是什么并不重要,只是有一定的显然的对应关系,方便你后一步进行处理。但是名字中不能有汉字,否则会出现找不到资源的情况。导出的时候选择ogg格式。

还有你读的字有的声音大,有的声音小,这也没有关系,在导出后处理一下就好了。这要求你的计算机上装有 normalize-audio 这个包。

for f in *.ogg; do
  normalize-ogg $f
done

处理好的声音文件放到GCompris-data/voices/zhCN/words/ 这个文件夹下,可能你下载下来的资源,在zhCN下没有words这个文件夹,新建一个就好。

为了保证 letterinword、missingletter和hangman这几个应用的正常工作,特别是我发现原生的语音在使用这几个应用时单词是不发音的,主要是其中缺少单词的录音。所以将voices/enUS/words/文件夹下的所有声音文件拷贝到voices/zhCN/words/这下文件夹下。

2.3.3 资源编译

接下来就是处理这些图片和声音生成QT程序所需要的rcc文件了,就是将准备的图片和声音编译成二进制的资源文件了。这在GCompris-data目录下都有脚本工具,cleanall.sh用于清理生成的资源文件,generateallrcc.sh 用于生成背景音乐和声音。生成的声音资源文件在 voices/ogg/.rcc/voices-ogg 下面,复制到 ~/.local/share/KDE/gcompris-qt/data2/voices-ogg/ 下面就是了。这个是gcompris-qt 要搜索的目录之一。当然这里还没有提到图片资源,还需要你进入到GCompris-data/words目录中,执行generatelangrcc.sh words,完成后会在当前目录下生成.rcc的目录,将其中的Contents 和 words.rcc 复制到 ~/.local/share/KDE/gcompris-qt/data2/words/目录下面。这里要注意的是复制的时候其中的Contents不能少,其中记录了资源文件的MD5校验码,软件加载资源的时候要进行验证。

至此该准备的就已经准备好了,接下来,我们就要进行集成了。

3 集成

这一步说难不难,就是容易采坑,顺便提一下,其中lang这个应用界面的灵活性还有得提升,后面再讲是哪里,为什么。

3.1 修改两个JSON文件

进入GCompris-qt/src/activites/lang/resource目录,这是专门存取资源的目录,其中的 content-zhCN.json 需要根据实际进行修改,当然,如果你的目录中没有这个目录,将content-zhTW.json 复制一份,改个名字就是了。这个文件中将所有声音文件的名字和图片文件名字对应起来就好了。其中,不需要的条目可以删除了。有一个细节要注意的是,这是JSON文件,如果哪儿少了或者多了逗号什么的,加载会失败。你可以将其中的内容复制到网上JSON在线格式验证进行检查,看哪里有问题,改过来就好了。

第二个要修改的JSON文件是words.json这其中记录了要加入到lang这个应用中去的课程,这也是一个标准的JSON文件,他其中设想了有章节Chapter、课Lesson,但实际上目录这个版本只用到课lesson,但是这种层次关系不能改,否则也有可能不能加载成功。我的意思是你可以将所有的内容放到一章中去,没有必要分chapter。课程内容有数量限制,最大是12,当然如果你需要的话可以到源码中找到修改。这里有几个地方要提一下,以便理解,此文件中有个地方写了"imgPrefix": "qrc:/gcompris/data/"这是怎么来的呢?解释一下:在生成资源的时候,generatelangrcc.sh自动写到qrc文件中去的,然后又被编译进了rcc文件,相当于设定了图片访问目录。理解这一点主要是便于大家理解为什么lesson中的每个图的地址要写成这样 "image": "words/hz170.jpg",如果你要省略掉words的话需要修改generatelangrcc.sh,修改qrc 文件来达到目的。最后提醒一下,改完后最好不是到json.cn上去验证一下有没有问题。

*Note*这时还有一个坑。文件中的课程名字如果修改了的话,就要看下一节了,否则可以略过。

3.2 修改一个QML文件

这里说的QML文件指的是Lang.qml文件,在GCompris-qt/src/activites/lang目录中,就是resource目录的上一级,打开它,文件末尾有一个常量记录了要如何翻译words.json中记录的课程名字。我给改为了如下的样子,你可以根据自己的需要来改。不要忘记最后的"}"。

property var categoriesTranslations: {
   "数字(1)": "数字(1)",
   "数字(2)": "数字(2)",
   "身体(1)": "身体(1)",
   "身体(2)": "身体(2)",
   "人物(1)": "人物(1)",
   "人物(2)": "人物(2)",
   "人物(3)": "人物(3)",
   "幼儿识字": "幼儿识字"}

至此基本上要改的地方就改完了。接下来就是编译运行进行测试了。

4 编译测试

在GCompris-qt目录下建一个目录build,进行build 运行 cmake ..,等着生成Makefile,现在可以通过 make getSvnTranslations 下载界面翻译文件了。但是下载的过程有点慢,于是我不想下载我用不上的po 文件, 修改GCompris-qt/tools/l10n-fetch-po-files.py ,在第47行后插入一行,加上alllanguages=["zhCN"],注意行前不能有空格。下载完成后要在 build 目录中再次运行 cmake ..,让其将刚刚下载的 po 文件加入资源列表,接下来 make BuildTranslations 编译翻译文件。然后 make,就是较长的等待,可能要15分钟左右。完成后在 build/bin/ 下会生成一个 gcompris-qt文件,执行他。你可能需要在其设置中切换locale,并将自动下载声音和图片关闭。

没什么问题的话可以 sudo make install 安装到系统中,大功告成。

5 后续

 

5.1 删除部队应用

GCompris-qt 中的应用太多也是个问题,让小孩子眼花,可以考虑将其他暂时不想让他完的应用却掉。方法也很简单,修改GCompris-qt/src/activites/activites.txt将不想要的应用名字删除掉,如果涉及改变了菜单的,我指的是比如将lang提升到最顶级,哪还要修改 lang 这个应用的ActivityInfo.qml 中的section的值为 section: "reading",这样就将其放到了阅读的下一级了。

对于如何找出在某个目录下的所有应用,以reading菜单为例,可以用这句: find . -type f -name ActivityInfo.qml |xargs grep 'section: "reading'。然后可以用shell或者python等进行进一步处理,或者用excel/wps等把名字分出来,并排好序。

修改完毕后需要在 build目录下再执行一次 cmake ..,然后再make。

5.2 解决声音卡顿的问题

当然,GCompris-qt有两个问题,一是QT版本的没有GTK的快,在树莓派上运行还有点卡。另一个是最开始声音听起来有点卡,这不是它的原因,需要你修改/etc/pulse/default.pa 添加 load-module module-udev-detect tsched=0,当然卡顿的可能性有很多,但是我是用这种方法解决的哈。

5.3 解决部分应用不能正常工作的问题

最后讲一下文章最前面提到的几个应用,因为资源依赖的关系,在我们的修改后他们不能正常工作了,因为他们本来设计就是用来处理英文单词的,对于中日韩语言的可能都不太合适。我的做法是在GCompris-qt/src/activites/resource目录下新建一个 words目录,然后将 resource/content-en.json 复制到 words/content-zhCN.json,将原来resource/words.json复制为words/words.json,然后将letterinword.js,missingletter.js,hangman.js中资源url "qrc:/gcompris/src/activities/lang/resource/" 修改为"qrc:/gcompris/src/activities/lang/resource/words/"。然后保存后要到 GCompris-qt/build 目录下去再执行一次 cmake ..,将我们添加的words目录加入资源列表,再次make,这样所有的应用都可以正常工作了。

5.4 关于资源太多的问题

如果你只有10个字要加入课程,完全可以用手动的就行了,但如果有500个字要加入课程,哪么有一个批量处理的工具有太好了。当然你也可以借助 Excel来进行处理,效率也还可以。如果你需要这样一个工具,可以留言。

深度汉化GCompris-qt,免费的幼儿识字软件的更多相关文章

  1. 教师专用录微课及剪辑软件推荐-camtasia中文汉化破解版免费下载及使用教程

    教师专用录微课软件,微课制作软件是一款能够制作文字.图形.动画.音视频等的软件,支持对ppt.word.flash的导入和录制,实时同步录制操作区文字.图形.动画.音视频.鼠标轨迹.声音及外部语音等动 ...

  2. TreeSize Free 查看文件夹大小 v2.3.3 汉化版

    <b>软件名称: <a href="http://www.bkill.com/download/30740.html"><font color=&qu ...

  3. Sublime Text 2 绿化与汉化 [Windows篇]

    其实 ST3 已经出了很久了,可是我这个人恋旧,一直钟爱 ST2,所以就选择她了.最近我的 ST2 越来越卡,甚至有时候输入都会延迟1秒,所以打算自己搞个绿化版. 打开 Sublime Text 官网 ...

  4. proteus pro 8.9 安装及汉化教程

    最近由于网上上课老师要求我们自己安装proteus这款仿真软件,所以笔者也安装了最新款版的proteus pro 8.9,分享给大家安装心得,也包含汉化过程,希望大家能用软件好好学习. 备注:感谢博主 ...

  5. 基于CentOS7.x gitlab环境搭建,卸载,汉化 --搭建篇

    gitlab环境搭建,卸载,汉化 --搭建篇 环境搭建 安装依赖软件 yum -y install policycoreutils openssh-server openssh-clients pos ...

  6. Process Monitor V2.96 (系统监视工具) 汉化免费绿色版

    软件名称: Process Monitor V2.96 (系统监视工具) 汉化免费绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP ...

  7. 行业干货-如何逆向解决QT程序汉化中乱码问题

    前言 “一款QT开发的国外软件,大概率是没有做中文支持的,所以你汉化中,不论怎么设置编码都一定是乱码.面对这个问题,你去互联网上找答案,答案却大多是复制粘贴的开发中解决乱码的文章,可是我们是要逆向中解 ...

  8. WordPress 前端投稿/编辑发表文章插件 DJD Site Post(支持游客和已注册用户)汉化版 免费下载

    插件简介 前面逍遥乐给大家推荐了 WordPress用户前端化专业版WP User Frontend Pro WordPress中文汉化插件v2.1.9 今天逍遥乐给大家带来的wordpress插件是 ...

  9. win10+anaconda环境下pyqt5+qt tools+eric6.18安装及汉化过程

    最近需要用python编写一个小程序的界面,选择了pyqt5+eric6的配套组合,安装过程中遇到一些坑,特此记录.参考书籍是电子工业出版社的<PyQt5快速开发与实战>. 因为我使用an ...

随机推荐

  1. 实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署

    最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7 ...

  2. python 21 面向对象

    目录 1. 面向对象初步认识 2. 面向对象的结构 3. 从类名的角度研究类 3.1 类名操作类中的属性 3.2 类名调用类中的方法 4. 从对象的角度研究类 4.1 类名() 4.2 对象操作对象空 ...

  3. Unity之与Web的交互

    一.下载,安装,配置,启动Apache 1.进入官网下载Apache 2.解压到根目录 3.记事本打开如下配置文件 4.安装apache 5.出现错误:(该错误是由于端口被占用引起的) 6.修改配置文 ...

  4. PHPstorm 运行时出现 Not Fount 解决办法

    PHPstorm 对默认 localhost 有解析问题,需要手动配置 打开菜单栏 Tools->Deployment->configuration,如下图: 我这是配置完的,你的应该什么 ...

  5. DOM的选择器

    这几天学习了DOM的选择器,现在来进行一下总结分类. 1.DOM里的元素节点选择器 元素节点选择器包括id,class,name,tagname,高级,关系. 1.1 id选择器 id:返回的是单个对 ...

  6. HTML(三)链接,<head>,css样式

    HTML链接 HTML 超链接 一个未访问过的链接显示为蓝色字体并带有下划线 访问过的链接显示为紫色并带有下划线 点击链接时,链接显示为红色并带有下划线 注意:如果为这些超链接设置了 CSS 样式,展 ...

  7. P3980 [NOI2008]志愿者招募 费用流 (人有多大胆地有多大产

    https://www.luogu.org/problemnew/show/P3980 感觉费用流比网络流的图更难想到,要更大胆.首先由于日期是连续的,所以图中的点是横向排列的. 这道题有点绕道走的意 ...

  8. 自定义Hive UDAF 实现相邻去重

    内置的两个聚合函数(UDAF) collect_list():多行字符串拼接为一行collect_set():多行字符串拼接为一行并去重多行字符串拼接为一行并相邻去重UDAF:Concat() con ...

  9. Python集训营45天—Day03

    目录 1. 分支结构 1.1 初步介绍 1.2 使用案例 1.3 练习 2.循环结构 1.1 初步介绍 1.2 使用案例 1. 分支结构 1.1 初步介绍 至今,我们所写的Python代码都是顺序执行 ...

  10. Ubuntu18.04安装测试TensorFlow-GPU

    1 安装Ubuntu18.04.03 lts spt@spt-ts:~$ lsb_release -a No LSB modules are available. Distributor ID: Ub ...