diff --git a/ba/ba2700.cpp b/ba/ba2700.cpp
index 7cf9a7899..4976d68ef 100755
--- a/ba/ba2700.cpp
+++ b/ba/ba2700.cpp
@@ -146,25 +146,32 @@ bool TDictionary::read(const char* fname)
if (line.starts_with(""))
{
const int eoi = line.find("");
- ita = xml2txt(line.sub(5, eoi));
+
+ ita = xml2txt(line.sub(5, eoi));
} else
if (line.starts_with("") && ita.not_empty())
{
const int eoe = line.find("");
- const TString& eng = xml2txt(line.sub(5, eoe));
- set_translation(ita, eng);
+ TString& eng = xml2txt(line.sub(5, eoe));
+
+ if (eng.blank())
+ set_translation(ita, "???");
+ else
+ set_translation(ita, eng.trim());
}
if (line.starts_with("") && ita.not_empty())
{
const int eom = line.find("");
const int len = atoi(line.sub(5, eom));
- update_max_length(ita, len);
+
+ update_max_length(ita, len);
}
if (line.starts_with("") && ita.not_empty())
{
TDictionary_entry& entry = get_entry(ita);
const int eos = line.find("");
- entry.set_sources(xml2txt(line.sub(5, eos)));
+
+ entry.set_sources(xml2txt(line.sub(5, eos)));
}
}
_save_needed = false;
@@ -656,8 +663,6 @@ bool TDictionary_mask::check_translation(const TString & ita, const TString & en
bool TDictionary_mask::good_translation(const TString & ita, const TString & eng, const TString & src)
{
- if (eng == "???")
- return false;
if (ita.find('#') >= 0 || eng.find('#') >= 0)
return false;
if (ita.find('&') >= 0 || eng.find('&') >= 0)
@@ -681,23 +686,36 @@ void TDictionary_mask::fill_chapter()
for (int i = 0; i < ref.items(); i++)
{
const TDictionary_entry& e = (const TDictionary_entry&)ref[i];
+
if (toupper(e._ita[0]) == letter)
{
const bool good = good_translation(e._ita, e._eng, e._src);
+ const bool translated = e._eng != "???";
+ const bool not_error = good || translated;
+
if (_filtered)
{
- if (_errors && good)
- continue;
-
bool skip = false;
+ if (_errors)
+ skip |= !chk_modules && good && translated;
+ else
+ skip |= !good;
if (_new)
- skip = !_errors && e._eng != "???";
+ {
+ if (_errors)
+ skip |= !chk_modules && good && translated;
+ else
+ skip |= !chk_modules && translated;
+ }
+ else
+ skip |= !translated;
if (!skip && chk_modules)
{
FOR_EACH_TOKEN(_modules, m)
{
const int p = e._src.find(m);
+
skip = p < 0 || (p > 0 && e._src[p - 1] != ',' && e._src[p] != '.');
if (!skip)
break;
@@ -711,10 +729,10 @@ void TDictionary_mask::fill_chapter()
row.add(e._eng);
row.add(e._max_length);
row.add(e._src);
- if (good)
- s.set_back_and_fore_color(NORMAL_BACK_COLOR, NORMAL_COLOR, s.items() - 1);
- else
+ if (!good || !translated)
s.set_back_and_fore_color(REQUIRED_BACK_COLOR, COLOR_RED, s.items() - 1);
+ else
+ s.set_back_and_fore_color(NORMAL_BACK_COLOR, NORMAL_COLOR, s.items() - 1);
}
}
s.force_update();
@@ -794,7 +812,7 @@ bool TDictionary_mask::on_field_event(TOperable_field& o, TField_event e, long j
_dictionary.set_translation(ita, eng);
if (len > 0 && eng.len() > len)
warning_box("La traduzione e' lunga %d caratteri (max. %d)!", eng.len(), len);
- if (!good_translation(ita, eng, src))
+ if (!good_translation(ita, eng, src) || eng == "???")
s.set_back_and_fore_color(REQUIRED_BACK_COLOR, COLOR_RED, jolly);
else
s.set_back_and_fore_color(NORMAL_BACK_COLOR, NORMAL_COLOR, jolly);