富文本携带html标签翻译问题有没有解决方案?

甲方要求用的第三方翻译不支持html翻译方案(沟通过不允许用其他家的)

没有什么过滤翻译 第三方的就只有一个翻译接口 多的没了 第三方接口的参数:
富文本携带html标签翻译问题有没有解决方案?

但是富文本又携带了html,第三方说是要把html标签取出来再替换翻译的文案进去
有没有什么好的解决方案比较好提取又能把翻译的内容补充进去

还要考虑 图片标签 内联样式也是 比如以下就是富文本html 需要把这三段文本提取出来又怼进去

<p>
    <b>
        <span>
            <span>五是</span>
        </span>
    </b>
    <b>
        <span>强化融资支持力度</span>
    </b>
    <span>研究制定财政金融协同支持专精特新“小巨人”企业发展的政策措施,围绕间接融资、直接融资、境外融资、其他融资等提出相应支持措施。对企业在符合条件的证券交易所上市挂牌融资,分档给予最高1600万元奖补。实施专精特新“小巨人”企业融资担保降费奖补政策并向国家融资担保基金重点推介,对省级政府性融资担保公司向符合条件的中小微企业降低收费标准给予差额补助。</span>
</p>

3. 您期望得到的结果?

简单点的解决方案或者有没有什么包,可以接受java/python/php 可以比较方便的抽出来这些标签 然后把内容填充进去 或者其他方式比较好提取的方案 或者怎么替换比较方便

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

如下

$html = '测试<p>
    <b>
    测试测试

        <span>
            <span>五是</span>
        </span>
    </b>

    <b>
        <span>强化融资支持力度</span>
        测试
    </b>
    测试
    <span>研究制定财政金融协同支持专精特新“小巨人”企业发展的政策措施,围绕间接融资、直接融资、境外融资、其他融资等提出相应支持措施。对企业在符合条件的证券交易所上市挂牌融资,分档给予最高1600万元奖补。实施专精特新“小巨人”企业融资担保降费奖补政策并向国家融资担保基金重点推介,对省级政府性融资担保公司向符合条件的中小微企业降低收费标准给予差额补助。</span>
    厉害';

/*$pattern = '/<.*?>(.*?)<\/.*?>/s'; // 匹配成对出现的HTML标签*/
//
//preg_match_all($pattern, $html, $matches);
//
//var_dump($matches);
//$textArray = $matches[1]; // 匹配到的文字内容数组
//
//print_r($textArray);
function translation($word)
{
    return $word . ' - has been translated';
}

function startTranslation($html,$matches) {
    foreach ($matches[0] as $match) {
        $trimmed = trim($match);
        if (!empty($trimmed)) {
            $textArray[md5($trimmed)] = $trimmed;
            $translationTextArray[md5($trimmed)] = translation($trimmed);
            $html = substr_replace($html,md5($trimmed),strpos($html,$trimmed),strlen($trimmed));
        }
    }


    foreach ($translationTextArray as $key => $value) {
        $html = str_replace($key,$value,$html);
    }
    return $html;
}


$textArray            = [];
$translationTextArray = [];
preg_match_all('/<[^>]*>(*SKIP)(*F)|([^<]+)/', $html, $matches);


if (isset($matches[0])) {
    $html = startTranslation($html,$matches);
}

echo '<pre>';
print_r($html);
echo '</pre>';

输出

测试 - has been translated


    测试测试 - has been translated


            五是 - has been translated




        强化融资支持力度 - has been translated
        测试 - has been translated

    测试 - has been translated
    研究制定财政金融协同支持专精特新“小巨人”企业发展的政策措施,围绕间接融资、直接融资、境外融资、其他融资等提出相应支持措施。对企业在符合条件的证券交易所上市挂牌融资,分档给予最高1600万元奖补。实施专精特新“小巨人”企业融资担保降费奖补政策并向国家融资担保基金重点推介,对省级政府性融资担保公司向符合条件的中小微企业降低收费标准给予差额补助。 - has been translated
    厉害 - has been translated
4个月前 评论
y1415181920 (楼主) 4个月前
anjing (作者) 4个月前
讨论数量: 15

客户把它想"简单",你不应该把它往"简单"想,而且这种东西坑点多,做出来的效果不一定得到客户的满意。所以你还是要客观考虑成本和实现效果的问题,并告知客户

4个月前 评论
y1415181920 (楼主) 4个月前

看看python 的 BeautifulSoup 库可不可以实现

4个月前 评论
y1415181920 (楼主) 4个月前

BeautifulSoup库实现的效果 还挺有意思

from bs4 import BeautifulSoup
# from googletrans import Translator

def translate_html(html_content, target_language='en'):

    soup = BeautifulSoup(html_content, 'html.parser')



    for element in soup.find_all(text=True):

        if element.strip() and element.parent.name not in ['script', 'style']:

            translated_text = "测试替换节点文字"

            element.replace_with(translated_text)

    return str(soup)

# Example HTML content
html_content = """
<p>
    <b>
        <span>
            <span>五是</span>
        </span>
        <img src="这是图片.png" />
    </b>
    <b>
        <span>强化融资支持力度</span>
    </b>
    <span>研究制定财政金融协同支持专精特新“小巨人”企业发展的政策措施,围绕间接融资、直接融资、境外融资、其他融资等提出相应支持措施。对企业在符合条件的证券交易所上市挂牌融资,分档给予最高1600万元奖补。实施专精特新“小巨人”企业融资担保降费奖补政策并向国家融资担保基金重点推介,对省级政府性融资担保公司向符合条件的中小微企业降低收费标准给予差额补助。</span>
</p>
"""

# Translate the HTML content
translated_html = translate_html(html_content, target_language='en')

# Print the translated HTML
print(translated_html)

实现效果

Laravel

4个月前 评论

www.chengyao.xyz/article/9ad46029-...

参考这个,用symfony/dom-crawler或者原生DOM Document来遍历节点,获取所有节点的纯文本内容,翻译后修改内容,最终用html()方法生成最终的html

4个月前 评论

php不是有dom扩展吗?你可以试下。Dom

4个月前 评论
y1415181920 (楼主) 4个月前
sanders

如果考虑不完整标签匹配兼容问题,可以使用 tidy 库,执行较慢,执行完保存下来。

4个月前 评论

说个踩过的坑:富文本编辑器产出的html格式有时会很奇怪(比如没有闭合标签或者多个标签什么的),如果遇到这种不规范的HTML DOM解析可能会失败

4个月前 评论

如下

$html = '测试<p>
    <b>
    测试测试

        <span>
            <span>五是</span>
        </span>
    </b>

    <b>
        <span>强化融资支持力度</span>
        测试
    </b>
    测试
    <span>研究制定财政金融协同支持专精特新“小巨人”企业发展的政策措施,围绕间接融资、直接融资、境外融资、其他融资等提出相应支持措施。对企业在符合条件的证券交易所上市挂牌融资,分档给予最高1600万元奖补。实施专精特新“小巨人”企业融资担保降费奖补政策并向国家融资担保基金重点推介,对省级政府性融资担保公司向符合条件的中小微企业降低收费标准给予差额补助。</span>
    厉害';

/*$pattern = '/<.*?>(.*?)<\/.*?>/s'; // 匹配成对出现的HTML标签*/
//
//preg_match_all($pattern, $html, $matches);
//
//var_dump($matches);
//$textArray = $matches[1]; // 匹配到的文字内容数组
//
//print_r($textArray);
function translation($word)
{
    return $word . ' - has been translated';
}

function startTranslation($html,$matches) {
    foreach ($matches[0] as $match) {
        $trimmed = trim($match);
        if (!empty($trimmed)) {
            $textArray[md5($trimmed)] = $trimmed;
            $translationTextArray[md5($trimmed)] = translation($trimmed);
            $html = substr_replace($html,md5($trimmed),strpos($html,$trimmed),strlen($trimmed));
        }
    }


    foreach ($translationTextArray as $key => $value) {
        $html = str_replace($key,$value,$html);
    }
    return $html;
}


$textArray            = [];
$translationTextArray = [];
preg_match_all('/<[^>]*>(*SKIP)(*F)|([^<]+)/', $html, $matches);


if (isset($matches[0])) {
    $html = startTranslation($html,$matches);
}

echo '<pre>';
print_r($html);
echo '</pre>';

输出

测试 - has been translated


    测试测试 - has been translated


            五是 - has been translated




        强化融资支持力度 - has been translated
        测试 - has been translated

    测试 - has been translated
    研究制定财政金融协同支持专精特新“小巨人”企业发展的政策措施,围绕间接融资、直接融资、境外融资、其他融资等提出相应支持措施。对企业在符合条件的证券交易所上市挂牌融资,分档给予最高1600万元奖补。实施专精特新“小巨人”企业融资担保降费奖补政策并向国家融资担保基金重点推介,对省级政府性融资担保公司向符合条件的中小微企业降低收费标准给予差额补助。 - has been translated
    厉害 - has been translated
4个月前 评论
y1415181920 (楼主) 4个月前
anjing (作者) 4个月前

写过富文本编辑器翻译,用正则获取文本,翻译后在替换回去

4个月前 评论
liushuo (作者) 4个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!