@@ -25,11 +25,12 @@ extern const wchar_t* TOO_MANY_TRANS_REQUESTS;
25
25
extern const char * TRANSLATION_PROVIDER;
26
26
extern const char * GET_API_KEY_FROM;
27
27
extern const QStringList languagesTo, languagesFrom;
28
+ extern const std::unordered_map<std::wstring, std::wstring> codes;
28
29
extern bool translateSelectedOnly, rateLimitAll, rateLimitSelected, useCache, useFilter;
29
30
extern int tokenCount, rateLimitTimespan, maxSentenceSize;
30
31
std::pair<bool , std::wstring> Translate (const std::wstring& text, TranslationParam tlp);
31
32
32
- const std::string TRANSLATION_CACHE_FILE = FormatString(" %s Translation Cache.txt" , TRANSLATION_PROVIDER);
33
+ std::string TRANSLATION_CACHE_FILE = FormatString(" %s Translation Cache.txt" , TRANSLATION_PROVIDER);
33
34
34
35
QFormLayout* display;
35
36
Settings settings;
@@ -47,6 +48,19 @@ namespace
47
48
std::ofstream (TRANSLATION_CACHE_FILE, std::ios::binary | std::ios::trunc ).write ((const char *)allTranslations.c_str (), allTranslations.size () * sizeof (wchar_t ));
48
49
savedSize = translationCache->size ();
49
50
}
51
+ void LoadCache ()
52
+ {
53
+ translationCache->clear ();
54
+ std::ifstream stream (TRANSLATION_CACHE_FILE, std::ios::binary);
55
+ BlockMarkupIterator savedTranslations (stream, Array<std::wstring_view>{ L" |SENTENCE|" , L" |TRANSLATION|" });
56
+ auto translationCache = ::translationCache.Acquire ();
57
+ while (auto read = savedTranslations.Next ())
58
+ {
59
+ auto & [sentence, translation] = read .value ();
60
+ translationCache->try_emplace (std::move (sentence), std::move (translation));
61
+ }
62
+ savedSize = translationCache->size ();
63
+ }
50
64
}
51
65
52
66
class Window : public QDialog , Localizer
@@ -117,16 +131,6 @@ class Window : public QDialog, Localizer
117
131
118
132
setWindowTitle (TRANSLATION_PROVIDER);
119
133
QMetaObject::invokeMethod (this , &QWidget::show, Qt::QueuedConnection);
120
-
121
- std::ifstream stream (TRANSLATION_CACHE_FILE, std::ios::binary);
122
- BlockMarkupIterator savedTranslations (stream, Array<std::wstring_view>{ L" |SENTENCE|" , L" |TRANSLATION|" });
123
- auto translationCache = ::translationCache.Acquire ();
124
- while (auto read = savedTranslations.Next ())
125
- {
126
- auto & [sentence, translation] = read .value ();
127
- translationCache->try_emplace (std::move (sentence), std::move (translation));
128
- }
129
- savedSize = translationCache->size ();
130
134
}
131
135
132
136
~Window ()
@@ -138,6 +142,9 @@ class Window : public QDialog, Localizer
138
142
void SaveTranslateTo (QString language)
139
143
{
140
144
settings.setValue (TRANSLATE_TO, S (tlp->translateTo = S (language)));
145
+ if (translationCache->size () > savedSize) SaveCache ();
146
+ TRANSLATION_CACHE_FILE = FormatString (" %s Translation Cache (%ls).txt" , TRANSLATION_PROVIDER, codes.at (S (language)));
147
+ LoadCache ();
141
148
}
142
149
void SaveTranslateFrom (QString language)
143
150
{
0 commit comments