这个项目能做什么
《古兰经》应用是一个采用MIT许可的开源阿拉伯语项目,支持在浏览器和Android设备上阅读、聆听、搜索及查看释义。当前版本为3.1.20,提供用于测试的Debug版APK及部署在GitHub Pages上的Web版。项目支持阿拉伯语、英语、法语、德语、俄语、土耳其语、马来语和印尼语八种界面语言,并为阿拉伯语提供RTL(从右至左)支持。
在阅读方面,应用通过AlQuran.cloud提供114章奥斯曼体文本,支持章节导航、记录最后阅读位置、当前节高亮、15个跪拜标记、30个 Juz 分隔线及滚动进度条。用户可自定义字体大小(16-45px)、字体类型(Amiri, Scheherazade New, Reem Kufi)和行间距。应用提供五种译文、18种彩色诵读规则(支持日夜模式)、用于记忆训练的隐藏文本模式,以及带有遮帘功能、可调节速度和重复范围的“记忆室”。此外,支持在章节模式下使用麦加国王法赫德古兰经印制综合体的官方哈夫斯奥斯曼体,页面模式则基于QCF4,用户可选择下载经过SHA-256校验的604页离线数据。
音频功能涵盖30多位诵读者,通过API提供单节音频,或通过mp3quran.net提供整章MP3文件,并结合quran.com实现逐词高亮。支持跨章连续播放、多种重复模式(关闭、单节、单章、自定义范围)、1-180分钟睡眠定时器、速度控制,并集成MediaSession以支持锁屏控制。应用还包含Canvas音频可视化、指定节号启动播放及完读通知。离线包可将文本、译文、诵读规则、QCF4字体及选定诵读者的音频存储在IndexedDB中(上限200MB,采用LRU淘汰机制),并提供存储统计和选择性删除功能。
搜索功能覆盖6,236节经文,支持带或不带发音符号的匹配,提供结果高亮、前缀建议、最近十次搜索记录,并通过Web Speech API支持阿拉伯语语音搜索。释义部分包含六个版本(Al-Muyassar, Ibn Kathir, Al-Tabari, Al-Saadi, Al-Baghawi, Al-Qurtubi),采用从本地到IndexedDB再到API的渐进式加载,并缓存于QuranTafsirDB。此外,设有“沉思”功能,针对部分经文提供三个思考问题,仅作为个人沉思工具而非权威释义,且无需账户或AI服务,完全离线运行。
“古兰经模式”通过Canvas展示QCF V4的604页内容,支持逐词诵读着色,点击经文可触发播放和释义,并预加载相邻页面。“展示模式”提供全屏显示,支持纯色、自然景观、随心情/时间变化的背景以及Canvas动态场景(星空、海浪、极光、粒子、雨滴),用户可自定义宽幅图片或本地HD视频背景,所有处理均在本地设备完成。配套功能包括基于Aladhan的礼拜时间(含六个时段、唤礼提醒、 Umm al-Qura 希吉拉历和朝向指南)、早晚及自定义祷告词(含计数器和每日重置)、收藏夹与书签(支持文本或JSON导出)、阅读统计、四种显示模式(含深色模式)、通过Capacitor Share或Web Share API分享至WhatsApp和Telegram、键盘快捷键,以及符合WCAG标准的无障碍特性(如焦点陷阱、ARIA实时区域、跳过内容链接、尊重减少动画和高对比度设置)。
技术架构采用严格模式下的TypeScript 6.0,使用Vite 8、LightningCSS和vite-plugin-pwa (Workbox) 构建PWA,通过Capacitor 8打包Android应用。状态管理基于Proxy实现,无需外部框架,存储依赖localStorage和三个IndexedDB数据库(QuranAppDB, QuranAudioCacheDB, QuranTafsirDB)。外部API包括AlQuran.cloud, Aladhan, jsDelivr (释义), mp3quran.net 和 quran.com。CI/CD流水线包含Lint、类型检查、覆盖率不低于80%的单元测试、覆盖四个项目的Playwright E2E测试、CodeQL、OWASP ZAP基础扫描、Lighthouse CI、axe-core无障碍检查、包体积监控、TypeDoc文档生成、npm audit及许可证检查,并在发布Tag时自动部署。
仓库记录显示包含3,812个单元测试和284个界面测试用例。本地生产构建的Lighthouse评分为:性能93,无障碍100,最佳实践96,SEO 91(注:此为内部技术评估而非独立第三方认证)。本地运行需Node.js 22或更高版本,通过npm install安装,并提供开发、构建、预览、测试及Android构建命令。普通用户可直接下载APK而无需构建项目。仓库还提供了一份技术评估指南,详细说明了可检查项、离线功能及已知限制。
评论
0 评分人数达到10人后显示
登录后参与讨论。