This commit is contained in:
恍兮惚兮 2024-12-31 20:25:13 +08:00
parent 9788f5065f
commit a2e7cca929
27 changed files with 117 additions and 124 deletions

View File

@ -39,15 +39,14 @@ DECLARE_API bool check_language_valid(wchar_t *language)
return false;
}
}
DECLARE_API void getlanguagelist(void (*cb)(LPCWSTR))
DECLARE_API void getlanguagelist(void (*cb)(LPCWSTR, LPCWSTR))
{
OcrEngine ocrEngine = OcrEngine::TryCreateFromUserProfileLanguages();
auto languages = ocrEngine.AvailableRecognizerLanguages();
for (auto &&language : languages)
{
auto lang = language.LanguageTag();
cb(lang.c_str());
cb(language.LanguageTag().c_str(), language.DisplayName().c_str());
}
}
DECLARE_API void OCR(void *ptr, size_t size, wchar_t *lang, wchar_t *space, void (*cb)(int, int, int, int, LPCWSTR))

View File

@ -91,7 +91,7 @@ def getlangtgt():
def getlanguagespace(lang=None):
if lang is None:
lang = getlanguse()
return "" if (lang in ("zh", "ja", "cht")) else " "
return "" if (lang.split("-")[0] in ("zh", "ja", "cht")) else " "
def findenclose(text, tag):

View File

@ -1,7 +1,7 @@
import base64
from myutils.config import globalconfig
from ocrengines.baseocrclass import baseocr
import random
import random, zhconv
from hashlib import md5
@ -27,7 +27,14 @@ class OCR(baseocr):
try:
js = response.json()
text = [_["dst"] for _ in js["data"]["content"]]
text = [
(
zhconv.convert(_["dst"], "zh-tw")
if ("cht" == self.tgtlang_1)
else _["dst"]
)
for _ in js["data"]["content"]
]
box = [
(
l["points"][0]["x"],
@ -87,7 +94,14 @@ class OCR(baseocr):
try:
js = response.json()
text = [_["src"] for _ in js["data"]["content"]]
text = [
(
zhconv.convert(_["dst"], "zh-tw")
if ("cht" == self.tgtlang_1)
else _["dst"]
)
for _ in js["data"]["content"]
]
box = [
(
l["points"][0]["x"],
@ -108,24 +122,25 @@ class OCR(baseocr):
@property
def srclangx(self):
return {
"cht": "zh",
"es": "spa",
"ko": "kor",
"fr": "fra",
"ja": "jp",
"cht": "cht",
"vi": "vie",
"uk": "ukr",
"ar": "ara",
"sv": "swe",
}.get(self.srclang_1, self.srclang_1)
@property
def tgtlangx(self):
return {
"cht": "zh",
"es": "spa",
"ko": "kor",
"fr": "fra",
"ja": "jp",
"cht": "cht",
"vi": "vie",
"uk": "ukr",
"ar": "ara",
@ -134,6 +149,7 @@ class OCR(baseocr):
def langmap(self):
return {
"auto": "auto_detect",
"cht": "CHN_ENG",
"zh": "CHN_ENG",
"en": "ENG",
"ja": "JAP",
@ -141,6 +157,17 @@ class OCR(baseocr):
"ko": "KOR",
"fr": "FRE",
"es": "SPA",
"pt": "POR",
"de": "GER",
"it": "ITA",
"ru": "RUS",
"nl": "DUT",
"sv": "SWE",
"pl": "POL",
"tr": "TUR",
"th": "THA",
"vi": "VIE",
"ar": "ARA",
}
def initocr(self):

View File

@ -13,7 +13,12 @@ class OCR(baseocr):
"es": "spa",
"fr": "fre",
"ru": "rus",
"cht": "cht",
"ar": "ara",
"de": "ger",
"tr": "tur",
"sv": "swe",
"es": "spa",
"pt": "por",
}
def ocr(self, imagebinary):

View File

@ -1,6 +1,7 @@
from hashlib import sha1
import time, random, hmac, base64, uuid, hashlib, json
from ocrengines.baseocrclass import baseocr
import zhconv
class OCR(baseocr):
@ -18,9 +19,8 @@ class OCR(baseocr):
except:
return "ap-beijing"
@property
def langocr(self):
s = self.srclang_1
def langmap(self):
# https://cloud.tencent.com/document/product/866/33526
return {
"zh": "zh",
"cht": "zh",
@ -38,18 +38,19 @@ class OCR(baseocr):
"hu": "hun",
"th": "tha",
"ar": "ara",
}.get(s, "auto")
}
def langmap(self):
# https://cloud.tencent.com/document/product/551/17232
return {"cht": "zh-TW"}
@property
def langocr(self):
s = self.srclang_1
return self.langmap().get(s, "auto")
def ocr_fy(self, imagebinary):
self.checkempty(["SecretId", "SecretKey"])
encodestr = str(base64.b64encode(imagebinary), "utf-8")
req_para = {
"Source": self.srclang,
"Source": self.langocr,
"Target": self.tgtlang,
"ProjectId": int(self.config["ProjectId"]),
"Data": encodestr,
@ -140,27 +141,17 @@ class OCR(baseocr):
for _ in r.json()["Response"]["ImageRecord"]["Value"]
]
texts = [
_["TargetText"] for _ in r.json()["Response"]["ImageRecord"]["Value"]
(
zhconv.convert(_["TargetText"], "zh-tw")
if ("cht" == self.tgtlang_1)
else _["TargetText"]
)
for _ in r.json()["Response"]["ImageRecord"]["Value"]
]
return {"box": boxs, "text": texts, "isocrtranslate": True}
except:
raise Exception(r)
def langmap(self):
# https://cloud.tencent.com/document/product/866/33526
return {
"ja": "jap",
"ko": "kor",
"en": "auto",
"ru": "rus",
"es": "spa",
"fr": "fre",
"vi": "vie",
"it": "ita",
"ar": "ara",
"th": "tha",
}
def ocr_ocr(self, imagebinary):
self.checkempty(["SecretId", "SecretKey"])

View File

@ -1,6 +1,6 @@
import gobject
import winrtutils
from myutils.config import _TR, static_data, getlang_inner2show
from myutils.config import _TR, static_data
from myutils.utils import dynamiclink
from ocrengines.baseocrclass import baseocr
from qtsymbols import *
@ -8,36 +8,13 @@ from gui.dynalang import LPushButton, LLabel
from myutils.utils import getlanguagespace
def initsupports():
_allsupport = winrtutils.getlanguagelist()
supportmap = {}
for lang in [_["code"] for _ in static_data["lang_list_all"]] + [
"zh-Hans",
"zh-Hant",
]:
if lang == "zh" or lang == "cht":
continue
for s in _allsupport:
if s.startswith(lang) or lang.startswith(s):
supportmap[lang] = s
break
if "zh-Hans" in supportmap:
v = supportmap.pop("zh-Hans")
supportmap["zh"] = v
if "zh-Hant" in supportmap:
v = supportmap.pop("zh-Hant")
supportmap["cht"] = v
return supportmap
def question():
dialog = QWidget()
formLayout = QHBoxLayout()
formLayout.setContentsMargins(0, 0, 0, 0)
dialog.setLayout(formLayout)
_allsupport = initsupports()
supportlang = LLabel()
supportlang.setText("_,_".join([getlang_inner2show(f) for f in _allsupport]))
supportlang = QLabel()
supportlang.setText(", ".join([_[1] for _ in winrtutils.getlanguagelist()]))
btndownload = LPushButton("添加语言包")
btndownload.clicked.connect(
lambda: gobject.baseobject.openlink(
@ -53,43 +30,29 @@ def question():
class OCR(baseocr):
def langmap(self):
return {"cht": "cht"}
def initocr(self):
self.supportmap = initsupports()
return {"zh": "zh-Hans", "cht": "zh-Hant"}
def ocr(self, imagebinary):
if len(self.supportmap) == 0:
supports = [_[0] for _ in winrtutils.getlanguagelist()]
if len(supports) == 0:
raise Exception(_TR("无可用语言"))
if self.srclang == "auto":
if len(self.supportmap) == 1:
uselang = list(self.supportmap.values())[0]
if len(supports) == 1:
uselang = supports[0]
else:
self.raise_cant_be_auto_lang()
else:
if self.srclang not in self.supportmap:
_allsupport = initsupports()
idx = [_["code"] for _ in static_data["lang_list_all"]].index(
self.srclang
)
if not winrtutils.check_language_valid(self.srclang):
raise Exception(
_TR("系统未安装")
+ ' "'
+ _TR([_["zh"] for _ in static_data["lang_list_all"]][idx])
+ '" '
+ _TR("的OCR模型")
_TR("系统未安装当前语言的OCR模型")
+ "\n"
+ _TR("当前支持的语言")
+ ": "
+ ", ".join([_TR(getlang_inner2show(f)) for f in _allsupport])
+ ", ".join([_[1] for _ in winrtutils.getlanguagelist()])
)
else:
uselang = self.srclang
ret = winrtutils.OCR_f(
imagebinary, self.supportmap[uselang], getlanguagespace(uselang)
)
uselang = self.srclang
ret = winrtutils.OCR_f(imagebinary, uselang, getlanguagespace(uselang))
boxs = [_[1:] for _ in ret]
texts = [_[0] for _ in ret]
return {"box": boxs, "text": texts}

View File

@ -60,10 +60,18 @@ def getlanguagelist():
if not winrtutilsdll:
return []
ret = []
_getlanguagelist(CFUNCTYPE(None, c_wchar_p)(ret.append))
_getlanguagelist(
CFUNCTYPE(None, c_wchar_p, c_wchar_p)(lambda t, d: ret.append((t, d)))
)
return ret
def check_language_valid(l):
if not winrtutilsdll:
return False
return _check_language_valid(l)
def winrt_capture_window(hwnd):
if not winrtutilsdll:
return

View File

@ -52,7 +52,6 @@
"民安ともえ": "الأمن العام",
"光标": "المؤشر",
"清空": "إفراغ",
"的OCR模型": "نموذج التعرف الضوئي على الحروف",
"泰语": "التايلاندية",
"特殊码": "رمز خاص",
"语法加亮": "تسليط الضوء على بناء الجملة",
@ -766,5 +765,6 @@
"年度总结": "ملخص سنوي",
"取词翻译": "اختيار الترجمة",
"取词查词": "كلمة البحث",
"音频编码": "ترميز الصوت"
"音频编码": "ترميز الصوت",
"系统未安装当前语言的OCR模型": "التعرف الضوئي على الحروف نموذج اللغة الحالية غير مثبتة على النظام"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "找不到重要元件:",
"请重新下载并关闭杀毒软件后重试": "請重新下載並關閉防毒軟體後重試",
"系统未安装": "系統未安裝",
"的OCR模型": "的 OCR 模型",
"有道TTS": "有道 TTS",
"不支持的键位": "不支援的鍵位",
"快捷键冲突": "快速鍵衝突",
@ -766,5 +765,6 @@
"年度总结": "年度總結",
"取词翻译": "取詞翻譯",
"取词查词": "取詞查詞",
"音频编码": "音訊編碼"
"音频编码": "音訊編碼",
"系统未安装当前语言的OCR模型": "系統未安裝當前語言的OCR模型"
}

View File

@ -59,7 +59,6 @@
"打开目录": "Otevřít adresář",
"字体样式": "Styl písma",
"搜索文本过短!": "Vyhledávací text je příliš krátký!",
"的OCR模型": "Model OCR",
"小学馆": "Sál základní školy",
"光标": "kurzor",
"项目网站": "Webové stránky projektu",
@ -766,5 +765,6 @@
"年度总结": "Roční shrnutí",
"取词翻译": "Překlad výběru slova",
"取词查词": "Načíst a vyhledávat slova",
"音频编码": "Kódování zvuku"
"音频编码": "Kódování zvuku",
"系统未安装当前语言的OCR模型": "OCR model pro aktuální jazyk není nainstalován v systému"
}

View File

@ -59,7 +59,6 @@
"打开目录": "Verzeichnis öffnen",
"字体样式": "Schriftart",
"搜索文本过短!": "Der Suchtext ist zu kurz!",
"的OCR模型": "Das OCR-Modell",
"小学馆": "Grundschulsaal",
"光标": "Cursor",
"项目网站": "Website des Projekts",
@ -766,5 +765,6 @@
"年度总结": "Jahreszusammenfassung",
"取词翻译": "Übersetzung der Wortauswahl",
"取词查词": "Wörter abrufen und suchen",
"音频编码": "Audio-Codierung"
"音频编码": "Audio-Codierung",
"系统未安装当前语言的OCR模型": "Das OCR-Modell für die aktuelle Sprache ist nicht im System installiert"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "Important Component Not Found:",
"请重新下载并关闭杀毒软件后重试": "Please re-download and try again with antivirus disabled",
"系统未安装": "System Not Installed",
"的OCR模型": "OCR Model",
"有道TTS": "Youdao TTS",
"不支持的键位": "Unsupported Key Position",
"快捷键冲突": "Hotkey Conflict",
@ -766,5 +765,6 @@
"年度总结": "Annual Summary",
"取词翻译": "Word selection translation",
"取词查词": "Retrieve and search for words",
"音频编码": "audio coding"
"音频编码": "audio coding",
"系统未安装当前语言的OCR模型": "The OCR model for the current language is not installed in the system"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "No se pueden encontrar componentes importantes:",
"请重新下载并关闭杀毒软件后重试": "Por favor, vuelva a descargar y cierre el software antivirus y vuelva a intentarlo.",
"系统未安装": "El sistema no está instalado",
"的OCR模型": "Modelo OCR",
"有道TTS": "Youdao TTS",
"不支持的键位": "Teclas no soportadas",
"快捷键冲突": "Conflicto de teclas de acceso rápido",
@ -766,5 +765,6 @@
"年度总结": "Resumen Anual",
"取词翻译": "Traducción de palabras",
"取词查词": "Buscar palabras",
"音频编码": "Codificación de audio"
"音频编码": "Codificación de audio",
"系统未安装当前语言的OCR模型": "El sistema no instala el modelo OCR del idioma actual"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "Aucun composant important trouvé:",
"请重新下载并关闭杀毒软件后重试": "Veuillez réessayer après le téléchargement et la fermeture du logiciel antivirus",
"系统未安装": "Le système n'est pas installé",
"的OCR模型": "Le modèle ocr",
"有道TTS": "Avec tts",
"不支持的键位": "Clés non supportées",
"快捷键冲突": "Conflit de touches de raccourci",
@ -766,5 +765,6 @@
"年度总结": "Résumé annuel",
"取词翻译": "Traduction des mots",
"取词查词": "Recherche de mots",
"音频编码": "Codage audio"
"音频编码": "Codage audio",
"系统未安装当前语言的OCR模型": "Le système n'a pas installé le modèle OCR pour la langue actuelle"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "Componente importante non trovato:",
"请重新下载并关闭杀毒软件后重试": "Si prega di scaricare e chiudere nuovamente il software antivirus e riprovare",
"系统未安装": "Sistema non installato",
"的OCR模型": "Modello OCR per",
"有道TTS": "Youdao TTS",
"不支持的键位": "Posizione chiave non supportata",
"快捷键冲突": "Conflitto di tasti scorciatoie",
@ -766,5 +765,6 @@
"年度总结": "Sintesi annuale",
"取词翻译": "Traduzione della selezione delle parole",
"取词查词": "Recupera e cerca parole",
"音频编码": "Codificazione audio"
"音频编码": "Codificazione audio",
"系统未安装当前语言的OCR模型": "Il modello OCR per la lingua corrente non è installato nel sistema"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "重要なコンポーネントが見つかりませんでした:",
"请重新下载并关闭杀毒软件后重试": "ウイルス対策ソフトウェアを再ダウンロードして閉じてから再試行してください",
"系统未安装": "システムがインストールされていません",
"的OCR模型": "のOCRモデル",
"有道TTS": "有道TTS",
"不支持的键位": "サポートされていないキー",
"快捷键冲突": "ショートカットキーの競合",
@ -766,5 +765,6 @@
"年度总结": "年度まとめ",
"取词翻译": "単語の翻訳",
"取词查词": "単語を取って単語を調べる",
"音频编码": "オーディオコーディング"
"音频编码": "オーディオコーディング",
"系统未安装当前语言的OCR模型": "現在の言語のOCRモデルがシステムにインストールされていません"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "중요한 구성 요소를 찾을 수 없음:",
"请重新下载并关闭杀毒软件后重试": "백신 프로그램을 다시 다운로드하고 닫은 후 다시 시도하십시오.",
"系统未安装": "시스템이 설치되지 않았습니다.",
"的OCR模型": "의 OCR 모델",
"有道TTS": "TTS가 있어요.",
"不支持的键位": "지원되지 않는 키",
"快捷键冲突": "단축키 충돌",
@ -766,5 +765,6 @@
"年度总结": "연간 요약",
"取词翻译": "취사 번역",
"取词查词": "취사 조사",
"音频编码": "오디오 인코딩"
"音频编码": "오디오 인코딩",
"系统未安装当前语言的OCR模型": "현재 언어의 OCR 모델이 시스템에 설치되지 않았습니다."
}

View File

@ -59,7 +59,6 @@
"打开目录": "Map openen",
"字体样式": "Lettertypestijl",
"搜索文本过短!": "De zoektekst is te kort!",
"的OCR模型": "Het OCR-model",
"小学馆": "Hal van de basisschool",
"光标": "cursor",
"项目网站": "Website van het project",
@ -766,5 +765,6 @@
"年度总结": "Jaarlijkse samenvatting",
"取词翻译": "Woordselectie vertaling",
"取词查词": "Woorden ophalen en zoeken",
"音频编码": "Audiocodering"
"音频编码": "Audiocodering",
"系统未安装当前语言的OCR模型": "Het OCR-model voor de huidige taal is niet geïnstalleerd in het systeem"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "Nie znaleziono ważnego komponentu:",
"请重新下载并关闭杀毒软件后重试": "Pobierz i zamknij oprogramowanie antywirusowe ponownie i spróbuj ponownie",
"系统未安装": "System nie zainstalowany",
"的OCR模型": "Model OCR dla",
"有道TTS": "Youdao TTS",
"不支持的键位": "Nieobsługiwana pozycja klucza",
"快捷键冲突": "Konflikt kluczy skrótów",
@ -766,5 +765,6 @@
"年度总结": "Roczne podsumowanie",
"取词翻译": "Tłumaczenie wyboru słowa",
"取词查词": "Pobieranie i wyszukiwanie słów",
"音频编码": "Kodowanie dźwięku"
"音频编码": "Kodowanie dźwięku",
"系统未安装当前语言的OCR模型": "Model OCR dla bieżącego języka nie jest zainstalowany w systemie"
}

View File

@ -59,7 +59,6 @@
"打开目录": "Abrir a pasta",
"字体样式": "Estilo do Tipo de Letra",
"搜索文本过短!": "O texto de pesquisa é muito curto!",
"的OCR模型": "O modelo OCR",
"小学馆": "Sala do Ensino Fundamental",
"光标": "cursor",
"项目网站": "Sítio Web do projecto",
@ -766,5 +765,6 @@
"年度总结": "Resumo anual",
"取词翻译": "Tradução da selecção de palavras",
"取词查词": "Obter e procurar palavras",
"音频编码": "Codificação de áudio"
"音频编码": "Codificação de áudio",
"系统未安装当前语言的OCR模型": "O modelo OCR para o idioma atual não está instalado no sistema"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "Не удалось найти важные компоненты:",
"请重新下载并关闭杀毒软件后重试": "Пожалуйста, перезагрузите и выключите антивирусное программное обеспечение и попробуйте снова.",
"系统未安装": "Система не установлена",
"的OCR模型": "Модель OCR",
"有道TTS": "Есть TTS",
"不支持的键位": "Не поддерживаемые клавиши",
"快捷键冲突": "Конфликт комбинаций клавиш",
@ -766,5 +765,6 @@
"年度总结": "Ежегодное резюме",
"取词翻译": "Перевод",
"取词查词": "Поиск слов",
"音频编码": "Звуковое кодирование"
"音频编码": "Звуковое кодирование",
"系统未安装当前语言的OCR模型": "Система не устанавливает модель OCR для текущего языка"
}

View File

@ -59,7 +59,6 @@
"打开目录": "Öppna katalog",
"字体样式": "Teckensnittsstil",
"搜索文本过短!": "Söktexten är för kort!",
"的OCR模型": "OCR-modellen",
"小学馆": "Elementary School Hall",
"光标": "markör",
"项目网站": "Projektets webbplats",
@ -766,5 +765,6 @@
"年度总结": "Årlig sammanfattning",
"取词翻译": "Ordmarkeringsöversättning",
"取词查词": "Hämta och sök efter ord",
"音频编码": "Ljudkodning"
"音频编码": "Ljudkodning",
"系统未安装当前语言的OCR模型": "OCR-modellen för det aktuella språket är inte installerad i systemet"
}

View File

@ -58,7 +58,6 @@
"打开目录": "เปิดไดเรกทอรี",
"字体样式": "รูปแบบตัวอักษร",
"搜索文本过短!": "ค้นหาข้อความสั้นเกินไป!",
"的OCR模型": "รุ่น OCR",
"小学馆": "ศาลาประถมศึกษา",
"光标": "เคอร์เซอร์",
"项目网站": "เว็บไซต์โครงการ",
@ -766,5 +765,6 @@
"年度总结": "สรุปรายปี",
"取词翻译": "คำแปล",
"取词查词": "ค้นหาคำ",
"音频编码": "การเข้ารหัสเสียง"
"音频编码": "การเข้ารหัสเสียง",
"系统未安装当前语言的OCR模型": "ระบบไม่ได้ติดตั้งรุ่น OCR สำหรับภาษาปัจจุบัน"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "Önemli komponent bulunamadı:",
"请重新下载并关闭杀毒软件后重试": "Lütfen antivirüs yazılımını tekrar indirin ve tekrar deneyin",
"系统未安装": "Sistem kurulmadı",
"的OCR模型": "OCR modeli için",
"有道TTS": "Youdao TTS",
"不支持的键位": "Desteklenmeyen anahtar pozisyonu",
"快捷键冲突": "Kısayol tuş çatışması",
@ -766,5 +765,6 @@
"年度总结": "Yıllık Toplantı",
"取词翻译": "Kelime seçimi çevirimi",
"取词查词": "Kelimeleri alın ve arayın",
"音频编码": "Ses Kodlama"
"音频编码": "Ses Kodlama",
"系统未安装当前语言的OCR模型": "Ağımdaki dilin OCR modeli sistemde kurulmadı."
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "Важливий компонент не знайдено:",
"请重新下载并关闭杀毒软件后重试": "Будь ласка, звантажте і закрийте антивірусне програмне забезпечення знову і спробуйте знову",
"系统未安装": "Система не встановлена",
"的OCR模型": "Модель OCR для",
"有道TTS": "Youdao TTS",
"不支持的键位": "Непідтримувана позиція ключа",
"快捷键冲突": "Конфлікт клавіш скорочення",
@ -766,5 +765,6 @@
"年度总结": "Річне резюме",
"取词翻译": "Переклад вибору слів",
"取词查词": "Отримати і шукати слова",
"音频编码": "Аудіокодування"
"音频编码": "Аудіокодування",
"系统未安装当前语言的OCR模型": "Модель OCR для поточної мови не встановлена у системі"
}

View File

@ -281,7 +281,6 @@
"找不到重要组件:": "Không tìm thấy thành phần quan trọng:",
"请重新下载并关闭杀毒软件后重试": "Vui lòng tải xuống và thử lại sau khi tắt phần mềm diệt virus",
"系统未安装": "Hệ thống không được cài đặt",
"的OCR模型": "Mô hình OCR",
"有道TTS": "Có TTS",
"不支持的键位": "Các phím không được hỗ trợ",
"快捷键冲突": "Xung đột phím tắt",
@ -766,5 +765,6 @@
"年度总结": "Tóm tắt hàng năm",
"取词翻译": "Dịch thuật lấy từ",
"取词查词": "Tìm kiếm từ",
"音频编码": "Mã hóa âm thanh"
"音频编码": "Mã hóa âm thanh",
"系统未安装当前语言的OCR模型": "Hệ thống không cài đặt mô hình OCR cho ngôn ngữ hiện tại"
}

View File

@ -60,7 +60,7 @@
"手动设置代理": "",
"字体样式": "",
"搜索文本过短!": "",
"的OCR模型": "",
"系统未安装当前语言的OCR模型": "",
"小学馆": "",
"光标": "",
"项目网站": "",