• 网页中的公式在翻译时如何被保留下来?


    我们在阅读外文文献时,有些文献是有网页在线版本的。然后网页有翻译功能,可直接将英文翻译成中文,但同时,文中的一些公式也被翻译了,阅读起来就很难受。

    被翻译乱掉的公式

    因此,这就产生一个问题:

    怎么样在翻译网页的同时,保留公式,只翻译文本?

    translate 属性

    在网页中,早就规定了一个专门用于翻译的元素属性,叫做 translate

    <p translate="no">请勿翻译本段。</p>
    <p>本段可被译为任意语言。</p>
    

    https://www.w3school.com.cn/tags/att_global_translate.asp

    因此要防止元素被翻译,则需要增加这个属性。

    MathJax

    目前,网页上的公式大多是通过 MathJax 生成的。

    MathJax

    其生成的公式如果不是 SVG 格式的话,便会以大量的 <span> 来呈现。然后会加上相应的 id 或 class 。

    这里最外层包裹着的就是 class="MathJax" 这样的了。

    网页中的公式

    而且,大部分的元素,命名都是有规律的。所以说要定位到他们并不难。

    公式翻译保留方案

    由前面的介绍,可以得出一个公式翻译保留方案:

    网页打开后,首先定位到由 MathJax 生成的公式 元素;然后给他们增加 translate="no" 这个属性;最后再进行网页翻译。

    简单实现

    借助 JQuery 来简单实现:

    $('math, .math, .MathJax').attr('translate','no');
    

    临时方案

    所以,一个临时方案是,打开要翻译的网站,等网页加载完毕后,按 F12 调出控制台,然后输入上面的代码,再翻译(一般来说,网页都都会引入 JQuery 这个库的)。

    控制台临时方案

    油猴脚本

    当然,每次这么手动是很繁琐的,为了更好的偷懒,可以把代码写成 油猴脚本

    油猴脚本

    // ==UserScript==
    // @name         公式翻译保留
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  网页翻译时,保留公式
    // @author       GShang
    // @require      http://cdn.staticfile.org/jquery/1.8.3/jquery.min.js
    
    // @grant        GM_getResourceURL
    // @grant        unsafeWindow
    // @grant        GM_setClipboard
    // @include      https://www.sciencedirect.com/*
    // @include      https://ieeexplore.ieee.org/document/*
    // @grant        GM_getResourceURL
    // @grant        GM_xmlhttpRequest
    // @grant        GM_getResourceText
    // @grant        GM_getValue
    // @grant        GM_setValue
    // @grant        GM_download
    // @grant        GM_addStyle
    // @grant        GM_openInTab
    // @noframes     Chrome
    // @compatible	 Chrome
    // @compatible	 Firefox
    // @compatible	 Edge
    // @compatible	 Safari
    // @compatible	 Opera
    // @compatible	 UC
    // @license      GPL3 license
    // ==/UserScript==
    
    (function() {
        'use strict';
    
    
        // 带有公式的元素
        const mathElement ='math, .math, .MathJax';
    
        // 添加按钮
        var mathBtn = '<button id="math-btn">公式翻译保留</button>';
        $('body').append(mathBtn);
    
        // 添加样式
        GM_addStyle('#math-btn {background:#ff3500;padding:10px 20px;color:#fff;border-radius:40px 0 0 40px;position:fixed;right:0px;top:50vh;z-index:99999999999999;border:none;height:fit-content;outline:none;cursor:grab}');
    
        // 点击按钮,添加翻译保留属性
        $('#math-btn').click(function(){
            if($(mathElement).length > 0){
                // console.log('该页面存在公式!');
                // alert('该页面存在公式!');
                $(mathElement).attr('translate','no');
                alert('公式已被保留!');
            }else{
                console.log('未发现公式!');
                alert('未发现公式!');
            }
        })
    
        // Your code here...
    })();
    

    上述代码中,可根据需要增加或修改对应的匹配网站:

    // @include  https://ieeexplore.ieee.org/document/*
    

    其中 * 表示匹配该级别下的任意网址。

    使用时,也是先等网页加载完毕,然后点击右边的 “公式翻译保留按钮”,再在弹出的窗口中点 “确定” ,最后翻译网页。

    点击 "公式翻译保留" 按钮

    网页翻译

    翻译效果

    © 版权声明
    文章版权归作者所有,未经允许请勿转载。
  • 相关阅读:
    数据持久化的复习
    iOS: 消息通信中的Notification&KVO
    iOS 证书与签名 解惑详解
    数据持久化 技术比较
    iOS开发拓展篇-XMPP简单介绍
    iOS block并发
    Xcode把应用程序打包成ipa
    谈谈用SQLite和FMDB而不用Core Data
    cannot use the same dataset for report.dataset and page.dataset
    cxGRID中的字段怎么能以0.00的格式显示
  • 原文地址:https://www.cnblogs.com/gshang/p/14731759.html
Copyright © 2020-2023  润新知