【问题标题】:How to tell Googletrans to ignore certain parts?如何告诉 Googletrans 忽略某些部分?
【发布时间】:2019-06-27 11:20:36
【问题描述】:

我想使用googletrans 来使用 Google 翻译 API。但是,其中有一些字符串是变量名:

User "%(first_name)s %(last_name)s (%(email)s)" has been deleted.

如果我通过 googletrans 使用它,我会得到

from googletrans import Translator
translator = Translator()
translator.translate(u'User "%(first_name)s %(last_name)s (%(email)s)" has been assigned.', src='en', dest='fr').text

我得到以下信息:

L'utilisateur "% (first_name) s% (last_name) s (% (email) s)" a été affecté.

但是,“%(first_name) s% (last_name)s (%(email)s)”引入了一些字符串。有没有解决的办法?我已经试过了:

u'User "<span class="notranslate">%(first_name)s %(last_name)s (%(email)s)</span>" has been assigned.'

【问题讨论】:

  • 你能描述一下你所面临的实际问题吗?我有点难以阅读和理解你的实际问题是什么。
  • @math,我的回答解决了你的问题吗?我找不到从翻译(或正在修改)中排除部分文本的记录方法,但除非我遗漏了什么,否则我的回答应该可以解决您的问题。

标签: python google-translate google-translation-api


【解决方案1】:

其实你需要如下格式:

(3 '_' before) (string) (2 '_' after)
Like: ___%s__

【讨论】:

    【解决方案2】:

    Googletrans 似乎没有改变,例如 __1__。所以你可以在翻译前把%(first_name)s换成__0__,把%(last_name)s换成__1__等等,然后再把变量还原。这里的代码可以做到这一点:

    from googletrans import Translator
    import re
    
    translator = Translator()
    txtorig = u'User "%(first_name)s %(last_name)s (%(email)s)" has been assigned.'
    
    # temporarily replace variables of format "%(example_name)s" with "__n__" to
    #  protect them during translate()
    VAR, REPL = re.compile(r'%\(\w+\)s'), re.compile(r'__(\d+)__')
    varlist = []
    def replace(matchobj):
      varlist.append(matchobj.group())
      return "__%d__" %(len(varlist)-1)
    def restore(matchobj):
      return varlist[int(matchobj.group(1))]
    
    txtorig = VAR.sub(replace, txtorig)
    txttrans = translator.translate(txtorig, src='en', dest='fr').text
    txttrans = REPL.sub(restore, txttrans)
    
    print(txttrans)
    

    结果如下:

    L'utilisateur "%(first_name)s %(last_name)s (%(email)s)" a été attribué.
    

    【讨论】:

    • 其实你需要如下格式:(3 before) string (2 after) _%s 下面的翻译有问题:From Language code: 'en' To Language code: 'si' Content: "You give 1 to 2" 结果: ඔබ 22 ලබා දුන්නා
    猜你喜欢
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多