/* * translate.c * * Created on: Feb 12, 2022 * Author: Brian.Bailey */ #include #include #include #include "System/system.h" #include "languages.h" #include "translate.h" //Language names (in the language) const char *languageNames[] = { "English", //English "Español", //Spanish "Français", //French "Deutsch", //German "Italiano", //Italian "Polski", //Polish "Nederlands", //Dutch "Português", //Portuguese "Русский", //Russian "Svenska", //Swedish "Dansk", //Danish "Eesti", //Estonian "Latviski", //Latvian "Lietuvių kalba", //Lithuanian "Čeština", //Czech "Suomi", //Finnish "Ελληνικά", //Greek "Norsk", //Norwegian "Magyar", //Hungarian "Română", //Romanian "简体中文", //Chinese "한국어", //Korean }; const char* Translate(const char *input) { //find the index of the input string in textEnglish[] int16_t low = 0; int16_t high = NUM_TRANSLATION_STRINGS - 1; int16_t mid; int16_t compare; //result of strcmp() int16_t index; //index of the input string in textEnglish[] bool done = false; const char *translatedString; //bisection algorithm while ((low <= high) && !done) { mid = (low + high) / 2; compare = strcmp(input, textEnglish[mid]); if (compare == 0) //strings match { done = true; } else if (compare < 0) //correct string is "lower" than result { high = mid - 1; } else //correct string is "higher" than result { low = mid + 1; } } index = mid; if (done == false) //string not found in array { translatedString = input; //return the input string (no translation) } else { switch (SYS_GetLanguage()) //language currently used { case LANG_SPANISH: translatedString = textSpanish[index]; break; case LANG_FRENCH: translatedString = textFrench[index]; break; case LANG_GERMAN: translatedString = textGerman[index]; break; case LANG_ITALIAN: translatedString = textItalian[index]; break; case LANG_POLISH: translatedString = textPolish[index]; break; case LANG_DUTCH: translatedString = textDutch[index]; break; case LANG_PORTUGUESE: translatedString = textPortuguese[index]; break; case LANG_RUSSIAN: translatedString = textRussian[index]; break; case LANG_SWEDISH: translatedString = textSwedish[index]; break; case LANG_DANISH: translatedString = textDanish[index]; break; case LANG_ESTONIAN: translatedString = textEstonian[index]; break; case LANG_LATVIAN: translatedString = textLatvian[index]; break; case LANG_LITHUANIAN: translatedString = textLithuanian[index]; break; case LANG_CZECH: translatedString = textCzech[index]; break; case LANG_FINNISH: translatedString = textFinnish[index]; break; case LANG_GREEK: translatedString = textGreek[index]; break; case LANG_NORWEGIAN: translatedString = textNorwegian[index]; break; case LANG_HUNGARIAN: translatedString = textHungarian[index]; break; case LANG_ROMANIAN: translatedString = textRomanian[index]; break; case LANG_CHINESE: translatedString = textChinese[index]; break; case LANG_KOREAN: translatedString = textKorean[index]; break; default: translatedString = textEnglish[index]; break; } } return translatedString; } #if 0 //returns the index of the input string in textEnglish[] //returns -1 if input string not found uint16_t GetTranslationIndex(const char *input) { int16_t low = 0; int16_t high = NUM_TRANSLATION_STRINGS - 1; int16_t mid; int16_t compare; bool done = false; //bisection algorithm while ((low <= high) && !done) { mid = (low + high) / 2; compare = strcmp(input, textEnglish[mid]); if (compare == 0) //strings match { done = true; } else if (compare < 0) //correct string is "lower" than result { high = mid - 1; } else //correct string is "higher" than result { low = mid + 1; } } int16_t retval = mid; if (done == false) //string not found in array { retval = -1; } return retval; } #endif