feat: add a separate setting for selecting 'text language' when ALL_LANGS is set (#6960)

This commit is contained in:
philmoz
2026-01-08 12:34:22 +10:00
committed by GitHub
parent a3ccc87a88
commit 4f90a5e426
60 changed files with 352 additions and 95 deletions
+25 -7
View File
@@ -99,7 +99,10 @@ enum {
CASE_GPS(ITEM_RADIO_SETUP_ADJUST_RTC)
CASE_GPS(ITEM_RADIO_SETUP_GPSFORMAT)
CASE_PXX1(ITEM_RADIO_SETUP_COUNTRYCODE)
ITEM_RADIO_SETUP_LANGUAGE,
ITEM_RADIO_SETUP_VOICE_LANGUAGE,
#if defined(ALL_LANGS)
ITEM_RADIO_SETUP_TEXT_LANGUAGE,
#endif
ITEM_RADIO_SETUP_IMPERIAL,
ITEM_RADIO_SETUP_PPM,
IF_FAI_CHOICE(ITEM_RADIO_SETUP_FAI)
@@ -238,6 +241,9 @@ void menuRadioSetup(event_t event)
CASE_GPS(0)
CASE_PXX1(0)
0, 0, 0,
#if defined(ALL_LANGS)
0, // text language
#endif
IF_FAI_CHOICE(0)
0,
0, // USB mode
@@ -708,7 +714,7 @@ void menuRadioSetup(event_t event)
break;
#endif
case ITEM_RADIO_SETUP_LANGUAGE:
case ITEM_RADIO_SETUP_VOICE_LANGUAGE:
lcdDrawTextAlignedLeft(y, STR_VOICE_LANGUAGE);
#if !defined(ALL_LANGS)
lcdDrawText(LCD_W-2, y, currentLanguagePack->name, attr|RIGHT);
@@ -720,15 +726,27 @@ void menuRadioSetup(event_t event)
if (checkIncDec_Ret) {
currentLanguagePack = languagePacks[currentLanguagePackIdx];
strncpy(g_eeGeneral.ttsLanguage, currentLanguagePack->id, 2);
#if defined(ALL_LANGS)
currentLangStrings = langStrings[currentLanguagePackIdx];
extern void setLanguageFont(int n);
setLanguageFont(currentLanguagePackIdx);
#endif
}
}
break;
#if defined(ALL_LANGS)
case ITEM_RADIO_SETUP_TEXT_LANGUAGE:
lcdDrawTextAlignedLeft(y, STR_TEXT_LANGUAGE);
lcdDrawText(LCD_W-2, y, languagePacks[getLanguageId(g_eeGeneral.uiLanguage)]->name(), attr|RIGHT);
if (attr) {
int textLangId = checkIncDec(event, getLanguageId(g_eeGeneral.uiLanguage), 0, DIM(languagePacks)-2, EE_GENERAL, isTextLangAvail);
if (checkIncDec_Ret) {
currentLanguagePack = languagePacks[currentLanguagePackIdx];
strncpy(g_eeGeneral.uiLanguage, languagePacks[textLangId]->id, 2);
currentLangStrings = langStrings[textLangId];
extern void setLanguageFont(int n);
setLanguageFont(textLangId);
}
}
break;
#endif
case ITEM_RADIO_SETUP_IMPERIAL:
g_eeGeneral.imperial = editChoice(LCD_W-2, y, STR_UNITS_SYSTEM, STR_VUNITSSYSTEM, g_eeGeneral.imperial, 0, 1, attr|RIGHT, event);
break;
+25 -7
View File
@@ -98,7 +98,10 @@ enum MenuRadioSetupItems {
CASE_GPS(ITEM_RADIO_SETUP_ADJUST_RTC)
CASE_GPS(ITEM_RADIO_SETUP_GPSFORMAT)
CASE_PXX1(ITEM_RADIO_SETUP_COUNTRYCODE)
ITEM_RADIO_SETUP_LANGUAGE,
ITEM_RADIO_SETUP_VOICE_LANGUAGE,
#if defined(ALL_LANGS)
ITEM_RADIO_SETUP_TEXT_LANGUAGE,
#endif
ITEM_RADIO_SETUP_IMPERIAL,
ITEM_RADIO_SETUP_PPM,
IF_FAI_CHOICE(ITEM_RADIO_SETUP_FAI)
@@ -238,6 +241,9 @@ void menuRadioSetup(event_t event)
CASE_GPS(0)
CASE_PXX1(0) // country code
0, // voice language
#if defined(ALL_LANGS)
0, // text language
#endif
0, // imperial
0, // PPM unit
IF_FAI_CHOICE(0)
@@ -679,7 +685,7 @@ void menuRadioSetup(event_t event)
break;
#endif
case ITEM_RADIO_SETUP_LANGUAGE:
case ITEM_RADIO_SETUP_VOICE_LANGUAGE:
lcdDrawTextAlignedLeft(y, STR_VOICE_LANGUAGE);
#if !defined(ALL_LANGS)
lcdDrawText(RADIO_SETUP_2ND_COLUMN, y, currentLanguagePack->name, attr);
@@ -691,15 +697,27 @@ void menuRadioSetup(event_t event)
if (checkIncDec_Ret) {
currentLanguagePack = languagePacks[currentLanguagePackIdx];
strncpy(g_eeGeneral.ttsLanguage, currentLanguagePack->id, 2);
#if defined(ALL_LANGS)
currentLangStrings = langStrings[currentLanguagePackIdx];
extern void setLanguageFont(int n);
setLanguageFont(currentLanguagePackIdx);
#endif
}
}
break;
#if defined(ALL_LANGS)
case ITEM_RADIO_SETUP_TEXT_LANGUAGE:
lcdDrawTextAlignedLeft(y, STR_TEXT_LANGUAGE);
lcdDrawText(RADIO_SETUP_2ND_COLUMN, y, languagePacks[getLanguageId(g_eeGeneral.uiLanguage)]->name(), attr);
if (attr) {
int textLangId = checkIncDec(event, getLanguageId(g_eeGeneral.uiLanguage), 0, DIM(languagePacks)-2, EE_GENERAL, isTextLangAvail);
if (checkIncDec_Ret) {
currentLanguagePack = languagePacks[currentLanguagePackIdx];
strncpy(g_eeGeneral.uiLanguage, languagePacks[textLangId]->id, 2);
currentLangStrings = langStrings[textLangId];
extern void setLanguageFont(int n);
setLanguageFont(textLangId);
}
}
break;
#endif
case ITEM_RADIO_SETUP_IMPERIAL:
g_eeGeneral.imperial = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_UNITS_SYSTEM, STR_VUNITSSYSTEM, g_eeGeneral.imperial, 0, 1, attr, event);
break;
+38 -13
View File
@@ -852,19 +852,6 @@ static SetupLineDef setupLines[] = {
currentLanguagePack = languagePacks[currentLanguagePackIdx];
strncpy(g_eeGeneral.ttsLanguage, currentLanguagePack->id, 2);
SET_DIRTY();
#if defined(ALL_LANGS)
currentLangStrings = langStrings[currentLanguagePackIdx];
extern void setLanguageFont(int idx);
setLanguageFont(currentLanguagePackIdx);
PageGroup* pg = (PageGroup*)Layer::getPageGroup();
coord_t y = pg->getScrollY();
pg->onCancel();
QuickMenu::openPage(QM_RADIO_SETUP);
pg = (PageGroup*)Layer::getPageGroup();
pg->setScrollY(y);
// Force QM rebuild for language change
QuickMenu::shutdownQuickMenu();
#endif
});
#if !defined(ALL_LANGS)
choice->setTextHandler(
@@ -884,6 +871,44 @@ static SetupLineDef setupLines[] = {
#endif
}
},
#if defined(ALL_LANGS)
{
// UI language
STR_DEF(STR_TEXT_LANGUAGE),
[](Window* parent, coord_t x, coord_t y) {
auto choice =
new Choice(parent, {x, y, 0, 0}, 0, DIM(languagePacks) - 2,
GET_VALUE(getLanguageId(g_eeGeneral.uiLanguage)),
[](uint8_t newValue) {
strncpy(g_eeGeneral.uiLanguage, languagePacks[newValue]->id, 2);
currentLangStrings = langStrings[newValue];
extern void setLanguageFont(int idx);
setLanguageFont(newValue);
PageGroup* pg = (PageGroup*)Layer::getPageGroup();
coord_t y = pg->getScrollY();
pg->onCancel();
QuickMenu::openPage(QM_RADIO_SETUP);
pg = (PageGroup*)Layer::getPageGroup();
pg->setScrollY(y);
// Force QM rebuild for language change
QuickMenu::shutdownQuickMenu();
SET_DIRTY();
});
choice->setAvailableHandler([=](int n) { return isTextLangAvail(n); });
choice->setTextHandler(
[](uint8_t value) {
// TODO: language name should always be in the language of the name, not
// the current UI language. Needs translation characters to be
// always available for all language names in the base font.
// temp solution - prepend language id to name.
std::string s(languagePacks[value]->id);
s += " - ";
s += languagePacks[value]->name();
return s;
});
}
},
#endif
{
// Imperial units
STR_DEF(STR_UNITS_SYSTEM),