moved language strings to json file

(don't forget to place languages.json in the file partition)
This commit is contained in:
Nic Limper
2023-12-31 17:26:17 +01:00
parent ab8cb3955a
commit 43fd751d1e
8 changed files with 106 additions and 103 deletions

View File

@@ -0,0 +1,56 @@
{
"0": {
"language": "en",
"daysShort": ["SU", "MO", "TU", "WE", "TH", "FR", "SA"],
"days": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
"months": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
},
"1": {
"language": "nl",
"daysShort": ["ZO", "MA", "DI", "WO", "DO", "VR", "ZA"],
"days": ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
"months": ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"]
},
"2": {
"language": "de",
"daysShort": ["SO", "MO", "DI", "MI", "DO", "FR", "SA"],
"days": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
"months": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
},
"3": {
"language": "no",
"daysShort": ["SØ", "MA", "TI", "ON", "TO", "FR", "LØ"],
"days": ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"],
"months": ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"]
},
"5": {
"language": "cz",
"daysShort": ["NE", "PO", "ÚT", "ST", "ČT", "PÁ", "SO"],
"days": ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"],
"months": ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"]
},
"6": {
"language": "sk",
"daysShort": ["NE", "PO", "UT", "ST", "ŠT", "PI", "SO"],
"days": ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"],
"months": ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Oktober", "November", "December"]
},
"7": {
"language": "pl",
"daysShort": ["Ni", "Po", "Wt", "Śr", "Cz", "Pt", "So"],
"days": ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"],
"months": ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"]
},
"8": {
"language": "es",
"daysShort": ["D", "L", "MA", "MI", "J", "V", "S"],
"days": ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"],
"months": ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]
},
"4": {
"language": "fr",
"daysShort": ["DI", "LU", "MA", "ME", "JE", "VE", "SA"],
"days": ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
"months": ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"]
}
}

View File

@@ -12,5 +12,5 @@
"shortlut": 0,
"options": ["button", "customlut"],
"contentids": [ 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21 ],
"usetemplate": 1,
"usetemplate": 1
}

View File

@@ -14,5 +14,5 @@
"shortlut": 0,
"options": ["button", "led"],
"contentids": [ 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 17, 18, 19, 20],
"usetemplate": 31
"usetemplate": 1
}

View File

@@ -2,30 +2,8 @@
#include <Arduino.h>
extern int defaultLanguage;
/*EN English language section*/
extern String languageEnDaysShort[];
extern String languageEnDays[];
extern String languageEnMonth[];
/*END English language section END*/
/*NL Dutch language section*/
extern String languageNlDaysShort[];
extern String languageNlDays[];
extern String languageNlMonth[];
/*END Dutch language section END*/
/*DE German language section*/
extern String languageDeDaysShort[];
extern String languageDeDays[];
extern String languageDeMonth[];
/*END German language section END*/
extern String* languageDaysShort[];
extern String* languageDays[];
extern String* languageMonth[];
extern String languageDaysShort[7];
extern String languageDays[7];
extern String languageMonth[12];
extern void updateLanguageFromConfig();
extern int getDefaultLanguage();
extern int getCurrentLanguage();

View File

@@ -624,7 +624,7 @@ void drawDate(String &filename, tagRecord *&taginfo, imgParam &imageParams) {
const int year_number = timeinfo.tm_year + 1900;
if (taginfo->hwType == SOLUM_SEG_UK) {
sprintf(imageParams.segments, "%2d%2d%-2.2s%04d", timeinfo.tm_mday, month_number + 1, languageDays[getCurrentLanguage()][timeinfo.tm_wday], year_number);
sprintf(imageParams.segments, "%2d%2d%-2.2s%04d", timeinfo.tm_mday, month_number + 1, languageDays[timeinfo.tm_wday], year_number);
imageParams.symbols = 0x04;
return;
}
@@ -638,14 +638,14 @@ void drawDate(String &filename, tagRecord *&taginfo, imgParam &imageParams) {
const auto &date = loc["date"];
const auto &weekday = loc["weekday"];
if (date) {
drawString(spr, languageDays[getCurrentLanguage()][timeinfo.tm_wday], weekday[0], weekday[1], weekday[2], TC_DATUM, TFT_RED);
drawString(spr, String(timeinfo.tm_mday) + " " + languageMonth[getCurrentLanguage()][timeinfo.tm_mon], date[0], date[1], date[2], TC_DATUM);
drawString(spr, languageDays[timeinfo.tm_wday], weekday[0], weekday[1], weekday[2], TC_DATUM, TFT_RED, weekday[3]);
drawString(spr, String(timeinfo.tm_mday) + " " + languageMonth[timeinfo.tm_mon], date[0], date[1], date[2], TC_DATUM, TFT_BLACK, date[3]);
} else {
const auto &month = loc["month"];
const auto &day = loc["day"];
drawString(spr, languageDays[getCurrentLanguage()][timeinfo.tm_wday], weekday[0], weekday[1], weekday[2], TC_DATUM, TFT_BLACK);
drawString(spr, String(languageMonth[getCurrentLanguage()][timeinfo.tm_mon]), month[0], month[1], month[2], TC_DATUM);
drawString(spr, String(timeinfo.tm_mday), day[0], day[1], day[2], TC_DATUM, TFT_RED);
drawString(spr, languageDays[timeinfo.tm_wday], weekday[0], weekday[1], weekday[2], TC_DATUM, TFT_BLACK, weekday[3]);
drawString(spr, String(languageMonth[timeinfo.tm_mon]), month[0], month[1], month[2], TC_DATUM, TFT_BLACK, month[3]);
drawString(spr, String(timeinfo.tm_mday), day[0], day[1], day[2], TC_DATUM, TFT_RED, day[3]);
}
spr2buffer(spr, filename, imageParams);
@@ -838,7 +838,7 @@ void drawForecast(String &filename, JsonObject &cfgobj, const tagRecord *taginfo
const time_t weatherday = (daily["time"][dag].as<time_t>() + utc_offset);
const struct tm *datum = localtime(&weatherday);
drawString(spr, String(languageDaysShort[getCurrentLanguage()][datum->tm_wday]), dag * column1 + day[0].as<int>(), day[1], day[2], TC_DATUM, TFT_BLACK);
drawString(spr, String(languageDaysShort[datum->tm_wday]), dag * column1 + day[0].as<int>(), day[1], day[2], TC_DATUM, TFT_BLACK);
uint8_t weathercode = daily["weathercode"][dag].as<int>();
if (weathercode > 40) weathercode -= 40;

View File

@@ -1,71 +1,18 @@
#include "language.h"
#include <Arduino.h>
#include <ArduinoJson.h>
#include <FS.h>
#include "settings.h"
#include "storage.h"
#include "tag_db.h"
int defaultLanguage = 0;
String languageDaysShort[7];
String languageDays[7];
String languageMonth[12];
/*EN English language section*/
String languageEnDaysShort[] = {"SU", "MO", "TU", "WE", "TH", "FR", "SA"};
String languageEnDays[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
String languageEnMonth[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
/*END English language section END*/
/*NL Dutch language section*/
String languageNlDaysShort[] = {"ZO", "MA", "DI", "WO", "DO", "VR", "ZA"};
String languageNlDays[] = {"zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"};
String languageNlMonth[] = {"januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"};
/*END Dutch language section END*/
/*DE German language section*/
String languageDeDaysShort[] = {"SO", "MO", "DI", "MI", "DO", "FR", "SA"};
String languageDeDays[] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};
String languageDeMonth[] = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"};
/*END German language section END*/
/*NO Norwegian language section*/
String languageNoDaysShort[] = {"", "MA", "TI", "ON", "TO", "FR", ""};
String languageNoDays[] = {"Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"};
String languageNoMonth[] = {"Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"};
/*END Norwegian language section END*/
/*CZ Czech language section*/
String languageCzDaysShort[] = {"NE", "PO", "ÚT", "ST", "ČT", "", "SO"};
String languageCzDays[] = {"Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"};
String languageCzMonth[] = {"Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"};
/*END Czech language section END*/
/*SK Slovak language section*/
String languageSkDaysShort[] = {"NE", "PO", "UT", "ST", "ŠT", "PI", "SO"};
String languageSkDays[] = {"Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"};
String languageSkMonth[] = {"Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Oktober", "November", "December"};
/*END Slovak language section END*/
/*PL Polish language section*/
String languagePlDaysShort[] = {"Ni", "Po", "Wt", "Śr", "Cz", "Pt", "So"};
String languagePlDays[] = {"Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"};
String languagePlMonth[] = {"Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"};
/*END Polish language section END*/
/*ES Spanish language section*/
String languageEsDaysShort[] = {"D", "L", "MA", "MI", "J", "V", "S"};
String languageEsDays[] = {"Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"};
String languageEsMonth[] = {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};
/*END Spanish language section END*/
/*FR French language section*/
String languageFrDaysShort[] = {"DI", "LU", "MA", "ME", "JE", "VE", "SA"};
String languageFrDays[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
String languageFrMonth[] = {"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"};
/*END French language section END*/
String* languageDaysShort[] = {languageEnDaysShort, languageNlDaysShort, languageDeDaysShort, languageNoDaysShort, languageFrDaysShort, languageCzDaysShort, languageSkDaysShort, languagePlDaysShort, languageEsDaysShort};
String* languageDays[] = {languageEnDays, languageNlDays, languageDeDays, languageNoDays, languageFrDays, languageCzDays, languageSkDays, languagePlDays, languageEsDays};
String* languageMonth[] = {languageEnMonth, languageNlMonth, languageDeMonth, languageNoMonth, languageFrMonth, languageCzMonth, languageSkMonth, languagePlMonth, languageEsMonth};
int currentLanguage = defaultLanguage;
int currentLanguage = 0;
void updateLanguageFromConfig() {
int tempLang = config.language;
@@ -74,12 +21,30 @@ void updateLanguageFromConfig() {
return;
}
currentLanguage = tempLang;
File file = contentFS->open("/languages.json", "r");
if (!file) {
Serial.println("Failed to open languages.json file");
return;
}
DynamicJsonDocument doc(1024);
StaticJsonDocument<80> filter;
filter[String(currentLanguage)] = true;
const DeserializationError error = deserializeJson(doc, file, DeserializationOption::Filter(filter));
file.close();
if (error) {
Serial.print("Failed to parse JSON: ");
Serial.println(error.c_str());
return;
}
JsonObject languageObject = doc[String(currentLanguage)];
for (int i = 0; i < 7; ++i) {
languageDaysShort[i] = languageObject["daysShort"][i].as<String>();
languageDays[i] = languageObject["days"][i].as<String>();
}
for (int i = 0; i < 12; ++i) {
languageMonth[i] = languageObject["months"][i].as<String>();
}
}
int getDefaultLanguage() {
return defaultLanguage;
}
int getCurrentLanguage() {
return currentLanguage;
}

View File

@@ -134,8 +134,12 @@ void saveDB(const String& filename) {
fs::File existingFile = contentFS->open(filename, "r");
if (existingFile) {
existingFile.close();
vTaskDelay(pdMS_TO_TICKS(100));
String backupFilename = filename + ".bak";
contentFS->rename(filename.c_str(), backupFilename.c_str());
if (!contentFS->rename(filename.c_str(), backupFilename.c_str())) {
logLine("error renaming tagDB to .bak");
wsErr("error renaming tagDB to .bak");
}
}
fs::File file = contentFS->open(filename, "w");
@@ -317,7 +321,7 @@ void initAPconfig() {
if (APconfig["alias"]) strlcpy(config.alias, APconfig["alias"], sizeof(config.alias));
config.led = APconfig["led"] | 255;
config.tft = APconfig["tft"] | 255;
config.language = APconfig["language"] | getDefaultLanguage();
config.language = APconfig["language"] | 0;
config.maxsleep = APconfig["maxsleep"] | 10;
config.stopsleep = APconfig["stopsleep"] | 1;
config.preview = APconfig["preview"] | 1;