forked from Public-Mirror/Textractor
add option to only translate selected thread
This commit is contained in:
parent
8a710659dc
commit
accd231c64
@ -14,10 +14,10 @@ QStringList languages
|
|||||||
"Bangla: bn",
|
"Bangla: bn",
|
||||||
"Bosnian: bs",
|
"Bosnian: bs",
|
||||||
"Bulgarian: bg",
|
"Bulgarian: bg",
|
||||||
"Cantonese (Traditional): yue",
|
"Cantonese (traditional): yue",
|
||||||
"Catalan: ca",
|
"Catalan: ca",
|
||||||
"Chinese (Simplified): zh-Hans",
|
"Chinese (simplified): zh-Hans",
|
||||||
"Chinese (Traditional): zh-Hant",
|
"Chinese (traditional): zh-Hant",
|
||||||
"Croatian: hr",
|
"Croatian: hr",
|
||||||
"Czech: cs",
|
"Czech: cs",
|
||||||
"Danish: da",
|
"Danish: da",
|
||||||
@ -79,6 +79,9 @@ QStringList languages
|
|||||||
"Yucatec Maya: yua"
|
"Yucatec Maya: yua"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool translateSelectedOnly = false, rateLimitAll = true, rateLimitSelected = false, useCache = true;
|
||||||
|
int tokenCount = 30, tokenRestoreDelay = 60000;
|
||||||
|
|
||||||
std::pair<bool, std::wstring> Translate(const std::wstring& text, SentenceInfo)
|
std::pair<bool, std::wstring> Translate(const std::wstring& text, SentenceInfo)
|
||||||
{
|
{
|
||||||
if (HttpRequest httpRequest{
|
if (HttpRequest httpRequest{
|
||||||
|
@ -13,7 +13,7 @@ extern Synchronized<std::wstring> translateTo;
|
|||||||
const char* TRANSLATION_PROVIDER = "DeepL Translate";
|
const char* TRANSLATION_PROVIDER = "DeepL Translate";
|
||||||
QStringList languages
|
QStringList languages
|
||||||
{
|
{
|
||||||
"Chinese: ZH",
|
"Chinese (simplified): ZH",
|
||||||
"Dutch: NL",
|
"Dutch: NL",
|
||||||
"English: EN",
|
"English: EN",
|
||||||
"French: FR",
|
"French: FR",
|
||||||
@ -26,6 +26,9 @@ QStringList languages
|
|||||||
"Spanish: ES",
|
"Spanish: ES",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool translateSelectedOnly = true, rateLimitAll = true, rateLimitSelected = true, useCache = false;
|
||||||
|
int tokenCount = 10, tokenRestoreDelay = 60000;
|
||||||
|
|
||||||
const wchar_t* accept[] = { L"*/*", nullptr };
|
const wchar_t* accept[] = { L"*/*", nullptr };
|
||||||
|
|
||||||
Synchronized<std::wstring> LMTBID;
|
Synchronized<std::wstring> LMTBID;
|
||||||
@ -87,8 +90,8 @@ std::pair<bool, std::wstring> Translate(const std::wstring& text, SentenceInfo s
|
|||||||
}
|
}
|
||||||
)", ++id, r + (n - r % n), WideStringToString(translateTo->c_str()), jsonText, useContext ? WideStringToString(context->operator[](sentenceInfo["text number"])) : "");
|
)", ++id, r + (n - r % n), WideStringToString(translateTo->c_str()), jsonText, useContext ? WideStringToString(context->operator[](sentenceInfo["text number"])) : "");
|
||||||
context->insert_or_assign(sentenceInfo["text number"], L'"' + text + L'"');
|
context->insert_or_assign(sentenceInfo["text number"], L'"' + text + L'"');
|
||||||
std::wstring headers = L"Host: www2.deepl.com\r\nAccept-Language: en-US,en;q=0.5\r\nContent-type: text/plain\r\nOrigin: https://www.deepl.com\r\nTE: Trailers"
|
// missing accept-encoding header since it fucks up HttpRequest
|
||||||
+ LMTBID.Acquire().contents;
|
std::wstring headers = L"Host: www2.deepl.com\r\nAccept-Language: en-US,en;q=0.5\r\nContent-type: text/plain\r\nOrigin: https://www.deepl.com\r\nTE: Trailers" + LMTBID.Acquire().contents;
|
||||||
if (HttpRequest httpRequest{
|
if (HttpRequest httpRequest{
|
||||||
L"Mozilla/5.0 Textractor",
|
L"Mozilla/5.0 Textractor",
|
||||||
L"www2.deepl.com",
|
L"www2.deepl.com",
|
||||||
|
@ -21,8 +21,8 @@ QStringList languages
|
|||||||
"Bosnian: bs",
|
"Bosnian: bs",
|
||||||
"Bulgarian: bg",
|
"Bulgarian: bg",
|
||||||
"Catalan: ca",
|
"Catalan: ca",
|
||||||
"Chinese(Simplified): zh-CH",
|
"Chinese (simplified): zh-CH",
|
||||||
"Chinese(Traditional): zh-TW",
|
"Chinese (traditional): zh-TW",
|
||||||
"Croatian: hr",
|
"Croatian: hr",
|
||||||
"Czech: cs",
|
"Czech: cs",
|
||||||
"Danish: da",
|
"Danish: da",
|
||||||
@ -75,6 +75,9 @@ QStringList languages
|
|||||||
"Zulu: zu"
|
"Zulu: zu"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool translateSelectedOnly = false, rateLimitAll = true, rateLimitSelected = false, useCache = true;
|
||||||
|
int tokenCount = 30, tokenRestoreDelay = 60000;
|
||||||
|
|
||||||
Synchronized<std::wstring> key;
|
Synchronized<std::wstring> key;
|
||||||
|
|
||||||
unsigned TKK = 0;
|
unsigned TKK = 0;
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
extern const char* NATIVE_LANGUAGE;
|
extern const char* NATIVE_LANGUAGE;
|
||||||
extern const char* TRANSLATE_TO;
|
extern const char* TRANSLATE_TO;
|
||||||
|
extern const char* TRANSLATE_SELECTED_THREAD_ONLY;
|
||||||
extern const char* RATE_LIMIT_ALL_THREADS;
|
extern const char* RATE_LIMIT_ALL_THREADS;
|
||||||
extern const char* RATE_LIMIT_SELECTED_THREAD;
|
extern const char* RATE_LIMIT_SELECTED_THREAD;
|
||||||
extern const char* USE_TRANS_CACHE;
|
extern const char* USE_TRANS_CACHE;
|
||||||
@ -17,6 +18,8 @@ extern const wchar_t* TOO_MANY_TRANS_REQUESTS;
|
|||||||
|
|
||||||
extern const char* TRANSLATION_PROVIDER;
|
extern const char* TRANSLATION_PROVIDER;
|
||||||
extern QStringList languages;
|
extern QStringList languages;
|
||||||
|
extern bool translateSelectedOnly, rateLimitAll, rateLimitSelected, useCache;
|
||||||
|
extern int tokenCount, tokenRestoreDelay;
|
||||||
std::pair<bool, std::wstring> Translate(const std::wstring& text, SentenceInfo sentenceInfo);
|
std::pair<bool, std::wstring> Translate(const std::wstring& text, SentenceInfo sentenceInfo);
|
||||||
|
|
||||||
const char* LANGUAGE = u8"Language";
|
const char* LANGUAGE = u8"Language";
|
||||||
@ -26,8 +29,6 @@ QFormLayout* display;
|
|||||||
QSettings settings = openSettings();
|
QSettings settings = openSettings();
|
||||||
Synchronized<std::wstring> translateTo = L"en";
|
Synchronized<std::wstring> translateTo = L"en";
|
||||||
|
|
||||||
bool rateLimitAll = true, rateLimitSelected = false, useCache = true;
|
|
||||||
int tokenCount = 30, tokenRestoreDelay = 60000;
|
|
||||||
Synchronized<std::map<std::wstring, std::wstring>> translationCache;
|
Synchronized<std::map<std::wstring, std::wstring>> translationCache;
|
||||||
int savedSize;
|
int savedSize;
|
||||||
|
|
||||||
@ -61,6 +62,7 @@ public:
|
|||||||
display->addRow(TRANSLATE_TO, languageBox);
|
display->addRow(TRANSLATE_TO, languageBox);
|
||||||
connect(languageBox, &QComboBox::currentTextChanged, this, &Window::saveLanguage);
|
connect(languageBox, &QComboBox::currentTextChanged, this, &Window::saveLanguage);
|
||||||
for (auto [value, label] : Array<bool&, const char*>{
|
for (auto [value, label] : Array<bool&, const char*>{
|
||||||
|
{ translateSelectedOnly, TRANSLATE_SELECTED_THREAD_ONLY },
|
||||||
{ rateLimitAll, RATE_LIMIT_ALL_THREADS },
|
{ rateLimitAll, RATE_LIMIT_ALL_THREADS },
|
||||||
{ rateLimitSelected, RATE_LIMIT_SELECTED_THREAD },
|
{ rateLimitSelected, RATE_LIMIT_SELECTED_THREAD },
|
||||||
{ useCache, USE_TRANS_CACHE },
|
{ useCache, USE_TRANS_CACHE },
|
||||||
@ -136,9 +138,9 @@ bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo)
|
|||||||
if (useCache)
|
if (useCache)
|
||||||
{
|
{
|
||||||
auto translationCache = ::translationCache.Acquire();
|
auto translationCache = ::translationCache.Acquire();
|
||||||
if (auto it = translationCache->find(sentence); it != translationCache->end()) translation = it->second + L"\x200b";
|
if (auto it = translationCache->find(sentence); it != translationCache->end()) translation = it->second + L"\x200b"; // dumb hack to not try to translate if stored empty translation
|
||||||
}
|
}
|
||||||
if (translation.empty())
|
if (translation.empty() && (!translateSelectedOnly || sentenceInfo["current select"]))
|
||||||
if (rateLimiter.Request() || !rateLimitAll || (!rateLimitSelected && sentenceInfo["current select"])) std::tie(cache, translation) = Translate(sentence, sentenceInfo);
|
if (rateLimiter.Request() || !rateLimitAll || (!rateLimitSelected && sentenceInfo["current select"])) std::tie(cache, translation) = Translate(sentence, sentenceInfo);
|
||||||
else translation = TOO_MANY_TRANS_REQUESTS;
|
else translation = TOO_MANY_TRANS_REQUESTS;
|
||||||
if (cache) translationCache->try_emplace(sentence, translation);
|
if (cache) translationCache->try_emplace(sentence, translation);
|
||||||
|
@ -28,13 +28,14 @@ constexpr bool x64 = false;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <typename T, typename... Xs>
|
template <typename T, typename... Xs>
|
||||||
struct ArrayImpl { using type = std::tuple<T, Xs...>[]; };
|
struct ArrayImpl { using Type = std::tuple<T, Xs...>[]; };
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct ArrayImpl<T> { using type = T[]; };
|
struct ArrayImpl<T> { using Type = T[]; };
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
using Array = typename ArrayImpl<Ts...>::type;
|
using Array = typename ArrayImpl<Ts...>::Type;
|
||||||
|
|
||||||
template <auto F> using Functor = std::integral_constant<std::remove_reference_t<decltype(F)>, F>;
|
template <auto F>
|
||||||
|
using Functor = std::integral_constant<std::remove_reference_t<decltype(F)>, F>;
|
||||||
|
|
||||||
template <typename V>
|
template <typename V>
|
||||||
struct Identity { V operator()(V v) const { return v; } };
|
struct Identity { V operator()(V v) const { return v; } };
|
||||||
|
5
text.cpp
5
text.cpp
@ -130,8 +130,9 @@ const char* READ_ERROR = u8"Textractor: Reader ERROR (likely an incorrect R-code
|
|||||||
const char* HIJACK_ERROR = u8"Textractor: Hijack ERROR";
|
const char* HIJACK_ERROR = u8"Textractor: Hijack ERROR";
|
||||||
const char* COULD_NOT_FIND = u8"Textractor: could not find text";
|
const char* COULD_NOT_FIND = u8"Textractor: could not find text";
|
||||||
const char* TRANSLATE_TO = u8"Translate to";
|
const char* TRANSLATE_TO = u8"Translate to";
|
||||||
|
const char* TRANSLATE_SELECTED_THREAD_ONLY = u8"Translate selected text thread only";
|
||||||
const char* RATE_LIMIT_ALL_THREADS = u8"Rate limit all text threads";
|
const char* RATE_LIMIT_ALL_THREADS = u8"Rate limit all text threads";
|
||||||
const char* RATE_LIMIT_SELECTED_THREAD = u8"Rate limit currently selected text thread";
|
const char* RATE_LIMIT_SELECTED_THREAD = u8"Rate limit selected text thread";
|
||||||
const char* USE_TRANS_CACHE = u8"Use translation cache";
|
const char* USE_TRANS_CACHE = u8"Use translation cache";
|
||||||
const char* RATE_LIMIT_TOKEN_COUNT = u8"Rate limiter token count";
|
const char* RATE_LIMIT_TOKEN_COUNT = u8"Rate limiter token count";
|
||||||
const char* RATE_LIMIT_TOKEN_RESTORE_DELAY = u8"Rate limiter token restore delay (ms)";
|
const char* RATE_LIMIT_TOKEN_RESTORE_DELAY = u8"Rate limiter token restore delay (ms)";
|
||||||
@ -308,7 +309,7 @@ Clic y arrastra los bordes de la ventana para moverla, o en la esquina inferior
|
|||||||
#endif // SPANISH
|
#endif // SPANISH
|
||||||
|
|
||||||
#ifdef SIMPLIFIED_CHINESE
|
#ifdef SIMPLIFIED_CHINESE
|
||||||
NATIVE_LANGUAGE = "Chinese (Simplified)";
|
NATIVE_LANGUAGE = "Chinese (simplified)";
|
||||||
ATTACH = u8"附加到游戏";
|
ATTACH = u8"附加到游戏";
|
||||||
LAUNCH = u8"启动游戏";
|
LAUNCH = u8"启动游戏";
|
||||||
DETACH = u8"从游戏分离";
|
DETACH = u8"从游戏分离";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user