~aleteoryx/muditaos

d48d2d8b0df98176ee388955f6a1fd16976e9c7c — Krzysztof Mozdzynski 5 years ago 11f39b1
[EGD-4167] Add n display languages loaded from files (#1047)

M changelog.md => changelog.md +4 -0
@@ 20,6 20,10 @@

* `[utils]` Added unit tests for time display.

### Changed

* `[language]` Changed language loader to load from files

## [0.48.1 2020-11-23]

### Added

M doc/i18n.md => doc/i18n.md +54 -2
@@ 2,9 2,61 @@

## File and data structure

Currently all the wording used in MuditaOS interface is collected in the form of JSON files which are located in [the Image Assets folder](../image/assets/lang/).
### Display language
Currently all the wording used in MuditaOS interface is collected in the form of JSON files which are located in [the image/assets/lang folder](../image/assets/lang/).

The default fallback file for every language is currently the English version - `lang_en.json`
The default fallback file for every language is currently the English version - `English.json`.

Language file naming pattern should be universal because MuditaOS displays languages based on the file name (without extension) eg. `Deutsch.json` will be displayed in language settings as `Deutsch`.

The name of a language file should also be in the language of the created file eg. for English it should be `English.json`, for Polish `Polski.json` etc.

The structure of the file is typical for JSON files:
```c++
(...)
"common_open": "OPEN",
"common_call": "CALL",
"common_save": "SAVE",
"common_send": "SEND",
(...)
```
The keys on the left side refer to the values on the right side. These values are later displayed in MuditaOS applications.

### Keyboard input language

The first four values of JSON language files tell MuditaOS, which keyboard input language is the specific language setting using:
```c++
"common_kbd_lower": "lang_eng_lower",
"common_kbd_upper": "lang_eng_upper",
"common_kbd_numeric": "numeric",
"common_kbd_phone": "phone",
(...)
```

These values are names of KPROF files, which are located in [the image/assets/profiles folder](../image/assets/profiles/).

Every language has its own files for upper and lower letters. Here's an example of a working implementation of buttons 2 and 3 in the `lang_eng_lower` file:
```c++
(...)
#NumericKey2 = 32,
32
true
'a','b','c'
0,0,0
#NumericKey3 = 33,
33
true
'd','e','f'
0,0,0
(...)
```
Values explanation:
- The first value is the number of the button (31 means button "1", 32 means button "2" etc.)
- The second value is true if the key is cyclic or false otherwise
- The third line is a list of values that would be available by clicking this button
- The last line includes zeros written as many times as there are characters available under the button

### Date and time

MuditaOS follows [Linux `date`](https://man7.org/linux/man-pages/man1/date.1.html) to format date and time. 


R image/assets/lang/lang_de.json => image/assets/lang/Deutsch.json +171 -185
@@ 1,187 1,173 @@
{
	"common_kbd_lower": "lang_de_lower",
	"common_kbd_upper": "lang_de_upper",
	"common_kbd_numeric": "numeric",

    "common_add": "ADD",
    "common_open": "OPEN",
    "common_call": "CALL",
    "common_save": "SAVE",
    "common_send": "SEND",
    "common_confirm": "CONFIRM",
    "common_select": "SELECT",
    "common_ok": "OK",
    "common_back": "BACK",
    "common_set": "SET",
    "common_yes": "Yes",
    "common_no": "No",
    "common_speaker": "SPEAKER",
    "common_mute": "MUTE",
    "common_switch": "SWITCH",
    "common_options": "OPTIONS",
    "common_monday": "Monday",
    "common_tuesday": "Tuesday",
    "common_wednesday": "Wednesday",
    "common_thursday": "Thursday",
    "common_friday": "Friday",
    "common_saturday": "Saturday",
    "common_sunday": "Sunday",

    "common_information": "Information",

    "common_january": "January",
    "common_february": "February",
    "common_march": "March",
    "common_april": "April",
    "common_may": "May",
    "common_june": "June",
    "common_july": "July",
    "common_august": "August",
    "common_september": "September",
    "common_october": "October",
    "common_november": "November",
    "common_december": "December",
    "common_yesterday" : "Yesterday",
    "common_today" : "Today",
    "locale_12hour_min" : "%I:%M %p",
    "locale_24hour_min" : "%H:%M",
    "locale_date_full" : "%m/%d/%y",
    "locale_date_short" : "%d/%m",

    "app_notes_title_main": "Notes",
    "app_notes_new_note": "New Note",
    "app_notes_save": "SAVE",
    "app_notes_edit": "EDIT",
    "app_notes_back": "BACK",

    "app_calllog_title_main": "Calls",
    "app_calllog_save": "SAVE",
    "app_calllog_edit": "EDIT",
    "app_calllog_back": "BACK",
    "app_calllog_type": "Type",
    "app_calllog_duration": "Duration",
    "app_calllog_incoming_call": "incoming call",
    "app_calllog_outgoing_call": "outgoing call",
    "app_calllog_missed_call": "missed call",
    "app_calllog_date": "Date",
    "app_calllog_options_title": "Options",
    "app_calllog_options_contact_details": "Contact details",
    "app_calllog_options_delete_call": "Delete call",
    "app_calllog_delete_call_confirmation": "Do you really want to delete this call from the list?",

    "app_desktop_unlock": "UNLOCK",
    "app_desktop_lock": "LOCK",
    "app_desktop_menu": "MENU",
    "app_desktop_emergency": "EMERG.",
    "app_desktop_pin_lock": "Enter passcode",
    "app_desktop_pin_info1": "Wrong passcode",
    "app_desktop_pin_info2": "Allowed unlock attempts",
    "app_desktop_pin_blocked1": "Sorry, phone blocked",
    "app_desktop_unread_messages": "unread messages",
    "app_desktop_missed_calls": "missed calls",
    "app_desktop_menu_phone": "PHONE",
    "app_desktop_menu_contacts": "CONTACTS",
    "app_desktop_menu_messages": "MESSAGES",
    "app_desktop_menu_calendar": "CALENDAR",
    "app_desktop_menu_alarm": "ALARM",
    "app_desktop_menu_meditation": "MEDITATION",
    "app_desktop_menu_music": "MUSIC",
    "app_desktop_menu_tools": "TOOLS",
    "app_desktop_menu_settings": "SETTINGS",
    "app_desktop_menu_phonebook": "PHONEBOOK",
    "app_desktop_menu_title": "Main Menu",
    "app_desktop_tools_title": "Tools",
    "app_desktop_tools_notes": "NOTES",
    "app_desktop_tools_calculator": "CALCULATOR",
    "app_desktop_tools_recorder": "RECORDER",
    "app_desktop_tools_antenna": "ANTENNA TEST",
    "app_desktop_poweroff_title": "Turn Off",
    "app_desktop_poweroff_question": "Select Yes to power down",

    "app_call_call": "CALL",
    "app_call_clear": "CLEAR",
    "app_call_reject": "REJECT",
    "app_call_answer": "ANSWER",
    "app_call_message": "MESSAGE",
    "app_call_return": "RETURN",
    "app_call_end_call": "END CALL",
    "app_call_emergency": "Emergency call",
    "app_call_is_calling": "is calling",
    "app_call_call_ended": "call ended",
    "app_call_contact": "CONTACT",

    "app_settings_title_main": "Settings",
    "app_settings_bt" : "Bluetooth",
	"app_settings_date_and_time": "Date and Time",
		"app_settings_title_day": "Day",
		"app_settings_title_month": "Month",
		"app_settings_title_year": "Year",
		"app_settings_title_time": "Time",
    "app_settings_cellular_passthrough": "Cellular <-> USB",
    "app_settings_display": "Display",
    "app_settings_phone_modes": "Phone Modes",
    "app_settings_security": "Security",
    "app_settings_language": "Language",
    "app_settings_about": "About Mudita Pure",
	"app_settings_title_languages": "Language Selection",
	"app_settings_language_english": "English",
	"app_settings_language_polish": "Polish",
	"app_settings_language_german": "German",
	"app_settings_language_spanish": "Spanish",
    "app_settings_date_time": "Date and Time",

	"app_messages_title_main": "Messages",
	"app_messages_new_message": "New Message",

    "app_phonebook_title_main": "Contacts",
    "app_phonebook_search_win_contacts": "Contacts",
    "common_search_uc": "Search",
    "app_phonebook_search_win_info": "Type what do you need and click SEARCH",
    "common_search_results": "Results",
    "app_phonebook_list_favourites": "Favourites",
    "app_phonebook_contact_title": "Add Contact",
    "app_phonebook_contact_note": "Note",
    "app_phonebook_contact_address": "Address",
    "app_phonebook_contact_information": "Information",
    "app_phonebook_contact_favourites_upper": "FAVOURITES",
    "app_phonebook_contact_speed_dial_upper": "SPEED DIAL",
    "app_phonebook_contact_speed_blocked_uppper": "BLOCKED",
    "app_phonebook_duplicate_numbers": "This numbers belongs to\n$CONTACT_NAME$. Would you like\nto create a new contact?",
    "app_phonebook_duplicate_speed_dial":"This number is already assigned\nto $CONTACT_NAME$. Would you\nlike to replace it?",
    "app_phonebook_options_title": "Options",
    "app_phonebook_contact_no_name": "no name",
    "app_phonebook_options_edit": "Edit Contact",
    "app_phonebook_options_block": "Block",
    "app_phonebook_options_block_confirm": "Do you really want to\nblock this contact?",
    "app_phonebook_options_delete": "Delete",
    "app_phonebook_options_delete_confirm": "Do you really want to\ndelete this contact?",
    "app_phonebook_options_send_bt": "Send via Bluetooth",
    "app_phonebook_options_forward_namecard": "Forward namecard",
    "app_phonebook_options_send_sms": "Send via SMS",
    "app_phonebook_new_contact_first_name": "First name",
    "app_phonebook_new_contact_second_name": "Second name",
    "app_phonebook_new_contact_number": "Number",
    "app_phonebook_new_contact_second_number": "Second number",
    "app_phonebook_new_contact_email": "Email",
    "app_phonebook_new_contact_address": "Address",
    "app_phonebook_new_contact_note": "Note",
    "app_phonebook_new_speed_dial_key": "Speed dial key",
    "app_phonebook_new_add_to_fav": "Add to favourites",
    "app_phonebook_new_add_to_ice": "Add to ICE",
    "app_phonebook_check": "CHECK",
    "app_phonebook_uncheck": "UNCHECK",

    "app_meditation_title_main": "Meditation",

    "sms_call_text"  : "Call: ",
    "sms_contact_details" : "Contact details",
    "sms_delete_conversation" : "Delete conversation",

    "settings_lang_PL": "PL",
    "settings_lang_ENG": "ENG",
    "settings_lang_DE": "DE",
    "settings_lang_SP": "SP",
    "desktop_powerdown_info1": "Now It is truly...",
    "desktop_powerdown_info2": "Disabled!!!"

  "common_kbd_lower": "lang_de_lower",
  "common_kbd_upper": "lang_de_upper",
  "common_kbd_numeric": "numeric",
  "common_add": "ADD",
  "common_open": "OPEN",
  "common_call": "CALL",
  "common_save": "SAVE",
  "common_send": "SEND",
  "common_confirm": "CONFIRM",
  "common_select": "SELECT",
  "common_ok": "OK",
  "common_back": "BACK",
  "common_set": "SET",
  "common_yes": "Yes",
  "common_no": "No",
  "common_speaker": "SPEAKER",
  "common_mute": "MUTE",
  "common_switch": "SWITCH",
  "common_options": "OPTIONS",
  "common_monday": "Monday",
  "common_tuesday": "Tuesday",
  "common_wednesday": "Wednesday",
  "common_thursday": "Thursday",
  "common_friday": "Friday",
  "common_saturday": "Saturday",
  "common_sunday": "Sunday",
  "common_information": "Information",
  "common_january": "January",
  "common_february": "February",
  "common_march": "March",
  "common_april": "April",
  "common_may": "May",
  "common_june": "June",
  "common_july": "July",
  "common_august": "August",
  "common_september": "September",
  "common_october": "October",
  "common_november": "November",
  "common_december": "December",
  "common_yesterday": "Yesterday",
  "common_today": "Today",
  "locale_12hour_min": "%I:%M %p",
  "locale_24hour_min": "%H:%M",
  "locale_date_full": "%m/%d/%y",
  "locale_date_short": "%d/%m",
  "app_notes_title_main": "Notes",
  "app_notes_new_note": "New Note",
  "app_notes_save": "SAVE",
  "app_notes_edit": "EDIT",
  "app_notes_back": "BACK",
  "app_calllog_title_main": "Calls",
  "app_calllog_save": "SAVE",
  "app_calllog_edit": "EDIT",
  "app_calllog_back": "BACK",
  "app_calllog_type": "Type",
  "app_calllog_duration": "Duration",
  "app_calllog_incoming_call": "incoming call",
  "app_calllog_outgoing_call": "outgoing call",
  "app_calllog_missed_call": "missed call",
  "app_calllog_date": "Date",
  "app_calllog_options_title": "Options",
  "app_calllog_options_contact_details": "Contact details",
  "app_calllog_options_delete_call": "Delete call",
  "app_calllog_delete_call_confirmation": "Do you really want to delete this call from the list?",
  "app_desktop_unlock": "UNLOCK",
  "app_desktop_lock": "LOCK",
  "app_desktop_menu": "MENU",
  "app_desktop_emergency": "EMERG.",
  "app_desktop_pin_lock": "Enter passcode",
  "app_desktop_pin_info1": "Wrong passcode",
  "app_desktop_pin_info2": "Allowed unlock attempts",
  "app_desktop_pin_blocked1": "Sorry, phone blocked",
  "app_desktop_unread_messages": "unread messages",
  "app_desktop_missed_calls": "missed calls",
  "app_desktop_menu_phone": "PHONE",
  "app_desktop_menu_contacts": "CONTACTS",
  "app_desktop_menu_messages": "MESSAGES",
  "app_desktop_menu_calendar": "CALENDAR",
  "app_desktop_menu_alarm": "ALARM",
  "app_desktop_menu_meditation": "MEDITATION",
  "app_desktop_menu_music": "MUSIC",
  "app_desktop_menu_tools": "TOOLS",
  "app_desktop_menu_settings": "SETTINGS",
  "app_desktop_menu_phonebook": "PHONEBOOK",
  "app_desktop_menu_title": "Main Menu",
  "app_desktop_tools_title": "Tools",
  "app_desktop_tools_notes": "NOTES",
  "app_desktop_tools_calculator": "CALCULATOR",
  "app_desktop_tools_recorder": "RECORDER",
  "app_desktop_tools_antenna": "ANTENNA TEST",
  "app_desktop_poweroff_title": "Turn Off",
  "app_desktop_poweroff_question": "Select Yes to power down",
  "app_call_call": "CALL",
  "app_call_clear": "CLEAR",
  "app_call_reject": "REJECT",
  "app_call_answer": "ANSWER",
  "app_call_message": "MESSAGE",
  "app_call_return": "RETURN",
  "app_call_end_call": "END CALL",
  "app_call_emergency": "Emergency call",
  "app_call_is_calling": "is calling",
  "app_call_call_ended": "call ended",
  "app_call_contact": "CONTACT",
  "app_settings_title_main": "Settings",
  "app_settings_bt": "Bluetooth",
  "app_settings_date_and_time": "Date and Time",
  "app_settings_title_day": "Day",
  "app_settings_title_month": "Month",
  "app_settings_title_year": "Year",
  "app_settings_title_time": "Time",
  "app_settings_cellular_passthrough": "Cellular <-> USB",
  "app_settings_display": "Display",
  "app_settings_phone_modes": "Phone Modes",
  "app_settings_security": "Security",
  "app_settings_language": "Language",
  "app_settings_about": "About Mudita Pure",
  "app_settings_title_languages": "Language Selection",
  "app_settings_language_english": "English",
  "app_settings_language_polish": "Polish",
  "app_settings_language_german": "German",
  "app_settings_language_spanish": "Spanish",
  "app_settings_date_time": "Date and Time",
  "app_messages_title_main": "Messages",
  "app_messages_new_message": "New Message",
  "app_phonebook_title_main": "Contacts",
  "app_phonebook_search_win_contacts": "Contacts",
  "common_search_uc": "Search",
  "app_phonebook_search_win_info": "Type what do you need and click SEARCH",
  "common_search_results": "Results",
  "app_phonebook_list_favourites": "Favourites",
  "app_phonebook_contact_title": "Add Contact",
  "app_phonebook_contact_note": "Note",
  "app_phonebook_contact_address": "Address",
  "app_phonebook_contact_information": "Information",
  "app_phonebook_contact_favourites_upper": "FAVOURITES",
  "app_phonebook_contact_speed_dial_upper": "SPEED DIAL",
  "app_phonebook_contact_speed_blocked_uppper": "BLOCKED",
  "app_phonebook_duplicate_numbers": "This numbers belongs to\n$CONTACT_NAME$. Would you like\nto create a new contact?",
  "app_phonebook_duplicate_speed_dial": "This number is already assigned\nto $CONTACT_NAME$. Would you\nlike to replace it?",
  "app_phonebook_options_title": "Options",
  "app_phonebook_contact_no_name": "no name",
  "app_phonebook_options_edit": "Edit Contact",
  "app_phonebook_options_block": "Block",
  "app_phonebook_options_block_confirm": "Do you really want to\nblock this contact?",
  "app_phonebook_options_delete": "Delete",
  "app_phonebook_options_delete_confirm": "Do you really want to\ndelete this contact?",
  "app_phonebook_options_send_bt": "Send via Bluetooth",
  "app_phonebook_options_forward_namecard": "Forward namecard",
  "app_phonebook_options_send_sms": "Send via SMS",
  "app_phonebook_new_contact_first_name": "First name",
  "app_phonebook_new_contact_second_name": "Second name",
  "app_phonebook_new_contact_number": "Number",
  "app_phonebook_new_contact_second_number": "Second number",
  "app_phonebook_new_contact_email": "Email",
  "app_phonebook_new_contact_address": "Address",
  "app_phonebook_new_contact_note": "Note",
  "app_phonebook_new_speed_dial_key": "Speed dial key",
  "app_phonebook_new_add_to_fav": "Add to favourites",
  "app_phonebook_new_add_to_ice": "Add to ICE",
  "app_phonebook_check": "CHECK",
  "app_phonebook_uncheck": "UNCHECK",
  "app_meditation_title_main": "Meditation",
  "sms_call_text": "Call: ",
  "sms_contact_details": "Contact details",
  "sms_delete_conversation": "Delete conversation",
  "settings_lang_PL": "PL",
  "settings_lang_ENG": "ENG",
  "settings_lang_DE": "DE",
  "settings_lang_SP": "SP",
  "desktop_powerdown_info1": "Now It is truly...",
  "desktop_powerdown_info2": "Disabled!!!"
}

R image/assets/lang/lang_en.json => image/assets/lang/English.json +376 -394
@@ 1,402 1,384 @@
{
	"common_kbd_lower": "lang_eng_lower",
	"common_kbd_upper": "lang_eng_upper",
    "common_kbd_numeric": "numeric",
    "common_kbd_phone": "phone",
  "common_kbd_lower": "lang_eng_lower",
  "common_kbd_upper": "lang_eng_upper",
  "common_kbd_numeric": "numeric",
  "common_kbd_phone": "phone",

    "common_add": "ADD",
    "common_open": "OPEN",
    "common_call": "CALL",
    "common_save": "SAVE",
    "common_send": "SEND",
    "common_confirm": "CONFIRM",
    "common_select": "SELECT",
    "common_use": "USE",
    "common_ok": "OK",
    "common_back": "BACK",
    "common_set": "SET",
    "common_yes": "Yes",
    "common_no": "No",
    "common_switch": "SWITCH",
    "common_options": "OPTIONS",
    "common_information": "Information",
    "common_check": "CHECK",
    "common_uncheck": "UNCHECK",
    "common_emoji": "EMOJI",
    "common_special_characters": "SPECIAL",
    "common_start" : "START",
    "common_stop" : "STOP",
    "common_resume" : "RESUME",
    "common_pause" : "PAUSE",
  "common_add": "ADD",
  "common_open": "OPEN",
  "common_call": "CALL",
  "common_save": "SAVE",
  "common_send": "SEND",
  "common_confirm": "CONFIRM",
  "common_select": "SELECT",
  "common_use": "USE",
  "common_ok": "OK",
  "common_back": "BACK",
  "common_set": "SET",
  "common_yes": "Yes",
  "common_no": "No",
  "common_switch": "SWITCH",
  "common_options": "OPTIONS",
  "common_information": "Information",
  "common_check": "CHECK",
  "common_uncheck": "UNCHECK",
  "common_emoji": "EMOJI",
  "common_special_characters": "SPECIAL",
  "common_start": "START",
  "common_stop": "STOP",
  "common_resume": "RESUME",
  "common_pause": "PAUSE",
  "common_mo": "MO",
  "common_tu": "TU",
  "common_we": "WE",
  "common_th": "TH",
  "common_fr": "FR",
  "common_sa": "SA",
  "common_su": "SU",
  "common_monday": "Monday",
  "common_tuesday": "Tuesday",
  "common_wednesday": "Wednesday",
  "common_thursday": "Thursday",
  "common_friday": "Friday",
  "common_saturday": "Saturday",
  "common_sunday": "Sunday",
  "common_january": "January",
  "common_february": "February",
  "common_march": "March",
  "common_april": "April",
  "common_may": "May",
  "common_june": "June",
  "common_july": "July",
  "common_august": "August",
  "common_september": "September",
  "common_october": "October",
  "common_november": "November",
  "common_december": "December",
  "common_yesterday": "Yesterday",
  "common_today": "Today",
  "common_results_prefix": "Results: ",
  "common_search": "SEARCH",
  "locale_12hour_min": "%I:%M %p",
  "locale_24hour_min": "%H:%M",
  "locale_date_full": "%m/%d/%y",
  "locale_date_short": "%d/%m",
  "common_AM": "AM",
  "common_PM": "PM",
  "duration_min_0sec": "%M:%0S",
  "duration_0min_0sec": "%0M:%0S",
  "duration_0hmin_0sec": "%0N:%0S",
  "duration_hour_0min_0sec": "%H:%0M:%0S",
  "brightness_text": "BRIGHTNESS",
  "volume_text": "VOLUME",
  "home_modes_connected": "CONNECTED",
  "home_modes_notdisturb": "DO NOT DISTURB",
  "home_modes_offline": "OFFLINE",
  "app_calendar_title_main": "Calendar",
  "app_calendar_options_title": "Options",
  "app_calendar_options_edit": "Edit",
  "app_calendar_options_delete": "Delete",
  "app_calendar_event_delete_confirmation": "Delete this event?",
  "app_calendar_bar_month": "MONTH",
  "app_calendar_bar_list": "LIST",
  "app_calendar_event_detail": "Event",
  "app_calendar_event_detail_repeat": "Repeat",
  "app_calendar_event_detail_reminder": "Reminder",
  "app_calendar_no_events_information": "<text align='center' color='9'>No events yet.<p>Press <b>left arrow</b> to add new.</p></text>",
  "app_calendar_repeat_never": "Never",
  "app_calendar_repeat_daily": "Daily",
  "app_calendar_repeat_weekly": "Weekly",
  "app_calendar_repeat_two_weeks": "Two weeks",
  "app_calendar_repeat_month": "Month",
  "app_calendar_repeat_year": "Year",
  "app_calendar_repeat_custom": "Custom",
  "app_calendar_reminder_never": "Never",
  "app_calendar_reminder_event_time": "At the time of the event",
  "app_calendar_reminder_5_min_before": "5 mins before",
  "app_calendar_reminder_15_min_before": "15 mins before",
  "app_calendar_reminder_30_min_before": "30 mins before",
  "app_calendar_reminder_1_hour_before": "1h before",
  "app_calendar_reminder_2_hour_before": "2h before",
  "app_calendar_reminder_1_day_before": "1 day before",
  "app_calendar_reminder_2_days_before": "2 days before",
  "app_calendar_reminder_1_week_before": "1 week before",
  "app_calendar_custom_repeat_title": "Custom repeat",
  "app_calendar_new_event_title": "New event",
  "app_calendar_edit_event_title": "Edit event",
  "app_calendar_edit": "EDIT",
  "app_calendar_new_edit_event_name": "Event name",
  "app_calendar_new_edit_event_allday": "All day event",
  "app_calendar_all_day": "All day",
  "app_calendar_new_edit_event_start": "Start",
  "app_calendar_new_edit_event_end": "End",

    "common_mo":"MO",
    "common_tu":"TU",
    "common_we":"WE",
    "common_th":"TH",
    "common_fr":"FR",
    "common_sa":"SA",
    "common_su":"SU",
  "app_calculator_title_main": "Calculator",
  "app_calculator_equals": "EQUALS",
  "app_calculator_decimal_separator": ".",
  "app_calculator_error": "Error",

    "common_monday": "Monday",
    "common_tuesday": "Tuesday",
    "common_wednesday": "Wednesday",
    "common_thursday": "Thursday",
    "common_friday": "Friday",
    "common_saturday": "Saturday",
    "common_sunday": "Sunday",
  "app_options_invalid_option": " <Invalid Option> ",
  "app_options_contact_details": "Contact details",
  "app_options_contact_add": "Add to contacts",
  "app_options_contact_edit": "Edit Contact",

    "common_january": "January",
    "common_february": "February",
    "common_march": "March",
    "common_april": "April",
    "common_may": "May",
    "common_june": "June",
    "common_july": "July",
    "common_august": "August",
    "common_september": "September",
    "common_october": "October",
    "common_november": "November",
    "common_december": "December",
    "common_yesterday" : "Yesterday",
    "common_today" : "Today",
    "common_results_prefix": "Results: ",
    "common_search": "SEARCH",
  "app_notes_title_main": "Notes",
  "app_notes_new_note": "New Note",
  "app_notes_save": "SAVE",
  "app_notes_edit": "EDIT",
  "app_notes_back": "BACK",

    "locale_12hour_min" : "%I:%M %p",
    "locale_24hour_min" : "%H:%M",
    "locale_date_full" : "%m/%d/%y",
    "locale_date_short" : "%d/%m",
    "common_AM" : "AM",
    "common_PM" : "PM",
  "app_calllog_title_main": "Calls",
  "app_calllog_new_note": "New Note",
  "app_calllog_save": "SAVE",
  "app_calllog_edit": "EDIT",
  "app_calllog_back": "BACK",
  "app_calllog_type": "Type",
  "app_calllog_duration": "Duration",
  "app_calllog_incoming_call": "incoming call",
  "app_calllog_outgoing_call": "outgoing call",
  "app_calllog_missed_call": "missed call",
  "app_calllog_rejected_call": "rejected call",
  "app_calllog_date": "Date",
  "app_calllog_options_title": "Options",
  "app_calllog_options_delete_call": "Delete call",
  "app_calllog_delete_call_confirmation": "Do you really want to delete this call from the list?",

    "duration_min_0sec" : "%M:%0S",
    "duration_0min_0sec" : "%0M:%0S",
    "duration_0hmin_0sec" : "%0N:%0S",
    "duration_hour_0min_0sec" : "%H:%0M:%0S",

    "brightness_text" : "BRIGHTNESS",
    "volume_text" : "VOLUME",
    "home_modes_connected" : "CONNECTED",
    "home_modes_notdisturb" : "DO NOT DISTURB",
    "home_modes_offline" : "OFFLINE",

    "app_calendar_title_main" : "Calendar",
    "app_calendar_options_title": "Options",
    "app_calendar_options_edit": "Edit",
    "app_calendar_options_delete": "Delete",
    "app_calendar_event_delete_confirmation": "Delete this event?",
    "app_calendar_bar_month": "MONTH",
    "app_calendar_bar_list": "LIST",
    "app_calendar_event_detail": "Event",
    "app_calendar_event_detail_repeat": "Repeat",
    "app_calendar_event_detail_reminder": "Reminder",
    "app_calendar_no_events_information": "<text align='center' color='9'>No events yet.<p>Press <b>left arrow</b> to add new.</p></text>",
    "app_calendar_repeat_never": "Never",
    "app_calendar_repeat_daily": "Daily",
    "app_calendar_repeat_weekly": "Weekly",
    "app_calendar_repeat_two_weeks": "Two weeks",
    "app_calendar_repeat_month": "Month",
    "app_calendar_repeat_year": "Year",
    "app_calendar_repeat_custom": "Custom",
    "app_calendar_reminder_never": "Never",
    "app_calendar_reminder_event_time": "At the time of the event",
    "app_calendar_reminder_5_min_before": "5 mins before",
    "app_calendar_reminder_15_min_before": "15 mins before",
    "app_calendar_reminder_30_min_before": "30 mins before",
    "app_calendar_reminder_1_hour_before": "1h before",
    "app_calendar_reminder_2_hour_before": "2h before",
    "app_calendar_reminder_1_day_before": "1 day before",
    "app_calendar_reminder_2_days_before": "2 days before",
    "app_calendar_reminder_1_week_before": "1 week before",
    "app_calendar_custom_repeat_title": "Custom repeat",
    "app_calendar_new_event_title": "New event",
    "app_calendar_edit_event_title": "Edit event",
    "app_calendar_edit": "EDIT",
    "app_calendar_new_edit_event_name": "Event name",
    "app_calendar_new_edit_event_allday": "All day event",
    "app_calendar_all_day": "All day",
    "app_calendar_new_edit_event_start": "Start",
    "app_calendar_new_edit_event_end": "End",

    "app_calculator_title_main": "Calculator",
    "app_calculator_equals": "EQUALS",
    "app_calculator_decimal_separator": ".",
    "app_calculator_error": "Error",

    "app_options_invalid_option": " <Invalid Option> ",
    "app_options_contact_details": "Contact details",
    "app_options_contact_add": "Add to contacts",
    "app_options_contact_edit": "Edit Contact",

    "app_notes_title_main": "Notes",
    "app_notes_new_note": "New Note",
    "app_notes_save": "SAVE",
    "app_notes_edit": "EDIT",
    "app_notes_back": "BACK",

    "app_calllog_title_main": "Calls",
    "app_calllog_new_note": "New Note",
    "app_calllog_save": "SAVE",
    "app_calllog_edit": "EDIT",
    "app_calllog_back": "BACK",
    "app_calllog_type": "Type",
    "app_calllog_duration": "Duration",
    "app_calllog_incoming_call": "incoming call",
    "app_calllog_outgoing_call": "outgoing call",
    "app_calllog_missed_call": "missed call",
    "app_calllog_rejected_call": "rejected call",
    "app_calllog_date": "Date",
    "app_calllog_options_title": "Options",
    "app_calllog_options_delete_call": "Delete call",
    "app_calllog_delete_call_confirmation": "Do you really want to delete this call from the list?",

    "app_desktop_unlock": "UNLOCK",
    "app_desktop_lock": "LOCK",
    "app_desktop_menu": "MENU",
    "app_desktop_emergency": "EMERG.",

    "app_desktop_screen_enter_passcode": "Enter passcode",
    "app_desktop_screen_wrong_pin": "Wrong passcode",
    "app_desktop_screen_allowed_attempts": "Allowed unlock attempts",
    "app_desktop_screen_blocked_info": "Sorry, phone blocked",
    "app_desktop_sim_to_unlock": "To unlock the",
    "app_desktop_sim_card": "card",
    "app_desktop_sim_type_pin": "please type a PIN code:",
    "app_desktop_sim_blocked": "The SIM card is blocked.",
    "app_desktop_sim_enter_pin": "Enter new PIN code",
    "app_desktop_sim_confirm_pin": "Enter new PIN code",
    "app_desktop_sim_type_puk": "To unblock it, type the PUK code:",
    "app_desktop_no_pin_lock": "<text>Press <b>Unlock</b> and then <b>#</b></text>",
    "app_desktop_sim_wrong_pin": "Wrong PIN code",
    "app_desktop_sim_wrong_puk": "Wrong PUK code",
    "app_desktop_sim_you_have": "You have",
    "app_desktop_sim_attempt_left_plural": "attempts left",
    "app_desktop_sim_attempt_left_singular": "attempt left",
    "app_desktop_sim_warning1": "If the code is wrong this time, the",
    "app_desktop_sim_warning2": "SIM card will be blocked and you'll",
    "app_desktop_sim_warning3": "have to contact the operator",
    "app_desktop_sim_blocked_info1": "Sorry, SIM card permanently blocked.",
    "app_desktop_sim_blocked_info2": "Please contact your service provider",
    "app_desktop_sim_cme_error": "<text>SIM card\nCME error:</text>",

    "app_desktop_unread_messages": "<text>Unread <b>messages</b></text>",
    "app_desktop_missed_calls": "<text>Missed <b>calls</b></text>",
    "app_desktop_menu_phone": "PHONE",
    "app_desktop_menu_contacts": "CONTACTS",
    "app_desktop_menu_messages": "MESSAGES",
    "app_desktop_menu_calendar": "CALENDAR",
    "app_desktop_menu_alarm": "ALARM",
    "app_desktop_menu_meditation": "MEDITATION",
    "app_desktop_menu_music": "MUSIC",
    "app_desktop_menu_tools": "TOOLS",
    "app_desktop_menu_settings_new": "SETTINGS NEW",
    "app_desktop_menu_settings": "SETTINGS",
    "app_desktop_menu_phonebook": "PHONEBOOK",
    "app_desktop_menu_title": "Menu",
    "app_desktop_tools_title": "Tools",
    "app_desktop_tools_notes": "NOTES",
    "app_desktop_tools_calculator": "CALCULATOR",
    "app_desktop_tools_recorder": "RECORDER",
    "app_desktop_tools_antenna": "ANTENNA TEST",
    "app_desktop_poweroff_title": "Turn Off",
    "app_desktop_poweroff_question": "Select Yes to power down",
    "app_desktop_show": "SHOW",
    "app_desktop_calls": "CALLS",
    "app_desktop_clear": "CLEAR",
    "app_desktop_clear_all": "CLEAR ALL",
    
    "app_call_call": "CALL",
    "app_call_clear": "CLEAR",
    "app_call_reject": "REJECT",
    "app_call_answer": "ANSWER",
    "app_call_message": "MESSAGE",
    "app_call_end_call": "END CALL",
    "app_call_emergency": "Emergency call",
    "app_call_is_calling": "is calling",
    "app_call_calling": "calling...",
    "app_call_call_ended": "call ended",
    "app_call_contact": "CONTACT",
    "app_call_mute": "MUTE",
    "app_call_muted": "MUTED",
    "app_call_speaker": "SPEAKER",
    "app_call_speaker_on": "SPEAKER ON",
    "app_call_bluetooth": "BLUETOOTH",
    "app_call_no_sim" : "No SIM.\n\nTo make a call,\nplease insert a SIM card.",
    "app_call_offline" : "You're offline.\n\nTo make a call\n switch to the Connected mode.",
    
    "app_messages_title_main": "Messages",
    "app_messages_new_message": "New Message",
    "app_messages_no_messages": "There are no messages yet.\nPress Left arrow to add new.",
    "app_messages_thread_delete_confirmation": "Do you really want to delete\nthis conversation?",
    "app_messages_message_delete_confirmation": "<text align='center'><p>Do you really want to <text weight='bold'>delete</text></p>this message?</text>",
    "app_messages_thread_no_result" : "There are no results",
    "app_messages_message": "Message",
    "app_messages_templates": "Templates",
    "app_messages_no_sim" : "No SIM.\n\nTo send a SMS,\nplease insert a SIM card.",
    "app_messages_offline" : "You're offline.\n\nTo send a SMS\n switch to the Connected mode.",
    "app_messages_thread_draft" : "Draft: ",
    "app_messages_thread_not_sent" : "Not sent: ",
    "app_messages_thread_you" : "You: ",

    "app_settings_title_main": "Settings",
    "app_settings_title_main_new": "Settings New",
    "app_settings_bt" : "Bluetooth",
    "app_settings_bluetooth_add_device" : "Add device",
    "app_settings_bluetooth_all_devices" : "All devices",
    "app_settings_bluetooth_all_devices_indent" : "  All devices",
    "app_settings_bluetooth_searching_devices" : "Searching devices... \nIt may take a moment.",
    "app_settings_bluetooth_main" : "Bluetooth",
    "app_settings_bluetooth_phone_name" : "Phone name",
    "app_settings_bluetooth_phone_name_indent" : "  Phone name",
    "app_settings_bluetooth_phone_visibility" : "Phone visibility",
    "app_settings_net" : "Network",
    "app_settings_disp_key" : "Display and keypad",
    "app_settings_display_display_light": "Display light",
    "app_settings_display_light_main": "Frontlight",
    "app_settings_display_light_auto": "Automatic",
    "app_settings_display_light_brightness": "Brightness",
    "app_settings_display_font_size": "Font size",
    "app_settings_display_locked_screen": "Locked screen",
    "app_settings_display_keypad_light": "Keypad light",
    "app_settings_display_keypad_light_on": "Always on",
    "app_settings_display_keypad_light_active": "On when active",
    "app_settings_display_keypad_light_off": "Off",
    "app_settings_display_input_language": "Input language",
    "app_settings_display_locked_screen_autolock": "Autolock" ,
    "app_settings_display_locked_screen_wallpaper": "Wallpaper",
    "app_settings_display_locked_screen_quotes": "Quotes",
    "app_settings_display_locked_screen_new_quote": "New quote",
    "app_settings_display_wallpaper_logo": "Mudita logo",
    "app_settings_display_wallpaper_clock": "Clock",
    "app_settings_display_wallpaper_quotes": "Quotes",
    "app_settings_display_wallpaper_select_quotes": "Select Quotes",
    "app_settings_system" : "System",
    "app_settings_apps_tools" : "Apps and tools",
    "app_settings_apps_messages" : "Messages",
    "app_settings_show_unread_first" : "Show unread first",
    "app_settings_Templates" :  "Templates",
    "app_settings_apps_torch" : "Torch",
    "app_settings_title_torch" : "Torch",
    "app_settings_torch_sunset_red_light_option" : "Sunset red light",
    "app_settings_torch_nightshift_time_option" : "Nightshift time",
    "app_settings_torch_description" : "In the nightshift, the torch will use\nsunset red light so it won't disturb\nyour and others sleep.",
    "app_settings_date_and_time": "Date and Time",
	"app_settings_title_day": "Day",
	"app_settings_title_month": "Month",
	"app_settings_title_year": "Year",
	"app_settings_title_time": "Time",
    "app_settings_cellular_passthrough": "Cellular <-> USB",
    "app_settings_display": "Display",
    "app_settings_phone_modes": "Phone Modes",
    "app_settings_security": "Security",
    "app_settings_language": "Language",
    "app_settings_about": "About Mudita Pure",
    "app_settings_title_languages": "Language Selection",
    "app_settings_language_english": "English",
    "app_settings_language_polish": "Polish",
    "app_settings_language_german": "German",
    "app_settings_language_spanish": "Spanish",
    "app_settings_network_active_card": "Active card",
    "app_settings_network_operator_auto_select": "Operator auto-select",
    "app_settings_network_all_operators": "All Operators",
    "app_settings_network_import_contacts_from_sim_card": "Import contacts from SIM card",
    "app_settings_network_sim1": "Sim1",
    "app_settings_network_sim2": "Sim2",
    "app_settings_toggle_on": "ON",
    "app_settings_toggle_off": "OFF",

    "app_phonebook_title_main": "Contacts",
    "app_phonebook_search_win_contacts": "Contacts",
    "common_search_uc": "Search",
    "app_phonebook_search_win_info": "Type what do you need\nand click SEARCH",
    "common_search_results": "Search results",
    "app_phonebook_search_no_results": "No contacts found.",
    "app_phonebook_list_favourites": "Favourites",
    "app_phonebook_contact_title": "Add Contact",
    "app_phonebook_contact_no_name": "no name",
    "app_phonebook_contact_note": "Note",
    "app_phonebook_contact_address": "Address",
    "app_phonebook_contact_information": "Information",
    "app_phonebook_contact_favourites_upper": "FAVOURITES",
    "app_phonebook_contact_speed_dial_upper": "SPEED DIAL",
    "app_phonebook_contact_speed_blocked_uppper": "BLOCKED",
    "app_phonebook_ice_contacts_title": "ICE Contacts",
    "app_phonebook_duplicate_numbers": "Number $CONTACT_SPEED_DIAL$ is assigned to \n $CONTACT_NAME$. Replace it?",
    "app_phonebook_duplicate_speed_dial_title":"Speed dial key ($CONTACT_SPEED_DIAL$)",
    "app_phonebook_options_title": "Options",
    "app_phonebook_options_edit": "Edit Contact",
    "app_phonebook_options_block": "Block",
    "app_phonebook_options_block_confirm": "Block this contact?",
    "app_phonebook_options_block_notification": "Contact blocked.",
    "app_phonebook_options_unblock": "Unblock",
    "app_phonebook_options_unblock_confirm": "Unblock this contact?",
    "app_phonebook_options_unblock_notification": "Contact unblocked.",
    "app_phonebook_options_delete": "Delete",
    "app_phonebook_options_delete_confirm": "Do you really want to delete\nthis contact?",
    "app_phonebook_options_delete_notification": "This contact has been deleted\nsuccessfully.",
    "app_phonebook_options_send_bt": "Send via Bluetooth",
    "app_phonebook_options_forward_namecard": "Forward namecard",
    "app_phonebook_options_send_sms": "Send via SMS",
    "app_phonebook_new_contact_first_name": "First name",
    "app_phonebook_new_contact_second_name": "Second name",
    "app_phonebook_new_contact_number": "Number",
    "app_phonebook_new_contact_second_number": "Second number",
    "app_phonebook_new_contact_email": "Email",
    "app_phonebook_new_contact_address": "Address",
    "app_phonebook_new_contact_note": "Note",
    "app_phonebook_new_speed_dial_key": "Speed dial key",
    "app_phonebook_new_add_to_fav": "Add to favourites",
    "app_phonebook_new_add_to_ice": "Add to ICE",
    "app_phonebook_check": "CHECK",
    "app_phonebook_uncheck": "UNCHECK",

    "app_meditation_title_main": "Meditation",
    "app_meditation_preparation_time" : "Preparation time",
    "app_meditation_put_down_phone_and_wait": "<text>Put down the phone and wait for<br>the gong.</text>",
    "app_meditation_thank_you_for_session": "<text>Thank you for this<br>meditation session.</text>",
    "app_meditation_option_show_counter" : "Show meditation counter",
    "app_meditation_interval_chime" : "Interval Chime",
    "app_meditation_interval_none" : "None",
    "app_meditation_interval_every_x_minutes" : "Every %0 minutes",

    "app_music_player_all_songs": "All songs",
    "app_music_player_play": "PLAY",
    "app_music_player_music_library": "MUSIC LIBRARY",
    "app_music_player_quit": "QUIT",
    "app_music_player_music_empty_window_notification": "Press Music Library to choose\n a song from the library",

    "app_special_input_window": "Special characters",
    "app_emoji_input_window": "Emoji",

    "sms_add_rec_num" : "Add recipient or type a number",
    "sms_title_message": "New message",
    "sms_call_text"  : "Call ",
    "sms_resend_failed" : "Send again",
    "sms_delete_conversation" : "Delete conversation",
    "sms_forward_message" : "Forward message",
    "sms_copy" : "Copy",
    "sms_delete_message" : "Delete",
    "sms_from_this_sms" : "From this message",
    "sms_use_template" : "Use Template",
    "sms_paste" : "Paste",
    "sms_reply" : "REPLY",
    "sms_temp_reply" : "Reply",
    "sms_mark_read" : "Mark as read",
    "sms_mark_unread" : "Mark as unread",
    
    "settings_lang_PL": "PL",
    "settings_lang_ENG": "ENG",
    "settings_lang_DE": "DE",
    "settings_lang_SP": "SP",
    "desktop_powerdown_info1": "Now It is truly...",
    "desktop_powerdown_info2": "Disabled!!!",
    "app_desktop_update": "Update",
    "app_desktop_update_to": "Update to",
    "app_desktop_update_apply": "Do you want to apply this update?",
    "app_desktop_update_current": "Current",
    "app_desktop_update_apply": "Apply update?",
    "app_desktop_update_start": "Update start",
    "app_desktop_update_size": "size",
    "app_desktop_update_bytes": "bytes",
    "app_desktop_update_unpacking": "Unpacking"
  "app_desktop_unlock": "UNLOCK",
  "app_desktop_lock": "LOCK",
  "app_desktop_menu": "MENU",
  "app_desktop_emergency": "EMERG.",
  "app_desktop_screen_enter_passcode": "Enter passcode",
  "app_desktop_screen_wrong_pin": "Wrong passcode",
  "app_desktop_screen_allowed_attempts": "Allowed unlock attempts",
  "app_desktop_screen_blocked_info": "Sorry, phone blocked",
  "app_desktop_sim_to_unlock": "To unlock the",
  "app_desktop_sim_card": "card",
  "app_desktop_sim_type_pin": "please type a PIN code:",
  "app_desktop_sim_blocked": "The SIM card is blocked.",
  "app_desktop_sim_enter_pin": "Enter new PIN code",
  "app_desktop_sim_confirm_pin": "Enter new PIN code",
  "app_desktop_sim_type_puk": "To unblock it, type the PUK code:",
  "app_desktop_no_pin_lock": "<text>Press <b>Unlock</b> and then <b>#</b></text>",
  "app_desktop_sim_wrong_pin": "Wrong PIN code",
  "app_desktop_sim_wrong_puk": "Wrong PUK code",
  "app_desktop_sim_you_have": "You have",
  "app_desktop_sim_attempt_left_plural": "attempts left",
  "app_desktop_sim_attempt_left_singular": "attempt left",
  "app_desktop_sim_warning1": "If the code is wrong this time, the",
  "app_desktop_sim_warning2": "SIM card will be blocked and you'll",
  "app_desktop_sim_warning3": "have to contact the operator",
  "app_desktop_sim_blocked_info1": "Sorry, SIM card permanently blocked.",
  "app_desktop_sim_blocked_info2": "Please contact your service provider",
  "app_desktop_sim_cme_error": "<text>SIM card\nCME error:</text>",
  "app_desktop_unread_messages": "<text>Unread <b>messages</b></text>",
  "app_desktop_missed_calls": "<text>Missed <b>calls</b></text>",
  "app_desktop_menu_phone": "PHONE",
  "app_desktop_menu_contacts": "CONTACTS",
  "app_desktop_menu_messages": "MESSAGES",
  "app_desktop_menu_calendar": "CALENDAR",
  "app_desktop_menu_alarm": "ALARM",
  "app_desktop_menu_meditation": "MEDITATION",
  "app_desktop_menu_music": "MUSIC",
  "app_desktop_menu_tools": "TOOLS",
  "app_desktop_menu_settings_new": "SETTINGS NEW",
  "app_desktop_menu_settings": "SETTINGS",
  "app_desktop_menu_phonebook": "PHONEBOOK",
  "app_desktop_menu_title": "Menu",
  "app_desktop_tools_title": "Tools",
  "app_desktop_tools_notes": "NOTES",
  "app_desktop_tools_calculator": "CALCULATOR",
  "app_desktop_tools_recorder": "RECORDER",
  "app_desktop_tools_antenna": "ANTENNA TEST",
  "app_desktop_poweroff_title": "Turn Off",
  "app_desktop_poweroff_question": "Select Yes to power down",
  "app_desktop_show": "SHOW",
  "app_desktop_calls": "CALLS",
  "app_desktop_clear": "CLEAR",
  "app_desktop_clear_all": "CLEAR ALL",
  "app_call_call": "CALL",
  "app_call_clear": "CLEAR",
  "app_call_reject": "REJECT",
  "app_call_answer": "ANSWER",
  "app_call_message": "MESSAGE",
  "app_call_end_call": "END CALL",
  "app_call_emergency": "Emergency call",
  "app_call_is_calling": "is calling",
  "app_call_calling": "calling...",
  "app_call_call_ended": "call ended",
  "app_call_contact": "CONTACT",
  "app_call_mute": "MUTE",
  "app_call_muted": "MUTED",
  "app_call_speaker": "SPEAKER",
  "app_call_speaker_on": "SPEAKER ON",
  "app_call_bluetooth": "BLUETOOTH",
  "app_call_no_sim": "No SIM.\n\nTo make a call,\nplease insert a SIM card.",
  "app_call_offline": "You're offline.\n\nTo make a call\n switch to the Connected mode.",
  "app_messages_title_main": "Messages",
  "app_messages_new_message": "New Message",
  "app_messages_no_messages": "There are no messages yet.\nPress Left arrow to add new.",
  "app_messages_thread_delete_confirmation": "Do you really want to delete\nthis conversation?",
  "app_messages_message_delete_confirmation": "<text align='center'><p>Do you really want to <text weight='bold'>delete</text></p>this message?</text>",
  "app_messages_thread_no_result": "There are no results",
  "app_messages_message": "Message",
  "app_messages_templates": "Templates",
  "app_messages_no_sim": "No SIM.\n\nTo send a SMS,\nplease insert a SIM card.",
  "app_messages_offline": "You're offline.\n\nTo send a SMS\n switch to the Connected mode.",
  "app_messages_thread_draft": "Draft: ",
  "app_messages_thread_not_sent": "Not sent: ",
  "app_messages_thread_you": "You: ",
  "app_settings_title_main": "Settings",
  "app_settings_title_main_new": "Settings New",
  "app_settings_bt": "Bluetooth",
  "app_settings_bluetooth_add_device": "Add device",
  "app_settings_bluetooth_all_devices": "All devices",
  "app_settings_bluetooth_all_devices_indent": "  All devices",
  "app_settings_bluetooth_searching_devices": "Searching devices... \nIt may take a moment.",
  "app_settings_bluetooth_main": "Bluetooth",
  "app_settings_bluetooth_phone_name": "Phone name",
  "app_settings_bluetooth_phone_name_indent": "  Phone name",
  "app_settings_bluetooth_phone_visibility": "Phone visibility",
  "app_settings_net": "Network",
  "app_settings_disp_key": "Display and keypad",
  "app_settings_display_display_light": "Display light",
  "app_settings_display_light_main": "Frontlight",
  "app_settings_display_light_auto": "Automatic",
  "app_settings_display_light_brightness": "Brightness",
  "app_settings_display_font_size": "Font size",
  "app_settings_display_locked_screen": "Locked screen",
  "app_settings_display_keypad_light": "Keypad light",
  "app_settings_display_keypad_light_on": "Always on",
  "app_settings_display_keypad_light_active": "On when active",
  "app_settings_display_keypad_light_off": "Off",
  "app_settings_display_input_language": "Input language",
  "app_settings_display_locked_screen_autolock": "Autolock",
  "app_settings_display_locked_screen_wallpaper": "Wallpaper",
  "app_settings_display_locked_screen_quotes": "Quotes",
  "app_settings_display_locked_screen_new_quote": "New quote",
  "app_settings_display_wallpaper_logo": "Mudita logo",
  "app_settings_display_wallpaper_clock": "Clock",
  "app_settings_display_wallpaper_quotes": "Quotes",
  "app_settings_display_wallpaper_select_quotes": "Select Quotes",
  "app_settings_system": "System",
  "app_settings_apps_tools": "Apps and tools",
  "app_settings_apps_messages": "Messages",
  "app_settings_show_unread_first": "Show unread first",
  "app_settings_Templates": "Templates",
  "app_settings_apps_torch": "Torch",
  "app_settings_title_torch": "Torch",
  "app_settings_torch_sunset_red_light_option": "Sunset red light",
  "app_settings_torch_nightshift_time_option": "Nightshift time",
  "app_settings_torch_description": "In the nightshift, the torch will use\nsunset red light so it won't disturb\nyour and others sleep.",
  "app_settings_date_and_time": "Date and Time",
  "app_settings_title_day": "Day",
  "app_settings_title_month": "Month",
  "app_settings_title_year": "Year",
  "app_settings_title_time": "Time",
  "app_settings_cellular_passthrough": "Cellular <-> USB",
  "app_settings_display": "Display",
  "app_settings_phone_modes": "Phone Modes",
  "app_settings_security": "Security",
  "app_settings_language": "Language",
  "app_settings_about": "About Mudita Pure",
  "app_settings_title_languages": "Language Selection",
  "app_settings_language_english": "English",
  "app_settings_language_polish": "Polish",
  "app_settings_language_german": "German",
  "app_settings_language_spanish": "Spanish",
  "app_settings_network_active_card": "Active card",
  "app_settings_network_operator_auto_select": "Operator auto-select",
  "app_settings_network_all_operators": "All Operators",
  "app_settings_network_import_contacts_from_sim_card": "Import contacts from SIM card",
  "app_settings_network_sim1": "Sim1",
  "app_settings_network_sim2": "Sim2",
  "app_settings_toggle_on": "ON",
  "app_settings_toggle_off": "OFF",
  "app_phonebook_title_main": "Contacts",
  "app_phonebook_search_win_contacts": "Contacts",
  "common_search_uc": "Search",
  "app_phonebook_search_win_info": "Type what do you need\nand click SEARCH",
  "common_search_results": "Search results",
  "app_phonebook_search_no_results": "No contacts found.",
  "app_phonebook_list_favourites": "Favourites",
  "app_phonebook_contact_title": "Add Contact",
  "app_phonebook_contact_no_name": "no name",
  "app_phonebook_contact_note": "Note",
  "app_phonebook_contact_address": "Address",
  "app_phonebook_contact_information": "Information",
  "app_phonebook_contact_favourites_upper": "FAVOURITES",
  "app_phonebook_contact_speed_dial_upper": "SPEED DIAL",
  "app_phonebook_contact_speed_blocked_uppper": "BLOCKED",
  "app_phonebook_ice_contacts_title": "ICE Contacts",
  "app_phonebook_duplicate_numbers": "Number $CONTACT_SPEED_DIAL$ is assigned to \n $CONTACT_NAME$. Replace it?",
  "app_phonebook_duplicate_speed_dial_title": "Speed dial key ($CONTACT_SPEED_DIAL$)",
  "app_phonebook_options_title": "Options",
  "app_phonebook_options_edit": "Edit Contact",
  "app_phonebook_options_block": "Block",
  "app_phonebook_options_block_confirm": "Block this contact?",
  "app_phonebook_options_block_notification": "Contact blocked.",
  "app_phonebook_options_unblock": "Unblock",
  "app_phonebook_options_unblock_confirm": "Unblock this contact?",
  "app_phonebook_options_unblock_notification": "Contact unblocked.",
  "app_phonebook_options_delete": "Delete",
  "app_phonebook_options_delete_confirm": "Do you really want to delete\nthis contact?",
  "app_phonebook_options_delete_notification": "This contact has been deleted\nsuccessfully.",
  "app_phonebook_options_send_bt": "Send via Bluetooth",
  "app_phonebook_options_forward_namecard": "Forward namecard",
  "app_phonebook_options_send_sms": "Send via SMS",
  "app_phonebook_new_contact_first_name": "First name",
  "app_phonebook_new_contact_second_name": "Second name",
  "app_phonebook_new_contact_number": "Number",
  "app_phonebook_new_contact_second_number": "Second number",
  "app_phonebook_new_contact_email": "Email",
  "app_phonebook_new_contact_address": "Address",
  "app_phonebook_new_contact_note": "Note",
  "app_phonebook_new_speed_dial_key": "Speed dial key",
  "app_phonebook_new_add_to_fav": "Add to favourites",
  "app_phonebook_new_add_to_ice": "Add to ICE",
  "app_phonebook_check": "CHECK",
  "app_phonebook_uncheck": "UNCHECK",
  "app_meditation_title_main": "Meditation",
  "app_meditation_preparation_time": "Preparation time",
  "app_meditation_put_down_phone_and_wait": "<text>Put down the phone and wait for<br>the gong.</text>",
  "app_meditation_thank_you_for_session": "<text>Thank you for this<br>meditation session.</text>",
  "app_meditation_option_show_counter": "Show meditation counter",
  "app_meditation_interval_chime": "Interval Chime",
  "app_meditation_interval_none": "None",
  "app_meditation_interval_every_x_minutes": "Every %0 minutes",
  "app_music_player_all_songs": "All songs",
  "app_music_player_play": "PLAY",
  "app_music_player_music_library": "MUSIC LIBRARY",
  "app_music_player_quit": "QUIT",
  "app_music_player_music_empty_window_notification": "Press Music Library to choose\n a song from the library",
  "app_special_input_window": "Special characters",
  "app_emoji_input_window": "Emoji",
  "sms_add_rec_num": "Add recipient or type a number",
  "sms_title_message": "New message",
  "sms_call_text": "Call ",
  "sms_resend_failed": "Send again",
  "sms_delete_conversation": "Delete conversation",
  "sms_forward_message": "Forward message",
  "sms_copy": "Copy",
  "sms_delete_message": "Delete",
  "sms_from_this_sms": "From this message",
  "sms_use_template": "Use Template",
  "sms_paste": "Paste",
  "sms_reply": "REPLY",
  "sms_temp_reply": "Reply",
  "sms_mark_read": "Mark as read",
  "sms_mark_unread": "Mark as unread",
  "settings_lang_PL": "PL",
  "settings_lang_ENG": "ENG",
  "settings_lang_DE": "DE",
  "settings_lang_SP": "SP",
  "desktop_powerdown_info1": "Now It is truly...",
  "desktop_powerdown_info2": "Disabled!!!",
  "app_desktop_update": "Update",
  "app_desktop_update_to": "Update to",
  "app_desktop_update_apply": "Do you want to apply this update?",
  "app_desktop_update_current": "Current",
  "app_desktop_update_apply": "Apply update?",
  "app_desktop_update_start": "Update start",
  "app_desktop_update_size": "size",
  "app_desktop_update_bytes": "bytes",
  "app_desktop_update_unpacking": "Unpacking"
}

R image/assets/lang/lang_sp.json => image/assets/lang/Espanol.json +176 -190
@@ 1,192 1,178 @@
{
	"common_kbd_lower": "lang_sp_lower",
	"common_kbd_upper": "lang_sp_upper",
	"common_kbd_numeric": "numeric",

    "common_add": "ADD",
    "common_open": "ABIERTA",
    "common_call": "CALL",
    "common_save": "SAVE",
    "common_send": "SEND",
    "common_confirm": "CONFIRMAR",
    "common_select": "SELECT",
    "common_ok": "OK",
    "common_back": "ATRÁS",
    "common_set": "CONJUNTO",
    "common_yes": "Yes",
    "common_no": "No",
    "common_speaker": "SPEAKER",
    "common_mute": "MUTE",
    "common_switch": "CAMBIAR",
    "common_options": "OPCIONES",
    "common_monday": "Lunes",
    "common_tuesday": "Martes",
    "common_wednesday": "Miércoles",
    "common_thursday": "Jueves",
    "common_friday": "Viernes",
    "common_saturday": "Sábado",
    "common_sunday": "Domingo",
    
    "common_information": "Information",

    "common_january": "January",
    "common_february": "February",
    "common_march": "March",
    "common_april": "April",
    "common_may": "May",
    "common_june": "June",
    "common_july": "July",
    "common_august": "August",
    "common_september": "September",
    "common_october": "October",
    "common_november": "November",
    "common_december": "December",
    "common_yesterday" : "Yesterday",
    "common_today" : "Today",
    "locale_12hour_min" : "%I:%M %p",
    "locale_24hour_min" : "%H:%M",
    "locale_date_full" : "%m/%d/%y",
    "locale_date_short" : "%d/%m",

    "app_notes_title_main": "Notes",
    "app_notes_new_note": "New Note",
    "app_notes_save": "SAVE",
    "app_notes_edit": "EDIT",
    "app_notes_back": "BACK",

    "app_calllog_title_main": "Calls",
    "app_calllog_new_note": "New Note",
    "app_calllog_save": "SAVE",
    "app_calllog_edit": "EDIT",
    "app_calllog_back": "BACK",
    "app_calllog_type": "Type",
    "app_calllog_duration": "Duration",
    "app_calllog_incoming_call": "incoming call",
    "app_calllog_outgoing_call": "outgoing call",
    "app_calllog_missed_call": "missed call",
    "app_calllog_date": "Date",
    "app_calllog_options_title": "Options",
    "app_calllog_options_contact_details": "Contact details",
    "app_calllog_options_delete_call": "Delete call",
    "app_calllog_delete_call_confirmation": "Do you really want to delete this call from the list?",

    "app_desktop_unlock": "DESBLOQUEAR",
    "app_desktop_lock": "BLOQUEAR",
    "app_desktop_menu": "MENÚ",
    "app_desktop_emergency": "EMERGENCIA",
    "app_desktop_pin_lock": "Enter passcode",
    "app_desktop_pin_info1": "Wrong passcode",
    "app_desktop_pin_info2": "Allowed unlock attempts",
    "app_desktop_pin_blocked1": "Sorry, phone blocked",
    "app_desktop_unread_messages": "unread messages",
    "app_desktop_missed_calls": "missed calls",
    "app_desktop_menu_phone": "PHONE",
    "app_desktop_menu_contacts": "CONTACTS",
    "app_desktop_menu_messages": "MESSAGES",
    "app_desktop_menu_calendar": "CALENDAR",
    "app_desktop_menu_alarm": "ALARM",
    "app_desktop_menu_meditation": "MEDITATION",
    "app_desktop_menu_music": "MUSIC",
    "app_desktop_menu_tools": "TOOLS",
    "app_desktop_menu_settings": "SETTINGS",
    "app_desktop_menu_phonebook": "CONTACTOS",
    "app_desktop_menu_title": "Main Menu",
    "app_desktop_tools_title": "Tools",
    "app_desktop_tools_notes": "NOTES",
    "app_desktop_tools_calculator": "CALCULATOR",
    "app_desktop_tools_recorder": "RECORDER",
    "app_desktop_tools_antenna": "ANTENNA TEST",
    "app_desktop_poweroff_title": "Turn Off",
    "app_desktop_poweroff_question": "Select Yes to power down",
    
    "app_call_call": "CALL",
    "app_call_clear": "CLEAR",
    "app_call_reject": "REJECT",
    "app_call_answer": "ANSWER",
    "app_call_message": "MESSAGE",
    "app_call_return": "RETURN",
    "app_call_end_call": "END CALL",
    "app_call_emergency": "Emergency call",
    "app_call_is_calling": "is calling",
    "app_call_call_ended": "call ended",
    "app_call_contact": "CONTACT",
    
    "app_messages_title_main": "Messages",
    "app_messages_new_message": "New Message",
    
    "app_settings_title_main": "Settings",
    "app_settings_bt" : "Bluetooth",
    "app_settings_date_and_time": "Date and Time",
    	"app_settings_title_day": "Day",
		"app_settings_title_month": "Month",
		"app_settings_title_year": "Year",
		"app_settings_title_time": "Time",
    "app_settings_display": "Display",
    "app_settings_phone_modes": "Phone Modes",
    "app_settings_security": "Security",
    "app_settings_language": "Language",
    "app_settings_about": "About Mudita Pure",
	"app_settings_title_languages": "Language Selection",
	"app_settings_language_english": "Inglesa",
	"app_settings_language_polish": "Polaco",
	"app_settings_language_german": "Alemana",
	"app_settings_language_spanish": "Español",
    "app_settings_date_time": "Date and Time",
    "app_settings_cellular_passthrough": "Cellular <-> USB",

    "app_phonebook_title_main": "Contactos",
	"app_phonebook_call": "CALL",
	"app_phonebook_save": "SAVE",
    "app_phonebook_open": "OPEN",
    "app_phonebook_select": "SELECT",
    "app_phonebook_search_win_contacts": "Contacts",
    "common_search_uc": "Search",
    "app_phonebook_search_win_info": "Type what do you need and click SEARCH",
    "common_search_results": "Results",
    "app_phonebook_list_favourites": "Favourites",
    "app_phonebook_contact_title": "Add Contact",
    "app_phonebook_contact_no_name": "no name",
    "app_phonebook_contact_note": "Note",
    "app_phonebook_contact_address": "Address",
    "app_phonebook_contact_information": "Information",
    "app_phonebook_contact_favourites_upper": "FAVOURITES",
    "app_phonebook_contact_speed_dial_upper": "SPEED DIAL",
    "app_phonebook_contact_speed_blocked_uppper": "BLOCKED",
    "app_phonebook_duplicate_numbers": "This numbers belongs to\n$CONTACT_NAME$. Would you like\nto create a new contact?",
    "app_phonebook_duplicate_speed_dial":"This number is already assigned\nto $CONTACT_NAME$. Would you\nlike to replace it?",
    "app_phonebook_options_title": "Options",
    "app_phonebook_options_edit": "Edit Contact",
    "app_phonebook_options_block": "Block",
    "app_phonebook_options_block_confirm": "Do you really want to\nblock this contact?",
    "app_phonebook_options_delete": "Delete",
    "app_phonebook_options_delete_confirm": "Do you really want to\ndelete this contact?",
    "app_phonebook_options_send_bt": "Send via Bluetooth",
    "app_phonebook_options_forward_namecard": "Forward namecard",
    "app_phonebook_options_send_sms": "Send via SMS",
    "app_phonebook_new_contact_first_name": "First name",
    "app_phonebook_new_contact_second_name": "Second name",
    "app_phonebook_new_contact_number": "Number",
    "app_phonebook_new_contact_second_number": "Second number",
    "app_phonebook_new_contact_email": "Email",
    "app_phonebook_new_contact_address": "Address",
    "app_phonebook_new_contact_note": "Note",
    "app_phonebook_new_speed_dial_key": "Speed dial key",
    "app_phonebook_new_add_to_fav": "Add to favourites",
    "app_phonebook_new_add_to_ice": "Add to ICE",
    "app_phonebook_check": "CHECK",
    "app_phonebook_uncheck": "UNCHECK",

    "app_meditation_title_main": "Meditation",

    "sms_call_text"  : "Llamado: ",
    "sms_contact_details" : "Detales de contacto: ",
    "sms_delete_conversation" : "Eliminar conversación",

    "settings_lang_PL": "PL",
    "settings_lang_ENG": "ENG",
    "settings_lang_DE": "DE",
    "settings_lang_SP": "SP",
    "desktop_powerdown_info1": "Now It is truly...",
    "desktop_powerdown_info2": "Disabled!!!"

  "common_kbd_lower": "lang_sp_lower",
  "common_kbd_upper": "lang_sp_upper",
  "common_kbd_numeric": "numeric",
  "common_add": "ADD",
  "common_open": "ABIERTA",
  "common_call": "CALL",
  "common_save": "SAVE",
  "common_send": "SEND",
  "common_confirm": "CONFIRMAR",
  "common_select": "SELECT",
  "common_ok": "OK",
  "common_back": "ATRÁS",
  "common_set": "CONJUNTO",
  "common_yes": "Yes",
  "common_no": "No",
  "common_speaker": "SPEAKER",
  "common_mute": "MUTE",
  "common_switch": "CAMBIAR",
  "common_options": "OPCIONES",
  "common_monday": "Lunes",
  "common_tuesday": "Martes",
  "common_wednesday": "Miércoles",
  "common_thursday": "Jueves",
  "common_friday": "Viernes",
  "common_saturday": "Sábado",
  "common_sunday": "Domingo",
  "common_information": "Information",
  "common_january": "January",
  "common_february": "February",
  "common_march": "March",
  "common_april": "April",
  "common_may": "May",
  "common_june": "June",
  "common_july": "July",
  "common_august": "August",
  "common_september": "September",
  "common_october": "October",
  "common_november": "November",
  "common_december": "December",
  "common_yesterday": "Yesterday",
  "common_today": "Today",
  "locale_12hour_min": "%I:%M %p",
  "locale_24hour_min": "%H:%M",
  "locale_date_full": "%m/%d/%y",
  "locale_date_short": "%d/%m",
  "app_notes_title_main": "Notes",
  "app_notes_new_note": "New Note",
  "app_notes_save": "SAVE",
  "app_notes_edit": "EDIT",
  "app_notes_back": "BACK",
  "app_calllog_title_main": "Calls",
  "app_calllog_new_note": "New Note",
  "app_calllog_save": "SAVE",
  "app_calllog_edit": "EDIT",
  "app_calllog_back": "BACK",
  "app_calllog_type": "Type",
  "app_calllog_duration": "Duration",
  "app_calllog_incoming_call": "incoming call",
  "app_calllog_outgoing_call": "outgoing call",
  "app_calllog_missed_call": "missed call",
  "app_calllog_date": "Date",
  "app_calllog_options_title": "Options",
  "app_calllog_options_contact_details": "Contact details",
  "app_calllog_options_delete_call": "Delete call",
  "app_calllog_delete_call_confirmation": "Do you really want to delete this call from the list?",
  "app_desktop_unlock": "DESBLOQUEAR",
  "app_desktop_lock": "BLOQUEAR",
  "app_desktop_menu": "MENÚ",
  "app_desktop_emergency": "EMERGENCIA",
  "app_desktop_pin_lock": "Enter passcode",
  "app_desktop_pin_info1": "Wrong passcode",
  "app_desktop_pin_info2": "Allowed unlock attempts",
  "app_desktop_pin_blocked1": "Sorry, phone blocked",
  "app_desktop_unread_messages": "unread messages",
  "app_desktop_missed_calls": "missed calls",
  "app_desktop_menu_phone": "PHONE",
  "app_desktop_menu_contacts": "CONTACTS",
  "app_desktop_menu_messages": "MESSAGES",
  "app_desktop_menu_calendar": "CALENDAR",
  "app_desktop_menu_alarm": "ALARM",
  "app_desktop_menu_meditation": "MEDITATION",
  "app_desktop_menu_music": "MUSIC",
  "app_desktop_menu_tools": "TOOLS",
  "app_desktop_menu_settings": "SETTINGS",
  "app_desktop_menu_phonebook": "CONTACTOS",
  "app_desktop_menu_title": "Main Menu",
  "app_desktop_tools_title": "Tools",
  "app_desktop_tools_notes": "NOTES",
  "app_desktop_tools_calculator": "CALCULATOR",
  "app_desktop_tools_recorder": "RECORDER",
  "app_desktop_tools_antenna": "ANTENNA TEST",
  "app_desktop_poweroff_title": "Turn Off",
  "app_desktop_poweroff_question": "Select Yes to power down",
  "app_call_call": "CALL",
  "app_call_clear": "CLEAR",
  "app_call_reject": "REJECT",
  "app_call_answer": "ANSWER",
  "app_call_message": "MESSAGE",
  "app_call_return": "RETURN",
  "app_call_end_call": "END CALL",
  "app_call_emergency": "Emergency call",
  "app_call_is_calling": "is calling",
  "app_call_call_ended": "call ended",
  "app_call_contact": "CONTACT",
  "app_messages_title_main": "Messages",
  "app_messages_new_message": "New Message",
  "app_settings_title_main": "Settings",
  "app_settings_bt": "Bluetooth",
  "app_settings_date_and_time": "Date and Time",
  "app_settings_title_day": "Day",
  "app_settings_title_month": "Month",
  "app_settings_title_year": "Year",
  "app_settings_title_time": "Time",
  "app_settings_display": "Display",
  "app_settings_phone_modes": "Phone Modes",
  "app_settings_security": "Security",
  "app_settings_language": "Language",
  "app_settings_about": "About Mudita Pure",
  "app_settings_title_languages": "Language Selection",
  "app_settings_language_english": "Inglesa",
  "app_settings_language_polish": "Polaco",
  "app_settings_language_german": "Alemana",
  "app_settings_language_spanish": "Español",
  "app_settings_date_time": "Date and Time",
  "app_settings_cellular_passthrough": "Cellular <-> USB",
  "app_phonebook_title_main": "Contactos",
  "app_phonebook_call": "CALL",
  "app_phonebook_save": "SAVE",
  "app_phonebook_open": "OPEN",
  "app_phonebook_select": "SELECT",
  "app_phonebook_search_win_contacts": "Contacts",
  "common_search_uc": "Search",
  "app_phonebook_search_win_info": "Type what do you need and click SEARCH",
  "common_search_results": "Results",
  "app_phonebook_list_favourites": "Favourites",
  "app_phonebook_contact_title": "Add Contact",
  "app_phonebook_contact_no_name": "no name",
  "app_phonebook_contact_note": "Note",
  "app_phonebook_contact_address": "Address",
  "app_phonebook_contact_information": "Information",
  "app_phonebook_contact_favourites_upper": "FAVOURITES",
  "app_phonebook_contact_speed_dial_upper": "SPEED DIAL",
  "app_phonebook_contact_speed_blocked_uppper": "BLOCKED",
  "app_phonebook_duplicate_numbers": "This numbers belongs to\n$CONTACT_NAME$. Would you like\nto create a new contact?",
  "app_phonebook_duplicate_speed_dial": "This number is already assigned\nto $CONTACT_NAME$. Would you\nlike to replace it?",
  "app_phonebook_options_title": "Options",
  "app_phonebook_options_edit": "Edit Contact",
  "app_phonebook_options_block": "Block",
  "app_phonebook_options_block_confirm": "Do you really want to\nblock this contact?",
  "app_phonebook_options_delete": "Delete",
  "app_phonebook_options_delete_confirm": "Do you really want to\ndelete this contact?",
  "app_phonebook_options_send_bt": "Send via Bluetooth",
  "app_phonebook_options_forward_namecard": "Forward namecard",
  "app_phonebook_options_send_sms": "Send via SMS",
  "app_phonebook_new_contact_first_name": "First name",
  "app_phonebook_new_contact_second_name": "Second name",
  "app_phonebook_new_contact_number": "Number",
  "app_phonebook_new_contact_second_number": "Second number",
  "app_phonebook_new_contact_email": "Email",
  "app_phonebook_new_contact_address": "Address",
  "app_phonebook_new_contact_note": "Note",
  "app_phonebook_new_speed_dial_key": "Speed dial key",
  "app_phonebook_new_add_to_fav": "Add to favourites",
  "app_phonebook_new_add_to_ice": "Add to ICE",
  "app_phonebook_check": "CHECK",
  "app_phonebook_uncheck": "UNCHECK",
  "app_meditation_title_main": "Meditation",
  "sms_call_text": "Llamado: ",
  "sms_contact_details": "Detales de contacto: ",
  "sms_delete_conversation": "Eliminar conversación",
  "settings_lang_PL": "PL",
  "settings_lang_ENG": "ENG",
  "settings_lang_DE": "DE",
  "settings_lang_SP": "SP",
  "desktop_powerdown_info1": "Now It is truly...",
  "desktop_powerdown_info2": "Disabled!!!"
}

R image/assets/lang/lang_fr.json => image/assets/lang/Francais.json +171 -185
@@ 1,187 1,173 @@
{
	"common_kbd_lower": "lang_fr_lower",
	"common_kbd_upper": "lang_fr_upper",
	"common_kbd_numeric": "numeric",

    "common_add": "ADD",
    "common_open": "OPEN",
    "common_call": "CALL",
    "common_save": "SAVE",
    "common_send": "SEND",
    "common_confirm": "CONFIRM",
    "common_select": "SELECT",
    "common_ok": "OK",
    "common_back": "BACK",
    "common_set": "SET",
    "common_yes": "Yes",
    "common_no": "No",
    "common_speaker": "SPEAKER",
    "common_mute": "MUTE",
    "common_switch": "SWITCH",
    "common_options": "OPTIONS",
    "common_monday": "Monday",
    "common_tuesday": "Tuesday",
    "common_wednesday": "Wednesday",
    "common_thursday": "Thursday",
    "common_friday": "Friday",
    "common_saturday": "Saturday",
    "common_sunday": "Sunday",

    "common_information": "Information",

    "common_january": "January",
    "common_february": "February",
    "common_march": "March",
    "common_april": "April",
    "common_may": "May",
    "common_june": "June",
    "common_july": "July",
    "common_august": "August",
    "common_september": "September",
    "common_october": "October",
    "common_november": "November",
    "common_december": "December",
    "common_yesterday" : "Yesterday",
    "common_today" : "Today",
    "locale_12hour_min" : "%I:%M %p",
    "locale_24hour_min" : "%H:%M",
    "locale_date_full" : "%m/%d/%y",
    "locale_date_short" : "%d/%m",

    "app_notes_title_main": "Notes",
    "app_notes_new_note": "New Note",
    "app_notes_save": "SAVE",
    "app_notes_edit": "EDIT",
    "app_notes_back": "BACK",

    "app_calllog_title_main": "Calls",
    "app_calllog_save": "SAVE",
    "app_calllog_edit": "EDIT",
    "app_calllog_back": "BACK",
    "app_calllog_type": "Type",
    "app_calllog_duration": "Duration",
    "app_calllog_incoming_call": "incoming call",
    "app_calllog_outgoing_call": "outgoing call",
    "app_calllog_missed_call": "missed call",
    "app_calllog_date": "Date",
    "app_calllog_options_title": "Options",
    "app_calllog_options_contact_details": "Contact details",
    "app_calllog_options_delete_call": "Delete call",
    "app_calllog_delete_call_confirmation": "Do you really want to delete this call from the list?",

    "app_desktop_unlock": "UNLOCK",
    "app_desktop_lock": "LOCK",
    "app_desktop_menu": "MENU",
    "app_desktop_emergency": "EMERG.",
    "app_desktop_pin_lock": "Enter passcode",
    "app_desktop_pin_info1": "Wrong passcode",
    "app_desktop_pin_info2": "Allowed unlock attempts",
    "app_desktop_pin_blocked1": "Sorry, phone blocked",
    "app_desktop_unread_messages": "unread messages",
    "app_desktop_missed_calls": "missed calls",
    "app_desktop_menu_phone": "PHONE",
    "app_desktop_menu_contacts": "CONTACTS",
    "app_desktop_menu_messages": "MESSAGES",
    "app_desktop_menu_calendar": "CALENDAR",
    "app_desktop_menu_alarm": "ALARM",
    "app_desktop_menu_meditation": "MEDITATION",
    "app_desktop_menu_music": "MUSIC",
    "app_desktop_menu_tools": "TOOLS",
    "app_desktop_menu_settings": "SETTINGS",
    "app_desktop_menu_phonebook": "PHONEBOOK",
    "app_desktop_menu_title": "Main Menu",
    "app_desktop_tools_title": "Tools",
    "app_desktop_tools_notes": "NOTES",
    "app_desktop_tools_calculator": "CALCULATOR",
    "app_desktop_tools_recorder": "RECORDER",
    "app_desktop_tools_antenna": "ANTENNA TEST",
    "app_desktop_poweroff_title": "Turn Off",
    "app_desktop_poweroff_question": "Select Yes to power down",

    "app_call_call": "CALL",
    "app_call_clear": "CLEAR",
    "app_call_reject": "REJECT",
    "app_call_answer": "ANSWER",
    "app_call_message": "MESSAGE",
    "app_call_return": "RETURN",
    "app_call_end_call": "END CALL",
    "app_call_emergency": "Emergency call",
    "app_call_is_calling": "is calling",
    "app_call_call_ended": "call ended",
    "app_call_contact": "CONTACT",

    "app_settings_title_main": "Settings",
    "app_settings_bt" : "Bluetooth",
	"app_settings_date_and_time": "Date and Time",
		"app_settings_title_day": "Day",
		"app_settings_title_month": "Month",
		"app_settings_title_year": "Year",
		"app_settings_title_time": "Time",
    "app_settings_cellular_passthrough": "Cellular <-> USB",
    "app_settings_display": "Display",
    "app_settings_phone_modes": "Phone Modes",
    "app_settings_security": "Security",
    "app_settings_language": "Language",
    "app_settings_about": "About Mudita Pure",
	"app_settings_title_languages": "Language Selection",
	"app_settings_language_english": "English",
	"app_settings_language_polish": "Polish",
	"app_settings_language_german": "German",
	"app_settings_language_spanish": "Spanish",
    "app_settings_date_time": "Date and Time",

	"app_messages_title_main": "Messages",
	"app_messages_new_message": "New Message",

    "app_phonebook_title_main": "Contacts",
    "app_phonebook_search_win_contacts": "Contacts",
    "common_search_uc": "Search",
    "app_phonebook_search_win_info": "Type what do you need and click SEARCH",
    "common_search_results": "Results",
    "app_phonebook_list_favourites": "Favourites",
    "app_phonebook_contact_title": "Add Contact",
    "app_phonebook_contact_note": "Note",
    "app_phonebook_contact_address": "Address",
    "app_phonebook_contact_information": "Information",
    "app_phonebook_contact_favourites_upper": "FAVOURITES",
    "app_phonebook_contact_speed_dial_upper": "SPEED DIAL",
    "app_phonebook_contact_speed_blocked_uppper": "BLOCKED",
    "app_phonebook_duplicate_numbers": "This numbers belongs to\n$CONTACT_NAME$. Would you like\nto create a new contact?",
    "app_phonebook_duplicate_speed_dial":"This number is already assigned\nto $CONTACT_NAME$. Would you\nlike to replace it?",
    "app_phonebook_options_title": "Options",
    "app_phonebook_contact_no_name": "no name",
    "app_phonebook_options_edit": "Edit Contact",
    "app_phonebook_options_block": "Block",
    "app_phonebook_options_block_confirm": "Do you really want to\nblock this contact?",
    "app_phonebook_options_delete": "Delete",
    "app_phonebook_options_delete_confirm": "Do you really want to\ndelete this contact?",
    "app_phonebook_options_send_bt": "Send via Bluetooth",
    "app_phonebook_options_forward_namecard": "Forward namecard",
    "app_phonebook_options_send_sms": "Send via SMS",
    "app_phonebook_new_contact_first_name": "First name",
    "app_phonebook_new_contact_second_name": "Second name",
    "app_phonebook_new_contact_number": "Number",
    "app_phonebook_new_contact_second_number": "Second number",
    "app_phonebook_new_contact_email": "Email",
    "app_phonebook_new_contact_address": "Address",
    "app_phonebook_new_contact_note": "Note",
    "app_phonebook_new_speed_dial_key": "Speed dial key",
    "app_phonebook_new_add_to_fav": "Add to favourites",
    "app_phonebook_new_add_to_ice": "Add to ICE",
    "app_phonebook_check": "CHECK",
    "app_phonebook_uncheck": "UNCHECK",

    "app_meditation_title_main": "Meditation",

    "sms_call_text"  : "Call: ",
    "sms_contact_details" : "Contact details",
    "sms_delete_conversation" : "Delete conversation",

    "settings_lang_PL": "PL",
    "settings_lang_ENG": "ENG",
    "settings_lang_DE": "DE",
    "settings_lang_SP": "SP",
    "desktop_powerdown_info1": "Now It is truly...",
    "desktop_powerdown_info2": "Disabled!!!"

  "common_kbd_lower": "lang_fr_lower",
  "common_kbd_upper": "lang_fr_upper",
  "common_kbd_numeric": "numeric",
  "common_add": "ADD",
  "common_open": "OPEN",
  "common_call": "CALL",
  "common_save": "SAVE",
  "common_send": "SEND",
  "common_confirm": "CONFIRM",
  "common_select": "SELECT",
  "common_ok": "OK",
  "common_back": "BACK",
  "common_set": "SET",
  "common_yes": "Yes",
  "common_no": "No",
  "common_speaker": "SPEAKER",
  "common_mute": "MUTE",
  "common_switch": "SWITCH",
  "common_options": "OPTIONS",
  "common_monday": "Monday",
  "common_tuesday": "Tuesday",
  "common_wednesday": "Wednesday",
  "common_thursday": "Thursday",
  "common_friday": "Friday",
  "common_saturday": "Saturday",
  "common_sunday": "Sunday",
  "common_information": "Information",
  "common_january": "January",
  "common_february": "February",
  "common_march": "March",
  "common_april": "April",
  "common_may": "May",
  "common_june": "June",
  "common_july": "July",
  "common_august": "August",
  "common_september": "September",
  "common_october": "October",
  "common_november": "November",
  "common_december": "December",
  "common_yesterday": "Yesterday",
  "common_today": "Today",
  "locale_12hour_min": "%I:%M %p",
  "locale_24hour_min": "%H:%M",
  "locale_date_full": "%m/%d/%y",
  "locale_date_short": "%d/%m",
  "app_notes_title_main": "Notes",
  "app_notes_new_note": "New Note",
  "app_notes_save": "SAVE",
  "app_notes_edit": "EDIT",
  "app_notes_back": "BACK",
  "app_calllog_title_main": "Calls",
  "app_calllog_save": "SAVE",
  "app_calllog_edit": "EDIT",
  "app_calllog_back": "BACK",
  "app_calllog_type": "Type",
  "app_calllog_duration": "Duration",
  "app_calllog_incoming_call": "incoming call",
  "app_calllog_outgoing_call": "outgoing call",
  "app_calllog_missed_call": "missed call",
  "app_calllog_date": "Date",
  "app_calllog_options_title": "Options",
  "app_calllog_options_contact_details": "Contact details",
  "app_calllog_options_delete_call": "Delete call",
  "app_calllog_delete_call_confirmation": "Do you really want to delete this call from the list?",
  "app_desktop_unlock": "UNLOCK",
  "app_desktop_lock": "LOCK",
  "app_desktop_menu": "MENU",
  "app_desktop_emergency": "EMERG.",
  "app_desktop_pin_lock": "Enter passcode",
  "app_desktop_pin_info1": "Wrong passcode",
  "app_desktop_pin_info2": "Allowed unlock attempts",
  "app_desktop_pin_blocked1": "Sorry, phone blocked",
  "app_desktop_unread_messages": "unread messages",
  "app_desktop_missed_calls": "missed calls",
  "app_desktop_menu_phone": "PHONE",
  "app_desktop_menu_contacts": "CONTACTS",
  "app_desktop_menu_messages": "MESSAGES",
  "app_desktop_menu_calendar": "CALENDAR",
  "app_desktop_menu_alarm": "ALARM",
  "app_desktop_menu_meditation": "MEDITATION",
  "app_desktop_menu_music": "MUSIC",
  "app_desktop_menu_tools": "TOOLS",
  "app_desktop_menu_settings": "SETTINGS",
  "app_desktop_menu_phonebook": "PHONEBOOK",
  "app_desktop_menu_title": "Main Menu",
  "app_desktop_tools_title": "Tools",
  "app_desktop_tools_notes": "NOTES",
  "app_desktop_tools_calculator": "CALCULATOR",
  "app_desktop_tools_recorder": "RECORDER",
  "app_desktop_tools_antenna": "ANTENNA TEST",
  "app_desktop_poweroff_title": "Turn Off",
  "app_desktop_poweroff_question": "Select Yes to power down",
  "app_call_call": "CALL",
  "app_call_clear": "CLEAR",
  "app_call_reject": "REJECT",
  "app_call_answer": "ANSWER",
  "app_call_message": "MESSAGE",
  "app_call_return": "RETURN",
  "app_call_end_call": "END CALL",
  "app_call_emergency": "Emergency call",
  "app_call_is_calling": "is calling",
  "app_call_call_ended": "call ended",
  "app_call_contact": "CONTACT",
  "app_settings_title_main": "Settings",
  "app_settings_bt": "Bluetooth",
  "app_settings_date_and_time": "Date and Time",
  "app_settings_title_day": "Day",
  "app_settings_title_month": "Month",
  "app_settings_title_year": "Year",
  "app_settings_title_time": "Time",
  "app_settings_cellular_passthrough": "Cellular <-> USB",
  "app_settings_display": "Display",
  "app_settings_phone_modes": "Phone Modes",
  "app_settings_security": "Security",
  "app_settings_language": "Language",
  "app_settings_about": "About Mudita Pure",
  "app_settings_title_languages": "Language Selection",
  "app_settings_language_english": "English",
  "app_settings_language_polish": "Polish",
  "app_settings_language_german": "German",
  "app_settings_language_spanish": "Spanish",
  "app_settings_date_time": "Date and Time",
  "app_messages_title_main": "Messages",
  "app_messages_new_message": "New Message",
  "app_phonebook_title_main": "Contacts",
  "app_phonebook_search_win_contacts": "Contacts",
  "common_search_uc": "Search",
  "app_phonebook_search_win_info": "Type what do you need and click SEARCH",
  "common_search_results": "Results",
  "app_phonebook_list_favourites": "Favourites",
  "app_phonebook_contact_title": "Add Contact",
  "app_phonebook_contact_note": "Note",
  "app_phonebook_contact_address": "Address",
  "app_phonebook_contact_information": "Information",
  "app_phonebook_contact_favourites_upper": "FAVOURITES",
  "app_phonebook_contact_speed_dial_upper": "SPEED DIAL",
  "app_phonebook_contact_speed_blocked_uppper": "BLOCKED",
  "app_phonebook_duplicate_numbers": "This numbers belongs to\n$CONTACT_NAME$. Would you like\nto create a new contact?",
  "app_phonebook_duplicate_speed_dial": "This number is already assigned\nto $CONTACT_NAME$. Would you\nlike to replace it?",
  "app_phonebook_options_title": "Options",
  "app_phonebook_contact_no_name": "no name",
  "app_phonebook_options_edit": "Edit Contact",
  "app_phonebook_options_block": "Block",
  "app_phonebook_options_block_confirm": "Do you really want to\nblock this contact?",
  "app_phonebook_options_delete": "Delete",
  "app_phonebook_options_delete_confirm": "Do you really want to\ndelete this contact?",
  "app_phonebook_options_send_bt": "Send via Bluetooth",
  "app_phonebook_options_forward_namecard": "Forward namecard",
  "app_phonebook_options_send_sms": "Send via SMS",
  "app_phonebook_new_contact_first_name": "First name",
  "app_phonebook_new_contact_second_name": "Second name",
  "app_phonebook_new_contact_number": "Number",
  "app_phonebook_new_contact_second_number": "Second number",
  "app_phonebook_new_contact_email": "Email",
  "app_phonebook_new_contact_address": "Address",
  "app_phonebook_new_contact_note": "Note",
  "app_phonebook_new_speed_dial_key": "Speed dial key",
  "app_phonebook_new_add_to_fav": "Add to favourites",
  "app_phonebook_new_add_to_ice": "Add to ICE",
  "app_phonebook_check": "CHECK",
  "app_phonebook_uncheck": "UNCHECK",
  "app_meditation_title_main": "Meditation",
  "sms_call_text": "Call: ",
  "sms_contact_details": "Contact details",
  "sms_delete_conversation": "Delete conversation",
  "settings_lang_PL": "PL",
  "settings_lang_ENG": "ENG",
  "settings_lang_DE": "DE",
  "settings_lang_SP": "SP",
  "desktop_powerdown_info1": "Now It is truly...",
  "desktop_powerdown_info2": "Disabled!!!"
}

R image/assets/lang/lang_pl.json => image/assets/lang/Polski.json +171 -187
@@ 1,189 1,173 @@
{
	"common_kbd_lower": "lang_pl_lower",
	"common_kbd_upper": "lang_pl_upper",
	"common_kbd_numeric": "numeric",

    "common_add": "DODAJ",
    "common_open": "OTWÓRZ",
    "common_call": "DZWOŃ",
    "common_save": "ZAPISZ",
    "common_send": "WYŚLIJ",
    "common_confirm": "POTWIERDŹ",
    "common_select": "WYBIERZ",
    "common_ok": "DALEJ",
    "common_back": "WRÓĆ",
    "common_set": "USTAW",
    "common_yes": "Tak",
    "common_no": "Nie",
    "common_speaker": "GŁOŚNIK",
    "common_mute": "WYCISZ",
    "common_switch": "ZMIEŃ",
    "common_options": "OPCJE",
    "common_monday": "poniedziałek",
    "common_tuesday": "wtorek",
    "common_wednesday": "środa",
    "common_thursday": "czwartek",
    "common_friday": "piątek",
    "common_saturday": "sobota",
    "common_sunday": "niedziela",

    "common_information": "Informacje",

    "common_january": "stycznia",
    "common_february": "lutego",
    "common_march": "marca",
    "common_april": "kwietnia",
    "common_may": "maja",
    "common_june": "czerwca",
    "common_july": "lipca",
    "common_august": "sierpnia",
    "common_september": "września",
    "common_october": "października",
    "common_november": "listopada",
    "common_december": "grudnia",
    "common_yesterday" : "wczoraj",
    "common_today" : "dzisiaj",
    "locale_12hour_min" : "%I:%M",
    "locale_24hour_min" : "%H:%M",
    "locale_date_full" : "%d.%m.%y",
    "locale_date_short" : "%d.%m",

    "app_calculator_decimal_separator": ",",

    "app_notes_title_main": "Notatki",
    "app_notes_new_note": "Nowa Notatka",
    "app_notes_save": "ZAPISZ",
    "app_notes_edit": "EDYTUJ",
    "app_notes_back": "WROĆ",

    "app_calllog_title_main": "Rejestr Połączeń",
    "app_calllog_save": "ZAPISZ",
    "app_calllog_edit": "EDYTUJ",
    "app_calllog_back": "WRÓĆ",
    "app_calllog_type": "Typ",
    "app_calllog_duration": "Czas trwania",
    "app_calllog_incoming_call": "połączenie przychodzące",
    "app_calllog_outgoing_call": "połączenie wychodzące",
    "app_calllog_missed_call": "połączenie nieodebrane",
    "app_calllog_date": "Data",
    "app_calllog_options_title": "Opcje",
    "app_calllog_options_contact_details": "Szczegóły kontaktu",
    "app_calllog_options_delete_call": "Usuń połączenie",
    "app_calllog_delete_call_confirmation": "Czy naprawdę chcesz usunąć to połączenie z listy?",

    "app_desktop_unlock": "ODBLOKUJ",
    "app_desktop_lock": "ZABLOKUJ",
    "app_desktop_menu": "MENU",
    "app_desktop_emergency": "ALARMOWE",
    "app_desktop_pin_lock": "Wprowadź hasło",
    "app_desktop_pin_info1": "Błędne hasło",
    "app_desktop_pin_info2": "Pozostało prób",
    "app_desktop_pin_blocked1": "Telefon zablokowany",
    "app_desktop_unread_messages": "nieprzeczytane wiadomości",
    "app_desktop_missed_calls": "nieodebrane połączenia",
    
    "app_desktop_menu_phone": "TELEFON",
    "app_desktop_menu_contacts": "KONTAKTY",
    "app_desktop_menu_messages": "WIADOMOŚCI",
    "app_desktop_menu_calendar": "KALENDARZ",
    "app_desktop_menu_alarm": "ALARMY",
    "app_desktop_menu_meditation": "MEDYTACJA",
    "app_desktop_menu_music": "MUZYKA",
	"app_desktop_menu_tools": "NARZĘDZIA",
    "app_desktop_menu_settings": "USTAWIENIA",
    "app_desktop_menu_phonebook": "KONTAKTY",
    "app_desktop_menu_title": "Główne Menu",
    "app_desktop_tools_title": "Narzędzia",
    "app_desktop_tools_notes": "NOTATKI",
    "app_desktop_tools_calculator": "KALKULATOR",
    "app_desktop_tools_recorder": "DYKTAFON",
    "app_desktop_tools_antenna": "ANTENNA TEST",
    "app_desktop_poweroff_title": "Wyłączanie",
    "app_desktop_poweroff_question": "Wybierz Tak by wyłączyć",
    
    "app_call_call": "DZWOŃ",
    "app_call_clear": "WYCZYŚĆ",
    "app_call_reject": "ODRZUĆ",
    "app_call_answer": "ODBIERZ",
    "app_call_message": "WIADOMOŚĆ",
    "app_call_return": "POWRÓT",
    "app_call_end_call": "ZAKOŃCZ",
    "app_call_emergency": "Numer alarmowy",
    "app_call_is_calling": "dzwoni",
    "app_call_call_ended": "zakończono",
    "app_call_contact": "KONTAKT",
    
    "app_settings_title_main": "Ustawienia",
    "app_settings_bt" : "Bluetooth",
    "app_settings_date_and_time": "Data i Czas",
    	"app_settings_title_day": "Dzień",
		"app_settings_title_month": "Miesiąc",
		"app_settings_title_year": "Rok",
		"app_settings_title_time": "Czas",
    "app_settings_cellular_passthrough": "Modem <-> USB",
    "app_settings_display": "Ekran",
    "app_settings_phone_modes": "Tryby Pracy",
    "app_settings_security": "Bezpieczeństwo",
    "app_settings_language": "Język",
    "app_settings_about": "O Mudita Pure",
	"app_settings_title_languages": "Wybór Języka",
	"app_settings_language_english": "Angielski",
	"app_settings_language_polish": "Polski",
	"app_settings_language_german": "Niemiecki",
	"app_settings_language_spanish": "Hiszpański",
	
	"app_messages_title_main": "Wiadomości",
	"app_messages_new_message": "Nowa Wiadomość",

    "app_phonebook_title_main": "Kontakty",
    "app_phonebook_search_win_contacts": "Kontakty",
    "common_search_uc": "Szukaj",
    "app_phonebook_search_win_info": "wpisz czego szukasz i naciśnij SZUKAJ",
    "common_search_results": "Rezultaty",
    "app_phonebook_list_favourites": "Ulubione",
    "app_phonebook_contact_title": "Dodaj Kontakt",
    "app_phonebook_contact_no_name": "brak nazwy",
    "app_phonebook_contact_note": "Notatka",
    "app_phonebook_contact_address": "Adres",
    "app_phonebook_contact_information": "Informacje",
    "app_phonebook_contact_favourites_upper": "ULUBIONE",
    "app_phonebook_contact_speed_dial_upper": "SZYBKIE WYBIERANIE",
    "app_phonebook_contact_speed_blocked_uppper": "ZABLOKOWANY",
    "app_phonebook_duplicate_numbers": "Ten numer należy do\n$CONTACT_NAME$. Czy chcesz\nutworzyć nowy kontakt?",
    "app_phonebook_duplicate_speed_dial":"Ten numer jest już przypisany\ndo $CONTACT_NAME$. Czy chcesz\ngo zastąpić?",
    "app_phonebook_options_title": "Opcje",
    "app_phonebook_options_edit": "Edycja Kontaktu",
    "app_phonebook_options_block": "Blokuj",
    "app_phonebook_options_block_confirm": "Czy na pewno chcesz\nzablokować ten kontakt?",
    "app_phonebook_options_delete": "Usuń",
    "app_phonebook_options_delete_confirm": "Czy na pewno chcesz\nusunąć ten kontakt?",
    "app_phonebook_options_send_bt": "Wyślij przez Bluetooth",
    "app_phonebook_options_forward_namecard": "Przekaż wizytówkę",
    "app_phonebook_options_send_sms": "Wyślij przez SMS",
    "app_phonebook_new_contact_first_name": "Imię",
    "app_phonebook_new_contact_second_name": "Nazwisko",
    "app_phonebook_new_contact_number": "Numer",
    "app_phonebook_new_contact_second_number": "Drugi numer",
    "app_phonebook_new_contact_email": "Email",
    "app_phonebook_new_contact_address": "Adres",
    "app_phonebook_new_contact_note": "Notatka",
    "app_phonebook_new_speed_dial_key": "Szybkie wybieranie",
    "app_phonebook_new_add_to_fav": "Dodaj do ulubionych",
    "app_phonebook_new_add_to_ice": "Dodaj do ICE",
    "app_phonebook_check": "ZAZNACZ",
    "app_phonebook_uncheck": "ODZNACZ",

    "app_meditation_title_main": "Medytacja",

    "sms_call_text"  : "Call: ",
    "sms_contact_details" : "Contact details",
    "sms_delete_conversation" : "Delete conversation",
    
    "settings_lang_PL": "PL",
    "settings_lang_ENG": "ENG",
    "settings_lang_DE": "DE",
    "settings_lang_SP": "SP",
    "desktop_powerdown_info1": "Teraz jest...",
    "desktop_powerdown_info2": "Wyłączone!!!"

  "common_kbd_lower": "lang_pl_lower",
  "common_kbd_upper": "lang_pl_upper",
  "common_kbd_numeric": "numeric",
  "common_add": "DODAJ",
  "common_open": "OTWÓRZ",
  "common_call": "DZWOŃ",
  "common_save": "ZAPISZ",
  "common_send": "WYŚLIJ",
  "common_confirm": "POTWIERDŹ",
  "common_select": "WYBIERZ",
  "common_ok": "DALEJ",
  "common_back": "WRÓĆ",
  "common_set": "USTAW",
  "common_yes": "Tak",
  "common_no": "Nie",
  "common_speaker": "GŁOŚNIK",
  "common_mute": "WYCISZ",
  "common_switch": "ZMIEŃ",
  "common_options": "OPCJE",
  "common_monday": "poniedziałek",
  "common_tuesday": "wtorek",
  "common_wednesday": "środa",
  "common_thursday": "czwartek",
  "common_friday": "piątek",
  "common_saturday": "sobota",
  "common_sunday": "niedziela",
  "common_information": "Informacje",
  "common_january": "stycznia",
  "common_february": "lutego",
  "common_march": "marca",
  "common_april": "kwietnia",
  "common_may": "maja",
  "common_june": "czerwca",
  "common_july": "lipca",
  "common_august": "sierpnia",
  "common_september": "września",
  "common_october": "października",
  "common_november": "listopada",
  "common_december": "grudnia",
  "common_yesterday": "wczoraj",
  "common_today": "dzisiaj",
  "locale_12hour_min": "%I:%M",
  "locale_24hour_min": "%H:%M",
  "locale_date_full": "%d.%m.%y",
  "locale_date_short": "%d.%m",
  "app_calculator_decimal_separator": ",",
  "app_notes_title_main": "Notatki",
  "app_notes_new_note": "Nowa Notatka",
  "app_notes_save": "ZAPISZ",
  "app_notes_edit": "EDYTUJ",
  "app_notes_back": "WROĆ",
  "app_calllog_title_main": "Rejestr Połączeń",
  "app_calllog_save": "ZAPISZ",
  "app_calllog_edit": "EDYTUJ",
  "app_calllog_back": "WRÓĆ",
  "app_calllog_type": "Typ",
  "app_calllog_duration": "Czas trwania",
  "app_calllog_incoming_call": "połączenie przychodzące",
  "app_calllog_outgoing_call": "połączenie wychodzące",
  "app_calllog_missed_call": "połączenie nieodebrane",
  "app_calllog_date": "Data",
  "app_calllog_options_title": "Opcje",
  "app_calllog_options_contact_details": "Szczegóły kontaktu",
  "app_calllog_options_delete_call": "Usuń połączenie",
  "app_calllog_delete_call_confirmation": "Czy naprawdę chcesz usunąć to połączenie z listy?",
  "app_desktop_unlock": "ODBLOKUJ",
  "app_desktop_lock": "ZABLOKUJ",
  "app_desktop_menu": "MENU",
  "app_desktop_emergency": "ALARMOWE",
  "app_desktop_pin_lock": "Wprowadź hasło",
  "app_desktop_pin_info1": "Błędne hasło",
  "app_desktop_pin_info2": "Pozostało prób",
  "app_desktop_pin_blocked1": "Telefon zablokowany",
  "app_desktop_unread_messages": "nieprzeczytane wiadomości",
  "app_desktop_missed_calls": "nieodebrane połączenia",
  "app_desktop_menu_phone": "TELEFON",
  "app_desktop_menu_contacts": "KONTAKTY",
  "app_desktop_menu_messages": "WIADOMOŚCI",
  "app_desktop_menu_calendar": "KALENDARZ",
  "app_desktop_menu_alarm": "ALARMY",
  "app_desktop_menu_meditation": "MEDYTACJA",
  "app_desktop_menu_music": "MUZYKA",
  "app_desktop_menu_tools": "NARZĘDZIA",
  "app_desktop_menu_settings": "USTAWIENIA",
  "app_desktop_menu_phonebook": "KONTAKTY",
  "app_desktop_menu_title": "Główne Menu",
  "app_desktop_tools_title": "Narzędzia",
  "app_desktop_tools_notes": "NOTATKI",
  "app_desktop_tools_calculator": "KALKULATOR",
  "app_desktop_tools_recorder": "DYKTAFON",
  "app_desktop_tools_antenna": "ANTENNA TEST",
  "app_desktop_poweroff_title": "Wyłączanie",
  "app_desktop_poweroff_question": "Wybierz Tak by wyłączyć",
  "app_call_call": "DZWOŃ",
  "app_call_clear": "WYCZYŚĆ",
  "app_call_reject": "ODRZUĆ",
  "app_call_answer": "ODBIERZ",
  "app_call_message": "WIADOMOŚĆ",
  "app_call_return": "POWRÓT",
  "app_call_end_call": "ZAKOŃCZ",
  "app_call_emergency": "Numer alarmowy",
  "app_call_is_calling": "dzwoni",
  "app_call_call_ended": "zakończono",
  "app_call_contact": "KONTAKT",
  "app_settings_title_main": "Ustawienia",
  "app_settings_bt": "Bluetooth",
  "app_settings_date_and_time": "Data i Czas",
  "app_settings_title_day": "Dzień",
  "app_settings_title_month": "Miesiąc",
  "app_settings_title_year": "Rok",
  "app_settings_title_time": "Czas",
  "app_settings_cellular_passthrough": "Modem <-> USB",
  "app_settings_display": "Ekran",
  "app_settings_phone_modes": "Tryby Pracy",
  "app_settings_security": "Bezpieczeństwo",
  "app_settings_language": "Język",
  "app_settings_about": "O Mudita Pure",
  "app_settings_title_languages": "Wybór Języka",
  "app_settings_language_english": "Angielski",
  "app_settings_language_polish": "Polski",
  "app_settings_language_german": "Niemiecki",
  "app_settings_language_spanish": "Hiszpański",
  "app_messages_title_main": "Wiadomości",
  "app_messages_new_message": "Nowa Wiadomość",
  "app_phonebook_title_main": "Kontakty",
  "app_phonebook_search_win_contacts": "Kontakty",
  "common_search_uc": "Szukaj",
  "app_phonebook_search_win_info": "wpisz czego szukasz i naciśnij SZUKAJ",
  "common_search_results": "Rezultaty",
  "app_phonebook_list_favourites": "Ulubione",
  "app_phonebook_contact_title": "Dodaj Kontakt",
  "app_phonebook_contact_no_name": "brak nazwy",
  "app_phonebook_contact_note": "Notatka",
  "app_phonebook_contact_address": "Adres",
  "app_phonebook_contact_information": "Informacje",
  "app_phonebook_contact_favourites_upper": "ULUBIONE",
  "app_phonebook_contact_speed_dial_upper": "SZYBKIE WYBIERANIE",
  "app_phonebook_contact_speed_blocked_uppper": "ZABLOKOWANY",
  "app_phonebook_duplicate_numbers": "Ten numer należy do\n$CONTACT_NAME$. Czy chcesz\nutworzyć nowy kontakt?",
  "app_phonebook_duplicate_speed_dial": "Ten numer jest już przypisany\ndo $CONTACT_NAME$. Czy chcesz\ngo zastąpić?",
  "app_phonebook_options_title": "Opcje",
  "app_phonebook_options_edit": "Edycja Kontaktu",
  "app_phonebook_options_block": "Blokuj",
  "app_phonebook_options_block_confirm": "Czy na pewno chcesz\nzablokować ten kontakt?",
  "app_phonebook_options_delete": "Usuń",
  "app_phonebook_options_delete_confirm": "Czy na pewno chcesz\nusunąć ten kontakt?",
  "app_phonebook_options_send_bt": "Wyślij przez Bluetooth",
  "app_phonebook_options_forward_namecard": "Przekaż wizytówkę",
  "app_phonebook_options_send_sms": "Wyślij przez SMS",
  "app_phonebook_new_contact_first_name": "Imię",
  "app_phonebook_new_contact_second_name": "Nazwisko",
  "app_phonebook_new_contact_number": "Numer",
  "app_phonebook_new_contact_second_number": "Drugi numer",
  "app_phonebook_new_contact_email": "Email",
  "app_phonebook_new_contact_address": "Adres",
  "app_phonebook_new_contact_note": "Notatka",
  "app_phonebook_new_speed_dial_key": "Szybkie wybieranie",
  "app_phonebook_new_add_to_fav": "Dodaj do ulubionych",
  "app_phonebook_new_add_to_ice": "Dodaj do ICE",
  "app_phonebook_check": "ZAZNACZ",
  "app_phonebook_uncheck": "ODZNACZ",
  "app_meditation_title_main": "Medytacja",
  "sms_call_text": "Call: ",
  "sms_contact_details": "Contact details",
  "sms_delete_conversation": "Delete conversation",
  "settings_lang_PL": "PL",
  "settings_lang_ENG": "ENG",
  "settings_lang_DE": "DE",
  "settings_lang_SP": "SP",
  "desktop_powerdown_info1": "Teraz jest...",
  "desktop_powerdown_info2": "Wyłączone!!!"
}

M image/user/settings.db => image/user/settings.db +0 -0
M module-apps/application-calculator/tests/CalculatorUtility_tests.cpp => module-apps/application-calculator/tests/CalculatorUtility_tests.cpp +2 -2
@@ 20,7 20,7 @@ struct vfs_initializer
TEST_CASE("Calculator utilities")
{
    auto calculator = Calculator();
    utils::localize.SetDisplayLanguage(utils::Lang::En);
    utils::localize.setDisplayLanguage("English");

    SECTION("Addition")
    {


@@ 72,7 72,7 @@ TEST_CASE("Calculator utilities")

    SECTION("Fraction with comma")
    {
        utils::localize.SetDisplayLanguage(utils::Lang::Pl);
        utils::localize.setDisplayLanguage("Polski");
        auto result = calculator.calculate("15,5+12,056");
        REQUIRE(result.value == "27,556");
        REQUIRE(result.equation == "15.5+12.056");

M module-apps/application-settings-new/windows/InputLanguageWindow.cpp => module-apps/application-settings-new/windows/InputLanguageWindow.cpp +6 -12
@@ 20,19 20,13 @@ namespace gui
    auto InputLanguageWindow::buildOptionsList() -> std::list<gui::Option>
    {
        std::list<gui::Option> optionsList;
        std::vector<std::string> languageListJson = {"app_settings_language_english",
                                                     "app_settings_language_polish",
                                                     "app_settings_language_german",
                                                     "app_settings_language_spanish"};
        std::vector<utils::Lang> languageListEnum = {
            utils::Lang::En, utils::Lang::Pl, utils::Lang::De, utils::Lang::Sp};

        for (size_t i = 0; i < languageListJson.size(); i++) {
        const auto &langList = loader.getAvailableDisplayLanguages();
        for (const auto &lang : langList) {
            optionsList.emplace_back(std::make_unique<gui::OptionSettings>(
                utils::localize.get(languageListJson[i]),
                lang,
                [=](gui::Item &item) {
                    selectedLang = utils::localize.get(languageListJson[i]);
                    app::manager::Controller::changeInputLanguage(application, languageListEnum[i]);
                    selectedLang = lang;
                    app::manager::Controller::changeInputLanguage(application, lang);
                    rebuildOptionList();
                    return true;
                },


@@ 44,7 38,7 @@ namespace gui
                    return true;
                },
                this,
                selectedLang == utils::localize.get(languageListJson[i]) ? RightItem::Checked : RightItem::Disabled));
                selectedLang == lang ? RightItem::Checked : RightItem::Disabled));
        }

        return optionsList;

M module-apps/application-settings-new/windows/InputLanguageWindow.hpp => module-apps/application-settings-new/windows/InputLanguageWindow.hpp +2 -1
@@ 17,6 17,7 @@ namespace gui
        auto buildOptionsList() -> std::list<gui::Option> override;

      private:
        std::string selectedLang;
        Language selectedLang;
        utils::LangLoader loader;
    };
} // namespace gui

M module-apps/application-settings/windows/LanguageWindow.cpp => module-apps/application-settings/windows/LanguageWindow.cpp +7 -24
@@ 49,30 49,13 @@ namespace gui
        topBar->setActive(TopBar::Elements::BATTERY, true);

        setTitle(utils::localize.get("app_settings_title_languages"));

        options.push_back(addOptionLabel(utils::localize.get("app_settings_language_english"), [=](gui::Item &item) {
            LOG_INFO("selected display language: english");
            app::manager::Controller::changeDisplayLanguage(application, utils::Lang::En);
            return true;
        }));

        options.push_back(addOptionLabel(utils::localize.get("app_settings_language_polish"), [=](gui::Item &) {
            LOG_INFO("selected display language: polish");
            app::manager::Controller::changeDisplayLanguage(application, utils::Lang::Pl);
            return true;
        }));

        options.push_back(addOptionLabel(utils::localize.get("app_settings_language_german"), [=](gui::Item &) {
            LOG_INFO("selected display language: german");
            app::manager::Controller::changeDisplayLanguage(application, utils::Lang::De);
            return true;
        }));

        options.push_back(addOptionLabel(utils::localize.get("app_settings_language_spanish"), [=](gui::Item &) {
            LOG_INFO("selected display language: spanish");
            app::manager::Controller::changeDisplayLanguage(application, utils::Lang::Sp);
            return true;
        }));
        const auto &langList = loader.getAvailableDisplayLanguages();
        for (const auto &lang : langList) {
            options.push_back(addOptionLabel(lang, [=](gui::Item &item) {
                app::manager::Controller::changeDisplayLanguage(application, lang);
                return true;
            }));
        }

        // set position and navigation for labels
        uint32_t size = options.size();

M module-apps/application-settings/windows/LanguageWindow.hpp => module-apps/application-settings/windows/LanguageWindow.hpp +1 -0
@@ 33,6 33,7 @@ namespace gui
        void destroyInterface() override;

      private:
        utils::LangLoader loader;
        void invalidate() noexcept;
    };
} /* namespace gui */

M module-db/Common/Common.hpp => module-db/Common/Common.hpp +0 -8
@@ 50,14 50,6 @@ enum class SettingsLanguage
    SPANISH = 0x08,
};

namespace Language
{
    constexpr static bool ValidateLanguage(SettingsLanguage lang) noexcept
    {
        return lang >= SettingsLanguage::ENGLISH && lang <= SettingsLanguage::SPANISH;
    }
}; // namespace Language

enum class SettingsPinMode
{
    ALWAYS = 0,

M module-db/Interface/SettingsRecord.hpp => module-db/Interface/SettingsRecord.hpp +3 -2
@@ 7,6 7,7 @@
#include "utf8/UTF8.hpp"
#include "../Common/Common.hpp"
#include "../Databases/SettingsDB.hpp"
#include "i18/i18.hpp"

struct SettingsRecord
{


@@ 31,8 32,8 @@ struct SettingsRecord
    std::string networkOperator;
    uint32_t lockPassHash;
    uint32_t lockTime;
    SettingsLanguage displayLanguage;
    SettingsLanguage inputLanguage;
    Language displayLanguage;
    Language inputLanguage;

    static ActiveSim to(const uint32_t sim);
    static uint32_t from(const ActiveSim sim);

M module-db/Tables/SettingsTable.cpp => module-db/Tables/SettingsTable.cpp +22 -45
@@ 31,48 31,25 @@ SettingsTableRow SettingsTable::getById(uint32_t id)
        return SettingsTableRow();
    }

    if (!Language::ValidateLanguage(static_cast<SettingsLanguage>((*retQuery)[16].getUInt32())) ||
        !Language::ValidateLanguage(static_cast<SettingsLanguage>((*retQuery)[17].getUInt32()))) {
        return SettingsTableRow{
            1,
            false,
            true,
            true,
            true,
            0,
            0,
            SettingsPinMode::DAYS,
            0,
            0,
            "",
            "",
            1,
            "",
            0,
            30000, // time of inactivity of the user after which phone will be automatically blocked.
            SettingsLanguage::ENGLISH,
            SettingsLanguage::ENGLISH};
    }

    return SettingsTableRow{
        (*retQuery)[0].getUInt32(),                                 // ID
        (*retQuery)[1].getBool(),                                   // timeFormat12
        (*retQuery)[2].getBool(),                                   // timeAuto
        (*retQuery)[3].getBool(),                                   // timeDateFormat
        (*retQuery)[4].getBool(),                                   // brightnessAuto
        (*retQuery)[5].getUInt32(),                                 // brightnessLevel
        (*retQuery)[6].getUInt32(),                                 // fontSize
        static_cast<SettingsPinMode>((*retQuery)[7].getUInt32()),   // pinMode
        (*retQuery)[8].getUInt32(),                                 // pinDays
        (*retQuery)[9].getUInt32(),                                 // pinDaysLeft
        (*retQuery)[10].getString(),                                // pin1
        (*retQuery)[11].getString(),                                // pin2
        (*retQuery)[12].getUInt32(),                                // activeSIM
        (*retQuery)[13].getString(),                                // networkOperator
        (*retQuery)[14].getUInt32(),                                // lockPassHash
        (*retQuery)[15].getUInt32(),                                // lockTime
        static_cast<SettingsLanguage>((*retQuery)[16].getUInt32()), // displayLanguage
        static_cast<SettingsLanguage>((*retQuery)[17].getUInt32()), // inputLanguage
        (*retQuery)[0].getUInt32(),                               // ID
        (*retQuery)[1].getBool(),                                 // timeFormat12
        (*retQuery)[2].getBool(),                                 // timeAuto
        (*retQuery)[3].getBool(),                                 // timeDateFormat
        (*retQuery)[4].getBool(),                                 // brightnessAuto
        (*retQuery)[5].getUInt32(),                               // brightnessLevel
        (*retQuery)[6].getUInt32(),                               // fontSize
        static_cast<SettingsPinMode>((*retQuery)[7].getUInt32()), // pinMode
        (*retQuery)[8].getUInt32(),                               // pinDays
        (*retQuery)[9].getUInt32(),                               // pinDaysLeft
        (*retQuery)[10].getString(),                              // pin1
        (*retQuery)[11].getString(),                              // pin2
        (*retQuery)[12].getUInt32(),                              // activeSIM
        (*retQuery)[13].getString(),                              // networkOperator
        (*retQuery)[14].getUInt32(),                              // lockPassHash
        (*retQuery)[15].getUInt32(),                              // lockTime
        (*retQuery)[16].getString(),                              // displayLanguage
        (*retQuery)[17].getString(),                              // inputLanguage

    };
}


@@ 83,8 60,8 @@ bool SettingsTable::update(SettingsTableRow entry)
                       ",brightness_auto = %lu, brightness_level = %lu, "
                       "bigger_font = %lu, pin_mode =%lu, pin_days = %lu ,pin_days_left = %lu, pin1_string = '%q', "
                       "pin2_string = '%q', active_sim = %lu, "
                       "network_operator = '%q', lock_pass_hash = %lu, lock_time = %lu, display_language = %lu, "
                       "input_language = %lu WHERE _id=1;",
                       "network_operator = '%q', lock_pass_hash = %lu, lock_time = %lu, display_language = '%q', "
                       "input_language = '%q' WHERE _id=1;",
                       entry.timeFormat12,
                       entry.timeAuto,
                       entry.timeDateFormat,


@@ 100,8 77,8 @@ bool SettingsTable::update(SettingsTableRow entry)
                       entry.networkOperator.c_str(),
                       entry.lockPassHash,
                       entry.lockTime,
                       entry.displayLanguage,
                       entry.inputLanguage);
                       entry.displayLanguage.c_str(),
                       entry.inputLanguage.c_str());
}

bool SettingsTable::add(SettingsTableRow entry)

M module-db/Tables/SettingsTable.hpp => module-db/Tables/SettingsTable.hpp +6 -5
@@ 7,6 7,7 @@
#include "Database/Database.hpp"
#include "utf8/UTF8.hpp"
#include "Common/Common.hpp"
#include "i18/i18.hpp"

struct SettingsTableRow
{


@@ 27,8 28,8 @@ struct SettingsTableRow
    uint32_t lockPassHash;
    // time of inactivity of the user after which phone will be automatically blocked.
    uint32_t lockTime;
    SettingsLanguage displayLanguage;
    SettingsLanguage inputLanguage;
    Language displayLanguage;
    Language inputLanguage;
};

enum class SettingsTableFields


@@ 74,8 75,8 @@ class SettingsTable : public Table<SettingsTableRow, SettingsTableFields>
                                   "network_operator TEXT DEFAULT '', "
                                   "lock_pass_hash INTEGER DEFAULT 0, "
                                   "lock_time INTEGER DEFAULT 30000, "
                                   "display_language INTEGER DEFAULT 1, "
                                   "input_language INTEGER DEFAULT 1 "
                                   "display_language TEXT DEFAULT 'English', "
                                   "input_language TEXT DEFAULT 'English' "
                                   ");";

    const char *settingsInitialization = "INSERT OR IGNORE INTO settings (_id, time_format_12, time_auto, "


@@ 83,5 84,5 @@ class SettingsTable : public Table<SettingsTableRow, SettingsTableFields>
                                         "bigger_font, pin_mode, pin_days, pin_days_left, pin1_string,pin2_string, "
                                         "active_sim,network_operator,lock_pass_hash,lock_time, display_language, "
                                         "input_language) "
                                         "VALUES(1,0,1,1,1,0,0,1,0,0,'','',1,'',0,30000,1,1)";
                                         "VALUES(1,0,1,1,1,0,0,1,0,0,'','',1,'',0,30000,'English','English')";
};

M module-db/tests/SettingsRecord_tests.cpp => module-db/tests/SettingsRecord_tests.cpp +2 -2
@@ 42,8 42,8 @@ TEST_CASE("Settings Record tests")
    REQUIRE(settingsRecord.activeSIM == SettingsRecord::ActiveSim::SIM1);
    REQUIRE(settingsRecord.networkOperator == "");
    REQUIRE(settingsRecord.lockPassHash == 0);
    REQUIRE(settingsRecord.displayLanguage == SettingsLanguage ::ENGLISH);
    REQUIRE(settingsRecord.inputLanguage == SettingsLanguage ::ENGLISH);
    REQUIRE(settingsRecord.displayLanguage == "English");
    REQUIRE(settingsRecord.inputLanguage == "English");

    settingsRecord.networkOperator = "MuditaConnectingPeople";
    settingsRecord.fontSize        = 10;

M module-db/tests/SettingsTable_tests.cpp => module-db/tests/SettingsTable_tests.cpp +9 -9
@@ 30,12 30,12 @@ TEST_CASE("Settings Table tests")
        auto settingsRow = settingsDb.settings.getById(1);
        REQUIRE(settingsRow.ID == 1);

        settingsRow.timeFormat12   = false;
        settingsRow.timeDateFormat = false;
        settingsRow.pin1           = "4321";
        settingsRow.timeFormat12    = false;
        settingsRow.timeDateFormat  = false;
        settingsRow.pin1            = "4321";
        settingsRow.pin2            = "5432";
        settingsRow.displayLanguage = SettingsLanguage ::POLISH;
        settingsRow.inputLanguage   = SettingsLanguage ::POLISH;
        settingsRow.displayLanguage = "Polski";
        settingsRow.inputLanguage   = "Polski";
        REQUIRE(settingsDb.settings.update(settingsRow));

        settingsRow = settingsDb.settings.getById(1);


@@ 44,8 44,8 @@ TEST_CASE("Settings Table tests")
        REQUIRE(settingsRow.timeDateFormat == false);
        REQUIRE(settingsRow.pin1 == "4321");
        REQUIRE(settingsRow.pin2 == "5432");
        REQUIRE(settingsRow.displayLanguage == SettingsLanguage ::POLISH);
        REQUIRE(settingsRow.inputLanguage == SettingsLanguage ::POLISH);
        REQUIRE(settingsRow.displayLanguage == "Polski");
        REQUIRE(settingsRow.inputLanguage == "Polski");
    }

    {


@@ 57,8 57,8 @@ TEST_CASE("Settings Table tests")
        REQUIRE(settingsRow.timeDateFormat == false);
        REQUIRE(settingsRow.pin1 == "4321");
        REQUIRE(settingsRow.pin2 == "5432");
        REQUIRE(settingsRow.displayLanguage == SettingsLanguage ::POLISH);
        REQUIRE(settingsRow.inputLanguage == SettingsLanguage ::POLISH);
        REQUIRE(settingsRow.displayLanguage == "Polski");
        REQUIRE(settingsRow.inputLanguage == "Polski");
    }

    Database::deinitialize();

M module-gui/test/test-catch-text/test-gui-Text.cpp => module-gui/test/test-catch-text/test-gui-Text.cpp +1 -1
@@ 144,7 144,7 @@ TEST_CASE("Text buildDrawList")

TEST_CASE("handle input mode ABC/abc/1234")
{
    utils::localize.SetDisplayLanguage(utils::Lang::En); /// needed to load input mode
    utils::localize.setInputLanguage("English"); /// needed to load input mode
    auto &fontmanager = mockup::fontManager();
    auto font         = fontmanager.getFont(0);
    auto text         = gui::TestText();

M module-services/service-appmgr/Controller.cpp => module-services/service-appmgr/Controller.cpp +2 -2
@@ 66,13 66,13 @@ namespace app::manager
        return sys::Bus::SendUnicast(msg, ApplicationManager::ServiceName, sender);
    }

    auto Controller::changeDisplayLanguage(sys::Service *sender, utils::Lang language) -> bool
    auto Controller::changeDisplayLanguage(sys::Service *sender, const Language &language) -> bool
    {
        auto msg = std::make_shared<app::manager::DisplayLanguageChangeRequest>(sender->GetName(), language);
        return sys::Bus::SendUnicast(msg, ApplicationManager::ServiceName, sender);
    }

    auto Controller::changeInputLanguage(sys::Service *sender, utils::Lang language) -> bool
    auto Controller::changeInputLanguage(sys::Service *sender, const Language &language) -> bool
    {
        auto msg = std::make_shared<app::manager::InputLanguageChangeRequest>(sender->GetName(), language);
        return sys::Bus::SendUnicast(msg, ApplicationManager::ServiceName, sender);

M module-services/service-appmgr/messages/LanguageChangeRequest.cpp => module-services/service-appmgr/messages/LanguageChangeRequest.cpp +8 -7
@@ 2,23 2,24 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <service-appmgr/messages/LanguageChangeRequest.hpp>
#include <utility>

namespace app::manager
{
    LanguageChangeRequest::LanguageChangeRequest(const ApplicationName &senderName, utils::Lang language)
        : BaseMessage(MessageType::APMChangeLanguage, senderName), language{language}
    LanguageChangeRequest::LanguageChangeRequest(const ApplicationName &senderName, Language &&language)
        : BaseMessage(MessageType::APMChangeLanguage, senderName), language{std::move(language)}
    {}

    [[nodiscard]] auto LanguageChangeRequest::getLanguage() const noexcept -> utils::Lang
    [[nodiscard]] auto LanguageChangeRequest::getLanguage() const -> Language
    {
        return language;
    }

    DisplayLanguageChangeRequest::DisplayLanguageChangeRequest(const ApplicationName &senderName, utils::Lang language)
        : LanguageChangeRequest(senderName, language)
    DisplayLanguageChangeRequest::DisplayLanguageChangeRequest(const ApplicationName &senderName, Language language)
        : LanguageChangeRequest(senderName, std::move(language))
    {}

    InputLanguageChangeRequest::InputLanguageChangeRequest(const ApplicationName &senderName, utils::Lang language)
        : LanguageChangeRequest(senderName, language)
    InputLanguageChangeRequest::InputLanguageChangeRequest(const ApplicationName &senderName, Language language)
        : LanguageChangeRequest(senderName, std::move(language))
    {}
} // namespace app::manager

M module-services/service-appmgr/model/ApplicationManager.cpp => module-services/service-appmgr/model/ApplicationManager.cpp +6 -35
@@ 35,36 35,6 @@ namespace app::manager
    namespace
    {
        constexpr auto default_application_locktime_ms = 30000;

        utils::Lang toUtilsLanguage(SettingsLanguage language)
        {
            switch (language) {
            case SettingsLanguage::ENGLISH:
                return utils::Lang::En;
            case SettingsLanguage::POLISH:
                return utils::Lang::Pl;
            case SettingsLanguage::GERMAN:
                return utils::Lang::De;
            case SettingsLanguage::SPANISH:
                return utils::Lang::Sp;
            }
            return utils::Lang::En;
        }

        SettingsLanguage toSettingsLanguage(utils::Lang language)
        {
            switch (language) {
            case utils::Lang::En:
                return SettingsLanguage::ENGLISH;
            case utils::Lang::Pl:
                return SettingsLanguage::POLISH;
            case utils::Lang::De:
                return SettingsLanguage::GERMAN;
            case utils::Lang::Sp:
                return SettingsLanguage::SPANISH;
            }
            return SettingsLanguage::ENGLISH;
        }
    } // namespace

    ApplicationManagerBase::ApplicationManagerBase(std::vector<std::unique_ptr<app::ApplicationLauncher>> &&launchers)


@@ 141,8 111,9 @@ namespace app::manager
    {
        settings = DBServiceAPI::SettingsGet(this);
        blockingTimer->setInterval(settings.lockTime != 0 ? settings.lockTime : default_application_locktime_ms);
        utils::localize.SetDisplayLanguage(toUtilsLanguage(settings.displayLanguage));
        utils::localize.setInputLanguage(toUtilsLanguage(settings.inputLanguage));
        utils::localize.setFallbackLanguage(utils::localize.DefaultLanguage);
        utils::localize.setDisplayLanguage(settings.displayLanguage);
        utils::localize.setInputLanguage(settings.inputLanguage);

        startSystemServices();
        startBackgroundApplications();


@@ 557,7 528,7 @@ namespace app::manager

    auto ApplicationManager::handleDisplayLanguageChange(app::manager::DisplayLanguageChangeRequest *msg) -> bool
    {
        const auto requestedLanguage = toSettingsLanguage(msg->getLanguage());
        const auto requestedLanguage = msg->getLanguage();
        settings                     = DBServiceAPI::SettingsGet(this);

        if (requestedLanguage == settings.displayLanguage) {


@@ 565,7 536,7 @@ namespace app::manager
            return true;
        }
        settings.displayLanguage = requestedLanguage;
        utils::localize.SetDisplayLanguage(msg->getLanguage());
        utils::localize.setDisplayLanguage(requestedLanguage);
        rebuildActiveApplications();
        DBServiceAPI::SettingsUpdate(this, settings);
        return true;


@@ 573,7 544,7 @@ namespace app::manager

    auto ApplicationManager::handleInputLanguageChange(app::manager::InputLanguageChangeRequest *msg) -> bool
    {
        const auto requestedLanguage = toSettingsLanguage(msg->getLanguage());
        const auto requestedLanguage = msg->getLanguage();
        settings                     = DBServiceAPI::SettingsGet(this);

        if (requestedLanguage == settings.inputLanguage) {

M module-services/service-appmgr/service-appmgr/Controller.hpp => module-services/service-appmgr/service-appmgr/Controller.hpp +2 -3
@@ 44,9 44,8 @@ namespace app::manager
        static auto confirmSwitch(sys::Service *sender) -> bool;
        static auto closeApplication(sys::Service *sender, const ApplicationName &name) -> bool;
        static auto confirmClose(sys::Service *sender) -> bool;

        static auto changeDisplayLanguage(sys::Service *sender, utils::Lang language) -> bool;
        static auto changeInputLanguage(sys::Service *sender, utils::Lang language) -> bool;
        static auto changeDisplayLanguage(sys::Service *sender, const Language &language) -> bool;
        static auto changeInputLanguage(sys::Service *sender, const Language &language) -> bool;
        static auto changePowerSaveMode(sys::Service *sender) -> bool;
        static auto preventBlockingDevice(sys::Service *sender) -> bool;
    };

M module-services/service-appmgr/service-appmgr/messages/LanguageChangeRequest.hpp => module-services/service-appmgr/service-appmgr/messages/LanguageChangeRequest.hpp +5 -5
@@ 12,26 12,26 @@ namespace app::manager
    class LanguageChangeRequest : public BaseMessage
    {
      public:
        [[nodiscard]] auto getLanguage() const noexcept -> utils::Lang;
        [[nodiscard]] auto getLanguage() const -> Language;

      protected:
        LanguageChangeRequest(const ApplicationName &senderName, utils::Lang language);
        LanguageChangeRequest(const ApplicationName &senderName, Language &&language);

      private:
        utils::Lang language;
        Language language;
    };

    /// Requests to change the display language.
    class DisplayLanguageChangeRequest : public LanguageChangeRequest
    {
      public:
        DisplayLanguageChangeRequest(const ApplicationName &senderName, utils::Lang language);
        DisplayLanguageChangeRequest(const ApplicationName &senderName, Language language);
    };

    /// Requests to change the input language.
    class InputLanguageChangeRequest : public LanguageChangeRequest
    {
      public:
        InputLanguageChangeRequest(const ApplicationName &senderName, utils::Lang language);
        InputLanguageChangeRequest(const ApplicationName &senderName, Language language);
    };
} // namespace app::manager

M module-utils/i18/i18.cpp => module-utils/i18/i18.cpp +44 -51
@@ 7,6 7,9 @@ namespace utils
{
    namespace
    {
        const auto LanguageDirPath = std::filesystem::path{"assets"} / "lang";
        constexpr auto extension   = ".json";

        auto returnNonEmptyString(const std::string &str, const std::string &ret) -> const std::string &
        {
            return str.empty() ? ret : str;


@@ 14,31 17,12 @@ namespace utils
    } // namespace

    i18 localize;
    json11::Json LangLoader::Create(Lang lang)
    json11::Json LangLoader::createJson(const std::string &filename)
    {
        const char *path = nullptr;

        switch (lang) {
        case Lang::Pl:
            path = langPL_path;
            break;
        case Lang::En:
            path = langEN_path;
            break;
        case Lang::De:
            path = langDE_path;
            break;
        case Lang::Sp:
            path = langSP_path;
            break;

        default:
            return json11::Json();
        }

        auto fd = vfs.fopen(path, "r");
        const fs::path path = LanguageDirPath / (filename + extension);
        auto fd             = vfs.fopen(path.c_str(), "r");
        if (fd == nullptr) {
            LOG_FATAL("Error during opening file %s", path);
            LOG_FATAL("Error during opening file %s", path.c_str());
            return json11::Json();
        }



@@ 66,64 50,73 @@ namespace utils
        }
    }

    void i18::setInputLanguage(Lang lang)
    std::vector<Language> LangLoader::getAvailableDisplayLanguages() const
    {
        if (!input_init) {
            backupLang = loader.Create(lang_default);
            inputLang  = backupLang;
            input_init = true;
        std::vector<std::string> languageNames;
        for (const auto &entry : fs::directory_iterator(LanguageDirPath)) {
            languageNames.push_back(fs::path(entry.path()).stem());
        }
        if (lang == inputCurrent) {
        return languageNames;
    }

    void i18::setInputLanguage(const Language &lang)
    {
        if (lang == currentInputLanguage) {
            return;
        }
        inputCurrent = lang;
        if (lang == lang_default) {
            inputLang = backupLang;
        currentInputLanguage = lang;
        if (lang == fallbackLanguageName) {
            inputLanguage = fallbackLanguage;
        }
        else {
            json11::Json pack = loader.Create(lang);
            inputLang         = pack;
            json11::Json pack = loader.createJson(lang);
            inputLanguage     = pack;
        }
    }
    const std::string &i18::getInputLanguage(const std::string &str)
    {
        // if language pack returned nothing then try default language
        if (inputLang[str].string_value().empty()) {
            return returnNonEmptyString(backupLang[str].string_value(), str);
        if (inputLanguage[str].string_value().empty()) {
            return returnNonEmptyString(fallbackLanguage[str].string_value(), str);
        }
        return returnNonEmptyString(inputLang[str].string_value(), str);
        return returnNonEmptyString(inputLanguage[str].string_value(), str);
    }

    const std::string &i18::get(const std::string &str)
    {
        // if language pack returned nothing then try default language
        if (displayLang[str].string_value().empty()) {
            return returnNonEmptyString(backupLang[str].string_value(), str);
        if (displayLanguage[str].string_value().empty()) {
            return returnNonEmptyString(fallbackLanguage[str].string_value(), str);
        }
        return returnNonEmptyString(displayLang[str].string_value(), str);
        return returnNonEmptyString(displayLanguage[str].string_value(), str);
    }

    void i18::SetDisplayLanguage(Lang lang)
    void i18::setDisplayLanguage(const Language &lang)
    {
        if (!display_init) {
            backupLang   = loader.Create(lang_default);
            displayLang  = backupLang;
            display_init = true;
        if (!backupLanguageInitializer) {
            fallbackLanguage          = loader.createJson(fallbackLanguageName);
            displayLanguage           = fallbackLanguage;
            backupLanguageInitializer = true;
        }
        if (lang == displayCurrent) {
        if (lang == currentDisplayLanguage) {
            return;
        }
        displayCurrent = lang;
        if (lang == lang_default) {
            displayLang = backupLang;
        currentDisplayLanguage = lang;
        if (lang == fallbackLanguageName) {
            displayLanguage = fallbackLanguage;
        }
        else {
            json11::Json pack = loader.Create(lang);
            json11::Json pack = loader.createJson(lang);
            // Suspend whole system during switching lang packs
            vTaskSuspendAll();
            displayLang = pack;
            displayLanguage = pack;
            xTaskResumeAll();
        }
    }

    void i18::setFallbackLanguage(const Language &lang)
    {
        fallbackLanguageName = std::move(lang);
    }

} // namespace utils

M module-utils/i18/i18.hpp => module-utils/i18/i18.hpp +16 -28
@@ 11,48 11,35 @@

#include "thread.hpp"

using Language = std::string;

namespace utils
{

    enum class Lang
    {
        En,
        Pl,
        De,
        Sp
    };

    class LangLoader
    {

        const char *langEN_path = "assets/lang/lang_en.json";
        const char *langPL_path = "assets/lang/lang_pl.json";
        const char *langDE_path = "assets/lang/lang_de.json";
        const char *langSP_path = "assets/lang/lang_sp.json";

      public:
        LangLoader()
        {}
        virtual ~LangLoader()
        {}

        json11::Json Create(Lang lang);
        std::vector<Language> getAvailableDisplayLanguages() const;
        json11::Json createJson(const std::string &filename);
    };

    class i18
    {

        json11::Json displayLang;
        json11::Json inputLang;
        json11::Json backupLang; // backup language if item not found
      private:
        json11::Json displayLanguage;
        json11::Json inputLanguage;
        json11::Json fallbackLanguage; // backup language if item not found
        LangLoader loader;
        static const Lang lang_default = Lang::En;
        Lang displayCurrent            = lang_default;
        Lang inputCurrent              = lang_default;
        bool display_init              = false;
        bool input_init                = false;
        Language fallbackLanguageName;
        Language currentDisplayLanguage = fallbackLanguageName;
        Language currentInputLanguage   = fallbackLanguageName;
        bool backupLanguageInitializer  = false;

      public:
        static constexpr auto DefaultLanguage = "English";
        // Default constructor, left empty on purpose
        i18()
        {}


@@ 61,10 48,11 @@ namespace utils
        // which is not available at program's startup.
        virtual ~i18()
        {}
        void setInputLanguage(Lang lang);
        void setInputLanguage(const Language &lang);
        const std::string &getInputLanguage(const std::string &str);
        const std::string &get(const std::string &str);
        void SetDisplayLanguage(Lang lang);
        void setDisplayLanguage(const Language &lang);
        void setFallbackLanguage(const Language &lang);
    };

    // Global instance of i18 class

M module-utils/test/test_time_conversion.cpp => module-utils/test/test_time_conversion.cpp +1 -1
@@ 240,7 240,7 @@ int main(int argc, char *argv[])
    }

    // set locale to PL
    utils::localize.SetDisplayLanguage(utils::Lang::Pl);
    utils::localize.setDisplayLanguage("Polski");
    std::setlocale(LC_TIME, "pl_PL.UTF-8");

    // set default output to nullstream

M module-utils/test/unittest_duration.cpp => module-utils/test/unittest_duration.cpp +4 -4
@@ 25,7 25,7 @@ struct vfs_initializer

TEST_CASE("Duration - creation")
{
    utils::localize.SetDisplayLanguage(utils::Lang::En);
    utils::localize.setDisplayLanguage("English");

    SECTION("default constructor")
    {


@@ 68,7 68,7 @@ TEST_CASE("Duration - creation")

TEST_CASE("Duration - arithemtics")
{
    utils::localize.SetDisplayLanguage(utils::Lang::En);
    utils::localize.setDisplayLanguage("English");

    SECTION("Addition")
    {


@@ 106,7 106,7 @@ TEST_CASE("Duration - arithemtics")

TEST_CASE("Duration - comparision")
{
    utils::localize.SetDisplayLanguage(utils::Lang::En);
    utils::localize.setDisplayLanguage("English");

    SECTION("Duration")
    {


@@ 150,7 150,7 @@ TEST_CASE("Duration - comparision")

TEST_CASE("Duration - display")
{
    utils::localize.SetDisplayLanguage(utils::Lang::En);
    utils::localize.setDisplayLanguage("English");

    {
        using namespace utils::time;