Added translation API: Niutrans

增加翻译API:小牛翻译
pull/174/head
Physton 2023-06-22 18:49:29 +08:00
parent 26da531774
commit 9767dc6945
7 changed files with 180 additions and 5 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -14,6 +14,7 @@ from scripts.physton_prompt.translator.translators_translator import Translators
from scripts.physton_prompt.translator.yandex_translator import YandexTranslator
from scripts.physton_prompt.translator.youdao_translator import YoudaoTranslator
from scripts.physton_prompt.translator.mymemory_translator import MyMemoryTranslator
from scripts.physton_prompt.translator.niutrans_translator import NiutransTranslator
caches = {}
@ -98,6 +99,8 @@ def translate(text, from_lang, to_lang, api, api_config=None):
translator = TencentTranslator()
elif api == 'myMemory_free' or api == 'myMemory':
translator = MyMemoryTranslator()
elif api == 'niutrans':
translator = NiutransTranslator()
elif 'type' in find and find['type'] == 'translators':
translator = TranslatorsTranslator(api)
translator.set_translator(find['translator'])

View File

@ -0,0 +1,33 @@
from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import uuid
import requests
from scripts.physton_prompt.get_lang import get_lang
class NiutransTranslator(BaseTranslator):
def __init__(self):
super().__init__('niutrans')
def translate(self, text):
if not text:
return ''
url = 'https://api.niutrans.com/NiuTransServer/translation'
api_key = self.api_config.get('api_key', '')
if not api_key:
raise Exception(get_lang('is_required', {'0': 'API Key'}))
data = {
'from': self.from_lang,
'to': self.to_lang,
'apikey': api_key,
'src_text': text,
}
response = requests.post(url, data=data)
if response.status_code != 200:
raise Exception(get_lang('request_error', {'0': 'niutrans'}))
if not response.text:
raise Exception(get_lang('response_is_empty', {'0': 'niutrans'}))
result = response.json()
if 'tgt_text' not in result:
raise Exception(get_lang('no_response_from', {'0': 'niutrans'}))
return result['tgt_text']

View File

@ -8,7 +8,7 @@
<select v-model="apiKey">
<optgroup v-for="typeGroup in supportApi" :key="typeGroup.type"
:label="getLang(typeGroup.type)">
<option v-for="item in typeGroup.children" :key="item.key" :value="item.key">
<option v-for="item in typeGroup.children" :key="item.key" :value="item.key" :disabled="item.disabled">
{{ getItemName(item) }}
</option>
</optgroup>
@ -137,7 +137,10 @@ Github: Physton/sd-webui-prompt-all-in-one`,
if (!this.translateApis || this.translateApis.length <= 0) return []
let api = JSON.parse(JSON.stringify(this.translateApis))
api.forEach(group => {
group.children = group.children.filter(item => item.support[this.languageCode])
// group.children = group.children.filter(item => item.support[this.languageCode])
group.children.forEach(item => {
item.disabled = !item.support[this.languageCode]
})
})
return api
},

View File

@ -17,6 +17,7 @@ from scripts.physton_prompt.translator.tencent_translator import TencentTranslat
from scripts.physton_prompt.translator.translators_translator import TranslatorsTranslator
from scripts.physton_prompt.translator.yandex_translator import YandexTranslator
from scripts.physton_prompt.translator.mymemory_translator import MyMemoryTranslator
from scripts.physton_prompt.translator.niutrans_translator import NiutransTranslator
from scripts.physton_prompt.translate import translate
from scripts.physton_prompt.get_i18n import get_i18n
@ -129,6 +130,13 @@ def test_mymemory():
print(translate(text, 'en_US', 'zh_TW', 'myMemory_free', api_config))
print(translate(texts, 'en_US', 'zh_CN', 'myMemory_free', api_config))
def test_niutrans():
api_config = {
'api_key': os.getenv('NIUTRANS_API_KEY')
}
print(translate(text, 'en_US', 'zh_TW', 'niutrans', api_config))
print(translate(texts, 'en_US', 'zh_CN', 'niutrans', api_config))
def test_languages():
i18n = get_i18n()
languages = []
@ -142,4 +150,4 @@ def test_languages():
print(translate(text, 'en_US', lang, 'myMemory_free'))
pass
test_mymemory()
test_niutrans()

View File

@ -2917,6 +2917,134 @@
]
}
]
},
{
"key": "niutrans",
"name": "[ApiKey] Niutrans / 小牛翻译 [200,000 chars/day]",
"concurrent": 40,
"support": {
"zh_CN": "zh",
"zh_HK": "cht",
"zh_TW": "cht",
"en_US": "en",
"en_GB": "en",
"af_ZA": "af",
"sq_AL": "sq",
"am_ET": "am",
"ar_SA": "ar",
"hy_AM": "hy",
"az_Latn_AZ": "az",
"bn_BD": "bn",
"ba_RU": "ba",
"eu_ES": "eu",
"bs_Latn_BA": "bs",
"bg_BG": "bg",
"ca_ES": "ca",
"hr_HR": "hr",
"cs_CZ": "cs",
"da_DK": "da",
"dv_MV": "dv",
"nl_NL": "nl",
"et_EE": "et",
"fo_FO": "fo",
"fj_FJ": "fj",
"fil_PH": "fil",
"fi_FI": "fi",
"fr_FR": "fr",
"fr_CA": "fr",
"gl_ES": "gl",
"ka_GE": "ka",
"de_DE": "de",
"el_GR": "el",
"gu_IN": "gu",
"ht_HT": "ht",
"he_IL": "he",
"hi_IN": "hi",
"mww_Latn_US": "mww",
"hu_HU": "hu",
"is_IS": "is",
"id_ID": "id",
"ga_IE": "ga",
"it_IT": "it",
"ja_JP": "ja",
"kn_IN": "kn",
"kk_KZ": "kk",
"km_KH": "km",
"ko_KR": "ko",
"ku_Arab_IQ": "ku",
"ku_Latn_TR": "ku",
"ky_KG": "ky",
"lo_LA": "lo",
"lv_LV": "lv",
"lt_LT": "lt",
"mk_MK": "mk",
"mg_MG": "mg",
"ms_Latn_MY": "ms",
"ml_IN": "ml",
"mt_MT": "mt",
"mi_NZ": "mi",
"mr_IN": "mr",
"mn_Cyrl_MN": "mn",
"mn_Mong_CN": "mn",
"my_MM": "my",
"ne_NP": "ne",
"no_NO": "no",
"or_IN": "or",
"ps_AF": "ps",
"fa_IR": "fa",
"pl_PL": "pl",
"pt_BR": "pt",
"pt_PT": "pt",
"pa_Guru_IN": "pa",
"otq_Latn_MX": "otq",
"ro_RO": "ro",
"ru_RU": "ru",
"sm_Latn_WS": "sm",
"sr_Cyrl_RS": "sr",
"sr_Latn_RS": "sr",
"sk_SK": "sk",
"sl_SI": "sl",
"so_SO": "so",
"es_ES": "es",
"sw_KE": "sw",
"sv_SE": "sv",
"ty_PF": "ty",
"ta_IN": "ta",
"tt_Latn_RU": "tt",
"te_IN": "te",
"th_TH": "th",
"ti_ET": "ti",
"to_TO": "to",
"tr_TR": "tr",
"uk_UA": "uk",
"ur_PK": "ur",
"uz_Latn_UZ": "uz",
"vi_VN": "vi",
"cy_GB": "cy",
"yua_MX": "yua",
"zu_ZA": "zu"
},
"help": [
{
"title": "[official] 小牛翻译",
"url": "https://niutrans.com/documents/contents/beginning_guide/6"
},
{
"title": "【中文】申请教程 by BobTranslate",
"url": "https://bobtranslate.com/service/translate/niu.html"
},
{
"title": "【中文】申请教程 by TTime",
"url": "https://ttime.timerecord.cn/pages/cc1bc7/"
}
],
"config": [
{
"key": "api_key",
"title": "API Key",
"type": "input"
}
]
}
]
}