电子书阅读器上的浏览器 [Day19] 翻译功能 (I) 支援 Onyx 内建翻译

有些时候需要看外文网页,而外文里可能有许多单字,或是看外文的速度没有那麽快,阅读起来会很辛苦。这时如果能够跟 Chrome 一样提供全文翻译的话,对於使用体验上会好很多。如果是有学习语言需求的话,能让翻译的结果跟原文对照着看,会是更好的呈现方式。

在文石(Onyx)的电子书阅读器上透过内建 NeoReader App 阅读书籍时,可以开启双画面,一边是电子书的内容,另一边是原文翻译出来的结果。原文翻译的功能,其实是利用了 Android 系统的 Multi-Window 功能,把画面切成两半,一边是 NeoReader App;另一边则是文石设备内建的字典 App。内建的字典 App 可以用来查询单字,句子,以及文章全文翻译。NeoReader App 很巧妙地把这两件事串起来,让使用者只要点选双开翻译画面,就能马上看到电子书中内的翻译结果。

双开翻译画面对我来说用途很大,而且我发现它的翻译品质比想像中来得好,大概每一页有八九成以上是准确的翻译,少部分内容才需要自己看着原文推敲它真正的意思是什麽。下面附上一页 Kilian Jornet (越野跑步大神) 的书籍 Courir ou mourir 法文版内容,右边是翻译出来的中文效果。要不是有些句子一看就不合理,大部分的句子通顺到连我自己都写不出来。

https://ithelp.ithome.com.tw/upload/images/20210918/201402609KBCEBjIsw.png

既然 Onyx 自己内建的 Reader App 可以这麽做,不晓得第三方的 App 是不是也有可能在文石的阅读器上达成类似的功能呢?下面就要来解释怎麽做到的。

实作细节

开关 Multi-Window 模式

Multi-Window 模式是在 Android 7.0 加入的功能。随着手机愈来愈大,和平板的普及化,Android 开始支援同时开启两个 App。但是提供的支援很阳春,只能把画面切成两半,一边一个 App。而且启动方式很很很难用,必须先进到最近开启的程序列表,长按其中一个程序的 icon,才会跳出一个选单让使用者启动分割画面。在大部分的 Android 设备中,Multi-Window 模式都是要使用者手动点击才能启动。

https://developer.android.com/guide/topics/ui/multi-window

但是,既然在 Onyx 上的 NeoReader App 能够一键就进入分割画面模式,经一番研究,我找到了它的实作方式:其实方式很简单,只要透过 intent 发个 action 就行了!

https://ithelp.ithome.com.tw/upload/images/20210918/201402600OmOGEK9KA.png

第 756 行可以分别看到启动和关闭分割画面的 action 字串。把它塞到 intent 中再喂给 sendBroadcast() 就可以了。

呼叫字典程序的全文翻译功能

在系统中,NeoReader App 和字典 App 分属两个不同的程序。NeoReader App 能把字典 App 叫起来,也是透过 intent 的传递,把相关的参数传入。系统会帮忙找到能处理该 intent 的 App,并把参数喂给它。
观察了一下当 Reader App 进入双开翻译模式时,字典 App 的 CloudTranslationActivity 被启动了。所以应该是该 Activity 收到了需要翻译的需求,进而开始执行。在经过另一番研究後,找到了所需要的 intent action 和参数资料格式。这麽一来我也可以正确地启动字典翻译功能。

https://ithelp.ithome.com.tw/upload/images/20210918/20140260O65p7UtmMl.png

今天先讲解到这边。明天再接着把上述研究出来的方式与 browser 整合在一起,变成完整的功能。


<<:  EP 04 - gem 起手式之环境设定

>>:  [Day 4] 阿嬷都看得懂的 CSS, JavaScript 在干嘛

【Day 7】Dockerfile x 连千毅:从一排汉堡认识容器映像档

tags: 铁人赛 Docker Dockerfile 汉堡 概述 碎念时间 【以皮毛技术与 AWS...

2022 年 5 大蓝光 ISO 播放器软件

大多数普通媒体播放器都无法播放蓝光ISO档、蓝光光盘以及BD资料夹。在这篇文章中,我将重点介绍市场上...

JSON

JSON是甚麽 JSON是前後两端传输数据的一种比较轻量的格式 JSON的结构长怎样 JSON分为两...

Day 29 - 浅谈测试 - 令人安心的保护网

前言 前两天我们讨论了 Clean Code 跟 The Clean Coder,这两本书都要提到一...

自我笔记 - Git 日常使用

Git 基础篇 人生不能重来,但Git可以 什麽是git ? 分散式版本控制 使用 SHA1 杂凑演...