Commit 637725a7 authored by Sergey Pinus's avatar Sergey Pinus
Browse files

Add formality and context support to

DeepLTranslator
parent 22370622
Loading
Loading
Loading
Loading
+55 −3
Original line number Diff line number Diff line
from .base import *
import deepl


@register_translator('DeepL')
class DeeplTranslator(BaseTranslator):

@@ -9,8 +10,47 @@ class DeeplTranslator(BaseTranslator):
    params: Dict = {
        'api_key': '',
        'delay': 0.0,
        'formality': {
            'type': 'selector',
            'options': [
                'less',
                'more',
                'default',
                'prefer_more',
                'prefer_less'
            ],
            'select': 'default'
        },
        'context': {
            'type': 'editor',
            'content': ''  
        },
        'preserve_formatting': {
            'type': 'selector',
            'options': ['enabled', 'disabled'],
            'select': 'disabled' 
        }
    }


    @property
    def preserve_formatting(self) -> bool:
        return self.params['preserve_formatting']['select'] == 'enabled'

    @property
    def context(self) -> str:
        try:
            return self.params['context']['content']
        except KeyError:
            return ''

    @property
    def formality(self) -> str:
        try:
            return self.params['formality']['select']
        except KeyError:
            return 'default'

    def _setup_translator(self):
        self.lang_map['简体中文'] = 'zh'
        self.lang_map['日本語'] = 'ja'
@@ -44,9 +84,21 @@ class DeeplTranslator(BaseTranslator):
    def _translate(self, src_list: List[str]) -> List[str]:
        api_key = self.params['api_key']
        translator = deepl.Translator(api_key)
        formality_selected = self.formality
        context_text = self.context
        preserve_formatting = self.preserve_formatting
        source = self.lang_map[self.lang_source]
        target = self.lang_map[self.lang_target]
        if source == 'EN-US':
            source = "EN"
        result = translator.translate_text(src_list, source_lang=source, target_lang=target)

        # Languages that support formality setting in DeepL
        languages_supporting_formality = ['de', 'fr', 'it', 'es', 'nl', 'pl', 'pt', 'pt-br', 'ru', 'ja']

        # Check if the target language supports formality
        if target in languages_supporting_formality:
            result = translator.translate_text(src_list, source_lang=source, target_lang=target, formality=formality_selected, context=context_text, preserve_formatting=preserve_formatting)
        else:
            result = translator.translate_text(src_list, source_lang=source, target_lang=target, context=context_text, preserve_formatting=preserve_formatting)

        return [i.text for i in result]
 No newline at end of file