This commit is contained in:
test123456654321 2024-10-25 21:12:19 +08:00
parent d57b0fa504
commit a01be4ea6c
43 changed files with 183 additions and 138 deletions

View File

@ -123,8 +123,6 @@ def checklang():
globalconfig["language_setted_2.4.5"] = True globalconfig["language_setted_2.4.5"] = True
globalconfig["languageuse2"] = x.current globalconfig["languageuse2"] = x.current
globalconfig["tgtlang4"] = x.current globalconfig["tgtlang4"] = x.current
if globalconfig["tgtlang4"] == "ja":
globalconfig["srclang4"] = "zh"
def checkintegrity(): def checkintegrity():

View File

@ -7,19 +7,10 @@ from myutils.utils import simplehtmlparser
class youdao(cishubase): class youdao(cishubase):
@property
def srclang(self):
try:
l = getlangsrc()
return l
except:
return ""
def search(self, word): def search(self, word):
url = "https://dict.youdao.com/result?word={}&lang={}".format( url = "https://dict.youdao.com/result?word={}&lang={}".format(
quote(word), self.srclang quote(word), getlangsrc()
) )
text = requests.get(url, proxies=self.proxy).text text = requests.get(url, proxies=self.proxy).text

View File

@ -970,10 +970,10 @@ class dialog_setting_game_internal(QWidget):
formLayout2.addRow( formLayout2.addRow(
"源语言", "源语言",
getsimplecombobox( getsimplecombobox(
[_["zh"] for _ in static_data["lang_list_all"]], ["自动"] + [_["zh"] for _ in static_data["lang_list_all"]],
savehook_new_data[gameuid], savehook_new_data[gameuid],
"private_srclang_2", "private_srclang_2",
internal=[_["code"] for _ in static_data["lang_list_all"]], internal=["auto"] + [_["code"] for _ in static_data["lang_list_all"]],
), ),
) )
formLayout2.addRow( formLayout2.addRow(

View File

@ -27,12 +27,12 @@ def setTablanglz(self):
[ [
"源语言", "源语言",
D_getsimplecombobox( D_getsimplecombobox(
[_["zh"] for _ in static_data["lang_list_all"]], ["自动"]
+ [_["zh"] for _ in static_data["lang_list_all"]],
globalconfig, globalconfig,
"srclang4", "srclang4",
internal=[ internal=["auto"]
_["code"] for _ in static_data["lang_list_all"] + [_["code"] for _ in static_data["lang_list_all"]],
],
), ),
], ],
[ [

View File

@ -25,6 +25,8 @@ class commonbase:
_setting_dict = None _setting_dict = None
typename = None typename = None
ocr_cant_auto = False
def langmap(self): def langmap(self):
return {} return {}
@ -34,7 +36,10 @@ class commonbase:
@property @property
def srclang(self): def srclang(self):
return self.langmap_.get(self.srclang_1, "") l = self.srclang_1
if self.ocr_cant_auto and (l == "auto"):
raise Exception(_TR("当前OCR引擎不支持设置语言为自动"))
return self.langmap_.get(l, l)
@property @property
def srclang_1(self) -> str: def srclang_1(self) -> str:
@ -46,7 +51,8 @@ class commonbase:
@property @property
def tgtlang(self): def tgtlang(self):
return self.langmap_.get(self.tgtlang_1, "") l = self.tgtlang_1
return self.langmap_.get(l, l)
@property @property
def config(self): def config(self):
@ -80,7 +86,7 @@ class commonbase:
[_["code"] for _ in static_data["lang_list_all"]], [_["code"] for _ in static_data["lang_list_all"]],
) )
) )
_.update({"cht": "zh"}) _.update({"cht": "zh", "auto": "auto"})
_.update(self.langmap()) _.update(self.langmap())
return _ return _

View File

@ -0,0 +1,79 @@
from collections import Counter
def inrange(n, s, e):
return n >= s and n <= e
def inranges(n, *argc):
for s, e in argc:
if inrange(n, s, e):
return True
return False
def guess(string: str):
if not string:
return "en"
if string.isascii():
return "en"
checkers = {
"ru": lambda c: inranges(
ord(c),
(0x0400, 0x04FF),
(0x0500, 0x052F),
(0x2DE0, 0x2DFF),
(0xA640, 0xA69F),
(0x1C80, 0x1C8F),
(0x1C90, 0x1CBF),
(0x1D2C, 0x1D5F),
(0x1D780, 0x1D7AF),
),
"ko": lambda c: inranges(
ord(c),
(0x1100, 0x11FF),
(0x3130, 0x318F),
(0xAC00, 0xD7AF),
(0xA960, 0xA97F),
(0xD7B0, 0xD7FF),
),
"ja": lambda c: inranges(
ord(c),
(0x3040, 0x309F),
(0x30A0, 0x30FF),
(0xFF65, 0xFF9F),
(0x31F0, 0x31FF),
(0x3100, 0x312F),
(0x31A0, 0x31BF),
(0x3000, 0x303F),
),
"zh": lambda c: inranges(
ord(c),
(0x4E00, 0x9FA5),
),
"ar": lambda c: inranges(
ord(c),
(0x0600, 0x06FF),
(0x0750, 0x077F),
(0x08A0, 0x08FF),
(0x0870, 0x089F),
(0x1EE00, 0x1EEFF),
(0x0600, 0x0603),
(0x060C, 0x061F),
(0x0660, 0x0669),
(0x06F0, 0x06F9),
),
"en": lambda c: inranges(
ord(c),
(0x0000, 0x00FF),
),
}
cnt = []
for c in string.strip():
for lang in checkers:
if checkers[lang](c):
cnt.append(lang)
if not cnt:
return "en"
common = Counter(cnt).most_common()
return common[0][0]

View File

@ -939,9 +939,11 @@ def createurl(url: str):
def createenglishlangmap(): def createenglishlangmap():
return dict( mp = dict(
zip( zip(
[_["code"] for _ in static_data["lang_list_all"]], [_["code"] for _ in static_data["lang_list_all"]],
[_["en"] for _ in static_data["lang_list_all"]], [_["en"] for _ in static_data["lang_list_all"]],
) )
) )
mp.update({"auto": ""})
return mp

View File

@ -185,6 +185,8 @@ def question(dialog: QDialog):
class OCR(baseocr): class OCR(baseocr):
ocr_cant_auto = True
def langmap(self): def langmap(self):
return {"cht": "cht"} return {"cht": "cht"}

View File

@ -3,6 +3,8 @@ from ocrengines.baseocrclass import baseocr
class OCR(baseocr): class OCR(baseocr):
ocr_cant_auto = True
def langmap(self): def langmap(self):
return { return {
"ja": "jpn", "ja": "jpn",

View File

@ -48,6 +48,8 @@ def question(dialog: QDialog):
class OCR(baseocr): class OCR(baseocr):
ocr_cant_auto = True
def langmap(self): def langmap(self):
return {"cht": "cht"} return {"cht": "cht"}

View File

@ -11,6 +11,8 @@ import json
class OCR(baseocr): class OCR(baseocr):
ocr_cant_auto = True
def ocr(self, imagebinary): def ocr(self, imagebinary):
self.checkempty(["APPId", "APISecret", "APIKey"]) self.checkempty(["APPId", "APISecret", "APIKey"])

View File

@ -16,8 +16,9 @@ class TS(basetrans):
path = "/translate" path = "/translate"
constructed_url = endpoint + path constructed_url = endpoint + path
params = {"api-version": "3.0", "to": self.tgtlang}
params = {"api-version": "3.0", "from": self.srclang, "to": self.tgtlang} if self.srclang != "auto":
params.update({"from": self.srclang})
headers = { headers = {
"Ocp-Apim-Subscription-Key": key, "Ocp-Apim-Subscription-Key": key,

View File

@ -55,7 +55,7 @@ class TS(basetrans):
json_data = { json_data = {
"query": query, "query": query,
"from": self.srclang, "from": self.parse_maybe_autolang(query),
"to": self.tgtlang, "to": self.tgtlang,
"reference": "", "reference": "",
"corpusIds": [], "corpusIds": [],

View File

@ -8,6 +8,7 @@ import functools
from myutils.config import globalconfig, translatorsetting from myutils.config import globalconfig, translatorsetting
from myutils.utils import stringfyerror, autosql, PriorityQueue, SafeFormatter from myutils.utils import stringfyerror, autosql, PriorityQueue, SafeFormatter
from myutils.commonbase import ArgsEmptyExc, commonbase from myutils.commonbase import ArgsEmptyExc, commonbase
from myutils.languageguesser import guess
class Interrupted(Exception): class Interrupted(Exception):
@ -75,6 +76,12 @@ class basetrans(commonbase):
return alternatedict(translatorsetting[self.typename]["args"]) return alternatedict(translatorsetting[self.typename]["args"])
def parse_maybe_autolang(self, content):
if self.srclang != "auto":
return self.srclang
gs = guess(content)
return self.langmap_.get(gs, gs)
############################################################ ############################################################
_globalconfig_key = "fanyi" _globalconfig_key = "fanyi"
_setting_dict = translatorsetting _setting_dict = translatorsetting

View File

@ -166,7 +166,10 @@ class Bing(Tse):
data = r.json() data = r.json()
time.sleep(sleep_seconds) time.sleep(sleep_seconds)
self.query_count += 1 self.query_count += 1
return data[0] if is_detail_result else data[0]["translations"][0]["text"] try:
return data[0] if is_detail_result else data[0]["translations"][0]["text"]
except:
raise Exception(r.maybejson)
class TS(basetrans): class TS(basetrans):
@ -177,95 +180,14 @@ class TS(basetrans):
self.engine = Bing() self.engine = Bing()
def translate(self, content): def translate(self, content):
src = self.parse_maybe_autolang(content)
try: try:
return self.engine.bing_api( return self.engine.bing_api(
content, content,
self.srclang, src,
self.tgtlang, self.tgtlang,
proxies=self.proxy, proxies=self.proxy,
if_use_cn_host=True, if_use_cn_host=True,
) )
except: except:
return self.engine.bing_api( return self.engine.bing_api(content, src, self.tgtlang, proxies=self.proxy)
content, self.srclang, self.tgtlang, proxies=self.proxy
)
# class TS(basetrans):
# def langmap(self):
# return {"zh":"zh-Hans","cht":"zh-Hant"}
# def inittranslator(self):
# self.ss=requests.session()
# headers = {
# 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
# 'cache-control': 'no-cache',
# 'pragma': 'no-cache',
# 'sec-ch-ua': '"Microsoft Edge";v="105", "Not)A;Brand";v="8", "Chromium";v="105"',
# 'sec-ch-ua-arch': '"x86"',
# 'sec-ch-ua-bitness': '"64"',
# 'sec-ch-ua-full-version': '"105.0.1343.53"',
# 'sec-ch-ua-full-version-list': '"Microsoft Edge";v="105.0.1343.53", "Not)A;Brand";v="8.0.0.0", "Chromium";v="105.0.5195.127"',
# 'sec-ch-ua-mobile': '?0',
# 'sec-ch-ua-model': '""',
# 'sec-ch-ua-platform': '"Windows"',
# 'sec-ch-ua-platform-version': '"10.0.0"',
# 'sec-ch-ua-wow64': '?0',
# 'sec-fetch-dest': 'document',
# 'sec-fetch-mode': 'navigate',
# 'sec-fetch-site': 'same-origin',
# 'sec-fetch-user': '?1',
# 'upgrade-insecure-requests': '1',
# 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53',
# }
# response = self.ss.get('https://cn.bing.com/translator/' ,headers=headers)
# text=response.text
# res=re.compile('var params_AbusePreventionHelper = (.*?);').findall(text)[0]
# self.key=str(eval(res)[0])
# self.token=str(eval(res)[1])
# iid = 'translator.5028'
# ig = re.compile('IG:"(.*?)"').findall(text)[0]
# self.IG=ig
# self.iid=iid
# def translate(self,content):
# print(content)
# headers = {
# 'authority': 'cn.bing.com',
# 'accept': '*/*',
# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
# 'cache-control': 'no-cache',
# 'content-type': 'application/x-www-form-urlencoded',
# 'origin': 'https://cn.bing.com',
# 'pragma': 'no-cache',
# 'referer': 'https://cn.bing.com/translator/',
# 'sec-ch-ua': '"Microsoft Edge";v="105", "Not)A;Brand";v="8", "Chromium";v="105"',
# 'sec-ch-ua-arch': '"x86"',
# 'sec-ch-ua-bitness': '"64"',
# 'sec-ch-ua-full-version': '"105.0.1343.53"',
# 'sec-ch-ua-full-version-list': '"Microsoft Edge";v="105.0.1343.53", "Not)A;Brand";v="8.0.0.0", "Chromium";v="105.0.5195.127"',
# 'sec-ch-ua-mobile': '?0',
# 'sec-ch-ua-platform': '"Windows"',
# 'sec-ch-ua-platform-version': '"10.0.0"',
# 'sec-fetch-dest': 'empty',
# 'sec-fetch-mode': 'cors',
# 'sec-fetch-site': 'same-origin',
# 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53',
# 'x-edge-shopping-flag': '1',
# }
# response = self.ss.post('https://cn.bing.com/ttranslatev3?isVertical=1&&IG='+self.IG+'&IID='+self.iid,headers=headers, data={
# 'fromLang':self.srclang,'text':content,'to':self.tgtlang,'token':self.token,'key':self.key
# })#data=data )
# js=response.json()
# ch=js[0]['translations'][0]['text']
# return ch

View File

@ -20,7 +20,7 @@ class TS(basetransdev):
def translate(self, content): def translate(self, content):
self.Page_navigate( self.Page_navigate(
"https://www.deepl.com/en/translator#{}/{}/{}".format( "https://www.deepl.com/en/translator#{}/{}/{}".format(
self.srclang, self.tgtlang, quote(content) self.parse_maybe_autolang(content), self.tgtlang, quote(content)
) )
) )
return self.wait_for_result( return self.wait_for_result(

View File

@ -2,7 +2,7 @@ from translator.basetranslator_dev import basetransdev
import time import time
class TS(basetransdev): class TS(basetransdev):
target_url = "https://fanyi.caiyunapp.com/#/" target_url = "https://fanyi.caiyunapp.com"
def translate(self, content): def translate(self, content):
self.Runtime_evaluate( self.Runtime_evaluate(

View File

@ -2,7 +2,7 @@ from translator.basetranslator_dev import basetransdev
class TS(basetransdev): class TS(basetransdev):
target_url = "https://fanyi.youdao.com/" target_url = "https://fanyi.youdao.com/#/TextTranslate"
def translate(self, content): def translate(self, content):
self.Runtime_evaluate( self.Runtime_evaluate(

View File

@ -400,9 +400,10 @@ def trans(TextList, k_access_key, k_secret_key, src, tgt, proxy):
service = Service(k_service_info, k_api_info) service = Service(k_service_info, k_api_info)
body = { body = {
"TargetLanguage": tgt, "TargetLanguage": tgt,
"SourceLanguage": src,
"TextList": [TextList], "TextList": [TextList],
} }
if src != "auto":
body.update({"SourceLanguage": src})
res = service.json("translate", {}, json.dumps(body), proxy) res = service.json("translate", {}, json.dumps(body), proxy)
return res return res

View File

@ -10,7 +10,9 @@ class TS(basetrans):
apikey = self.multiapikeycurrent["apikey"] apikey = self.multiapikeycurrent["apikey"]
url = self.config["apiurl"] + "/v3/translate?version=2018-05-01" url = self.config["apiurl"] + "/v3/translate?version=2018-05-01"
headers = {"Content-Type": "application/json"} headers = {"Content-Type": "application/json"}
data = {"text": [query], "source": self.srclang, "target": self.tgtlang} data = {"text": [query], "target": self.tgtlang}
if self.srclang != "auto":
data.update({"source": self.srclang})
response = self.proxysession.post( response = self.proxysession.post(
url, auth=("apikey", apikey), headers=headers, data=json.dumps(data) url, auth=("apikey", apikey), headers=headers, data=json.dumps(data)

View File

@ -137,6 +137,7 @@ from translator.basetranslator import basetrans
class TS(basetrans): class TS(basetrans):
def langmap(self): def langmap(self):
return { return {
"zh": "chi", "zh": "chi",
@ -153,6 +154,10 @@ class TS(basetrans):
self.engine._ = None self.engine._ = None
def translate(self, content): def translate(self, content):
return self.engine.reverso_api( return self.engine.reverso_api(
content, self.srclang, self.tgtlang, proxies=self.proxy content,
self.parse_maybe_autolang(content),
self.tgtlang,
proxies=self.proxy,
) )

View File

@ -154,5 +154,8 @@ class TS(basetrans):
def translate(self, content): def translate(self, content):
return self.engine.reverso_api( return self.engine.reverso_api(
content, self.srclang, self.tgtlang, proxies=self.proxy content,
self.parse_maybe_autolang(content),
self.tgtlang,
proxies=self.proxy,
) )

View File

@ -2004,7 +2004,7 @@
"minlength": 0, "minlength": 0,
"maxlength": 1000, "maxlength": 1000,
"maxoriginlength": 1000, "maxoriginlength": 1000,
"srclang4": "ja", "srclang4": "auto",
"tgtlang4": "zh", "tgtlang4": "zh",
"transkiroku": false, "transkiroku": false,
"transkirokuuse": "baidu", "transkirokuuse": "baidu",

View File

@ -808,5 +808,6 @@
"日志": "سجل .", "日志": "سجل .",
"查看": "عرض .", "查看": "عرض .",
"标记": "علامة", "标记": "علامة",
"去除标记": "إزالة علامة" "去除标记": "إزالة علامة",
"当前OCR引擎不支持设置语言为自动": "التعرف الضوئي على الحروف المحرك الحالي لا يدعم وضع اللغة التلقائي"
} }

View File

@ -808,5 +808,6 @@
"日志": "日誌", "日志": "日誌",
"查看": "查看", "查看": "查看",
"标记": "標記", "标记": "標記",
"去除标记": "去除標記" "去除标记": "去除標記",
"当前OCR引擎不支持设置语言为自动": "當前OCR引擎不支持設定語言為自動"
} }

View File

@ -808,5 +808,6 @@
"日志": "deník", "日志": "deník",
"查看": "viz", "查看": "viz",
"标记": "značka", "标记": "značka",
"去除标记": "Odstranit značení" "去除标记": "Odstranit značení",
"当前OCR引擎不支持设置语言为自动": "Aktuální OCR engine nepodporuje nastavení jazyka na automatické"
} }

View File

@ -808,5 +808,6 @@
"日志": "Journal", "日志": "Journal",
"查看": "siehe", "查看": "siehe",
"标记": "Zeichen", "标记": "Zeichen",
"去除标记": "Markierung entfernen" "去除标记": "Markierung entfernen",
"当前OCR引擎不支持设置语言为自动": "Die aktuelle OCR-Engine unterstützt die Einstellung der Sprache auf automatisch nicht"
} }

View File

@ -808,5 +808,6 @@
"日志": "journal", "日志": "journal",
"查看": "see", "查看": "see",
"标记": "sign", "标记": "sign",
"去除标记": "Remove marking" "去除标记": "Remove marking",
"当前OCR引擎不支持设置语言为自动": "The current OCR engine does not support setting the language to automatic"
} }

View File

@ -808,5 +808,6 @@
"日志": "Diario", "日志": "Diario",
"查看": "Ver", "查看": "Ver",
"标记": "Marcado", "标记": "Marcado",
"去除标记": "Eliminar la marca" "去除标记": "Eliminar la marca",
"当前OCR引擎不支持设置语言为自动": "El motor OCR actual no admite configurar el lenguaje a automático"
} }

View File

@ -808,5 +808,6 @@
"日志": "Logs", "日志": "Logs",
"查看": "Voir", "查看": "Voir",
"标记": "Marquage", "标记": "Marquage",
"去除标记": "Enlever les marques" "去除标记": "Enlever les marques",
"当前OCR引擎不支持设置语言为自动": "Le moteur OCR actuel ne prend pas en charge le réglage de la langue sur auto"
} }

View File

@ -808,5 +808,6 @@
"日志": "diario", "日志": "diario",
"查看": "vedi", "查看": "vedi",
"标记": "segno", "标记": "segno",
"去除标记": "Rimuovi la marcatura" "去除标记": "Rimuovi la marcatura",
"当前OCR引擎不支持设置语言为自动": "Il motore OCR corrente non supporta l'impostazione automatica della lingua"
} }

View File

@ -808,5 +808,6 @@
"日志": "ログ#ログ#", "日志": "ログ#ログ#",
"查看": "表示#ヒョウジ#", "查看": "表示#ヒョウジ#",
"标记": "マークアップ", "标记": "マークアップ",
"去除标记": "タグを削除" "去除标记": "タグを削除",
"当前OCR引擎不支持设置语言为自动": "現在のOCRエンジンでは言語の自動設定はサポートされていません"
} }

View File

@ -808,5 +808,6 @@
"日志": "로그", "日志": "로그",
"查看": "보기", "查看": "보기",
"标记": "태그", "标记": "태그",
"去除标记": "태그 제거" "去除标记": "태그 제거",
"当前OCR引擎不支持设置语言为自动": "현재 OCR 엔진은 자동 언어 설정을 지원하지 않습니다."
} }

View File

@ -808,5 +808,6 @@
"日志": "dagboek", "日志": "dagboek",
"查看": "zie", "查看": "zie",
"标记": "teken", "标记": "teken",
"去除标记": "Markering verwijderen" "去除标记": "Markering verwijderen",
"当前OCR引擎不支持设置语言为自动": "De huidige OCR-engine ondersteunt niet het instellen van de taal op automatisch"
} }

View File

@ -808,5 +808,6 @@
"日志": "dziennik", "日志": "dziennik",
"查看": "zobacz", "查看": "zobacz",
"标记": "znak", "标记": "znak",
"去除标记": "Usuń oznaczenie" "去除标记": "Usuń oznaczenie",
"当前OCR引擎不支持设置语言为自动": "Obecny silnik OCR nie obsługuje ustawienia języka na automatyczne"
} }

View File

@ -808,5 +808,6 @@
"日志": "diário", "日志": "diário",
"查看": "ver", "查看": "ver",
"标记": "signo", "标记": "signo",
"去除标记": "Remover a marcação" "去除标记": "Remover a marcação",
"当前OCR引擎不支持设置语言为自动": "O mecanismo OCR atual não suporta configurar o idioma para automático"
} }

View File

@ -808,5 +808,6 @@
"日志": "Журнал", "日志": "Журнал",
"查看": "Посмотреть", "查看": "Посмотреть",
"标记": "Маркировка", "标记": "Маркировка",
"去除标记": "Удалить метку" "去除标记": "Удалить метку",
"当前OCR引擎不支持设置语言为自动": "Текущий движок OCR не поддерживает настройку языка автоматически"
} }

View File

@ -808,5 +808,6 @@
"日志": "journal", "日志": "journal",
"查看": "se", "查看": "se",
"标记": "tecken", "标记": "tecken",
"去除标记": "Ta bort märkning" "去除标记": "Ta bort märkning",
"当前OCR引擎不支持设置语言为自动": "Den aktuella OCR-motorn stöder inte inställning av språket till automatiskt"
} }

View File

@ -808,5 +808,6 @@
"日志": "บันทึกประจำวัน", "日志": "บันทึกประจำวัน",
"查看": "ดู", "查看": "ดู",
"标记": "เครื่องหมาย", "标记": "เครื่องหมาย",
"去除标记": "ลบเครื่องหมาย" "去除标记": "ลบเครื่องหมาย",
"当前OCR引擎不支持设置语言为自动": "เครื่องยนต์ OCR ปัจจุบันไม่รองรับการตั้งค่าภาษาเป็นอัตโนมัติ"
} }

View File

@ -808,5 +808,6 @@
"日志": "Günlük", "日志": "Günlük",
"查看": "Gördün mü?", "查看": "Gördün mü?",
"标记": "imza", "标记": "imza",
"去除标记": "İşaret Çıkar" "去除标记": "İşaret Çıkar",
"当前OCR引擎不支持设置语言为自动": "Ağımdaki OCR motoru dili otomatik olarak ayarlamasını desteklemez"
} }

View File

@ -808,5 +808,6 @@
"日志": "журнал", "日志": "журнал",
"查看": "див.", "查看": "див.",
"标记": "знак", "标记": "знак",
"去除标记": "Вилучити позначення" "去除标记": "Вилучити позначення",
"当前OCR引擎不支持设置语言为自动": "Поточний рушій OCR не підтримує встановлення мови як автоматичного"
} }

View File

@ -808,5 +808,6 @@
"日志": "Đăng nhập", "日志": "Đăng nhập",
"查看": "Xem thêm", "查看": "Xem thêm",
"标记": "Đánh dấu", "标记": "Đánh dấu",
"去除标记": "Xóa đánh dấu" "去除标记": "Xóa đánh dấu",
"当前OCR引擎不支持设置语言为自动": "Công cụ OCR hiện tại không hỗ trợ thiết lập ngôn ngữ tự động"
} }

View File

@ -808,5 +808,6 @@
"日志": "", "日志": "",
"查看": "", "查看": "",
"标记": "", "标记": "",
"去除标记": "" "去除标记": "",
"当前OCR引擎不支持设置语言为自动": ""
} }