Skip to main content

Locale API

The Locale API provides multi-language support with localized strings for the BlueBus user interface.

Supported languages

BlueBus supports 9 languages:
LanguageCode
English0
German1
French2
Italian3
Spanish4
Polish5
Russian6
Swedish7
Ukrainian8
The active language is stored in EEPROM at address CONFIG_SETTING_LANGUAGE_ADDRESS and can be changed through the vehicle menu system.

Functions

LocaleGetText

Returns localized text string for the current language.
char * LocaleGetText(uint16_t stringId);
stringId
uint16_t
String identifier constant (see String IDs below)
returns
char *
Pointer to localized string in current language
Example:
// Get localized "Settings" text
char *settingsText = LocaleGetText(LOCALE_STRING_SETTINGS);

// Display on UI
BMBTHeaderWriteText(bmbt, settingsText);

String IDs

String identifiers for localized text:
LOCALE_STRING_MAIN_MENU           // "Main Menu"
LOCALE_STRING_MENU_MAIN           // "Main"
LOCALE_STRING_MENU_DASHBOARD      // "Dashboard"
LOCALE_STRING_BACK                // "Back"
LOCALE_STRING_SETTINGS            // "Settings"
LOCALE_STRING_ABOUT               // "About"

Settings categories

LOCALE_STRING_SETTINGS_ABOUT      // "About"
LOCALE_STRING_SETTINGS_AUDIO      // "Audio Settings"
LOCALE_STRING_SETTINGS_CALLING    // "Calling Settings"
LOCALE_STRING_SETTINGS_COMFORT    // "Comfort Settings"
LOCALE_STRING_SETTINGS_UI         // "UI Settings"
LOCALE_STRING_SETTINGS_TIME       // "Time Settings"
LOCALE_STRING_SETTINGS_NAV        // "Navigation Settings"

Bluetooth and audio

LOCALE_STRING_BLUETOOTH           // "Bluetooth"
LOCALE_STRING_AUDIO               // "Audio"
LOCALE_STRING_DEVICES             // "Devices"
LOCALE_STRING_NO_DEVICE           // "No Device"
LOCALE_STRING_CLEAR_PAIRINGS      // "Clear Pairings"
LOCALE_STRING_PAIRING_OFF         // "Pairing: Off"
LOCALE_STRING_PAIRING_ON          // "Pairing: On"
LOCALE_STRING_NOT_PLAYING         // "Not Playing"
LOCALE_STRING_UNKNOWN_ARTIST      // "Unknown Artist"
LOCALE_STRING_UNKNOWN_TITLE       // "Unknown Title"

Audio settings

LOCALE_STRING_AUTOPLAY_OFF        // "Autoplay: Off"
LOCALE_STRING_AUTOPLAY_ON         // "Autoplay: On"
LOCALE_STRING_DSP_DEFAULT         // "DSP: Default"
LOCALE_STRING_DSP_ANALOG          // "DSP: Analog"
LOCALE_STRING_DSP_DIGITAL         // "DSP: Digital"
LOCALE_STRING_VOL_OFFSET          // "Volume Offset"
LOCALE_STRING_VOLUME_NEG_DB       // "Volume: -X dB"
LOCALE_STRING_VOLUME_POS_DB       // "Volume: +X dB"
LOCALE_STRING_VOLUME_24_DB        // "Volume: -24 dB"
LOCALE_STRING_VOLUME_0_DB         // "Volume: 0 dB"
LOCALE_STRING_REV_VOL_LOW_ON      // "Reverse Vol Lower: On"
LOCALE_STRING_REV_VOL_LOW_OFF     // "Reverse Vol Lower: Off"

Telephony

LOCALE_STRING_CALLING             // "Calling"
LOCALE_STRING_CALL                // "Call"
LOCALE_STRING_HANDSFREE_OFF       // "Handsfree: Off"
LOCALE_STRING_HANDSFREE_ON        // "Handsfree: On"
LOCALE_STRING_MIC_GAIN            // "Mic Gain"
LOCALE_STRING_MODE_DEFAULT        // "Mode: Default"
LOCALE_STRING_MODE_TCU            // "Mode: TCU"
LOCALE_STRING_MODE_NO_MUTE        // "Mode: No Mute"
LOCALE_STRING_MODE_ANALOG         // "Mode: Analog"
LOCALE_STRING_VOICE_ASSISTANT     // "Voice Assistant"

Comfort features

LOCALE_STRING_COMFORT             // "Comfort"
LOCALE_STRING_BLINKERS            // "Blinkers"
LOCALE_STRING_LOCK_OFF            // "Lock: Off"
LOCALE_STRING_LOCK_10KMH          // "Lock: 10 km/h"
LOCALE_STRING_LOCK_20KMH          // "Lock: 20 km/h"
LOCALE_STRING_UNLOCK_OFF          // "Unlock: Off"
LOCALE_STRING_UNLOCK_POS_0        // "Unlock: Position 0"
LOCALE_STRING_UNLOCK_POS_1        // "Unlock: Position 1"
LOCALE_STRING_PARK_LAMPS_ON       // "Park Lamps: On"
LOCALE_STRING_PARK_LAMPS_OFF      // "Park Lamps: Off"

UI settings

LOCALE_STRING_UI                  // "UI"
LOCALE_STRING_LANG                // "Language"
LOCALE_STRING_DASHBOARD           // "Dashboard"
LOCALE_STRING_DASH_OBC_ON         // "Dashboard OBC: On"
LOCALE_STRING_DASH_OBC_OFF        // "Dashboard OBC: Off"
LOCALE_STRING_BMBT_OFF_ON         // "Monitor Off: On"
LOCALE_STRING_BMBT_OFF_OFF        // "Monitor Off: Off"
LOCALE_STRING_METADATA_OFF        // "Metadata: Off"
LOCALE_STRING_METADATA_PARTY      // "Metadata: Party"
LOCALE_STRING_METADATA_CHUNK      // "Metadata: Chunk"

Temperature display

LOCALE_STRING_TEMPS_OFF           // "Temps: Off"
LOCALE_STRING_TEMPS_COOLANT       // "Temps: Coolant"
LOCALE_STRING_TEMPS_AMBIENT       // "Temps: Ambient"
LOCALE_STRING_TEMPS_OIL           // "Temps: Oil"

Time settings

LOCALE_STRING_TIME                // "Time"
LOCALE_STRING_AUTOTIME            // "Auto Time"
LOCALE_STRING_AUTOTIME_DST        // "DST"
LOCALE_STRING_AUTOTIME_OFFSET     // "Offset"
LOCALE_STRING_AUTOTIME_MANUAL     // "Manual"
LOCALE_STRING_AUTOTIME_NOSIGNAL   // "No Signal"
LOCALE_STRING_NAV                 // "Navigation"
LOCALE_STRING_AUTOZOOM            // "Auto Zoom"
LOCALE_STRING_NAV_MAP             // "Map"
LOCALE_STRING_NAV_SILENT          // "Silent"
LOCALE_STRING_NAV_RANGE           // "Range"
LOCALE_STRING_PDC                 // "PDC"

About screen

LOCALE_STRING_FW                  // "Firmware"
LOCALE_STRING_SN                  // "Serial Number"
LOCALE_STRING_BUILT               // "Built"

Common

LOCALE_STRING_ON                  // "On"
LOCALE_STRING_OFF                 // "Off"
LOCALE_STRING_DEFAULT             // "Default"
LOCALE_STRING_AUTO                // "Auto"

Constants

#define LOCALE_STRING_MAX_INDEX 87  // Maximum string ID

Usage example

// Build a settings menu with localized text
void BuildSettingsMenu() {
    // Menu title
    char *title = LocaleGetText(LOCALE_STRING_SETTINGS);
    
    // Menu items
    char *audio = LocaleGetText(LOCALE_STRING_SETTINGS_AUDIO);
    char *calling = LocaleGetText(LOCALE_STRING_SETTINGS_CALLING);
    char *comfort = LocaleGetText(LOCALE_STRING_SETTINGS_COMFORT);
    char *ui = LocaleGetText(LOCALE_STRING_SETTINGS_UI);
    
    // Display menu...
}

// Display current setting value
void DisplayAutoplaySetting(uint8_t enabled) {
    char *text;
    if (enabled) {
        text = LocaleGetText(LOCALE_STRING_AUTOPLAY_ON);
    } else {
        text = LocaleGetText(LOCALE_STRING_AUTOPLAY_OFF);
    }
    DisplayText(text);
}

Translation coverage

All string IDs have translations for all 9 supported languages. Fallback to English occurs if a translation is missing.
Language can be changed at runtime through the vehicle menu system. The change takes effect immediately without requiring a restart.

See also

Build docs developers (and LLMs) love