fix: Fix detect language

It perhaps no variant for a keyboard's layout, set a default value in order to continue detect local language.

Log: Fix detect language.
This commit is contained in:
re2zero
2025-01-23 17:21:16 +08:00
committed by Chris Rizzitello
parent 30263f3c70
commit cc4701a0c2

View File

@ -115,11 +115,6 @@ void X11LayoutsParser::convertLayoutToISO639_2(
const std::vector<std::string> &layoutVariantNames, std::vector<std::string> &iso639_2Codes
)
{
if (layoutNames.size() != layoutVariantNames.size()) {
LOG((CLOG_WARN "error in language layout or language layout variants list"));
return;
}
static std::vector<X11LayoutsParser::Lang> allLang;
if (allLang.empty() || needToReloadEvdev) {
allLang = getAllLanguageData(pathToEvdevFile);
@ -134,27 +129,31 @@ void X11LayoutsParser::convertLayoutToISO639_2(
}
const std::vector<std::string> *toCopy = nullptr;
if (layoutVariantNames[i].empty()) {
toCopy = &langIter->layoutBaseISO639_2;
} else {
const auto &variantName = layoutVariantNames[i];
auto langVariantIter =
std::find_if(langIter->variants.begin(), langIter->variants.end(), [&variantName](const Lang &l) {
return l.name == variantName;
});
if (langVariantIter == langIter->variants.end()) {
LOG(
(CLOG_WARN "variant \"%s\" of language \"%s\" is unknown", layoutVariantNames[i].c_str(),
layoutNames[i].c_str())
);
continue;
}
if (langVariantIter->layoutBaseISO639_2.empty()) {
if (i < layoutVariantNames.size()) {
if (layoutVariantNames[i].empty()) {
toCopy = &langIter->layoutBaseISO639_2;
} else {
toCopy = &langVariantIter->layoutBaseISO639_2;
const auto &variantName = layoutVariantNames[i];
auto langVariantIter =
std::find_if(langIter->variants.begin(), langIter->variants.end(), [&variantName](const Lang &l) {
return l.name == variantName;
});
if (langVariantIter == langIter->variants.end()) {
LOG(
(CLOG_WARN "variant \"%s\" of language \"%s\" is unknown", layoutVariantNames[i].c_str(),
layoutNames[i].c_str())
);
continue;
}
if (langVariantIter->layoutBaseISO639_2.empty()) {
toCopy = &langIter->layoutBaseISO639_2;
} else {
toCopy = &langVariantIter->layoutBaseISO639_2;
}
}
} else {
toCopy = &langIter->layoutBaseISO639_2;
}
if (toCopy) {