51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1472|回复: 2
打印 上一主题 下一主题

[转贴] 多语种翻译自动化测试

[复制链接]
  • TA的每日心情
    无聊
    前天 09:05
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-1-19 13:35:05 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    对于以内容为主的软件来说,本土化和国际化必不可少。有的时候,一个词语要翻译成10几个国家语言。
      我负责的一个产品就要翻译成16国文字。
      对于我们这种土鳖来说,能看懂英文就不错了。
      通常的做法是,将词语,或者句子,给第三方翻译公司翻译。然后存入到数据库,生成接口来调用。每个词语或者句子有个ID,请求某个语种,就会把对应的语言翻译传回来。
      那么问题来了:有些词语,某个语种翻译了一些,一些没有翻译,用户体验很不好。
      怎么把那些漏网之鱼捞出来?测试起来很困难,调用接口,把翻译全打出来,人工去看哪些没有翻译。姑且不论翻译对错与否。这样效率很低。
      python 有个langid库,能检测64种语言。
      可以先用pandas将翻译全弄出来,然后检测哪些没有翻译的。
    1. import sys
    2.   import requests
    3.   import langid
    4.   import numpy as np
    5.   import pandas as pd
    6.   LANGUAGES = [‘ar’, ‘de’, ‘en’, ‘es’, ‘fr’, ‘it’, ‘ja-JP’, ‘ko-KR’, ‘pt-BR’, ‘ru’, ‘th’, ‘tr-TR’, ‘zh-cn’, ‘zh-HK’, ‘zh-TW’]
    7.   ID = [‘699126’, ‘699124’, ‘669751’, ‘647306’, ‘697256’, ‘647306’]
    8.   url = “http://{}.query?q=blurb!{}&c=culturecode={}“
    9.   list_obj = []
    10.   class Translate():
    11.     def get_translated_string(self, blurb_id, language_code):
    12.       response = requests.post(url.format(host, blurb_id, language_code))
    13.       value = (response.json())[0][‘translation’].strip()
    14.       return value
    15.   def check_language(self, target, language):
    16.       lineTuple = langid.classify(target) # 调用langid来对该行进行语言检测
    17.       if “-“ in language:
    18.         language = language.split(“-“)[0]
    19.       if lineTuple[0] != language:
    20.         return False
    21.       else:
    22.         return True
    复制代码
    结果如下:

    检测下来,效果还不错。
      谷歌翻译也日渐智能,但目前还是收费状态。
      本文就尝试用免费的百度API, 来看看翻译效果。
      首先要去申请一个translate api key.
      然后敲代码:
    1.  import requests
    2.   import hashlib
    3.   import random
    4.   import json
    5.   appid = ‘your id’
    6.   secretKey = ‘your key’
    7.   myurl = ‘/api/trans/vip/translate’
    8.   host = ‘http://api.fanyi.baidu.com‘
    9.   fromLang = ‘auto’
    10.   toLang = ‘en’
    11.   salt = random.randint(32768, 65536)
    12.   def md5hex(word):
    13.     sign = appid + word + str(salt) + secretKey
    14.     m1 = hashlib.md5()
    15.     return m1.hexdigest()
    16.   def trans(word, sign, fr, to):
    17.     word_num = len(word)
    18.     if word_num > 1600:
    19.       print(“over 1600”)
    20.     else:
    21.       url = myurl + ‘?appid=’ + appid + ‘&q=’ + word + ‘&from=’ + fr + ‘&to=’ + to + ‘&salt=’ + str(
    22.         salt) + ‘&sign=’ + sign
    23.   try:
    24.     result = requests.post(host + url)
    25.     if result.status_code == 200:
    26.       trans_data = json.loads(result.text)
    27.       trans_data = trans_data['trans_result'][0]['dst']
    28.       print(trans_data)
    29.     else:
    30.       print("please check you url")
    31.   except:
    32.     print("error")
    33.   if name == ‘main‘:
    34.     info = input(“please input you word!”)
    35.     md5_info = md5hex(info)
    36.     trans(info, md5_info,fromLang,toLang)
    复制代码
    支持多种语言。Snake尝试了下自己能看懂的:简体,繁体,粤语,文言文,英文的测试。

    诗句也翻译出来了,看起来似乎还可以。
      最新的热词,跟搜索结果一样,应该是用的同一套吧。
      这样一个一个敲太累,准备几个词,一次性翻译出多种语言来。
      语种:zh 中文 en 英语 jp 日语 kor 韩语 fra 法语 spa 西班牙语 th 泰语 ara 阿拉伯语 ru 俄语 pt 葡萄牙语 de 德语 it 意大利语
      语言:早上好,欢迎,谢谢,huge blessings, 和谐社会,且行且珍惜,foodie, clown, 白日依山尽。
      加几行代码:
    1.  languages = [‘zh’, ‘en’, ‘jp’, ‘kor’, ‘fra’, ‘spa’, ‘th’, ‘ara’, ‘ru’, ‘pt’, ‘de’, ‘it’]
    2.     words = [‘早上好’, ‘欢迎’, ‘谢谢’, ‘huge blessings’, ‘和谐社会’, ‘且行且珍惜’, ‘foodie’, ‘clown’, ‘白日依山尽’]
    3.     translated = (trans(x, md5hex(x), fromLang, y) for x in words for y in languages)
    4.     translated_list = np.array(list(translated)).reshape(len(words), len(languages))
    5.     translated_dataframe = pd.DataFrame(translated_list,columns=languages)
    6.     writer = pd.ExcelWriter(‘translated.xlsx’)
    7.     translated_dataframe.to_excel(writer,’translate’)
    8.     writer.save()
    复制代码
    结果如下:


    看起来似乎效果还可以。
      尝试过翻译故事,典故。字数越多,文化背景啥因素加入。翻译出来效果大打折扣。短句子还凑合。
      如国民老公的这句:“你的想法和评论改变不了我的现状,所以,随便你说什么,我也无需证明给你看。”
      翻译出来的效果就是:“Your thoughts and comments don’t change my situation, so whatever you say, I don’t have to prove it to you.”


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-9 14:08
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
    发表于 2022-3-30 17:50:18 | 只看该作者
    还有这测试呀
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 20:47 , Processed in 0.070407 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表