diff --git a/apps/lang/norsk-nynorsk.lang b/apps/lang/norsk-nynorsk.lang
index 928805ace2..0048e214ad 100644
--- a/apps/lang/norsk-nynorsk.lang
+++ b/apps/lang/norsk-nynorsk.lang
@@ -17,6 +17,7 @@
# Norwegian Nynorsk language file, translated by:
# - Karl Ove Hufthammer
# - Tore Johnny Bråtveit
+# - Eivind Ødegård
id: LANG_SET_BOOL_YES
desc: bool true representation
@@ -98,23 +99,7 @@
*: "Lastar …"
- *: ""
-
-
-
- id: LANG_CONFIRM_SHUTDOWN
- desc: in shutdown screen
- user: core
-
- *: none
- soft_shutdown: "Press OFF to shut down"
-
-
- *: none
- soft_shutdown: "Trykk AV for å slå av"
-
-
- *: none
+ *: "Lastar"
@@ -128,23 +113,7 @@
*: "Slår av …"
- *: ""
-
-
-
- id: LANG_REMOVE_MMC
- desc: before acknowledging usb in case an MMC is inserted (Ondio)
- user: core
-
- *: none
- archosondio*: "Please remove inserted MMC"
-
-
- *: none
- archosondio*: "Fjern minnekortet"
-
-
- *: none
+ *: "Slår av"
@@ -279,23 +248,6 @@
*: "Program"
-
- id: LANG_SHUTDOWN
- desc: in main menu
- user: core
-
- *: none
- soft_shutdown: "Shut down"
-
-
- *: none
- soft_shutdown: "Slå av"
-
-
- *: none
- soft_shutdown: "Slå av"
-
-
id: LANG_VOLUME
desc: in sound_settings
@@ -318,10 +270,10 @@
*: "Bass"
- *: "Bass"
+ *: "~Bass"
- *: "Bass"
+ *: "~Bass"
@@ -354,30 +306,30 @@
id: LANG_CHANNEL_STEREO
- desc: in sound_settings
+ desc: in sound_settings and radio screen
user: core
*: "Stereo"
- *: "Stereo"
+ *: "~Stereo"
- *: "Stereo"
+ *: "~Stereo"
id: LANG_CHANNEL_MONO
- desc: in sound_settings
+ desc: in sound_settings and radio screen
user: core
*: "Mono"
- *: "Mono"
+ *: "~Mono"
- *: "Mono"
+ *: "~Mono"
@@ -430,10 +382,10 @@
*: "Karaoke"
- *: "Karaoke"
+ *: "~Karaoke"
- *: "Karaoke"
+ *: "~Karaoke"
@@ -450,158 +402,6 @@
*: "Stereo-breidd"
-
- id: LANG_LOUDNESS
- desc: in sound_settings
- user: core
-
- *: none
- masf: "Loudness"
-
-
- *: none
- masf: "Lydstyrke"
-
-
- *: none
- masf: "Lydstyrke"
-
-
-
- id: LANG_AUTOVOL
- desc: in sound_settings
- user: core
-
- *: none
- masf: "Auto Volume"
-
-
- *: none
- masf: "Automatisk lydnivå"
-
-
- *: none
- masf: "Automatisk lydnivå"
-
-
-
- id: LANG_DECAY
- desc: in sound_settings
- user: core
-
- *: none
- masf: "AV Decay Time"
-
-
- *: none
- masf: "Falltid for automatisk lydnivå"
-
-
- *: none
-
-
-
- id: LANG_SUPERBASS
- desc: in sound settings
- user: core
-
- *: none
- masf: "Super Bass"
-
-
- *: none
- masf: "Superbass"
-
-
- *: none
- masf: "Superbass"
-
-
-
- id: LANG_MDB_ENABLE
- desc: in sound settings
- user: core
-
- *: none
- masf: "MDB Enable"
-
-
- *: none
- masf: "Bruk MDB"
-
-
- *: none
- masf: "Bruk MDB"
-
-
-
- id: LANG_MDB_STRENGTH
- desc: in sound settings
- user: core
-
- *: none
- masf: "MDB Strength"
-
-
- *: none
- masf: "MDB-styrke"
-
-
- *: none
- masf: "MDB-styrke"
-
-
-
- id: LANG_MDB_HARMONICS
- desc: in sound settings
- user: core
-
- *: none
- masf: "MDB Harmonics"
-
-
- *: none
- masf: "MDB-overtonar"
-
-
- *: none
- masf: "MDB-overtonar"
-
-
-
- id: LANG_MDB_CENTER
- desc: in sound settings
- user: core
-
- *: none
- masf: "MDB Centre Frequency"
-
-
- *: none
- masf: "MDB-midtfrekvens"
-
-
- *: none
- masf: "MDB-midtfrekvens"
-
-
-
- id: LANG_MDB_SHAPE
- desc: in sound settings
- user: core
-
- *: none
- masf: "MDB Shape"
-
-
- *: none
- masf: "MDB-form"
-
-
- *: none
- masf: "MDB-form"
-
-
id: LANG_CROSSFEED
desc: in sound settings
@@ -680,10 +480,10 @@
*: "System"
- *: "System"
+ *: "~System"
- *: "System"
+ *: "~System"
@@ -767,7 +567,7 @@
*: "Tømt"
- *: ""
+ *: "Tømt"
@@ -812,7 +612,7 @@
*: "Bruk tonekontroll"
- *: none
+ *: "Bruk tonekontroll"
@@ -826,7 +626,7 @@
*: "Grafisk tonekontroll"
- *: none
+ *: "Grafisk tonekontroll"
@@ -840,7 +640,7 @@
*: "Førehandskutting"
- *: none
+ *: "Førehandskutting"
@@ -851,10 +651,10 @@
*: "Simple EQ Settings"
- *: "Enkelt oppsett"
+ *: "Enkelt EQ-oppsett"
- *: none
+ *: "Enkelt EQ-oppsett"
@@ -865,10 +665,10 @@
*: "Advanced EQ Settings"
- *: "Avansert oppsett"
+ *: "Avansert EQ-oppsett"
- *: none
+ *: "Avansert EQ-oppsett"
@@ -882,7 +682,7 @@
*: "Lagra som ferdigoppsett"
- *: none
+ *: "Lagra som ferdigoppsett"
@@ -896,21 +696,7 @@
*: "Sjå gjennom ferdigoppsett"
- *: none
-
-
-
- id: LANG_EQUALIZER_EDIT_MODE
- desc: in the equalizer settings menu
- user: core
-
- *: "Edit mode: %s"
-
-
- *: "Redigeringsmodus: %s"
-
-
- *: none
+ *: "Sjå gjennom ferdigoppsett"
@@ -924,7 +710,7 @@
*: "%d Hz-bandforsterking"
- *: none
+ *: "Hertz bandforsterking"
@@ -935,10 +721,10 @@
*: "Low Shelf Filter"
- *: "Lågskrankefilter"
+ *: "Bassfilter"
- *: none
+ *: "Bassfilter"
@@ -952,7 +738,7 @@
*: "Lydtoppfilter %d"
- *: none
+ *: "Lydtoppfilter"
@@ -963,10 +749,10 @@
*: "High Shelf Filter"
- *: "Høgskrankefilter"
+ *: "Diskantfilter"
- *: none
+ *: "Diskantfilter"
@@ -994,7 +780,7 @@
*: "Midtfrekvens"
- *: none
+ *: "Midtfrekvens"
@@ -1263,10 +1049,10 @@
*: "Replaygain"
- *: "Replaygain"
+ *: "Avspelingsvolum"
- *: "Replaygain"
+ *: "Avspelingsvolum"
@@ -1364,10 +1150,10 @@
*: "Database"
- *: "Database"
+ *: "~Database"
- *: "Database"
+ *: "~Database"
@@ -1667,6 +1453,7 @@
*: none
+ remote: "Fjern-LCD-oppsett"
@@ -1694,7 +1481,7 @@
*: "Status- og rullelinje"
- *: none
+ *: "Status og rullelinje"
@@ -1703,15 +1490,12 @@
user: core
*: "Peak Meter"
- masd: none
*: "Lydtoppmålar"
- masd: none
*: "Lydtoppmålar"
- masd: none
@@ -1739,7 +1523,7 @@
*: "Latin-1 (ISO-8859-1)"
- *: "Latin 1"
+ *: "Latin-1"
@@ -1767,7 +1551,7 @@
*: "Hebraisk (ISO-8859-8)"
- *: none
+ *: "Hebraisk"
@@ -1792,10 +1576,10 @@
*: "Thai (ISO-8859-11)"
- *: "Thai (ISO-8859-11)"
+ *: "~Thai (ISO-8859-11)"
- *: none
+ *: "~Thai"
@@ -1809,7 +1593,7 @@
*: "Arabisk (CP1256)"
- *: none
+ *: "Arabisk"
@@ -1851,7 +1635,7 @@
*: "Japansk (SJIS)"
- *: none
+ *: "Japansk"
@@ -1865,7 +1649,7 @@
*: "Kinesisk – forenkla (GB2312)"
- *: none
+ *: "Forenkla kinesisk"
@@ -1879,7 +1663,7 @@
*: "Koreansk (KSX1001)"
- *: none
+ *: "Koreansk"
@@ -1893,7 +1677,7 @@
*: "Kinesisk – tradisjonell (BIG5)"
- *: none
+ *: "Tradisjonell kinesisk"
@@ -1904,10 +1688,10 @@
*: "Unicode (UTF-8)"
- *: "Unicode (UTF-8)"
+ *: "~Unicode (UTF-8)"
- *: "Unicode"
+ *: "~Unicode"
@@ -1932,10 +1716,10 @@
*: "Disk"
- *: "Disk"
+ *: "~Disk"
- *: "Disk"
+ *: "~Disk"
@@ -1952,6 +1736,7 @@
*: none
+ rtc: "Dato og klokkeslett"
@@ -2117,20 +1902,6 @@
*: "Vil du ha ei oversikt over nye bokmerke?"
-
- id: LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY
- desc: Save only on bookmark for each playlist in recent bookmarks
- user: core
-
- *: "Unique only"
-
-
- *: "Berre unike"
-
-
- *: "Berre unike"
-
-
id: LANG_VOICE_MENU
desc: item of voice menu, enable/disable the voice UI
@@ -2215,23 +1986,6 @@
*: ".talk-klipp"
-
- id: LANG_RECORDING_QUALITY
- desc: in the recording settings
- user: core
-
- *: none
- recording_hwcodec: "Quality"
-
-
- *: none
- recording_hwcodec: "Kvalitet"
-
-
- *: none
- recording_hwcodec: "Kvalitet"
-
-
id: LANG_FREQUENCY
desc: in recording and playback settings
@@ -2296,28 +2050,11 @@
*: none
- recording: "Digital"
+ recording: "~Digital"
*: none
- recording: "Digital"
-
-
-
- id: LANG_RECORDING_EDITABLE
- desc: Editable recordings setting
- user: core
-
- *: none
- recording_hwcodec: "Independent Frames"
-
-
- *: none
- recording_hwcodec: "Uavhengige rammer"
-
-
- *: none
- recording_hwcodec: "Uavhengige rammer"
+ recording: "~Digital"
@@ -2351,23 +2088,7 @@
*: none
-
-
-
- id: LANG_RECORD_DIRECTORY
- desc: in recording settings_menu
- user: core
-
- *: none
- recording: "Directory"
-
-
- *: none
- recording: "Mappe"
-
-
- *: none
- recording: "Mappe"
+ recording: "Forinnspelingstid"
@@ -2418,6 +2139,7 @@
*: none
+ remote: "Berre hovudeining"
@@ -2434,6 +2156,7 @@
*: none
+ remote: "Berre fjerneining"
@@ -2450,6 +2173,7 @@
*: none
+ remote: "Hovud og fjerneining"
@@ -2911,7 +2635,7 @@
*: "Felt (invers)"
- *: none
+ *: "Felt invers"
@@ -3153,23 +2877,6 @@
*: "Statuslinje"
-
- id: LANG_BUTTON_BAR
- desc: in settings menu
- user: core
-
- *: none
- recorder_pad: "Button Bar"
-
-
- *: none
- recorder_pad: "Knapprad"
-
-
- *: none
- recorder_pad: "Knapprad"
-
-
id: LANG_VOLUME_DISPLAY
desc: Volume type title
@@ -3232,15 +2939,12 @@
user: core
*: "Peak Release"
- masd: none
*: "Lydtoppfråfall"
- masd: none
*: "Lydtoppfråfall"
- masd: none
@@ -3249,15 +2953,12 @@
user: core
*: "Peak Hold Time"
- masd: none
*: "Lydtopphaldetid"
- masd: none
*: "Lydtopphaldetid"
- masd: none
@@ -3266,15 +2967,12 @@
user: core
*: "Clip Hold Time"
- masd: none
*: "Klipphaldetid"
- masd: none
*: "Klipphaldetid"
- masd: none
@@ -3283,15 +2981,12 @@
user: core
*: "Eternal"
- masd: none
*: "Uendeleg"
- masd: none
*: "Uendeleg"
- masd: none
@@ -3300,15 +2995,12 @@
user: core
*: "Scale"
- masd: none
*: "Skala"
- masd: none
*: "Skala"
- masd: none
@@ -3317,11 +3009,9 @@
user: core
*: "Logarithmic (dB)"
- masd: none
*: "Logarithmisk (dB)"
- masd: none
*: "Logarithmisk desibel"
@@ -3333,11 +3023,9 @@
user: core
*: "Linear (%)"
- masd: none
*: "Lineær (%)"
- masd: none
*: "Lineær prosent"
@@ -3349,15 +3037,12 @@
user: core
*: "Minimum of Range"
- masd: none
*: "Minste verdi"
- masd: none
*: "Minste verdi"
- masd: none
@@ -3366,15 +3051,12 @@
user: core
*: "Maximum of Range"
- masd: none
*: "Største verdi"
- masd: none
*: "Største verdi"
- masd: none
@@ -3391,55 +3073,6 @@
*: "Batterikapasitet"
-
- id: LANG_BATTERY_TYPE
- desc: in battery settings
- user: core
-
- *: none
- battery_types: "Battery Type"
-
-
- *: none
- battery_types: "Batteritype"
-
-
- *: none
-
-
-
- id: LANG_BATTERY_TYPE_1
- desc: in battery settings
- user: core
-
- *: none
- battery_types: "Alkaline"
-
-
- *: none
- battery_types: "Alkaline"
-
-
- *: none
- battery_types: "Alkaline"
-
-
-
- id: LANG_BATTERY_TYPE_2
- desc: in battery settings
- user: core
-
- *: none
- battery_types: "NiMH"
-
-
- *: none
- battery_types: "NiMH"
-
-
- *: none
-
-
id: LANG_SPINDOWN
desc: in settings_menu
@@ -3681,7 +3314,7 @@
*: "Fila/mappa finst alt. Vil du skriva over ho?"
- *: ""
+ *: "Fila eller mappa finst alt. Vil du skriva over ho?"
@@ -3740,7 +3373,7 @@
*: "Er du sikker på at du vil sletta?"
- *: ""
+ *: "Er du sikker på at du vil sletta?"
@@ -3830,62 +3463,6 @@
*: "Stokk om"
-
- id: LANG_INSERT
- desc: in onplay menu. insert a track/playlist into dynamic playlist.
- user: core
-
- *: "Insert"
-
-
- *: "Set inn"
-
-
- *: "Set inn"
-
-
-
- id: LANG_INSERT_FIRST
- desc: in onplay menu. insert a track/playlist into dynamic playlist.
- user: core
-
- *: "Insert Next"
-
-
- *: "Set inn som neste"
-
-
- *: "Set inn som neste"
-
-
-
- id: LANG_INSERT_LAST
- desc: in onplay menu. append a track/playlist into dynamic playlist.
- user: core
-
- *: "Insert Last"
-
-
- *: "Set inn til slutt"
-
-
- *: "Set inn til slutt"
-
-
-
- id: LANG_INSERT_SHUFFLED
- desc: in onplay menu. insert a track/playlist randomly into dynamic playlist
- user: core
-
- *: "Insert Shuffled"
-
-
- *: "Set inn tilfeldig"
-
-
- *: "Set inn tilfeldig"
-
-
id: LANG_QUEUE
desc: The verb/action Queue
@@ -3967,7 +3544,7 @@
*: "Søkjer … fann %d (%s)"
- *: ""
+ *: "Søkjer fann"
@@ -4026,39 +3603,7 @@
*: none
- charging: "Batteri: Ladar"
-
-
-
- id: LANG_BATTERY_TOPOFF_CHARGE
- desc: in info display, shows that top off charge is running Only for V1 archosrecorder
- user: core
-
- *: none
- archosrecorder: "Battery: Top-Off Chg"
-
-
- *: none
- archosrecorder: "Batteri: Top-off-lading"
-
-
- *: none
-
-
-
- id: LANG_BATTERY_TRICKLE_CHARGE
- desc: in info display, shows that trickle charge is running
- user: core
-
- *: none
- charging: "Battery: Trickle Chg"
-
-
- *: none
- charging: "Battery: Trickle-lading"
-
-
- *: none
+ charging: "Batteri ladar"
@@ -4068,11 +3613,10 @@
*: "Battery: %d%% %dh %dm"
ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm"
- iriverifp7xx: "%d%% %dh %dm"
*: "Batteri: %d%% %dh %dm"
- iriverifp7xx: "%d%% %dh %dm"
+ ipodmini1g,ipodmini2g,iriverh10: "~Batt: %d%% %dh %dm"
*: "Batterinivå"
@@ -4086,10 +3630,10 @@
*: "Disk:"
- *: "Disk:"
+ *: "~Disk:"
- *: ""
+ *: "Disk"
@@ -4103,7 +3647,7 @@
*: "Ledig:"
- *: "Ledig diskplass:"
+ *: "Ledig diskplass"
@@ -4112,38 +3656,41 @@
user: core
*: "Int:"
+ hibylinux: "mSD:"
xduoox3: "mSD1:"
- *: "Int:"
- xduoox3: "mSD1:"
+ *: "Intern:"
+ hibylinux: "~mSD:"
+ xduoox3: "~mSD1:"
*: "Intern"
- xduoox3: "Micro S D 1"
+ hibylinux: "mikro S D"
+ xduoox3: "mikro S D 1"
id: LANG_DISK_NAME_MMC
- desc: in info menu; name for external disk with multivolume (Ondio; keep short!)
+ desc: in info menu; name for external disk with multivolume (keep short!)
user: core
*: none
- archosondio*: "MMC:"
- multivolume: "HD1"
+ hibylinux: "USB:"
+ multivolume: "HD1:"
sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:"
xduoox3: "mSD2:"
*: none
- archosondio*: "MMC"
- multivolume: "HD1"
- sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:"
- xduoox3: "mSD2:"
+ hibylinux: "~USB:"
+ multivolume: "~HD1:"
+ sansac200*,sansaclipplus,sansae200*,sansafuze*: "~mSD:"
+ xduoox3: "~mSD2:"
*: none
- archosondio*: "M M C"
+ hibylinux: "U S B"
multivolume: "H D 1"
sansac200*,sansaclipplus,sansae200*,sansafuze*: "Micro S D"
xduoox3: "Micro S D 2"
@@ -4159,11 +3706,11 @@
*: none
- rtc: ""
+ rtc: "Klokkeslett"
*: none
- rtc: ""
+ rtc: "Klokkeslett"
@@ -4180,6 +3727,7 @@
*: none
+ pitchscreen: ""
@@ -4196,6 +3744,7 @@
*: none
+ pitchscreen: ""
@@ -4206,10 +3755,10 @@
*: "Pause"
- *: "Pause"
+ *: "~Pause"
- *: "Pause"
+ *: "~Pause"
@@ -4275,8 +3824,8 @@
*: none
rtc: "OFF = Revert"
+ aigoerosq,erosqnative,gigabeats,sansafuzeplus,xduoox3*: "BACK = Revert"
gigabeatfx,mrobe500: "POWER = Revert"
- gigabeats,sansafuzeplus: "BACK = Revert"
gogearsa9200: "LEFT = Revert"
iaudiom5,iaudiox5: "RECORD = Revert"
ipod*,mpiohd300,sansac200*: "MENU = Revert"
@@ -4289,8 +3838,9 @@
*: none
rtc: "OFF = tilbakestill"
- gigabeatfx,mrobe500: "POWER = Tilbakestill"
+ aigoerosq,erosqnative,xduoox3*: "BACK = Tilbakestill"
gigabeats,sansafuzeplus: "BACK = Tilbakestill"
+ gigabeatfx,mrobe500: "POWER = Tilbakestill"
gogearsa9200: "LEFT = Tilbakestill"
iaudiom5,iaudiox5: "RECORD = Tilbakestill"
ipod*,mpiohd300,sansac200*: "MENU = Tilbakestill"
@@ -4318,6 +3868,7 @@
*: none
+ recording: ""
@@ -4334,6 +3885,7 @@
*: none
+ recording: ""
@@ -4358,6 +3910,7 @@
*: none
+ iaudiom5,iaudiox5,iriverh100,iriverh120,iriverh300,recording,samsungyh*,sansac200*,sansae200*,vibe500: ""
@@ -4428,22 +3981,6 @@
recording: "Førdelingsrom"
-
- id: LANG_DB_INF
- desc: -inf db for values below measurement
- user: core
-
- *: none
- recording: "-inf"
-
-
- *: none
- recording: "–uendeleg"
-
-
- *: none
-
-
id: LANG_ALARM_MOD_TIME
desc: The current alarm time shown in the alarm menu for the RTC alarm mod.
@@ -4458,6 +3995,7 @@
*: none
+ alarm: ""
@@ -4474,22 +4012,7 @@
*: none
-
-
-
- id: LANG_ALARM_MOD_SHUTDOWN
- desc: The text that tells the user that the alarm time is ok and the device shuts off (for the RTC alarm mod).
- user: core
-
- *: none
- alarm: "Alarm Set"
-
-
- *: none
- alarm: "Alarm stilt inn"
-
-
- *: none
+ alarm: "Vaknar opp om"
@@ -4509,33 +4032,6 @@
alarm: "Vekking om for kort tid"
-
- id: LANG_ALARM_MOD_KEYS
- desc: Shown key functions in alarm menu (for the RTC alarm mod).
- user: core
-
- *: none
- alarm: "PLAY=Set OFF=Cancel"
- gigabeats: "SELECT=Set POWER=Cancel"
- ipod*: "SELECT=Set MENU=Cancel"
- iriverh10,iriverh10_5gb: "SELECT=Set PREV=Cancel"
- mpiohd300: "ENTER=Set MENU=Cancel"
- sansafuzeplus: "SELECT=Set BACK=Cancel"
- vibe500: "OK=Set C=Cancel"
-
-
- *: none
- alarm: "SPEL = vel – AV = avbryt"
- gigabeats: "VEL = vel – PÅ/AV = avbryt"
- ipod*: "VEL = vel – MENY = avbryt"
- iriverh10,iriverh10_5gb: "VEL = vel – TILBAKE = avbryt"
- mpiohd300: "ENTER = vel – MENU = avbryt"
- vibe500: "OK = vel – C = avbryt"
-
-
- *: none
-
-
id: LANG_ALARM_MOD_DISABLE
desc: Announce that the RTC alarm has been turned off
@@ -4567,6 +4063,7 @@
*: none
+ lcd_color: ""
@@ -4583,6 +4080,7 @@
*: none
+ lcd_color: ""
@@ -4599,6 +4097,7 @@
*: none
+ lcd_color: ""
@@ -4623,10 +4122,10 @@
*: "Artist"
- *: "Artist"
+ *: "~Artist"
- *: "Artist"
+ *: "~Artist"
@@ -4637,10 +4136,10 @@
*: "Album"
- *: "Album"
+ *: "~Album"
- *: "Album"
+ *: "~Album"
@@ -4721,10 +4220,10 @@
*: "Bitrate"
- *: "Bitrate"
+ *: "~Bitrate"
- *: "Bitrate"
+ *: "~Bitrate"
@@ -4769,20 +4268,6 @@
*: "Sporforsterking"
-
- id: LANG_ID3_ALBUM_GAIN
- desc: in tag viewer
- user: core
-
- *: "Album Gain"
-
-
- *: "Albumforsterking"
-
-
- *: "Albumforsterking"
-
-
id: LANG_ID3_PATH
desc: in tag viewer
@@ -4825,6 +4310,7 @@
*: none
+ rtc: ""
@@ -4841,6 +4327,7 @@
*: none
+ rtc: ""
@@ -4857,6 +4344,7 @@
*: none
+ rtc: ""
@@ -4873,6 +4361,7 @@
*: none
+ rtc: ""
@@ -4889,6 +4378,7 @@
*: none
+ rtc: ""
@@ -4905,6 +4395,7 @@
*: none
+ rtc: ""
@@ -4921,6 +4412,7 @@
*: none
+ rtc: ""
@@ -4931,10 +4423,10 @@
*: "Jan"
- *: "Jan"
+ *: "~Jan"
- *: none
+ *: "Januar"
@@ -4945,10 +4437,10 @@
*: "Feb"
- *: "Feb"
+ *: "~Feb"
- *: none
+ *: "Februar"
@@ -4959,10 +4451,10 @@
*: "Mar"
- *: "Mar"
+ *: "~Mar"
- *: none
+ *: "Mars"
@@ -4973,10 +4465,10 @@
*: "Apr"
- *: "Apr"
+ *: "~Apr"
- *: none
+ *: "April"
@@ -5001,10 +4493,10 @@
*: "Jun"
- *: "Jun"
+ *: "~Jun"
- *: none
+ *: "Juni"
@@ -5015,10 +4507,10 @@
*: "Jul"
- *: "Jul"
+ *: "~Jul"
- *: none
+ *: "Juli"
@@ -5029,10 +4521,10 @@
*: "Aug"
- *: "Aug"
+ *: "~Aug"
- *: none
+ *: "August"
@@ -5043,10 +4535,10 @@
*: "Sep"
- *: "Sep"
+ *: "~Sep"
- *: none
+ *: "September"
@@ -5057,10 +4549,10 @@
*: "Oct"
- *: "Okt"
+ *: "~Okt"
- *: none
+ *: "Oktober"
@@ -5071,10 +4563,10 @@
*: "Nov"
- *: "Nov"
+ *: "~Nov"
- *: none
+ *: "November"
@@ -5085,10 +4577,10 @@
*: "Dec"
- *: "Des"
+ *: "~Des"
- *: none
+ *: "Desember"
@@ -5777,48 +5269,6 @@
*: ""
-
- id: LANG_KILOBYTE
- desc: a unit postfix, also voiced
- user: core
-
- *: "KB"
-
-
- *: "KB"
-
-
- *: "kilobyte"
-
-
-
- id: LANG_MEGABYTE
- desc: a unit postfix, also voiced
- user: core
-
- *: "MB"
-
-
- *: "MB"
-
-
- *: "megabyte"
-
-
-
- id: LANG_GIGABYTE
- desc: a unit postfix, also voiced
- user: core
-
- *: "GB"
-
-
- *: "GB"
-
-
- *: "gigabyte"
-
-
id: LANG_POINT
desc: decimal separator for composing numbers
@@ -6365,6 +5815,7 @@
*: none
+ remote: "speleskjerm på fjern eining"
@@ -6417,10 +5868,10 @@
*: "Inserted %d tracks (%s)"
- *: "Sett inn %d spor (%s)"
+ *: "Set inn %d spor (%s)"
- *: ""
+ *: "Set inn spor"
@@ -6434,7 +5885,7 @@
*: "Lagt %d spor i kø (%s)"
- *: ""
+ *: "Lagt spor i kø"
@@ -6448,7 +5899,7 @@
*: "Lagra %d spor (%s)"
- *: ""
+ *: "Lagra spor"
@@ -6493,20 +5944,6 @@
*: "Ingenting å halda fram med"
-
- id: LANG_PLAYLIST_CONTROL_UPDATE_ERROR
- desc: Playlist error
- user: core
-
- *: "Error updating playlist control file"
-
-
- *: "Feil ved oppdatering av spelelistekontrollfil"
-
-
- *: "Feil ved oppdatering av spelelistekontrollfil"
-
-
id: LANG_PLAYLIST_ACCESS_ERROR
desc: Playlist error
@@ -6665,86 +6102,6 @@
radio: "Ferdigoppsettlista er full"
-
- id: LANG_BUTTONBAR_MENU
- desc: in button bar
- user: core
-
- *: none
- radio_screen_button_bar: "Menu"
-
-
- *: none
- radio_screen_button_bar: "Meny"
-
-
- *: none
-
-
-
- id: LANG_FM_BUTTONBAR_EXIT
- desc: in radio screen
- user: core
-
- *: none
- radio_screen_button_bar: "Exit"
-
-
- *: none
- radio_screen_button_bar: "Avslutt"
-
-
- *: none
-
-
-
- id: LANG_FM_BUTTONBAR_ACTION
- desc: in radio screen
- user: core
-
- *: none
- radio_screen_button_bar: "Action"
-
-
- *: none
- radio_screen_button_bar: "Handling"
-
-
- *: none
-
-
-
- id: LANG_FM_BUTTONBAR_ADD
- desc: in radio screen
- user: core
-
- *: none
- radio_screen_button_bar: "Add"
-
-
- *: none
- radio_screen_button_bar: "Legg til"
-
-
- *: none
-
-
-
- id: LANG_FM_BUTTONBAR_RECORD
- desc: in radio screen
- user: core
-
- *: none
- radio_screen_button_bar: "Record"
-
-
- *: none
- radio_screen_button_bar: "Ta opp"
-
-
- *: none
-
-
id: LANG_FM_MONO_MODE
desc: in radio screen
@@ -6776,6 +6133,7 @@
*: none
+ radio: ""
@@ -6788,10 +6146,11 @@
*: none
- radio: "Søk automatisk"
+ radio: "Søk automatisk i ferdigoppsett"
*: none
+ radio: "Søk automatisk i ferdigoppsett"
@@ -6825,6 +6184,7 @@
*: none
+ radio: "Søkjer"
@@ -6841,6 +6201,7 @@
*: none
+ radio: ""
@@ -6871,7 +6232,7 @@
*: "Mappebufferen er full"
- *: ""
+ *: "Mappebufferen er full"
@@ -6946,7 +6307,7 @@
id: LANG_OFF_ABORT
- desc: Used on archosrecorder models
+ desc: Used on many models
user: core
*: "OFF to abort"
@@ -6958,13 +6319,13 @@
iriverh100,iriverh120,iriverh300: "STOP to abort"
- *: "OFF for å avbryte"
- gigabeatfx: "POWER for å avbryte"
- gigabeats,sansafuzeplus: "BACK for å avbryte"
- iaudiom5,iaudiox5: "PLAY (langt trykk) for å avbryte"
- ipod*: "PLAY/PAUSE for å avbryte"
- iriverh10,iriverh10_5gb,sansac200*,sansae200*,vibe500: "PREV for å avbryte"
- iriverh100,iriverh120,iriverh300: "STOP for å avbryte"
+ *: "OFF for å avbryta"
+ gigabeatfx: "POWER for å avbryta"
+ gigabeats,sansafuzeplus: "BACK for å avbryta"
+ iaudiom5,iaudiox5: "PLAY (langt trykk) for å avbryta"
+ ipod*: "PLAY/PAUSE for å avbryta"
+ iriverh10,iriverh10_5gb,sansac200*,sansae200*,vibe500: "PREV for å avbryta"
+ iriverh100,iriverh120,iriverh300: "STOP for å avbryta"
*: ""
@@ -7093,7 +6454,7 @@
*: "Klarte ikkje opna «%s»"
- *: ""
+ *: "Klarte ikkje opna"
@@ -7107,12 +6468,12 @@
*: "Klarte ikkje lesa «%s»"
- *: ""
+ *: "Klarte ikkje lesa"
id: LANG_PLUGIN_WRONG_MODEL
- desc: The plugin is not compatible with the archos model trying to run it
+ desc: The plugin is not compatible with the player model trying to run it
user: core
*: "Incompatible model"
@@ -7121,7 +6482,7 @@
*: "Inkompatibel modell"
- *: ""
+ *: "Inkompatibel modell"
@@ -7135,7 +6496,7 @@
*: "Inkompatibel versjon"
- *: ""
+ *: "Inkompatibel versjon"
@@ -7149,7 +6510,7 @@
*: "Programmet gav ei feilmelding"
- *: ""
+ *: "Programmet gav ei feilmelding"
@@ -7262,7 +6623,7 @@
*: "Direkteforsterking"
- *: none
+ *: "Direkteforsterking"
@@ -7276,7 +6637,7 @@
*: "Kryssforsterking"
- *: none
+ *: "Kryssforsterking"
@@ -7290,7 +6651,7 @@
*: "Høgfrekvensdemping"
- *: none
+ *: "Høgfrekvensdemping"
@@ -7304,7 +6665,7 @@
*: "Høgfrekvensgrense"
- *: none
+ *: "Høgfrekvensgrense"
@@ -7456,20 +6817,6 @@
recording: "Oppdelingsstorleik"
-
- id: LANG_CATALOG
- desc: in onplay menu
- user: core
-
- *: "Playlist Catalogue"
-
-
- *: "Spelelistekatalog"
-
-
- *: "Spelelistekatalog"
-
-
id: LANG_SPLIT_MEASURE
desc: in record timesplit options
@@ -7518,20 +6865,6 @@
recording: "Oppdelingstid"
-
- id: LANG_CATALOG_ADD_TO
- desc: in onplay playlist catalogue submenu
- user: core
-
- *: "Add to Playlist"
-
-
- *: "Legg til speleliste"
-
-
- *: "Legg til speleliste"
-
-
id: LANG_START_NEW_FILE
desc: in record timesplit options
@@ -7566,20 +6899,6 @@
recording: "Gjer dette ved oppdeling"
-
- id: LANG_CATALOG_VIEW
- desc: in onplay playlist catalogue submenu
- user: core
-
- *: "View Catalogue"
-
-
- *: "Vis katalog"
-
-
- *: "Vis katalog"
-
-
id: LANG_CATALOG_NO_DIRECTORY
desc: error message when playlist catalogue directory doesn't exist
@@ -7591,7 +6910,7 @@
*: "«%s» finst ikkje"
- *: ""
+ *: "finst ikkje"
@@ -7608,40 +6927,6 @@
*: "Ingen spelelister"
-
- id: LANG_SYSFONT_CHANNEL_STEREO
- desc: in sound_settings
- user: core
-
- *: none
- recording: "Stereo"
-
-
- *: none
- recording: "Stereo"
-
-
- *: none
- recording: "Stereo"
-
-
-
- id: LANG_SYSFONT_CHANNEL_MONO
- desc: in sound_settings
- user: core
-
- *: none
- recording: "Mono"
-
-
- *: none
- recording: "Mono"
-
-
- *: none
- recording: "Mono"
-
-
id: LANG_SYSFONT_EQUALIZER_EDIT_MODE
desc: in the equalizer settings menu
@@ -7650,7 +6935,7 @@
*: "Edit mode: %s %s"
- *: "Redigeringsmodus: %s"
+ *: "Redigeringsmodus: %s %s"
*: ""
@@ -7670,170 +6955,18 @@
*: "Frekvensgrense"
-
- id: LANG_SYSFONT_RECORDING_QUALITY
- desc: in the recording settings
- user: core
-
- *: none
- recording_hwcodec: "Quality"
-
-
- *: none
- recording_hwcodec: "Kvalitet"
-
-
- *: none
- recording_hwcodec: "Kvalitet"
-
-
-
- id: LANG_SYSFONT_RECORDING_FREQUENCY
- desc: in the recording settings
- user: core
-
- *: none
- recording: "Frequency"
-
-
- *: none
- recording: "Frekvens"
-
-
- *: none
- recording: "Frekvens"
-
-
-
- id: LANG_SYSFONT_RECORDING_SOURCE
- desc: in the recording settings
- user: core
-
- *: none
- recording: "Source"
-
-
- *: none
- recording: "Kjelde"
-
-
- *: none
- recording: "Kjelde"
-
-
-
- id: LANG_SYSFONT_RECORDING_SRC_MIC
- desc: in the recording settings
- user: core
-
- *: none
- recording: "Int. Mic"
-
-
- *: none
- recording: "Intern mikrofon"
-
-
- *: none
-
-
-
- id: LANG_SYSFONT_RECORDING_SRC_DIGITAL
- desc: in the recording settings
- user: core
-
- *: none
- recording: "Digital"
-
-
- *: none
- recording: "Digital"
-
-
- *: none
- recording: "Digital"
-
-
-
- id: LANG_SYSFONT_RECORD_TRIGGER
- desc: in recording settings_menu
- user: core
-
- *: none
- recording: "Trigger"
-
-
- *: none
- recording: "Utløysar"
-
-
- *: none
- recording: "Utløysar"
-
-
-
- id: LANG_SYSFONT_DIRBROWSE_F1
- desc: in dir browser, F1 button bar text
- user: core
-
- *: none
- recorder_pad: "Menu"
-
-
- *: none
- recorder_pad: "Meny"
-
-
- *: none
-
-
-
- id: LANG_SYSFONT_DIRBROWSE_F2
- desc: in dir browser, F2 button bar text
- user: core
-
- *: none
- recorder_pad: "Option"
-
-
- *: none
- recorder_pad: "Val"
-
-
- *: none
-
-
-
- id: LANG_SYSFONT_DIRBROWSE_F3
- desc: in dir browser, F3 button bar text
- user: core
-
- *: none
- recorder_pad: "LCD"
-
-
- *: none
- recorder_pad: "LCD"
-
-
- *: none
-
-
id: LANG_NEVER
desc: in lcd settings
user: core
- *: none
- lcd_sleep: "Never"
+ *: "Never"
- *: none
- lcd_sleep: "Aldri"
+ *: "Aldri"
- *: none
- lcd_sleep: "Aldri"
+ *: "Aldri"
@@ -7846,10 +6979,11 @@
*: none
- agc: "DJ-Set (slow)"
+ agc: "DJ-sett (sein)"
*: none
+ agc: "D J sett sein"
@@ -7862,10 +6996,11 @@
*: none
- lcd_sleep: "Sov (etter at lyset er av)"
+ lcd_sleep: "Dvale (etter at lyset er av)"
*: none
+ lcd_sleep: "Dvale etter at lyset er av"
@@ -7929,11 +7064,11 @@
*: none
- remote: "(Vol- : Re-enable)"
+ remote: "(Vol- : Skru på att)"
*: none
- remote: "(Vol- : Re-enable)"
+ remote: "Volum skru på att"
@@ -7978,10 +7113,10 @@
*: "Loading... %d%% done (%s)"
- *: "Lastar … %d% % fullført (%s)"
+ *: "Loading... %d%% done (%s)"
- *: ""
+ *: "Lastar vent ferdig"
@@ -8017,15 +7152,16 @@
desc: in lcd settings
user: core
- *: none
+ *: "Backlight on Lock"
hold_button: "Backlight on Hold"
- *: none
+ *: "Skjermlys med låseknappen"
hold_button: "Lys (med «Hold»-knappen)"
- *: none
+ *: "Skjermlys med låseknappen"
+ hold_button: "Skjermlys med hold-knappen"
@@ -8069,11 +7205,11 @@
*: none
- radio: "Korea"
+ radio: "~Korea"
*: none
- radio: "Korea"
+ radio: "~Korea"
@@ -8090,6 +7226,7 @@
*: none
+ radio: "U S A og Kanada"
@@ -8119,11 +7256,11 @@
*: none
- radio: "Japan"
+ radio: "~Japan"
*: none
- radio: "Japan"
+ radio: "~Japan"
@@ -8184,10 +7321,11 @@
*: none
- usb_charging_enable: "Lad batteri ved USB-samband"
+ usb_charging_enable: "Lad batteriet ved USB-samband"
*: none
+ usb_charging_enable: "Lad batteriet ved U S B samband"
@@ -8204,6 +7342,7 @@
*: none
+ recording: "same som kjelda"
@@ -8245,10 +7384,10 @@
*: "Format"
- *: "Format"
+ *: "~Format"
- *: "Format"
+ *: "~Format"
@@ -8278,11 +7417,11 @@
*: none
- recording: "Bitrate"
+ recording: "~Bitrate"
*: none
- recording: "Bitrate"
+ recording: "~Bitrate"
@@ -8375,20 +7514,7 @@
*: none
-
-
-
- id: LANG_REPLACE
- desc: in onplay menu. Replace the current playlist with a new one.
- user: core
-
- *: "Play Next"
-
-
- *: "Spel neste"
-
-
- *: "Spel neste"
+ recording: "Ingen innstillingar"
@@ -8466,16 +7592,16 @@
id: LANG_DITHERING
- desc: in the sound settings menu
+ desc: in the sound settings and some other menus
user: core
*: "Dithering"
- *: "Dithering"
+ *: "Utjamning"
- *: "Dithering"
+ *: "Utjamning"
@@ -8539,16 +7665,16 @@
id: LANG_AUDIOSCROBBLER
- desc: "Last.fm Log" in the playback menu
+ desc: "Last.fm Logger" in Plugin/apps/scrobbler
user: core
- *: "Last.fm Log"
+ *: "Last.fm Logger"
*: "Last.fm-logg"
- *: "Last.fm-logg"
+ *: "Last F M logg"
@@ -8565,6 +7691,7 @@
*: none
+ recording: "Starttype"
@@ -8784,23 +7911,6 @@
*: "einingar per tikk"
-
- id: LANG_SYSFONT_LINE_IN
- desc: in the recording settings
- user: core
-
- *: none
- recording: "Line In"
-
-
- *: none
- recording: "Linje inn"
-
-
- *: none
- recording: "Linje inn"
-
-
id: LANG_SCANNING_DISK
desc: when booting up and rebuilding the cache and calculating free space
@@ -8973,14 +8083,12 @@
user: core
*: "Buffer:"
- archosplayer: "Buf:"
- *: "Buffer:"
- archosplayer: "Buf:"
+ *: "~Buffer:"
- *: ""
+ *: "Buffer"
@@ -9037,17 +8145,16 @@
user: core
*: "PLAY = Yes"
- archosplayer: "(PLAY/STOP)"
cowond2*: "MENU, or top-right = Yes"
- gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Yes"
+ creativezen*,gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Yes"
iriverh100,iriverh120,iriverh300: "NAVI = Yes"
mrobe500: "PLAY, POWER, or top-right = Yes"
vibe500: "OK = Yes"
*: "PLAY = ja"
- archosplayer: "(PLAY/STOP)"
cowond2*: "MENU eller topp høgre = ja"
+ creativezen*: "SELECT = ja"
gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = ja"
iriverh100,iriverh120,iriverh300: "NAVI = ja"
mrobe500: "PLAY, POWER eller topp høgre = ja"
@@ -9064,8 +8171,8 @@
*: none
rtc: "ON = Set"
+ aigoerosq,erosqnative,gogearsa9200,samsungyh*,xduoox3*: "PLAY = Set"
gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Set"
- gogearsa9200,samsungyh*: "PLAY = Set"
iriverh100,iriverh120,iriverh300: "NAVI = Set"
mpiohd300: "ENTER = Set"
mrobe500: "HEART = Set"
@@ -9073,13 +8180,14 @@
*: none
- rtc: "PÅ = velg"
- gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = velg"
- gogearsa9200,samsungyh*: "PLAY = velg"
- iriverh100,iriverh120,iriverh300: "NAVI = velg"
- mpiohd300: "ENTER = velg"
- mrobe500: "HEART = velg"
- vibe500: "OK = velg"
+ rtc: "PÅ = vel"
+ aigoerosq,erosqnative,xduoox3*: "PLAY = vel"
+ gogearsa9200,samsungyh*: "PLAY = vel"
+ gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = vel"
+ iriverh100,iriverh120,iriverh300: "NAVI = vel"
+ mpiohd300: "ENTER = vel"
+ mrobe500: "HEART = vel"
+ vibe500: "OK = vel"
*: none
@@ -9091,15 +8199,12 @@
user: core
*: "Any Other = No"
- archosplayer: none
*: "Andre = nei"
- archosplayer: none
*: ""
- archosplayer: none
@@ -9223,29 +8328,12 @@
user: core
*: "End of Song List"
- archosplayer: "End of List"
*: "Slutt på songliste"
- archosplayer: "Slutt på liste"
*: "Slutt på songliste"
- archosplayer: "Slutt på liste"
-
-
-
- id: LANG_SYSFONT_GAIN
- desc: in the equalizer settings menu
- user: core
-
- *: "Gain"
-
-
- *: "Forsterking"
-
-
- *: "Forsterking"
@@ -9293,20 +8381,6 @@
*: "P M"
-
- id: LANG_SYSFONT_MODE
- desc: in wps F2 pressed
- user: core
-
- *: "Mode:"
-
-
- *: "Modus:"
-
-
- *: ""
-
-
id: LANG_MIN_DURATION
desc: in recording settings_menu
@@ -9363,7 +8437,7 @@
*: "Modus:"
- *: "Modus:"
+ *: "Modus"
@@ -9414,23 +8488,6 @@
*: "Arbeid"
-
- id: LANG_HEADPHONE_UNPLUG_RW
- desc: in pause_phones_menu.
- user: core
-
- *: none
- headphone_detection: "Duration to Rewind"
-
-
- *: none
- headphone_detection: "Kor lenge å spola tilbake"
-
-
- *: none
- headphone_detection: "Kor lenge å spola tilbake"
-
-
id: LANG_PITCH_UP_SEMITONE
desc: in wps
@@ -9521,20 +8578,6 @@
*: "Ikkje hald fram"
-
- id: LANG_BOOKMARK_CONTEXT_DELETE
- desc: bookmark context menu, delete this bookmark
- user: core
-
- *: "Delete"
-
-
- *: "Slett"
-
-
- *: "Slett"
-
-
id: VOICE_OCLOCK
desc: spoken only, for wall clock announce
@@ -9546,7 +8589,7 @@
*: ""
- *: ""
+ *: "o'clock"
@@ -9633,7 +8676,7 @@
*: ""
- *: "cuesheet"
+ *: "cue ark"
@@ -9664,26 +8707,9 @@
*: "Ugyldig bokmerke"
-
- id: LANG_SYSFONT_CHANNELS
- desc: in the recording settings
- user: core
-
- *: none
- recording: "Channels"
-
-
- *: none
- recording: "Kanalar"
-
-
- *: none
- recording: "Kanalar"
-
-
id: LANG_PLAYLISTS
- desc: in the main menu and file view setting
+ desc: in the main menu and Playlist settings menu
user: core
*: "Playlists"
@@ -9807,23 +8833,6 @@
*: "Kopierer"
-
- id: LANG_SET_AS_REC_DIR
- desc: used in the onplay menu to set a recording dir
- user: core
-
- *: none
- recording: "Set as Recording Directory"
-
-
- *: none
- recording: "Bruk som opptaksmappe"
-
-
- *: none
- recording: "Bruk som opptaksmappe"
-
-
id: LANG_REMOTE_WHILE_PLAYING
desc: in settings_menu()
@@ -9834,10 +8843,11 @@
*: none
- remote: "Browse .rwps files"
+ remote: "Speleskjerm på fjern eining"
*: none
+ remote: "Speleskjerm på fjern eining"
@@ -10428,7 +9438,7 @@
*: none
- agc: "AGC"
+ agc: "Automatisk lydforsterking"
*: none
@@ -10539,3 +9549,7432 @@
*: "Filstorleik"
+
+ id: LANG_CHANNEL_LEFTRIGHT
+ desc: in sound_settings
+ user: core
+
+ *: none
+ recording: "Mono Left + Right"
+
+
+ *: none
+ recording: "Mono venstre + høgre"
+
+
+ *: none
+ recording: "Mono venstre pluss høgre"
+
+
+
+ id: LANG_RESET_EQUALIZER
+ desc: in the equalizer settings menu
+ user: core
+
+ *: "Reset EQ"
+
+
+ *: "Nullstill EQ"
+
+
+ *: "Nullstill E Q"
+
+
+
+ id: LANG_SINGLE_MODE
+ desc: single mode
+ user: core
+
+ *: "Single Mode"
+
+
+ *: "Singelmodus"
+
+
+ *: "Singelmodus"
+
+
+
+ id: LANG_DISPLAY_TITLEALBUM_FROMTAGS
+ desc: track display options
+ user: core
+
+ *: "Title & Album from ID3 tags"
+
+
+ *: "Tittel og album frå ID3-merkelappar"
+
+
+ *: "Tittel og album frå I D 3"
+
+
+
+ id: LANG_DISPLAY_TITLE_FROMTAGS
+ desc: track display options
+ user: core
+
+ *: "Title from ID3 tags"
+
+
+ *: "Tittel frå ID3-merkelappar"
+
+
+ *: "Tittel frå I D 3"
+
+
+
+ id: LANG_RANDOM_SHUFFLE_RANDOM_SELECTIVE_SONGS_SUMMARY
+ desc: a summary splash screen that appear on the database browser when you try to create a playlist from the database browser that exceeds your system limit
+ user: core
+
+ *: "Selection too big, %d random tracks will be selected"
+
+
+ *: "For stort utval, det blir valt %d tilfeldige spor"
+
+
+ *: "For stort utval, færre tilfeldige spor blir valde"
+
+
+
+ id: LANG_DISPLAY_SPECIAL_CHARACTER
+ desc: Special character (japanese, accents, etc)
+ user: core
+
+ *: "Special character"
+
+
+ *: "Spesialteikn"
+
+
+ *: "Spesialteikn"
+
+
+
+ id: LANG_ID3_ALBUMARTISTS
+ desc: in tag viewer
+ user: core
+
+ *: "Album Artists"
+
+
+ *: "Albumartistar"
+
+
+ *: "Albumartistar"
+
+
+
+ id: LANG_ADD_CURRENT_TO_FAVES
+ desc:
+ user: core
+
+ *: "Add Current to Shortcuts"
+
+
+ *: "Legg til denne i snarvegar"
+
+
+ *: "Legg til denne i snarvegar"
+
+
+
+ id: LANG_TALK_MIXER_LEVEL
+ desc: Relative volume of voice prompts
+ user: core
+
+ *: "Voice Prompt Volume"
+
+
+ *: "Stemmevolum"
+
+
+ *: "Stemmevolum"
+
+
+
+ id: LANG_DEADZONE
+ desc: touchpad deadzone setting
+ user: core
+
+ *: none
+ sansafuzeplus: "Touchpad Dead Zone"
+
+
+ *: none
+ sansafuzeplus: "Daudsone for styrefelt"
+
+
+ *: none
+ sansafuzeplus: "Daudsone for styrefelt"
+
+
+
+ id: LANG_SERIAL_BITRATE
+ desc: in system settings menu
+ user: core
+
+ *: none
+ serial_port: "Serial Bitrate"
+
+
+ *: none
+ serial_port: "Seriell bitrate"
+
+
+ *: none
+ serial_port: "Seriell bitrate"
+
+
+
+ id: LANG_SERIAL_BITRATE_AUTO
+ desc: in system settings menu
+ user: core
+
+ *: none
+ serial_port: "Auto"
+
+
+ *: none
+ serial_port: "~Auto"
+
+
+ *: none
+ serial_port: "~Auto"
+
+
+
+ id: LANG_SERIAL_BITRATE_9600
+ desc: in system settings menu
+ user: core
+
+ *: none
+ serial_port: "9600"
+
+
+ *: none
+ serial_port: "~9600"
+
+
+ *: none
+ serial_port: "~9600"
+
+
+
+ id: LANG_SERIAL_BITRATE_19200
+ desc: in system settings menu
+ user: core
+
+ *: none
+ serial_port: "19200"
+
+
+ *: none
+ serial_port: "~19200"
+
+
+ *: none
+ serial_port: "~19200"
+
+
+
+ id: LANG_SERIAL_BITRATE_38400
+ desc: in system settings menu
+ user: core
+
+ *: none
+ serial_port: "38400"
+
+
+ *: none
+ serial_port: "~38400"
+
+
+ *: none
+ serial_port: "~38400"
+
+
+
+ id: LANG_SERIAL_BITRATE_57600
+ desc: in system settings menu
+ user: core
+
+ *: none
+ serial_port: "57600"
+
+
+ *: none
+ serial_port: "~57600"
+
+
+ *: none
+ serial_port: "~57600"
+
+
+
+ id: LANG_RECORDING_MONO_MODE
+ desc: in the recording settings
+ user: core
+
+ *: none
+ recording: "Mono mode"
+
+
+ *: none
+ recording: "Monomodus"
+
+
+ *: none
+ recording: "Monomodus"
+
+
+
+ id: LANG_SEARCH_RESULTS
+ desc: title for the list of results displayed after searching in a playlist
+ user: core
+
+ *: "Search Results"
+
+
+ *: "Søkjeresultat"
+
+
+ *: "Søkjeresultat"
+
+
+
+ id: LANG_LEFT
+ desc: Generic use of 'left'
+ user: core
+
+ *: "Left"
+
+
+ *: "Venstre"
+
+
+ *: "Venstre"
+
+
+
+ id: LANG_RIGHT
+ desc: Generic use of 'right'
+ user: core
+
+ *: "Right"
+
+
+ *: "Høgre"
+
+
+ *: "Høgre"
+
+
+
+ id: LANG_RESET_SETTING
+ desc: used in the settings context menu
+ user: core
+
+ *: "Reset Setting"
+
+
+ *: "Nullstill"
+
+
+ *: "Nullstill"
+
+
+
+ id: LANG_LEFT_QS_ITEM
+ desc: used for the submenu name for the quickscreen items
+ user: core
+
+ *: none
+ quickscreen: "Set as Left Quickscreen Item"
+
+
+ *: none
+ quickscreen: "Bruk som venstre snøggskjermelement"
+
+
+ *: none
+ quickscreen: "Bruk som venstre snøggskjermelement"
+
+
+
+ id: LANG_RIGHT_QS_ITEM
+ desc: used for the submenu name for the quickscreen items
+ user: core
+
+ *: none
+ quickscreen: "Set as Right Quickscreen Item"
+
+
+ *: none
+ quickscreen: "Bruk som høgre snøggskjermelement"
+
+
+ *: none
+ quickscreen: "Bruk som høgre snøggskjermelement"
+
+
+
+ id: LANG_BOTTOM_QS_ITEM
+ desc: used for the submenu name for the quickscreen items
+ user: core
+
+ *: none
+ quickscreen: "Set as Bottom Quickscreen Item"
+
+
+ *: none
+ quickscreen: "Bruk som nedre snøggskjermelement"
+
+
+ *: none
+ quickscreen: "Bruk som nedre snøggskjermelement"
+
+
+
+ id: LANG_CREDITS
+ desc: in the Main Menu -> System screen
+ user: core
+
+ *: "Credits"
+
+
+ *: "Bidragsytarar"
+
+
+ *: "Bidragsytarar"
+
+
+
+ id: LANG_SORT_INTERPRET_NUMBERS
+ desc: in Settings -> File view
+ user: core
+
+ *: "Interpret numbers when sorting"
+
+
+ *: "Ved sortering, tolk tal som"
+
+
+ *: "Ved sortering tolk tal som"
+
+
+
+ id: LANG_SORT_INTERPRET_AS_DIGIT
+ desc: in Settings -> File view
+ user: core
+
+ *: "As digits"
+
+
+ *: "Siffer"
+
+
+ *: "Siffer"
+
+
+
+ id: LANG_SORT_INTERPRET_AS_NUMBERS
+ desc: in Settings -> File view
+ user: core
+
+ *: "As whole numbers"
+
+
+ *: "Heiltal"
+
+
+ *: "Heiltal"
+
+
+
+ id: LANG_ENABLE_SPEAKER
+ desc: in Settings -> Sound Settings
+ user: core
+
+ *: none
+ speaker: "Enable Speaker"
+
+
+ *: none
+ speaker: "Skru på høgtalar"
+
+
+ *: none
+ speaker: "Skru på høgtalar"
+
+
+
+ id: LANG_TOUCHSCREEN_MODE
+ desc: in Settings -> General -> Display -> Touchscreen Settings
+ user: core
+
+ *: none
+ touchscreen: "Touchscreen Mode"
+
+
+ *: none
+ touchscreen: "Peikeskjermmodus"
+
+
+ *: none
+ touchscreen: "Peikeskjermmodus"
+
+
+
+ id: LANG_TOUCHSCREEN_GRID
+ desc: in Settings -> General -> Display -> Touchscreen Settings
+ user: core
+
+ *: none
+ touchscreen: "3x3 Grid"
+
+
+ *: none
+ touchscreen: "3x3-gitter"
+
+
+ *: none
+ touchscreen: "3 gonger 3 gitter"
+
+
+
+ id: LANG_TOUCHSCREEN_POINT
+ desc: in Settings -> General -> Display -> Touchscreen Settings
+ user: core
+
+ *: none
+ touchscreen: "Absolute Point"
+
+
+ *: none
+ touchscreen: "Absolutt punkt"
+
+
+ *: none
+ touchscreen: "Absolutt punkt"
+
+
+
+ id: LANG_PREVENT_SKIPPING
+ desc: in Settings -> Playback Settings
+ user: core
+
+ *: "Prevent Track Skipping"
+
+
+ *: "Hindra sporhopping"
+
+
+ *: "Hindra sporhopping"
+
+
+
+ id: LANG_TIMESTRETCH
+ desc: timestretch enable
+ user: core
+
+ *: "Timestretch"
+
+
+ *: "Strekk tid"
+
+
+ *: "Strekk tid"
+
+
+
+ id: LANG_SPEED
+ desc: timestretch speed
+ user: core
+
+ *: "Speed"
+
+
+ *: "Fart"
+
+
+ *: "Fart"
+
+
+
+ id: LANG_TOUCHSCREEN_SETTINGS
+ desc: in Settings -> General -> Display menu
+ user: core
+
+ *: none
+ touchscreen: "Touchscreen Settings"
+
+
+ *: none
+ touchscreen: "Peikeskjerminnstillingar"
+
+
+ *: none
+ touchscreen: "Peikeskjerminnstillingar"
+
+
+
+ id: LANG_TOUCHSCREEN_CALIBRATE
+ desc: in Settings -> General -> Display -> Touchscreen Settings
+ user: core
+
+ *: none
+ touchscreen: "Calibrate"
+
+
+ *: none
+ touchscreen: "Kalibrer"
+
+
+ *: none
+ touchscreen: "Kalibrer"
+
+
+
+ id: LANG_TOUCHSCREEN_RESET_CALIBRATION
+ desc: in Settings -> General -> Display -> Touchscreen Settings
+ user: core
+
+ *: none
+ touchscreen: "Reset Calibration"
+
+
+ *: none
+ touchscreen: "Nullstill kailbrering"
+
+
+ *: none
+ touchscreen: "Nullstill kalibrering"
+
+
+
+ id: LANG_STATUSBAR_TOP
+ desc: in Settings -> General -> Display -> statusbar
+ user: core
+
+ *: "Top"
+
+
+ *: "Toppen"
+
+
+ *: "Toppen"
+
+
+
+ id: LANG_STATUSBAR_BOTTOM
+ desc: in Settings -> General -> Display -> statusbar
+ user: core
+
+ *: "Bottom"
+
+
+ *: "Botnen"
+
+
+ *: "Botnen"
+
+
+
+ id: LANG_REMOTE_STATUSBAR
+ desc: in Settings -> General -> Display -> statusbar
+ user: core
+
+ *: none
+ remote: "Remote Statusbar"
+
+
+ *: none
+ remote: "Fjernstatusfelt"
+
+
+ *: none
+ remote: "Fjernstatusfelt"
+
+
+
+ id: LANG_SEMITONE
+ desc:
+ user: core
+
+ *: none
+ pitchscreen: "Semitone"
+
+
+ *: none
+ pitchscreen: "Halvtone"
+
+
+ *: none
+ pitchscreen: "Halvtone"
+
+
+
+ id: LANG_STRETCH_LIMIT
+ desc: "limit" in pitch screen
+ user: core
+
+ *: none
+ pitchscreen: "Limit"
+
+
+ *: none
+ pitchscreen: "Grense"
+
+
+ *: none
+ pitchscreen: "Grense"
+
+
+
+ id: LANG_PLAYBACK_RATE
+ desc: "rate" in pitch screen
+ user: core
+
+ *: none
+ pitchscreen: "Rate"
+
+
+ *: none
+ pitchscreen: "~Rate"
+
+
+ *: none
+ pitchscreen: "~Rate"
+
+
+
+ id: LANG_USB_KEYPAD_MODE
+ desc: in settings_menu
+ user: core
+
+ *: none
+ usb_hid: "USB Keypad Mode"
+
+
+ *: none
+ usb_hid: "USB-tastaturmodus"
+
+
+ *: none
+ usb_hid: "U S B tastaturmodus"
+
+
+
+ id: LANG_MULTIMEDIA_MODE
+ desc: in settings_menu
+ user: core
+
+ *: none
+ usb_hid: "Multimedia"
+
+
+ *: none
+ usb_hid: "~Multimedia"
+
+
+ *: none
+ usb_hid: "~Multimedia"
+
+
+
+ id: LANG_PRESENTATION_MODE
+ desc: in settings_menu
+ user: core
+
+ *: none
+ usb_hid: "Presentation"
+
+
+ *: none
+ usb_hid: "Presentasjon"
+
+
+ *: none
+ usb_hid: "Presentasjon"
+
+
+
+ id: LANG_BROWSER_MODE
+ desc: in settings_menu
+ user: core
+
+ *: none
+ usb_hid: "Browser"
+
+
+ *: none
+ usb_hid: "Lesar"
+
+
+ *: none
+ usb_hid: "Lesar"
+
+
+
+ id: LANG_MOUSE_MODE
+ desc: in settings_menu
+ user: core
+
+ *: none
+ usb_hid: "Mouse"
+
+
+ *: none
+ usb_hid: "Mus"
+
+
+ *: none
+ usb_hid: "Mus"
+
+
+
+ id: LANG_USB_DAC
+ desc: in settings_menu
+ user: core
+
+ *: none
+ usbdac: "USB-DAC"
+
+
+ *: none
+ usbdac: "~USB-DAC"
+
+
+ *: none
+ usbdac: "U S B digital lydomformar"
+
+
+
+ id: LANG_WHILE_USB_CHARGE_ONLY
+ desc: in settings_menu
+ user: core
+
+ *: none
+ usbdac: "While In USB Charge-Only Mode"
+
+
+ *: none
+ usbdac: "While In USB Charge-Only Mode"
+
+
+ *: none
+ usbdac: "While In USB Charge-Only Mode"
+
+
+
+ id: LANG_WHILE_MASS_STORAGE_USB_ONLY
+ desc: in settings_menu
+ user: core
+
+ *: none
+ usbdac: "While In USB Mass-Storage Mode"
+
+
+ *: none
+ usbdac: "Når USB-masselagringsmodus er i bruk"
+
+
+ *: none
+ usbdac: "Når U S B masselagringsmodus er i bruk"
+
+
+
+ id: LANG_USB_DAC_ACTIVE
+ desc: for splash
+ user: core
+
+ *: none
+ usbdac: "USB-DAC Active"
+
+
+ *: none
+ usbdac: "USB-DAC aktiv"
+
+
+ *: none
+ usbdac: "U S B digital lydomformar aktiv"
+
+
+
+ id: LANG_SCROLLBAR_WIDTH
+ desc: in Settings -> General -> Display -> Status-/Scrollbar
+ user: core
+
+ *: "Scroll Bar Width"
+
+
+ *: "Breidd på rullefeltet"
+
+
+ *: "Breidd på rullefeltet"
+
+
+
+ id: LANG_COMPRESSOR
+ desc: in sound settings
+ user: core
+
+ *: "Compressor"
+
+
+ *: "Kompressor"
+
+
+ *: "Kompressor"
+
+
+
+ id: LANG_TOP_QS_ITEM
+ desc: used for the submenu name for the quickscreen items
+ user: core
+
+ *: none
+ quickscreen: "Set as Top Quickscreen Item"
+
+
+ *: none
+ quickscreen: "Bruk som øvre snøggskjermelement"
+
+
+ *: none
+ quickscreen: "Bruk som øvre snøggskjermelement"
+
+
+
+ id: LANG_FM_ITALY
+ desc: fm region Italy
+ user: core
+
+ *: none
+ radio: "Italy"
+
+
+ *: none
+ radio: "Italia"
+
+
+ *: none
+ radio: "Italia"
+
+
+
+ id: LANG_FM_OTHER
+ desc: Catch-all FM region. Select if none of the others work
+ user: core
+
+ *: none
+ radio: "Other"
+
+
+ *: none
+ radio: "Andre"
+
+
+ *: none
+ radio: "Andre"
+
+
+
+ id: LANG_COMPRESSOR_THRESHOLD
+ desc: in sound settings
+ user: core
+
+ *: "Threshold"
+
+
+ *: "Terskel"
+
+
+ *: "Terskel"
+
+
+
+ id: LANG_COMPRESSOR_RATIO
+ desc: in sound settings
+ user: core
+
+ *: "Ratio"
+
+
+ *: "Rate"
+
+
+ *: "Rate"
+
+
+
+ id: LANG_COMPRESSOR_RATIO_2
+ desc: in sound settings
+ user: core
+
+ *: "2:1"
+
+
+ *: "~2:1"
+
+
+ *: "2 til 1"
+
+
+
+ id: LANG_COMPRESSOR_RATIO_4
+ desc: in sound settings
+ user: core
+
+ *: "4:1"
+
+
+ *: "~4:1"
+
+
+ *: "4 til 1"
+
+
+
+ id: LANG_COMPRESSOR_RATIO_6
+ desc: in sound settings
+ user: core
+
+ *: "6:1"
+
+
+ *: "~6:1"
+
+
+ *: "6 til 1"
+
+
+
+ id: LANG_COMPRESSOR_RATIO_10
+ desc: in sound settings
+ user: core
+
+ *: "10:1"
+
+
+ *: "~10:1"
+
+
+ *: "10 til 1"
+
+
+
+ id: LANG_COMPRESSOR_RATIO_LIMIT
+ desc: in sound settings
+ user: core
+
+ *: "Limit"
+
+
+ *: "Avgrens"
+
+
+ *: "Avgrens"
+
+
+
+ id: LANG_COMPRESSOR_GAIN
+ desc: in sound settings
+ user: core
+
+ *: "Makeup Gain"
+
+
+ *: "Kompensasjonsvolum"
+
+
+ *: "Kompensasjonsvolum"
+
+
+
+ id: LANG_AUTO
+ desc: in sound settings
+ user: core
+
+ *: "Auto"
+
+
+ *: "~Auto"
+
+
+ *: "~Auto"
+
+
+
+ id: LANG_COMPRESSOR_KNEE
+ desc: in sound settings
+ user: core
+
+ *: "Knee"
+
+
+ *: "Kne"
+
+
+ *: "Kne"
+
+
+
+ id: LANG_COMPRESSOR_HARD_KNEE
+ desc: in sound settings
+ user: core
+
+ *: "Hard Knee"
+
+
+ *: "Hardt kne"
+
+
+ *: "Hardt kne"
+
+
+
+ id: LANG_COMPRESSOR_SOFT_KNEE
+ desc: in sound settings
+ user: core
+
+ *: "Soft Knee"
+
+
+ *: "Mjukt kne"
+
+
+ *: "Mjukt kne"
+
+
+
+ id: LANG_COMPRESSOR_ATTACK
+ desc: in sound settings
+ user: core
+
+ *: "Attack Time"
+
+
+ *: "Starttid"
+
+
+ *: "Starttid"
+
+
+
+ id: LANG_COMPRESSOR_RELEASE
+ desc: in sound settings
+ user: core
+
+ *: "Release Time"
+
+
+ *: "Slepptid"
+
+
+ *: "Slepptid"
+
+
+
+ id: LANG_SKIP_OUTRO
+ desc: skipping to the 5 seconds before the end of a track
+ user: core
+
+ *: "Skip to Outro"
+
+
+ *: "Hopp til avslutninga"
+
+
+ *: "Hopp til avslutninga"
+
+
+
+ id: VOICE_EXT_SBS
+ desc: spoken only, for file extension
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "statusfelt-drakt"
+
+
+
+ id: VOICE_EXT_RSBS
+ desc: spoken only, for file extension
+ user: core
+
+ *: none
+ remote: ""
+
+
+ *: none
+ remote: ""
+
+
+ *: none
+ remote: "fjern statusfelt-drakt"
+
+
+
+ id: LANG_USB_HID
+ desc: in settings_menu
+ user: core
+
+ *: none
+ usb_hid: "USB HID"
+
+
+ *: none
+ usb_hid: "~USB HID"
+
+
+ *: none
+ usb_hid: "USB grensesnitteining"
+
+
+
+ id: LANG_QUEUE_LAST_SHUFFLED
+ desc: in onplay menu. queue a playlist randomly at end of dynamic playlist
+ user: core
+
+ *: "Queue Last Shuffled"
+
+
+ *: "Set siste tilfeldige i kø"
+
+
+ *: "Set siste tilfeldige i kø"
+
+
+
+ id: LANG_MORSE_INPUT
+ desc: in Settings -> System
+ user: core
+
+ *: none
+ morse_input: "Use Morse Code Input"
+
+
+ *: none
+ morse_input: "Bruk morse-innputt"
+
+
+ *: none
+ morse_input: "Bruk morse-innputt"
+
+
+
+ id: LANG_AUTOTRACKSKIP
+ desc: in crossfade settings
+ user: core
+
+ *: none
+ crossfade: "Automatic Track Change Only"
+
+
+ *: none
+ crossfade: "Berre automatisk sporbyte"
+
+
+ *: none
+ crossfade: "Berre automatisk sporbyte"
+
+
+
+ id: LANG_NEXT_TRACK
+ desc: Shown in WPS
+ user: core
+
+ *: "Next Track:"
+
+
+ *: "Neste spor:"
+
+
+ *: "Neste spor"
+
+
+
+ id: LANG_NEXT
+ desc: Shown in WPS (short form of Next Track)
+ user: core
+
+ *: "Next:"
+
+
+ *: "Neste:"
+
+
+ *: "Neste"
+
+
+
+ id: LANG_OF
+ desc: Shown in WPS: X of Y (tracks)
+ user: core
+
+ *: "of"
+
+
+ *: "av"
+
+
+ *: "av"
+
+
+
+ id: LANG_DISC
+ desc: Shown in WPS (for multidisc albums)
+ user: core
+
+ *: "Disc"
+
+
+ *: "Disk"
+
+
+ *: "Disk"
+
+
+
+ id: LANG_BASE_SKIN
+ desc: browse for the base skin in theme settings
+ user: core
+
+ *: "Base Skin"
+
+
+ *: "Grunndrakt"
+
+
+ *: "Grunndrakt"
+
+
+
+ id: LANG_REMOTE_BASE_SKIN
+ desc: browse for the base skin in theme settings
+ user: core
+
+ *: "Remote Base Skin"
+
+
+ *: "Fjern grunndrakt"
+
+
+ *: "Fjern grunndrakt"
+
+
+
+ id: LANG_MAIN_SCREEN
+ desc: in the main menu
+ user: core
+
+ *: none
+ remote: "Main Screen"
+
+
+ *: none
+ remote: "Hovudskjerm"
+
+
+ *: none
+ remote: "Hovudskjerm"
+
+
+
+ id: LANG_REMOTE_SCREEN
+ desc: in the main menu
+ user: core
+
+ *: none
+ remote: "Remote Screen"
+
+
+ *: none
+ remote: "Fjernskjerm"
+
+
+ *: none
+ remote: "Fjernskjerm"
+
+
+
+ id: LANG_HISTOGRAM_INTERVAL
+ desc: in record settings menu
+ user: core
+
+ *: none
+ histogram: "Histogram interval"
+
+
+ *: none
+ histogram: "Histogramintervall"
+
+
+ *: none
+ histogram: "Histogramintervall"
+
+
+
+ id: LANG_HOTKEY
+ desc: hotkey menu
+ user: core
+
+ *: none
+ hotkey: "Hotkey"
+
+
+ *: none
+ hotkey: "Snøggtast"
+
+
+ *: none
+ hotkey: "Snøggtast"
+
+
+
+ id: LANG_HOTKEY_WPS
+ desc: hotkey menu
+ user: core
+
+ *: none
+ hotkey: "WPS Hotkey"
+
+
+ *: none
+ hotkey: "Speleskjerm-snøggtast"
+
+
+ *: none
+ hotkey: "Speleskjermsnøggtast"
+
+
+
+ id: LANG_HOTKEY_FILE_BROWSER
+ desc: hotkey menu
+ user: core
+
+ *: none
+ hotkey: "File Browser Hotkey"
+
+
+ *: none
+ hotkey: "Filhandterar-snøggtast"
+
+
+ *: none
+ hotkey: "Filhandterarsnøggtast"
+
+
+
+ id: LANG_RESUME_REWIND
+ desc: in playback settings menu
+ user: core
+
+ *: "Rewind Before Resume"
+
+
+ *: "Spol tilbake før vidarespeling"
+
+
+ *: "Spol tilbake før vidarespeling"
+
+
+
+ id: LANG_REMOTE_RADIOSCREEN
+ desc: in the theme menu
+ user: core
+
+ *: none
+ radio_remote: "Remote Radio Screen"
+
+
+ *: none
+ radio_remote: "Fjernradioskjerm"
+
+
+ *: none
+ radio_remote: "Fjernradioskjerm"
+
+
+
+ id: VOICE_EXT_FMS
+ desc: spoken only, for file extension
+ user: core
+
+ *: none
+ radio: ""
+
+
+ *: none
+ radio: ""
+
+
+ *: none
+ radio: "radioskjermdrakt"
+
+
+
+ id: VOICE_EXT_RFMS
+ desc: spoken only, for file extension
+ user: core
+
+ *: none
+ radio_remote: ""
+
+
+ *: none
+ radio_remote: ""
+
+
+ *: none
+ radio_remote: "drakt for fjernradioskjerm"
+
+
+
+ id: LANG_FM_STATION_HEADER
+ desc: in radio screen
+ user: core
+
+ *: none
+ radio: "Station:"
+
+
+ *: none
+ radio: "Stasjon:"
+
+
+ *: none
+ radio: ""
+
+
+
+ id: LANG_HW_EQ_TONE_CONTROLS
+ desc: in sound_menu, hardware equalizer tone controls
+ user: core
+
+ *: none
+ gigabeats,samsungypr1: "Tone Controls"
+
+
+ *: none
+ gigabeats,samsungypr1: "Tonekontrollar"
+
+
+ *: none
+ gigabeats,samsungypr1: "Tonekontrollar"
+
+
+
+ id: LANG_HW_EQ_TONE_CONTROLS_ADVANCED
+ desc: in sound_menu, advanced settings for hardware equalizer tone controls
+ user: core
+
+ *: none
+ gigabeats,samsungypr1: "Advanced Tone Control Settings"
+
+
+ *: none
+ gigabeats,samsungypr1: "Avanserte tonekontrollar"
+
+
+ *: none
+ gigabeats,samsungypr1: "Avanserte tonekontrollar"
+
+
+
+ id: LANG_HW_EQ_GAIN
+ desc: in sound_menu, hardware equalizer tone controls filter gain
+ user: core
+
+ *: none
+ gigabeats,samsungypr1: "Band %d Gain"
+
+
+ *: none
+ gigabeats,samsungypr1: "Band %d volum"
+
+
+ *: none
+ gigabeats,samsungypr1: "Bandvolum"
+
+
+
+ id: LANG_HW_EQ_FREQUENCY
+ desc: in sound_menu, hardware equalizer tone controls shelf filter cutoff frequency
+ user: core
+
+ *: none
+ gigabeats,samsungypr1: "Band %d Frequency"
+
+
+ *: none
+ gigabeats,samsungypr1: "Band %d frekvens"
+
+
+ *: none
+ gigabeats,samsungypr1: "Bandfrekvens"
+
+
+
+ id: LANG_HW_EQ_WIDTH
+ desc: in sound_menu, hardware equalizer tone controls peak bandwith setting
+ user: core
+
+ *: none
+ gigabeats,samsungypr1: "Band %d Width"
+
+
+ *: none
+ gigabeats,samsungypr1: "Band %d breidd"
+
+
+ *: none
+ gigabeats,samsungypr1: "Bandbreidd"
+
+
+
+ id: LANG_HW_EQ_WIDTH_NARROW
+ desc: in sound_menu, hardware equalizer tone controls narrow bandwith setting
+ user: core
+
+ *: none
+ gigabeats,samsungypr1: "Narrow"
+
+
+ *: none
+ gigabeats,samsungypr1: "Smal"
+
+
+ *: none
+ gigabeats,samsungypr1: "Smal"
+
+
+
+ id: LANG_HW_EQ_WIDTH_WIDE
+ desc: in sound_menu, hardware equalizer tone controls wide bandwidth setting
+ user: core
+
+ *: none
+ gigabeats,samsungypr1: "Wide"
+
+
+ *: none
+ gigabeats,samsungypr1: "Brei"
+
+
+ *: none
+ gigabeats,samsungypr1: "Brei"
+
+
+
+ id: LANG_DEPTH_3D
+ desc: in sound_menu, amount of 3D enhancement effect
+ user: core
+
+ *: none
+ depth_3d: "3-D Enhancement"
+
+
+ *: none
+ depth_3d: "3D-utviding"
+
+
+ *: none
+ depth_3d: "3 D utviding"
+
+
+
+ id: LANG_TAGNAVI_UNTAGGED
+ desc: "[untagged]" entry in tag browser
+ user: core
+
+ *: "[Untagged]"
+
+
+ *: "[Umerka]"
+
+
+ *: "Umerka"
+
+
+
+ id: LANG_RADIOSCREEN
+ desc: in the theme menu
+ user: core
+
+ *: none
+ radio: "Radio Screen"
+
+
+ *: none
+ radio: "Radioskjerm"
+
+
+ *: none
+ radio: "Radioskjerm"
+
+
+
+ id: LANG_ID3_COMPOSER
+ desc: in tag viewer
+ user: core
+
+ *: "Composer"
+
+
+ *: "Komponist"
+
+
+ *: "Komponist"
+
+
+
+ id: LANG_FORCE
+ desc: alternative to yes/no for tristate settings
+ user: core
+
+ *: "Force"
+
+
+ *: "Tving"
+
+
+ *: "Tving"
+
+
+
+ id: LANG_ONPLAY_PICTUREFLOW
+ desc: Onplay pictureflow
+ user: core
+
+ *: "PictureFlow"
+
+
+ *: "Biletflyt"
+
+
+ *: "Opna biletflyt"
+
+
+
+ id: LANG_KBD_OK
+ desc: in keyboard
+ user: core
+
+ *: none
+ touchscreen: "OK"
+
+
+ *: none
+ touchscreen: "~OK"
+
+
+ *: none
+ touchscreen: "~OK"
+
+
+
+ id: LANG_KBD_DELETE
+ desc: in keyboard
+ user: core
+
+ *: none
+ touchscreen: "Del"
+
+
+ *: none
+ touchscreen: "~Del"
+
+
+ *: none
+ touchscreen: "~Del"
+
+
+
+ id: LANG_KBD_CANCEL
+ desc: in keyboard
+ user: core
+
+ *: none
+ touchscreen: "Cancel"
+
+
+ *: none
+ touchscreen: "Avbryt"
+
+
+ *: none
+ touchscreen: "Avbryt"
+
+
+
+ id: LANG_BOOKMARK_SETTINGS_AUTOUPDATE
+ desc: prompt for user to decide whether to update bookmarks
+ user: core
+
+ *: "Update on Stop"
+
+
+ *: "Oppdater ved stopp"
+
+
+ *: "Oppdater ved stopp"
+
+
+
+ id: LANG_RESET_START_DIR
+ desc: reset the browser start directory
+ user: core
+
+ *: "Start File Browser at /"
+
+
+ *: "Start fillesaren på /"
+
+
+ *: "Start fillesaren i rotmappa"
+
+
+
+ id: LANG_FM_RSSI
+ desc: Signal strength of a received FM station
+ user: core
+
+ *: none
+ radio: "Signal strength:"
+
+
+ *: none
+ radio: "Signalstyrke:"
+
+
+ *: none
+ radio: "Signalstyrke"
+
+
+
+ id: LANG_AUTORESUME
+ desc: resume settings menu
+ user: core
+
+ *: "Automatic Resume"
+
+
+ *: "Automatisk framhald"
+
+
+ *: "Automatisk framhald"
+
+
+
+ id: LANG_AUTORESUME_AUTOMATIC
+ desc: resume on automatic track change
+ user: core
+
+ *: "Resume on automatic track change"
+
+
+ *: "Hald fram automatisk ved sporbyte"
+
+
+ *: "Hald fram automatisk ved sporbyte"
+
+
+
+ id: LANG_AUTORESUME_CUSTOM
+ desc: enable customization of resume on automatic track change
+ user: core
+
+ *: "In custom directories only"
+
+
+ *: "Berre i eigne mapper"
+
+
+ *: "Berre i eigne mapper"
+
+
+
+ id: LANG_PAUSE_REWIND
+ desc: Seconds to rewind when rewind on pause is enabled.
+ user: core
+
+ *: "Rewind on Pause"
+
+
+ *: "Spol tilbake ved pause"
+
+
+ *: "Spol tilbake ved pause"
+
+
+
+ id: LANG_RESET_PLAYLISTCAT_DIR
+ desc:
+ user: core
+
+ *: "Reset Playlist Catalogue Directory"
+
+
+ *: "Nullstill spelelistekatalogmappa"
+
+
+ *: "Nullstill spelelistekatalogmappa"
+
+
+
+ id: LANG_CURRENT_PLAYLIST
+ desc: Used when you need to say playlist, also voiced
+ user: core
+
+ *: "Current Playlist"
+
+
+ *: "Noverande spelelister"
+
+
+ *: "Noverande spelelister"
+
+
+
+ id: LANG_SAVE_CHANGES
+ desc: When you try to exit screens to confirm save
+ user: core
+
+ *: "Save Changes?"
+
+
+ *: "Lagre endringar?"
+
+
+ *: "Lagre endringar?"
+
+
+
+ id: LANG_USB_SKIP_FIRST_DRIVE
+ desc: in settings_menu
+ user: core
+
+ *: none
+ multidrive_usb: "USB Hide Internal Drive"
+
+
+ *: none
+ multidrive_usb: "USB gøym intern disk"
+
+
+ *: none
+ multidrive_usb: "U S B gøym intern disk"
+
+
+
+ id: LANG_LIST_LINE_PADDING
+ desc: list padding, in display settings
+ user: core
+
+ *: none
+ touchscreen: "Line Padding in Lists"
+
+
+ *: none
+ touchscreen: "Mellomrom i lister"
+
+
+ *: none
+ touchscreen: "Mellomrom i lister"
+
+
+
+ id: LANG_SLEEP_TIMER_DURATION
+ desc: default sleep timer duration in minutes
+ user: core
+
+ *: "Default Sleep Timer Duration"
+
+
+ *: "Standardnedteljing for dvalefunksjon"
+
+
+ *: "Standardnedteljing for dvalefunksjon"
+
+
+
+ id: LANG_SLEEP_TIMER_ON_POWER_UP
+ desc: whether sleep timer starts on power up
+ user: core
+
+ *: "Start Sleep Timer on Boot"
+
+
+ *: "Start dvalenedteljing ved oppstart"
+
+
+ *: "Start dvalenedteljing ved oppstart"
+
+
+
+ id: LANG_SLEEP_TIMER_CANCEL_CURRENT
+ desc: shown instead of sleep timer when it's running
+ user: core
+
+ *: "Cancel Sleep Timer"
+
+
+ *: "Avbryt dvalenedteljinga"
+
+
+ *: "Avbryt dvalenedteljinga"
+
+
+
+ id: LANG_LIST_SEPARATOR
+ desc: line between lines in lists
+ user: core
+
+ *: "Line Separator"
+
+
+ *: "Linedeling"
+
+
+ *: "Linedeling"
+
+
+
+ id: LANG_LIST_SEPARATOR_COLOR
+ desc: line between lines in lists
+ user: core
+
+ *: "Line Separator Colour"
+
+
+ *: "Farge på linedeling"
+
+
+ *: "Farge på linedeling"
+
+
+
+ id: LANG_SHORTCUTS
+ desc: Title in the shortcuts menu
+ user: core
+
+ *: "Shortcuts"
+
+
+ *: "Snarvegar"
+
+
+ *: "Snarvegar"
+
+
+
+ id: LANG_KEYCLICK_SOFTWARE
+ desc: in keyclick settings menu
+ user: core
+
+ *: none
+ hardware_click: "Headphone Keyclick"
+
+
+ *: none
+ hardware_click: "Klikkelyd i øyretelefonar"
+
+
+ *: none
+ hardware_click: "Klikkelyd i øyretelefonar"
+
+
+
+ id: LANG_KEYCLICK_HARDWARE
+ desc: in keyclick settings menu
+ user: core
+
+ *: none
+ hardware_click: "Speaker Keyclick"
+
+
+ *: none
+ hardware_click: "Klikkelyd i høgtalar"
+
+
+ *: none
+ hardware_click: "Klikkelydi høgtalar"
+
+
+
+ id: LANG_GLYPHS
+ desc: in settings_menu
+ user: core
+
+ *: "Glyphs To Cache"
+
+
+ *: "Teikn å mellomlagra"
+
+
+ *: "Teikn å mellomlagra"
+
+
+
+ id: LANG_STARTUP_SHUTDOWN
+ desc: in the general settings menu
+ user: core
+
+ *: "Startup/Shutdown"
+
+
+ *: "Oppstart/avslutning"
+
+
+ *: "Oppstart og avslutning"
+
+
+
+ id: LANG_KEYPRESS_RESTARTS_SLEEP_TIMER
+ desc: whether to restart running sleep timer on keypress
+ user: core
+
+ *: "Restart Sleep Timer on Keypress"
+
+
+ *: "Nullstill dvalenedteljinga når du trykkjer ein knapp"
+
+
+ *: "Nullstill dvalenedteljinga når du trykkjer ein knapp"
+
+
+
+ id: LANG_CONSTRAIN_NEXT_FOLDER
+ desc: in settings_menu. Whether LANG_NEXT_FOLDER should be constrained to directories within LANG_SET_AS_START_DIR
+ user: core
+
+ *: "Constrain Auto-Change"
+
+
+ *: "Avgrens autoendring"
+
+
+ *: "Avgrens autoendring"
+
+
+
+ id: LANG_USE_SHORTCUTS_INSTEAD_OF_QS
+ desc: in settings_menu.
+ user: core
+
+ *: none
+ quickscreen: "Use Shortcuts Menu Instead of Quick Screen"
+
+
+ *: none
+ quickscreen: "Bruk snøggtastmenyen i staden for snøggskjerm"
+
+
+ *: none
+ quickscreen: "Bruk snøggtastmenyen i staden for snøggskjerm"
+
+
+
+ id: LANG_SLEEP_TIMER_START_CURRENT
+ desc: shown when a sleep timer isn't running
+ user: core
+
+ *: "Start Sleep Timer"
+
+
+ *: "Start dvalenedteljinga"
+
+
+ *: "Start dvalenedteljinga"
+
+
+
+ id: LANG_CODEPAGE_WESTERN_EUROPEAN
+ desc: in codepage setting menu
+ user: core
+
+ *: "Western European (CP1252)"
+
+
+ *: "Vesteuropeisk (CP1252)"
+
+
+ *: "Vesteuropeisk"
+
+
+
+ id: LANG_CROSSFEED_MEIER
+ desc: in sound settings
+ user: core
+
+ *: "Simple (Meier)"
+
+
+ *: "Enkel (Meier)"
+
+
+ *: "Enkel"
+
+
+
+ id: LANG_CROSSFEED_CUSTOM
+ desc: in sound settings
+ user: core
+
+ *: "Custom"
+
+
+ *: "Eiga"
+
+
+ *: "Eiga"
+
+
+
+ id: LANG_SELECT_FOLDER
+ desc: in settings_menu
+ user: core
+
+ *: "Select one or more directories"
+
+
+ *: "Vel ei eller fleire mapper"
+
+
+ *: "Vel ei eller fleire mapper"
+
+
+
+ id: LANG_SELECT_DATABASE_DIRS
+ desc: in settings_menu
+ user: core
+
+ *: "Select directories to scan"
+
+
+ *: "Vel mapper å søkja gjennom"
+
+
+ *: "Vel mapper å søkja gjennom"
+
+
+
+ id: LANG_FILTER_ROLL_OFF
+ desc: in sound settings
+ user: core
+
+ *: none
+ filter_roll_off: "DAC filter roll-off"
+
+
+ *: none
+ filter_roll_off: "Avtoning for DAC-filter"
+
+
+ *: none
+ filter_roll_off: "Avtoning for D A C filter"
+
+
+
+ id: LANG_FILTER_SHARP
+ desc: in sound settings
+ user: core
+
+ *: none
+ filter_roll_off: "Sharp"
+
+
+ *: none
+ filter_roll_off: "Krapp"
+
+
+ *: none
+ filter_roll_off: "Krapp"
+
+
+
+ id: LANG_FILTER_SLOW
+ desc: in sound settings
+ user: core
+
+ *: none
+ filter_roll_off: "Slow"
+
+
+ *: none
+ filter_roll_off: "Sein"
+
+
+ *: none
+ filter_roll_off: "Sein"
+
+
+
+ id: LANG_FILTER_SHORT_SHARP
+ desc: in sound settings
+ user: core
+
+ *: none
+ filter_roll_off: "Short Sharp"
+
+
+ *: none
+ filter_roll_off: "Kort krapp"
+
+
+ *: none
+ filter_roll_off: "Kort krapp"
+
+
+
+ id: LANG_FILTER_SHORT_SLOW
+ desc: in sound settings
+ user: core
+
+ *: none
+ filter_roll_off: "Short Slow"
+
+
+ *: none
+ filter_roll_off: "Kort sein"
+
+
+ *: none
+ filter_roll_off: "Kort sein"
+
+
+
+ id: LANG_FILTER_SUPER_SLOW
+ desc: in sound settings
+ user: core
+
+ *: none
+ filter_roll_off: "Super Slow"
+
+
+ *: none
+ filter_roll_off: "Veldig sein"
+
+
+ *: none
+ filter_roll_off: "Veldig sein"
+
+
+
+ id: LANG_FILTER_SHORT
+ desc: in sound settings
+ user: core
+
+ *: none
+ es9018: "Short"
+
+
+ *: none
+ es9018: "Kort"
+
+
+ *: none
+ es9018: "Kort"
+
+
+
+ id: LANG_FILTER_BYPASS
+ desc: in sound settings
+ user: core
+
+ *: none
+ es9018: "Bypass"
+
+
+ *: none
+ es9018: "Forbikopla"
+
+
+ *: none
+ es9018: "Forbikopla"
+
+
+
+ id: LANG_FILTER_LINEAR_FAST
+ desc: in sound settings
+ user: core
+
+ *: none
+ es9218: "Linear Fast"
+
+
+ *: none
+ es9218: "Lineær rask"
+
+
+ *: none
+ es9218: "Lineær rask"
+
+
+
+ id: LANG_FILTER_LINEAR_SLOW
+ desc: in sound settings
+ user: core
+
+ *: none
+ es9218: "Linear Slow"
+
+
+ *: none
+ es9218: "Lineær sein"
+
+
+ *: none
+ es9218: "Lineær sein"
+
+
+
+ id: LANG_FILTER_MINIMUM_FAST
+ desc: in sound settings
+ user: core
+
+ *: none
+ es9218: "Minimum Fast"
+
+
+ *: none
+ es9218: "Minimum rask"
+
+
+ *: none
+ es9218: "Minimum rask"
+
+
+
+ id: LANG_FILTER_MINIMUM_SLOW
+ desc: in sound settings
+ user: core
+
+ *: none
+ es9218: "Minimum Slow"
+
+
+ *: none
+ es9218: "Minimum sein"
+
+
+ *: none
+ es9218: "Minimum sein"
+
+
+
+ id: LANG_FILTER_APODIZING_1
+ desc: in sound settings
+ user: core
+
+ *: none
+ es9218: "Apodizing type 1"
+
+
+ *: none
+ es9218: "Apodisering type 1"
+
+
+ *: none
+ es9218: "Apodisering type 1"
+
+
+
+ id: LANG_FILTER_APODIZING_2
+ desc: in sound settings
+ user: core
+
+ *: none
+ es9218: "Apodizing type 2"
+
+
+ *: none
+ es9218: "Apodisering type 2"
+
+
+ *: none
+ es9218: "Apodisering type 2"
+
+
+
+ id: LANG_FILTER_HYBRID_FAST
+ desc: in sound settings
+ user: core
+
+ *: none
+ es9218: "Hybrid Fast"
+
+
+ *: none
+ es9218: "Hybrid rask"
+
+
+ *: none
+ es9218: "Hybrid rask"
+
+
+
+ id: LANG_FILTER_BRICK_WALL
+ desc: in sound settings
+ user: core
+
+ *: none
+ es9218: "Brick Wall"
+
+
+ *: none
+ es9218: "Murvegg"
+
+
+ *: none
+ es9218: "Murvegg"
+
+
+
+ id: LANG_DAC_POWER_MODE
+ desc: in sound settings
+ user: core
+
+ *: none
+ dac_power_mode: "DAC power mode"
+ es9218: "DAC output level"
+
+
+ *: none
+ dac_power_mode: "DAC-straummodus"
+ es9218: "DAC-utgangsnivå"
+
+
+ *: none
+ dac_power_mode: "D A C straummodus"
+ es9218: "D A C utgangsnivå"
+
+
+
+ id: LANG_DAC_POWER_HIGH
+ desc: in sound settings
+ user: core
+
+ *: none
+ dac_power_mode: "High performance"
+ es9218: "High Gain (2 Vrms)"
+
+
+ *: none
+ dac_power_mode: "Høg yting"
+ es9218: "Høgt volum (2V rms)"
+
+
+ *: none
+ dac_power_mode: "Høg yting"
+ es9218: "Høgt volum 2 volt R M S"
+
+
+
+ id: LANG_DAC_POWER_LOW
+ desc: in sound settings
+ user: core
+
+ *: none
+ dac_power_mode: "Save battery"
+ es9218: "Low Gain (1 Vrms)"
+
+
+ *: none
+ dac_power_mode: "Spar batteriet"
+ es9218: "Lågt volum (1V rms)"
+
+
+ *: none
+ dac_power_mode: "Spar batteriet"
+ es9218: "Lågt volum 1 volt R M S"
+
+
+
+ id: LANG_VOLUME_LIMIT
+ desc: in sound_settings
+ user: core
+
+ *: "Maximum Volume Limit"
+
+
+ *: "Øvste volumgrense"
+
+
+ *: "Øvste volumgrense"
+
+
+
+ id: LANG_PBE
+ desc: in sound settings
+ user: core
+
+ *: "Perceptual Bass Enhancement"
+
+
+ *: "Oppfatta bassforsterking"
+
+
+ *: "Oppfatta bassforsterking"
+
+
+
+ id: LANG_AFR
+ desc: in sound settings
+ user: core
+
+ *: "Auditory Fatigue Reduction"
+
+
+ *: "Redusert høyrselsslitasje"
+
+
+ *: "Redusert høyrselsslitasje"
+
+
+
+ id: LANG_SURROUND
+ desc: in the sound settings menu
+ user: core
+
+ *: "Haas Surround"
+
+
+ *: "Haas-kringlyd"
+
+
+ *: "Haas kringlyd"
+
+
+
+ id: LANG_SURROUND_FX1
+ desc: in sound settings
+ user: core
+
+ *: "f(x1)"
+
+
+ *: "f(x1)"
+
+
+ *: "F X 1"
+
+
+
+ id: LANG_SURROUND_FX2
+ desc: in sound settings
+ user: core
+
+ *: "f(x2)"
+
+
+ *: "f(x2)"
+
+
+ *: "F X 2"
+
+
+
+ id: LANG_SURROUND_METHOD2
+ desc: in sound settings
+ user: core
+
+ *: "SIDE ONLY"
+
+
+ *: "Berre sida"
+
+
+ *: "Berre sida"
+
+
+
+ id: LANG_SURROUND_MIX
+ desc: in sound settings
+ user: core
+
+ *: "Dry / Wet Mix"
+
+
+ *: "Tørr / våt-miks"
+
+
+ *: "Tørr våt miks"
+
+
+
+ id: LANG_IBASSO_FREQ_SCALING_GOVERNOR
+ desc: in Settings -> General -> System -> Freq Scaling Governor
+ user: core
+
+ *: none
+ ibassodx50,ibassodx90: "Freq Scaling Governor"
+
+
+ *: none
+ ibassodx50,ibassodx90: "Prosessorfrekvensstyring"
+
+
+ *: none
+ ibassodx50,ibassodx90: "Prosessorfrekvensstyring"
+
+
+
+ id: LANG_USB_MODE
+ desc: in Settings -> General -> System -> USB Mode
+ user: core
+
+ *: "USB Mode"
+
+
+ *: "USB-modus"
+
+
+ *: "U S B modus"
+
+
+
+ id: LANG_USB_MODE_MASS_STORAGE
+ desc: in Settings -> General -> System -> USB Mode: Mass Storage
+ user: core
+
+ *: "Mass Storage"
+
+
+ *: "Masselagring"
+
+
+ *: "Masselagring"
+
+
+
+ id: LANG_USB_MODE_CHARGE
+ desc: in Settings -> General -> System -> USB Mode: Charge Only
+ user: core
+
+ *: "Charge Only"
+
+
+ *: "Berre lading"
+
+
+ *: "Berre lading"
+
+
+
+ id: LANG_USB_MODE_ADB
+ desc: in Settings -> General -> System -> USB Mode: Android Debug Bridge
+ user: core
+
+ *: "Android Debug Bridge"
+
+
+ *: "Android Debug Bridge"
+
+
+ *: "Android Debug Bridge"
+
+
+
+ id: LANG_ACTION_ENABLED
+ desc: Selective Actions
+ user: core
+
+ *: "Enabled"
+
+
+ *: "På"
+
+
+ *: "På"
+
+
+
+ id: LANG_ACTION_PLAY
+ desc: Selective Actions
+ user: core
+
+ *: "Exempt Play"
+
+
+ *: "Unnteke speling"
+
+
+ *: "Unnteke speling"
+
+
+
+ id: LANG_ACTION_SEEK
+ desc: Selective Actions
+ user: core
+
+ *: "Exempt Seek"
+
+
+ *: "Unnteke spoling"
+
+
+ *: "Unnteke spoling"
+
+
+
+ id: LANG_ACTION_SKIP
+ desc: Selective Actions
+ user: core
+
+ *: "Exempt Skip"
+
+
+ *: "Unnteke hopping"
+
+
+ *: "Unnteke hopping"
+
+
+
+ id: LANG_BACKLIGHT_SELECTIVE
+ desc: Backlight behaviour setting
+ user: core
+
+ *: "Backlight Exemptions"
+
+
+ *: "Unntak for skjermlys"
+
+
+ *: "Unntak for skjermlys"
+
+
+
+ id: LANG_ACTION_DISABLE_EXT_POWER
+ desc: Backlight behaviour setting
+ user: core
+
+ *: "Disable on External Power"
+
+
+ *: "Skru av ved ekstern srtaum"
+
+
+ *: "Skru av ved ekstern straum"
+
+
+
+ id: LANG_ACTION_DISABLE_UNMAPPED
+ desc: Backlight behaviour setting
+ user: core
+
+ *: "Disable Unmapped Keys"
+
+
+ *: "Skru av ubrukte knappar"
+
+
+ *: "Skru av ubrukte knappar"
+
+
+
+ id: LANG_SOFTLOCK_SELECTIVE
+ desc: Softlock behaviour setting
+ user: core
+
+ *: "Advanced Key Lock"
+
+
+ *: "Avansert tastelås"
+
+
+ *: "Avansert tastelås"
+
+
+
+ id: LANG_ACTION_AUTOLOCK_ON
+ desc: Softlock behaviour setting
+ user: core
+
+ *: "Autolock On"
+
+
+ *: "Autolås på"
+
+
+ *: "Autolås på"
+
+
+
+ id: LANG_ACTION_AUTOLOCK_OFF
+ desc: Softlock behaviour setting
+ user: core
+
+ *: "Autolock Off"
+
+
+ *: "Autolås av"
+
+
+ *: "Autolås av"
+
+
+
+ id: LANG_ACTION_DISABLE_NOTIFY
+ desc: Softlock behaviour setting
+ user: core
+
+ *: "Disable Locked Reminders"
+
+
+ *: "Skru av påminningar om lås"
+
+
+ *: "Skru av påminningar om lås"
+
+
+
+ id: LANG_ACTION_DISABLE_TOUCH
+ desc: Softlock behaviour setting
+ user: core
+
+ *: "Disable Touch"
+
+
+ *: "Skru av peikeskjerm"
+
+
+ *: "Skru av peikeskjerm"
+
+
+
+ id: LANG_KIBIBYTE
+ desc: a unit postfix, also voiced
+ user: core
+
+ *: "KiB"
+
+
+ *: "KiB"
+
+
+ *: "kibibyte"
+
+
+
+ id: LANG_MEBIBYTE
+ desc: a unit postfix, also voiced
+ user: core
+
+ *: "MiB"
+
+
+ *: "MiB"
+
+
+ *: "mebibyte"
+
+
+
+ id: LANG_GIBIBYTE
+ desc: a unit postfix, also voiced
+ user: core
+
+ *: "GiB"
+
+
+ *: "GiB"
+
+
+ *: "gibibyte"
+
+
+
+ id: LANG_BOOKMARK_SETTINGS_ONE_PER_PLAYLIST
+ desc: Save only one bookmark for a playlist in recent bookmarks
+ user: core
+
+ *: "One per playlist"
+
+
+ *: "Eitt per speleliste"
+
+
+ *: "Eitt per speleliste"
+
+
+
+ id: LANG_BOOKMARK_SETTINGS_ONE_PER_TRACK
+ desc: Save only one bookmark for a combination (playlist,track) in recent bookmarks
+ user: core
+
+ *: "One per track"
+
+
+ *: "Eitt per spor"
+
+
+ *: "Eitt per spor"
+
+
+
+ id: VOICE_TRACK_TO_MOVE
+ desc: playlist viewer
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Spor å flytta"
+
+
+
+ id: VOICE_QUEUED
+ desc: playlist viewer
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "I kø"
+
+
+
+ id: VOICE_BAD_TRACK
+ desc: playlist viewer
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Dårleg spor"
+
+
+
+ id: VOICE_MOVING_TRACK
+ desc: playlist viewer
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Flyttar spor"
+
+
+
+ id: LANG_PLAYTIME_ELAPSED
+ desc: playing time screen
+ user: core
+
+ *: "Playlist elapsed:"
+
+
+ *: "Spelt av spelelista:"
+
+
+ *: "Spelt av spelelista"
+
+
+
+ id: LANG_PLAYTIME_TRK_ELAPSED
+ desc: playing time screen
+ user: core
+
+ *: "Track elapsed:"
+
+
+ *: "Spelt av sporet:"
+
+
+ *: "Spelt av sporet"
+
+
+
+ id: LANG_PLAYTIME_TRK_REMAINING
+ desc: playing time screen
+ user: core
+
+ *: "Track remaining:"
+
+
+ *: "Att av sporet:"
+
+
+ *: "Att av sporet"
+
+
+
+ id: LANG_PLAYTIME_TRACK
+ desc: playing time screen
+ user: core
+
+ *: "Track:"
+
+
+ *: "Spor:"
+
+
+ *: "Spor"
+
+
+
+ id: LANG_PLAYTIME_STORAGE
+ desc: playing time screen
+ user: core
+
+ *: "Storage (Done / Remaining):"
+
+
+ *: "Lagring (utført/attståande)"
+
+
+ *: "Lagring"
+
+
+
+ id: VOICE_PLAYTIME_DONE
+ desc: playing time screen
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Ferdig"
+
+
+
+ id: LANG_PLAYTIME_AVG_TRACK_SIZE
+ desc: playing time screen
+ user: core
+
+ *: "Average track size:"
+
+
+ *: "Gjennomsnittsstorleik på spor"
+
+
+ *: "Gjennomsnittsstorleik på spor"
+
+
+
+ id: LANG_PLAYTIME_AVG_BITRATE
+ desc: playing time screen
+ user: core
+
+ *: "Average bitrate:"
+
+
+ *: "Gjennomsnittsbitrate"
+
+
+ *: "Gjennomsnittsbitrate"
+
+
+
+ id: LANG_PLAYING_TIME
+ desc: onplay menu
+ user: core
+
+ *: "Playing time"
+
+
+ *: "Speletid"
+
+
+ *: "Speletid"
+
+
+
+ id: LANG_CAR_ADAPTER_MODE_DELAY
+ desc: Displayed for setting car adapter mode delay
+ user: core
+
+ *: none
+ charging: "Delay Before Resume"
+
+
+ *: none
+ charging: "Forseinking før vidarespeling"
+
+
+ *: none
+ charging: "Forseinking før vidarespeling"
+
+
+
+ id: VOICE_PITCH_ABSOLUTE_MODE
+ desc: spoken only
+ user: core
+
+ *: none
+ pitchscreen: ""
+
+
+ *: none
+ pitchscreen: ""
+
+
+ *: none
+ pitchscreen: "Absolutt modus"
+
+
+
+ id: VOICE_PITCH_SEMITONE_MODE
+ desc: spoken only
+ user: core
+
+ *: none
+ pitchscreen: ""
+
+
+ *: none
+ pitchscreen: ""
+
+
+ *: none
+ pitchscreen: "Halvtonemodus"
+
+
+
+ id: VOICE_PITCH_TIMESTRETCH_MODE
+ desc: spoken only
+ user: core
+
+ *: none
+ pitchscreen: ""
+
+
+ *: none
+ pitchscreen: ""
+
+
+ *: none
+ pitchscreen: "Tidsstrekking"
+
+
+
+ id: LANG_REMOTE_CONTROL
+ desc: Item for menus
+ user: core
+
+ *: "Remote Control"
+
+
+ *: "Fjernkontroll"
+
+
+ *: "Fjernkontroll"
+
+
+
+ id: LANG_NO_REM_CONTROL
+ desc: Item for menus
+ user: core
+
+ *: "No Rem. Control"
+
+
+ *: "Ingen fjernkontroll"
+
+
+ *: "Ingen fjernkontroll"
+
+
+
+ id: LANG_OUT_OF_CONTROL
+ desc: Item for menus
+ user: core
+
+ *: "Out of Control"
+
+
+ *: "Ute av kontroll"
+
+
+ *: "Ute av kontroll"
+
+
+
+ id: LANG_2_KEY_CONTROL
+ desc: Item for menus
+ user: core
+
+ *: "2 Key Control"
+
+
+ *: "2-tast-kontroll"
+
+
+ *: "2-tast-kontroll"
+
+
+
+ id: LANG_4_KEY_CONTROL
+ desc: Item for menus
+ user: core
+
+ *: "4 Key Control"
+
+
+ *: "4-tast-kontroll"
+
+
+ *: "4-tast-kontroll"
+
+
+
+ id: LANG_PLAY_WORMLET
+ desc: For wormlet menu
+ user: core
+
+ *: "Play Wormlet!"
+
+
+ *: "Spel Wormlet"
+
+
+ *: "Spel Wormlet!"
+
+
+
+ id: LANG_NUMBER_OF_WORMS
+ desc: For wormlet menu
+ user: core
+
+ *: "Number of Worms"
+
+
+ *: "Tal på ormar"
+
+
+ *: "Tal på ormar"
+
+
+
+ id: LANG_WORM_GROWTH_PER_FOOD
+ desc: For wormlet menu
+ user: core
+
+ *: "Worm Growth Per Food"
+
+
+ *: "Vekst per mat"
+
+
+ *: "Vekst per mat"
+
+
+
+ id: LANG_WORM_SPEED
+ desc: For wormlet menu
+ user: core
+
+ *: "Worm Speed"
+
+
+ *: "Fart på ormen"
+
+
+ *: "Fart på ormen"
+
+
+
+ id: LANG_ARGHS_PER_FOOD
+ desc: For wormlet menu
+ user: core
+
+ *: "Arghs Per Food"
+
+
+ *: "Argh per mat"
+
+
+ *: "Argh per mat"
+
+
+
+ id: LANG_ARGH_SIZE
+ desc: For wormlet menu
+ user: core
+
+ *: "Argh Size"
+
+
+ *: "Storleik på argh"
+
+
+ *: "Storleik på argh"
+
+
+
+ id: LANG_FOOD_SIZE
+ desc: For wormlet menu
+ user: core
+
+ *: "Food Size"
+
+
+ *: "Storleik på mat"
+
+
+ *: "Storleik på mat"
+
+
+
+ id: LANG_NUMBER_OF_PLAYERS
+ desc: For game menus
+ user: core
+
+ *: "Number of Players"
+
+
+ *: "Kor mange spelarar"
+
+
+ *: "Kor mange spelarar"
+
+
+
+ id: LANG_CONTROL_STYLE
+ desc: In various menus
+ user: core
+
+ *: "Control Style"
+
+
+ *: "Kontrollstil"
+
+
+ *: "Kontrollstil"
+
+
+
+ id: LANG_REVERT_TO_DEFAULT_SETTINGS
+ desc: In various menus
+ user: core
+
+ *: "Revert to Default Settings"
+
+
+ *: "Nullstill til standard"
+
+
+ *: "Nullstill til standard"
+
+
+
+ id: LANG_MENU_QUIT
+ desc: in various menus
+ user: core
+
+ *: "Quit"
+
+
+ *: "Avslutt"
+
+
+ *: "Avslutt"
+
+
+
+ id: LANG_MENU_DISPLAY_OPTIONS
+ desc: in various menus
+ user: core
+
+ *: "Display Options"
+
+
+ *: "Visingsval"
+
+
+ *: "Visingsval"
+
+
+
+ id: LANG_PREVTRACK
+ desc: in playback control menu
+ user: core
+
+ *: "Previous Track"
+
+
+ *: "Førre spor"
+
+
+ *: "Førre spor"
+
+
+
+ id: LANG_PLAYPAUSE
+ desc: in playback control menu
+ user: core
+
+ *: "Pause / Play"
+
+
+ *: "Pause / spel"
+
+
+ *: "Pause / spel"
+
+
+
+ id: LANG_STOP_PLAYBACK
+ desc: in playback control menu
+ user: core
+
+ *: "Stop Playback"
+
+
+ *: "Stopp avspeling"
+
+
+ *: "Stopp avspeling"
+
+
+
+ id: LANG_NEXTTRACK
+ desc: in playback control menu
+ user: core
+
+ *: "Next Track"
+
+
+ *: "Neste spor"
+
+
+ *: "Neste spor"
+
+
+
+ id: LANG_CHANGE_VOLUME
+ desc: in playback control menu
+ user: core
+
+ *: "Change Volume"
+
+
+ *: "Endra volum"
+
+
+ *: "Endra volum"
+
+
+
+ id: LANG_CHANGE_SHUFFLE_MODE
+ desc: in playback control menu
+ user: core
+
+ *: "Shuffle Mode"
+
+
+ *: "Tilfeldig modus"
+
+
+ *: "Tilfeldig modus"
+
+
+
+ id: LANG_CHANGE_REPEAT_MODE
+ desc: in playback control menu
+ user: core
+
+ *: "Change Repeat Mode"
+
+
+ *: "Endre repetisjonsmodus"
+
+
+ *: "Endre repetisjonsmodus"
+
+
+
+ id: LANG_PLAYBACK_CONTROL
+ desc: in playback control menu
+ user: core
+
+ *: "Playback Control"
+
+
+ *: "Avspelingskontroll"
+
+
+ *: "Avspelingskontroll"
+
+
+
+ id: LANG_CHESSBOX_CHECKMATE
+ desc: in chessbox
+ user: core
+
+ *: "Checkmate!"
+
+
+ *: "Sjakk matt!"
+
+
+ *: "Sjakk matt!"
+
+
+
+ id: LANG_CHESSBOX_ILLEGAL_MOVE
+ desc: in chessbox
+ user: core
+
+ *: "Illegal move!"
+
+
+ *: "Ulovleg trekk!"
+
+
+ *: "Ulovleg trekk!"
+
+
+
+ id: LANG_CHESSBOX_MENU_NEW_GAME
+ desc: in the chessbox menu
+ user: core
+
+ *: "New Game"
+
+
+ *: "Nytt spel"
+
+
+ *: "Nytt spel"
+
+
+
+ id: LANG_CHESSBOX_MENU_RESUME_GAME
+ desc: in the chessbox menu
+ user: core
+
+ *: "Resume Game"
+
+
+ *: "Hald fram spel"
+
+
+ *: "Hald fram spel"
+
+
+
+ id: LANG_CHESSBOX_MENU_SAVE_GAME
+ desc: in the chessbox menu
+ user: core
+
+ *: "Save Game"
+
+
+ *: "Lagra spelet"
+
+
+ *: "Lagra spelet"
+
+
+
+ id: LANG_CHESSBOX_MENU_RESTORE_GAME
+ desc: in the chessbox menu
+ user: core
+
+ *: "Restore Game"
+
+
+ *: "Hent fram spel"
+
+
+ *: "Hent fram spel"
+
+
+
+ id: LANG_CHESSBOX_MENU_RESTART_GAME
+ desc: in the chessbox menu
+ user: core
+
+ *: "Restart Game"
+
+
+ *: "Start spelet på nytt"
+
+
+ *: "Start spelet på nytt"
+
+
+
+ id: LANG_CHESSBOX_MENU_SELECT_OTHER_GAME
+ desc: in the chessbox menu
+ user: core
+
+ *: "Select Other Game"
+
+
+ *: "Vel eit anna spel"
+
+
+ *: "Vel eit anna spel"
+
+
+
+ id: LANG_CHESSBOX_LEVEL_1
+ desc: in the chessbox game level selection
+ user: core
+
+ *: "Level 1: 60 moves / 5 min"
+
+
+ *: "Nivå 1: 60 trekk / 5 min"
+
+
+ *: "Nivå 1, 60 trekk på 5 minutt"
+
+
+
+ id: LANG_CHESSBOX_LEVEL_2
+ desc: in the chessbox game level selection
+ user: core
+
+ *: "Level 2: 60 moves / 15 min"
+
+
+ *: "Nivå 2: 60 trekk / 15 min"
+
+
+ *: "Nivå 2, 60 trekk på 15 minutt"
+
+
+
+ id: LANG_CHESSBOX_LEVEL_3
+ desc: in the chessbox game level selection
+ user: core
+
+ *: "Level 3: 60 moves / 30 min"
+
+
+ *: "Nivå 3: 60 trekk / 30 min"
+
+
+ *: "Nivå 3, 60 trekk på 30 minutt"
+
+
+
+ id: LANG_CHESSBOX_LEVEL_4
+ desc: in the chessbox game level selection
+ user: core
+
+ *: "Level 4: 40 moves / 30 min"
+
+
+ *: "Level 4: 40 moves / 30 min"
+
+
+ *: "Level 4, 40 moves per 30 minutes"
+
+
+
+ id: LANG_CHESSBOX_LEVEL_5
+ desc: in the chessbox game level selection
+ user: core
+
+ *: "Level 5: 40 moves / 60 min"
+
+
+ *: "Nivå 5: 40 trekk / 60 min"
+
+
+ *: "Nivå 5, 40 trekk på 60 minutt"
+
+
+
+ id: LANG_CHESSBOX_LEVEL_6
+ desc: in the chessbox game level selection
+ user: core
+
+ *: "Level 6: 40 moves / 120 min"
+
+
+ *: "Nivå 6: 40 trekk / 120 min"
+
+
+ *: "Nivå 6, 40 trekk på 120 minutt"
+
+
+
+ id: LANG_CHESSBOX_LEVEL_7
+ desc: in the chessbox game level selection
+ user: core
+
+ *: "Level 7: 40 moves / 240 min"
+
+
+ *: "Nivå 7: 40 trekk / 240 min"
+
+
+ *: "Nivå 7, 40 trekk på 240 minutt"
+
+
+
+ id: LANG_CHESSBOX_PGN_PARSE_ERROR
+ desc: in the chessbox game viewer
+ user: core
+
+ *: "Error parsing game !"
+
+
+ *: "Greidde ikkje lesa spelet!"
+
+
+ *: "Greidde ikkje lesa spelet!"
+
+
+
+ id: LANG_CHESSBOX_NO_GAMES
+ desc: in the chessbox game viewer
+ user: core
+
+ *: "No games found !"
+
+
+ *: "Fann ingen spel!"
+
+
+ *: "Fann ingen spel!"
+
+
+
+ id: LANG_CHESSBOX_GAME_BEGINNING
+ desc: in the chessbox game viewer
+ user: core
+
+ *: "At the beginning of the game"
+
+
+ *: "På starten av spelet"
+
+
+ *: "På starten av spelet"
+
+
+
+ id: LANG_CHESSBOX_GAME_END
+ desc: in the chessbox game viewer
+ user: core
+
+ *: "At the end of the game"
+
+
+ *: "På slutten av spelet"
+
+
+ *: "På slutten av spelet"
+
+
+
+ id: VOICE_PLAYER
+ desc: spoken only, for announcing player's id
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Spelar"
+
+
+
+ id: VOICE_GNUCHESS
+ desc: spoken only, for announcing player's id
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "GNU sjakk"
+
+
+
+ id: VOICE_MARKED
+ desc: spoken only, for announcing chess piece marking
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Markert"
+
+
+
+ id: VOICE_UNMARKED
+ desc: spoken only, for announcing chess piece unmarking
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Umarkert"
+
+
+
+ id: VOICE_WHITE
+ desc: spoken only, for announcing chess piece color
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Kvit"
+
+
+
+ id: VOICE_BLACK
+ desc: spoken only, for announcing chess piece color
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Svart"
+
+
+
+ id: VOICE_CHESSBOX_CHECK
+ desc: spoken only, for announcing chess moves
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Sjakk!"
+
+
+
+ id: VOICE_CHESSBOX_CAPTURES
+ desc: spoken only, for announcing chess moves
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "fanga"
+
+
+
+ id: VOICE_CHESSBOX_CASTLE
+ desc: spoken only, for announcing chess moves
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "slott"
+
+
+
+ id: VOICE_CHESSBOX_KINGSIDE
+ desc: spoken only, for announcing chess moves
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "kongesida"
+
+
+
+ id: VOICE_CHESSBOX_QUEENSIDE
+ desc: spoken only, for announcing chess moves
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "dronningsida"
+
+
+
+ id: VOICE_PAWN
+ desc: spoken only, for announcing chess piece names
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Bonde"
+
+
+
+ id: VOICE_KNIGHT
+ desc: spoken only, for announcing chess piece names
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Hest"
+
+
+
+ id: VOICE_BISHOP
+ desc: spoken only, for announcing chess piece names
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Løpar"
+
+
+
+ id: VOICE_ROOK
+ desc: spoken only, for announcing chess piece names
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Tårn"
+
+
+
+ id: VOICE_QUEEN
+ desc: spoken only, for announcing chess piece names
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Dronning"
+
+
+
+ id: VOICE_KING
+ desc: spoken only, for announcing chess piece names
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Konge"
+
+
+
+ id: LANG_CHESSBOX_GAMES
+ desc: in chessbox
+ user: core
+
+ *: "Games"
+
+
+ *: "Spel"
+
+
+ *: ""
+
+
+
+ id: LANG_CHESSBOX_SAVING_POSITION
+ desc: in chessbox
+ user: core
+
+ *: "Saving position"
+
+
+ *: "Lagrar posisjon"
+
+
+ *: "Lagrar posisjon"
+
+
+
+ id: LANG_CHESSBOX_LOADING_POSITION
+ desc: in chessbox
+ user: core
+
+ *: "Loading position"
+
+
+ *: "Lastar posisjon"
+
+
+ *: "Lastar posisjon"
+
+
+
+ id: LANG_CHESSBOX_THINKING
+ desc: in chessbox
+ user: core
+
+ *: "Thinking..."
+
+
+ *: "Tenkjer..."
+
+
+ *: "Tenkjer"
+
+
+
+ id: VOICE_BATTERY_BENCH_IS_ALREADY_RUNNING
+ desc: Spoken if battery bench is already running
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Batterimålinga køyrer allereie"
+
+
+
+ id: VOICE_BAT_BENCH_KEYS
+ desc: Battery bench start up message
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Press spel for å køyra batterimåling eller stopp for å avbryta"
+
+
+
+ id: LANG_CANNOT_RESTART_PLAYBACK
+ desc: cannot restart playback splash in imageviewer
+ user: core
+
+ *: "Cannot restart playback"
+
+
+ *: "Kan ikkje starta speling på nytt"
+
+
+ *: "Kan ikkje starta speling på nytt"
+
+
+
+ id: LANG_ORDERED
+ desc: in the imageviewer settings menu
+ user: core
+
+ *: "Ordered"
+
+
+ *: "Ordna"
+
+
+ *: "Ordna"
+
+
+
+ id: LANG_DIFFUSION
+ desc: in the imageviewer settings menu
+ user: core
+
+ *: "Diffusion"
+
+
+ *: "Uklårleik"
+
+
+ *: "Uklårleik"
+
+
+
+ id: LANG_GRAYSCALE
+ desc: in the imageviewer settings menu
+ user: core
+
+ *: "Grayscale"
+
+
+ *: "Gråtonar"
+
+
+ *: "Gråtonar"
+
+
+
+ id: LANG_SLIDESHOW_MODE
+ desc: in the imageviewer settings menu
+ user: core
+
+ *: "Toggle Slideshow Mode"
+
+
+ *: "Skru på lysbiletemodus"
+
+
+ *: "Skru på lysbiletemodus"
+
+
+
+ id: LANG_SLIDESHOW_TIME
+ desc: in the imageviewer settings menu
+ user: core
+
+ *: "Slideshow Time"
+
+
+ *: "Framsyningstid"
+
+
+ *: "Framsyningstid"
+
+
+
+ id: LANG_RETURN
+ desc: in various plugin menus
+ user: core
+
+ *: "Return"
+
+
+ *: "Tilbake"
+
+
+ *: "Tilbake"
+
+
+
+ id: LANG_REC_DIR
+ desc: used in the info screen to show a recording dir
+ user: core
+
+ *: none
+ recording: "Recording Directory"
+
+
+ *: none
+ recording: "Opptaksmappe"
+
+
+ *: none
+ recording: "Opptaksmappe"
+
+
+
+ id: LANG_CHESSBOX_MENU_VIEW_GAMES
+ desc: in the chessbox menu
+ user: core
+
+ *: "View Played Games"
+
+
+ *: "Sjå spela du har spelt"
+
+
+ *: "Sjå spela du har spelt"
+
+
+
+ id: LANG_MENU_AUDIO_OPTIONS
+ desc: in mpegplayer menus
+ user: core
+
+ *: "Audio Options"
+ lowmem: none
+
+
+ *: "Lydinnstillingar"
+ lowmem: none
+
+
+ *: "Lydinnstillingar"
+ lowmem: none
+
+
+
+ id: LANG_MENU_RESUME_OPTIONS
+ desc: in mpegplayer menus
+ user: core
+
+ *: "Resume Options"
+ lowmem: none
+
+
+ *: "Innstillingar for vidarespeling"
+ lowmem: none
+
+
+ *: "Innstillingar for vidarespeling"
+ lowmem: none
+
+
+
+ id: LANG_MENU_PLAY_MODE
+ desc: in mpegplayer menus
+ user: core
+
+ *: "Play Mode"
+ lowmem: none
+
+
+ *: "Spelemodus"
+ lowmem: none
+
+
+ *: "Spelemodus"
+ lowmem: none
+
+
+
+ id: LANG_SINGLE
+ desc: in mpegplayer menus
+ user: core
+
+ *: "Single"
+ lowmem: none
+
+
+ *: "Berre ein"
+ lowmem: none
+
+
+ *: "Berre ein"
+ lowmem: none
+
+
+
+ id: LANG_USE_SOUND_SETTING
+ desc: in mpegplayer menus
+ user: core
+
+ *: "Use sound setting"
+ lowmem: none
+
+
+ *: "Bruk lydinnstilling"
+ lowmem: none
+
+
+ *: "Bruk lydinnstilling"
+ lowmem: none
+
+
+
+ id: LANG_RESTART_PLAYBACK
+ desc: in the mpegplayer settings menu
+ user: core
+
+ *: "Play from beginning"
+ lowmem: none
+
+
+ *: "Spel frå starten"
+ lowmem: none
+
+
+ *: "Spel frå starten"
+ lowmem: none
+
+
+
+ id: LANG_SET_RESUME_TIME
+ desc: in the mpegplayer settings menu
+ user: core
+
+ *: "Set resume time (min)"
+ lowmem: none
+
+
+ *: "Set vidarespelingstid (min)"
+ lowmem: none
+
+
+ *: "Set vidarespelingstid"
+ lowmem: none
+
+
+
+ id: LANG_DISPLAY_FPS
+ desc: in the mpegplayer and pictureflow settings menus
+ user: core
+
+ *: "Display FPS"
+
+
+ *: "Vis rammer per sekund"
+
+
+ *: "Vis rammer per sekund"
+
+
+
+ id: LANG_LIMIT_FPS
+ desc: in the mpegplayer settings menu
+ user: core
+
+ *: "Limit FPS"
+ lowmem: none
+
+
+ *: "Avgrens rammer per sekund"
+ lowmem: none
+
+
+ *: "Avgrens rammer per sekund"
+ lowmem: none
+
+
+
+ id: LANG_SKIP_FRAMES
+ desc: in the mpegplayer settings menu
+ user: core
+
+ *: "Skip frames"
+ lowmem: none
+
+
+ *: "Hopp over rammer"
+ lowmem: none
+
+
+ *: "Hopp over rammer"
+ lowmem: none
+
+
+
+ id: LANG_BACKLIGHT_BRIGHTNESS
+ desc: in the mpegplayer settings menu
+ user: core
+
+ *: "Backlight brightness"
+ lowmem: none
+
+
+ *: "Skjermlysstyrke"
+ lowmem: none
+
+
+ *: "Skjermlysstyrke"
+ lowmem: none
+
+
+
+ id: LANG_USE_COMMON_SETTING
+ desc: in the mpegplayer settings menu
+ user: core
+
+ *: "Use common setting"
+ lowmem: none
+
+
+ *: "Bruk vanleg innstilling"
+ lowmem: none
+
+
+ *: "Bruk vanleg innstilling"
+ lowmem: none
+
+
+
+ id: LANG_TONE_CONTROLS
+ desc: in the mpegplayer settings menu
+ user: core
+
+ *: "Tone controls"
+ lowmem: none
+
+
+ *: "Tonekontrollar"
+ lowmem: none
+
+
+ *: "Tonekontrollar"
+ lowmem: none
+
+
+
+ id: LANG_FORCE_START_MENU
+ desc: in mpegplayer menus
+ user: core
+
+ *: "Start menu"
+ lowmem: none
+
+
+ *: "Startmeny"
+ lowmem: none
+
+
+ *: "Startmeny"
+ lowmem: none
+
+
+
+ id: LANG_CONDITIONAL_START_MENU
+ desc: in mpegplayer menus
+ user: core
+
+ *: "Start menu if not completed"
+ lowmem: none
+
+
+ *: "Startmeny viss ikkje fullført"
+ lowmem: none
+
+
+ *: "Startmeny viss ikkje fullført"
+ lowmem: none
+
+
+
+ id: LANG_AUTO_RESUME
+ desc: in mpegplayer menus
+ user: core
+
+ *: "Resume automatically"
+ lowmem: none
+
+
+ *: "Spel vidare automatisk"
+ lowmem: none
+
+
+ *: "Spel vidare automatisk"
+ lowmem: none
+
+
+
+ id: LANG_CLEAR_ALL_RESUMES
+ desc: in the mpegplayer settings menu
+ user: core
+
+ *: "Clear all resumes"
+ lowmem: none
+
+
+ *: "Tøm alle vidarespelingar"
+ lowmem: none
+
+
+ *: "Tøm alle vidarespelingar"
+ lowmem: none
+
+
+
+ id: LANG_UNAVAILABLE
+ desc: in mpegplayer settings
+ user: core
+
+ *: "Unavailable"
+ lowmem: none
+
+
+ *: "Utilgjengeleg"
+ lowmem: none
+
+
+ *: "Utilgjengeleg"
+ lowmem: none
+
+
+
+ id: LANG_TOGGLE_ITEM
+ desc: deprecated
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: ""
+
+
+
+ id: LANG_MOVE_ITEM_UP
+ desc: in main_menu_config
+ user: core
+
+ *: "Move Item Up"
+
+
+ *: "Flytt opp"
+
+
+ *: "Flytt opp"
+
+
+
+ id: LANG_MOVE_ITEM_DOWN
+ desc: in main_menu_config
+ user: core
+
+ *: "Move Item Down"
+
+
+ *: "Flytt ned"
+
+
+ *: "Flytt ned"
+
+
+
+ id: LANG_LOAD_DEFAULT_CONFIGURATION
+ desc: in main_menu_config
+ user: core
+
+ *: "Load Default Configuration"
+
+
+ *: "Last standardval"
+
+
+ *: "Last standardval"
+
+
+
+ id: LANG_SAVE_EXIT
+ desc: in main_menu_config
+ user: core
+
+ *: "Save and Exit"
+
+
+ *: "Lagre og avslutt"
+
+
+ *: "Lagre og avslutt"
+
+
+
+ id: LANG_MAIN_MENU_ORDER
+ desc: deprecated
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: ""
+
+
+
+ id: LANG_PROPERTIES_PATH
+ desc: in properties plugin
+ user: core
+
+ *: "[Path]"
+
+
+ *: "[Sti]"
+
+
+ *: "Sti"
+
+
+
+ id: LANG_PROPERTIES_FILENAME
+ desc: in properties plugin
+ user: core
+
+ *: "[Filename]"
+
+
+ *: "[Filnamn]"
+
+
+ *: "Filnamn"
+
+
+
+ id: LANG_PROPERTIES_SIZE
+ desc: in properties plugin
+ user: core
+
+ *: "[Size]"
+
+
+ *: "[Storleik]"
+
+
+ *: "Storleik"
+
+
+
+ id: LANG_PROPERTIES_DATE
+ desc: in properties plugin
+ user: core
+
+ *: "[Date]"
+
+
+ *: "[Dato]"
+
+
+ *: "Dato"
+
+
+
+ id: LANG_PROPERTIES_TIME
+ desc: in properties plugin
+ user: core
+
+ *: "[Time]"
+
+
+ *: "[Tid]"
+
+
+ *: "Tid"
+
+
+
+ id: LANG_PROPERTIES_SUBDIRS
+ desc: in properties plugin
+ user: core
+
+ *: "[Subdirs]"
+
+
+ *: "[Undermapper]"
+
+
+ *: "Undermapper"
+
+
+
+ id: LANG_PROPERTIES_FILES
+ desc: in properties plugin
+ user: core
+
+ *: "[Files]"
+
+
+ *: "[Filer]"
+
+
+ *: "Filer"
+
+
+
+ id: LANG_PROPERTIES_DIRECTORY_PROPERTIES
+ desc: in properties plugin
+ user: core
+
+ *: "Directory properties"
+
+
+ *: "Mappeeigenskapar"
+
+
+ *: ""
+
+
+
+ id: LANG_PROPERTIES_FILE_PROPERTIES
+ desc: in properties plugin
+ user: core
+
+ *: "File properties"
+
+
+ *: "Fileigenskapar"
+
+
+ *: ""
+
+
+
+ id: LANG_PROPERTIES_FAIL
+ desc: in properties plugin
+ user: core
+
+ *: "Failed to gather information"
+
+
+ *: "Greidde ikkje samla informasjon"
+
+
+ *: "Greidde ikkje samla informasjon"
+
+
+
+ id: LANG_SWAP_CHANNELS
+ desc: in sound_settings
+ user: core
+
+ *: "Swap Channels"
+
+
+ *: "Byt kanalar"
+
+
+ *: "Byt kanalar"
+
+
+
+ id: LANG_PANNING_SEPARATION
+ desc: in mikmod settings menu
+ user: core
+
+ *: "Panning Separation"
+ lowmem: none
+
+
+ *: "Panoreringsskilnad"
+ lowmem: none
+
+
+ *: "Panoreringsskilnad"
+ lowmem: none
+
+
+
+ id: LANG_REVERBERATION
+ desc: in mikmod settings menu
+ user: core
+
+ *: "Reverberation"
+ lowmem: none
+
+
+ *: "Klang"
+ lowmem: none
+
+
+ *: "Klang"
+ lowmem: none
+
+
+
+ id: LANG_INTERPOLATION
+ desc: in mikmod settings menu
+ user: core
+
+ *: "Interpolation"
+ lowmem: none
+
+
+ *: "Interpolering"
+ lowmem: none
+
+
+ *: "Interpolering"
+ lowmem: none
+
+
+
+ id: LANG_MIKMOD_SURROUND
+ desc: in mikmod settings menu
+ user: core
+
+ *: "Surround"
+ lowmem: none
+
+
+ *: "Kringlyd"
+ lowmem: none
+
+
+ *: "Kringlyd"
+ lowmem: none
+
+
+
+ id: LANG_MIKMOD_HQMIXER
+ desc: in mikmod settings menu
+ user: core
+
+ *: "HQ Mixer"
+ lowmem: none
+
+
+ *: "HQ-miksar"
+ lowmem: none
+
+
+ *: "Høgkvalitetsmiksar"
+ lowmem: none
+
+
+
+ id: LANG_MIKMOD_SAMPLERATE
+ desc: in mikmod settings menu
+ user: core
+
+ *: "Sample Rate"
+ lowmem: none
+
+
+ *: "Punktrate"
+ lowmem: none
+
+
+ *: "Punktrate"
+ lowmem: none
+
+
+
+ id: LANG_CPU_BOOST
+ desc: in mikmod settings menu
+ user: core
+
+ *: "CPU Boost"
+ lowmem: none
+
+
+ *: "Prosessorboost"
+ lowmem: none
+
+
+ *: "Prosessorboost"
+ lowmem: none
+
+
+
+ id: LANG_SPACING
+ desc: in the pictureflow settings menu
+ user: core
+
+ *: "Spacing"
+
+
+ *: "Mellomrom"
+
+
+ *: "Mellomrom"
+
+
+
+ id: LANG_CENTRE_MARGIN
+ desc: in the pictureflow settings menu
+ user: core
+
+ *: "Centre margin"
+
+
+ *: "Midtmarg"
+
+
+ *: "Midtmarg"
+
+
+
+ id: LANG_NUMBER_OF_SLIDES
+ desc: in the pictureflow settings menu
+ user: core
+
+ *: "Number of slides"
+
+
+ *: "Tal på lysbilete"
+
+
+ *: "Tal på lysbilete"
+
+
+
+ id: LANG_ZOOM
+ desc: in the pictureflow settings menu
+ user: core
+
+ *: "Zoom"
+
+
+ *: "Zoom"
+
+
+ *: "Zoom"
+
+
+
+ id: LANG_SHOW_ALBUM_TITLE
+ desc: in the pictureflow settings menu
+ user: core
+
+ *: "Show album title"
+
+
+ *: "Vis albumtittel"
+
+
+ *: "Vis albumtittel"
+
+
+
+ id: LANG_RESIZE_COVERS
+ desc: in the pictureflow settings menu
+ user: core
+
+ *: "Resize Covers"
+
+
+ *: "Skaler omslag"
+
+
+ *: "Skaler omslag"
+
+
+
+ id: LANG_REBUILD_CACHE
+ desc: in the pictureflow settings menu
+ user: core
+
+ *: "Rebuild cache"
+
+
+ *: "Lag nytt mellomlager"
+
+
+ *: "Lag nytt mellomlager"
+
+
+
+ id: LANG_WPS_INTEGRATION
+ desc: in the pictureflow settings menu
+ user: core
+
+ *: "WPS Integration"
+
+
+ *: "Speleskjermintegrering"
+
+
+ *: "Speleskjermintegrering"
+
+
+
+ id: LANG_GOTO_WPS
+ desc: in the pictureflow main menu
+ user: core
+
+ *: "Go to WPS"
+
+
+ *: "Gå til speleskjermen"
+
+
+ *: "Gå til speleskjermen"
+
+
+
+ id: LANG_HIDE_ALBUM_TITLE
+ desc: in the pictureflow settings
+ user: core
+
+ *: "Hide album title"
+
+
+ *: "Gøym albumtittel"
+
+
+ *: "Gøym albumtittel"
+
+
+
+ id: LANG_SHOW_AT_THE_BOTTOM
+ desc: in the pictureflow settings
+ user: core
+
+ *: "Show at the bottom"
+
+
+ *: "Vis på botnen"
+
+
+ *: "Vis på botnen"
+
+
+
+ id: LANG_SHOW_AT_THE_TOP
+ desc: in the pictureflow settings
+ user: core
+
+ *: "Show at the top"
+
+
+ *: "Vis på toppen"
+
+
+ *: "Vis på toppen"
+
+
+
+ id: LANG_DIRECT
+ desc: in the pictureflow settings, also a volume adjustment mode
+ user: core
+
+ *: "Direct"
+
+
+ *: "Direkte"
+
+
+ *: "Direkte"
+
+
+
+ id: LANG_VIA_TRACK_LIST
+ desc: in the pictureflow settings
+ user: core
+
+ *: "Via Track list"
+
+
+ *: "Via sporliste"
+
+
+ *: "Via sporliste"
+
+
+
+ id: LANG_ALWAYS_ON
+ desc: in the pictureflow settings menu
+ user: core
+
+ *: "Always On"
+
+
+ *: "Alltid på"
+
+
+ *: "Alltid på"
+
+
+
+ id: LANG_NO_ALBUMART_FOUND
+ desc: in the pictureflow splash messages
+ user: core
+
+ *: "No album art found"
+
+
+ *: "Fann ingen omslag"
+
+
+ *: "Fann ingen omslag"
+
+
+
+ id: LANG_ERROR_WRITING_CONFIG
+ desc: in the pictureflow splash messages
+ user: core
+
+ *: "Error writing config"
+
+
+ *: "Greidde ikkje skriva oppsett"
+
+
+ *: "Greidde ikkje skriva oppsett"
+
+
+
+ id: LANG_NOT_A_VBR_FILE
+ desc: in vbrfix plugin
+ user: core
+
+ *: "Not a VBR file"
+
+
+ *: "Ikkje ei VBR-fil"
+
+
+ *: "Ikkje ei V B R fil"
+
+
+
+ id: LANG_FILE_ERROR
+ desc: in vbrfix plugin
+ user: core
+
+ *: "File error: %d"
+
+
+ *: "Filfeil: %d"
+
+
+ *: "Filfeil"
+
+
+
+ id: LANG_UPDATE_CACHE
+ desc: in pictureflow
+ user: core
+
+ *: "Update cache"
+
+
+ *: "Oppdater mellomlager"
+
+
+ *: "Oppdater mellomlager"
+
+
+
+ id: LANG_HIDE_ALBUM_TITLE_NEW
+ desc: in the pictureflow settings
+ user: core
+
+ *: "Hide information"
+
+
+ *: "Gøym informasjon"
+
+
+ *: "Gøym informasjon"
+
+
+
+ id: LANG_SHOW_AT_THE_BOTTOM_NEW
+ desc: in the pictureflow settings
+ user: core
+
+ *: "Show album at the bottom"
+
+
+ *: "Vis albumet på botnen"
+
+
+ *: "Vis albumet på botnen"
+
+
+
+ id: LANG_SHOW_AT_THE_TOP_NEW
+ desc: in the pictureflow settings
+ user: core
+
+ *: "Show album at the top"
+
+
+ *: "Vis albumet på toppen"
+
+
+ *: "Vis albumet på toppen"
+
+
+
+ id: LANG_SHOW_ALL_AT_THE_TOP
+ desc: in the pictureflow settings
+ user: core
+
+ *: "Show album and artist at the top"
+
+
+ *: "Vis albumet og artisten på toppen"
+
+
+ *: "Vis albumet og artisten på toppen"
+
+
+
+ id: LANG_SHOW_ALL_AT_THE_BOTTOM
+ desc: in the pictureflow settings
+ user: core
+
+ *: "Show album and artist at the bottom"
+
+
+ *: "Vis albumet og artisten på botnen"
+
+
+ *: "Vis albumet og artisten på botnen"
+
+
+
+ id: LANG_ACTION_STD_CANCEL
+ desc: standard press x to cancel string
+ user: core
+
+ *: "Press LEFT to cancel."
+ android,hifietma*: "Press BACK to cancel."
+ cowond2,creativezenxfi2,ibassodx50,ibassodx90,mrobe500,ondavx747: "Press POWER to cancel."
+ ihifi760,ihifi960: "Double tap RETURN to cancel."
+ ihifi770,ihifi770c,ihifi800: "Press HOME to cancel."
+ iriverh10,samsungyh*: "Double tap LEFT to cancel."
+ mpiohd200: "Double tap REC to cancel."
+ mpiohd300: "Double tap MENU to cancel."
+ rx27generic: "Press VOLUME to cancel."
+ sonynwza860: "Keymaps incomplete."
+ touchscreen: "Press Middle Left to cancel."
+ vibe500: "Press PREV to cancel."
+ xduoox20,xduoox3,xduoox3ii: "Double tap HOME to cancel."
+
+
+ *: "Trykk VENSTRE for å avbryta."
+ android,hifietma*: "Trykk TILBAKE for å avbryta."
+ cowond2,creativezenxfi2,ibassodx50,ibassodx90,mrobe500,ondavx747: "Trykk PÅ for å avbryta."
+ ihifi760,ihifi960: "Dobbeltrykk TILBAKE for å avbryta."
+ ihifi770,ihifi770c,ihifi800: "Trykk HEIM for å avbryta."
+ iriverh10,samsungyh*: "Dobbeltrykk VENSTRE for å avbryta."
+ mpiohd200: "Dobbeltrykk REC for å avbryta."
+ mpiohd300: "Dobbeltrykk MENY for å avbryta."
+ rx27generic: "Trykk VOLUM for å avbryta."
+ sonynwza860: "Ufullstendige teiknkart."
+ touchscreen: "Trykk midt venstre for å avbryta."
+ vibe500: "Trykk FØRRE for å avbryta."
+ xduoox20,xduoox3,xduoox3ii: "Dobbeltrykk HEIM for å avbryta."
+
+
+ *: "Trykk VENSTRE for å avbryta."
+ android,hifietma*: "Trykk TILBAKE for å avbryta."
+ cowond2,creativezenxfi2,ibassodx50,ibassodx90,mrobe500,ondavx747: "Trykk PÅ for å avbryta."
+ ihifi760,ihifi960: "Dobbeltrykk TILBAKE for å avbryta."
+ ihifi770,ihifi770c,ihifi800: "Trykk HEIM for å avbryta."
+ iriverh10,samsungyh*: "Dobbeltrykk VENSTRE for å avbryta."
+ mpiohd200: "Dobbeltrykk REC for å avbryta."
+ mpiohd300: "Dobbeltrykk MENY for å avbryta."
+ rx27generic: "Trykk VOLUM for å avbryta."
+ touchscreen: "Trykk midt venstre for å avbryta."
+ vibe500: "Trykk FØRRE for å avbryta."
+ xduoox20,xduoox3,xduoox3ii: "Dobbeltrykk HEIM for å avbryta."
+
+
+
+ id: LANG_DATE
+ desc: for constructing time and date announcements
+ user: core
+
+ *: "Date"
+
+
+ *: "Dato"
+
+
+ *: "Dato"
+
+
+
+ id: LANG_CLEAR_ALL
+ desc:
+ user: core
+
+ *: "Clear all"
+
+
+ *: "Tøm alle"
+
+
+ *: "Tøm alle"
+
+
+
+ id: LANG_CANCEL_0
+ desc: CANCEL.
+ user: core
+
+ *: "Cancel"
+
+
+ *: "Avbryt"
+
+
+ *: "Avbryt"
+
+
+
+ id: LANG_SAVE
+ desc:
+ user: core
+
+ *: "Save"
+
+
+ *: "Lagra"
+
+
+ *: "Lagra"
+
+
+
+ id: LANG_TIMEOUT
+ desc:
+ user: core
+
+ *: "Timeout"
+
+
+ *: "Tidsavbrot"
+
+
+ *: "Tidsavbrot"
+
+
+
+ id: LANG_TRACK
+ desc: used in track x of y constructs
+ user: core
+
+ *: "Track"
+
+
+ *: "Spor"
+
+
+ *: "Spor"
+
+
+
+ id: LANG_ELAPSED
+ desc: prefix for elapsed playtime announcement
+ user: core
+
+ *: "Elapsed"
+
+
+ *: "Gått"
+
+
+ *: "Gått"
+
+
+
+ id: LANG_ANNOUNCEMENT_FMT
+ desc: format for wps hotkey announcement
+ user: core
+
+ *: none
+ hotkey: "Announcement format"
+
+
+ *: none
+ hotkey: "Meldingsformat"
+
+
+ *: none
+ hotkey: "Meldingsformat"
+
+
+
+ id: LANG_ANNOUNCE_STATUS
+ desc: announnnce_status plugin
+ user: core
+
+ *: "Announce Status"
+
+
+ *: "Meldingsstatus"
+
+
+ *: "Meldingsstatus"
+
+
+
+ id: LANG_REMAIN
+ desc: for constructs such as number of tracks remaining etc
+ user: core
+
+ *: none
+ hotkey: "Remain"
+
+
+ *: none
+ hotkey: "Står att"
+
+
+ *: none
+ hotkey: "Står att"
+
+
+
+ id: LANG_GROUPING
+ desc:
+ user: core
+
+ *: none
+ hotkey: "Grouping"
+
+
+ *: none
+ hotkey: "Gruppering"
+
+
+ *: none
+ hotkey: "Gruppering"
+
+
+
+ id: LANG_ANNOUNCE_ON
+ desc:
+ user: core
+
+ *: none
+ hotkey: "Announce on"
+
+
+ *: none
+ hotkey: "Meld frå ved"
+
+
+ *: none
+ hotkey: "Meld frå ved"
+
+
+
+ id: LANG_TRACK_CHANGE
+ desc:
+ user: core
+
+ *: none
+ hotkey: "Track change"
+
+
+ *: none
+ hotkey: "Nytt spor"
+
+
+ *: none
+ hotkey: "Nytt spor"
+
+
+
+ id: LANG_HOLD_FOR_SETTINGS
+ desc:
+ user: core
+
+ *: none
+ hotkey: "Hold for settings"
+
+
+ *: none
+ hotkey: "Hald for innstillingar"
+
+
+ *: none
+ hotkey: "Hald for innstillingar"
+
+
+
+ id: LANG_OPEN_PLUGIN
+ desc: onplay open plugin
+ user: core
+
+ *: "Open Plugin"
+
+
+ *: "Opna tillegg"
+
+
+ *: "Opna tillegg"
+
+
+
+ id: LANG_OPEN_PLUGIN_NOT_A_PLUGIN
+ desc: open plugin module
+ user: core
+
+ *: "Not a plugin: %s"
+
+
+ *: "Ikkje eit tillegg: %s"
+
+
+ *: "Ikkje eit tillegg"
+
+
+
+ id: LANG_OPEN_PLUGIN_SET_WPS_CONTEXT_PLUGIN
+ desc: open plugin module
+ user: core
+
+ *: "Set WPS Context Plugin"
+
+
+ *: "Vel konteksttillegg for speleskjerm"
+
+
+ *: "Vel konteksttillegg for speleskjerm"
+
+
+
+ id: LANG_PARAMETER
+ desc:
+ user: core
+
+ *: "Parameter"
+
+
+ *: "~Parameter"
+
+
+ *: "~Parameter"
+
+
+
+ id: LANG_NAME
+ desc:
+ user: core
+
+ *: "Name"
+
+
+ *: "Namn"
+
+
+ *: "Namn"
+
+
+
+ id: LANG_ADD
+ desc:
+ user: core
+
+ *: "Add"
+
+
+ *: "Legg til"
+
+
+ *: "Legg til"
+
+
+
+ id: LANG_BACK
+ desc:
+ user: core
+
+ *: "Back"
+
+
+ *: "Tilbake"
+
+
+ *: "Tilbake"
+
+
+
+ id: LANG_EDIT
+ desc:
+ user: core
+
+ *: "Edit"
+
+
+ *: "Rediger"
+
+
+ *: "Rediger"
+
+
+
+ id: LANG_RUN
+ desc:
+ user: core
+
+ *: "Run"
+
+
+ *: "Spring"
+
+
+ *: "Spring"
+
+
+
+ id: LANG_EXPORT
+ desc:
+ user: core
+
+ *: "Export"
+
+
+ *: "Eksporter"
+
+
+ *: "Eksporter"
+
+
+
+ id: LANG_BROWSE
+ desc:
+ user: core
+
+ *: "Browse"
+
+
+ *: "Sjå gjennom"
+
+
+ *: "Sjå gjennom"
+
+
+
+ id: LANG_ENTER_USB_STORAGE_MODE_QUERY
+ desc: upon plugging in USB
+ user: core
+
+ *: "Enter USB mass storage mode?"
+
+
+ *: "Start USB-masselagringsmodus?"
+
+
+ *: "Start U S B masselagringsmodus?"
+
+
+
+ id: LANG_QUEUE_MENU
+ desc: in onplay menu
+ user: core
+
+ *: "Queue..."
+
+
+ *: "Kø..."
+
+
+ *: "Kø"
+
+
+
+ id: LANG_SHOW_QUEUE_OPTIONS
+ desc: in Current Playlist settings
+ user: core
+
+ *: "Show Queue Options"
+
+
+ *: "Vis val for køar"
+
+
+ *: "Vis val for køar"
+
+
+
+ id: LANG_SHOW_SHUFFLED_ADDING_OPTIONS
+ desc: in Current Playlist settings
+ user: core
+
+ *: "Show Shuffled Adding Options"
+
+
+ *: "Vis val for å leggja til tilfeldig"
+
+
+ *: "Vis val for å leggja til tilfeldig"
+
+
+
+ id: LANG_IN_SUBMENU
+ desc: in Settings
+ user: core
+
+ *: "In Submenu"
+
+
+ *: "I undermeny"
+
+
+ *: "I undermeny"
+
+
+
+ id: LANG_SOFTLOCK_DISABLE_ALL_NOTIFY
+ desc: disable all softlock notifications
+ user: core
+
+ *: "Disable All Lock Notifications"
+
+
+ *: "Skru av alle låsevarslingar"
+
+
+ *: "Skru av alle låsevarslingar"
+
+
+
+ id: LANG_ACTION_VOLUME
+ desc: exempt volume from softlock
+ user: core
+
+ *: "Exempt Volume"
+
+
+ *: "Unnateke volum"
+
+
+ *: "Unnateke volum"
+
+
+
+ id: LANG_ACTION_ALWAYSAUTOLOCK
+ desc: always prime autolock
+ user: core
+
+ *: "Always Autolock"
+
+
+ *: "Alltid autolås"
+
+
+ *: "Alltid autolås"
+
+
+
+ id: VOICE_NUMERIC_TENS_SWAP_SEPARATOR
+ desc: voice only, for speaking numbers in languages that swap the tens and ones fields. Leave blank for languages that do not need it, such as English ("231" => "two hundred thirty one") but other languages may speak it as "two hundred one [AND] thirty"
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: ""
+
+
+
+ id: LANG_VOICED_DATE_FORMAT
+ desc: format string for how dates will be read back. Y == 4-digit year (grouped), y == 4-digit year (numeric), A == month name, m == numeric month, d == numeric day. For example, for 2021-01-05, "AdY" will be voiced as "January 5 twenty twenty-one" and "dmy" will be voiced as "5 1 two thousand twenty one
+ user: core
+
+ *: "dAY"
+
+
+ *: "dAY"
+
+
+ *: ""
+
+
+
+ id: LANG_LIST_WRAPAROUND
+ desc: in Settings
+ user: core
+
+ *: "List Wraparound"
+
+
+ *: "Lista tilbake frå toppen"
+
+
+ *: "Lista tilbake frå toppen"
+
+
+
+ id: LANG_SHOW_SHUTDOWN_MESSAGE
+ desc: in Settings
+ user: core
+
+ *: "Show Shutdown Message"
+
+
+ *: "Vis avsluttingsmelding"
+
+
+ *: "Vis avsluttingsmelding"
+
+
+
+ id: LANG_LIST_ORDER
+ desc: in Settings
+ user: core
+
+ *: "List Order"
+
+
+ *: "Sortering"
+
+
+ *: "Sortering"
+
+
+
+ id: LANG_ASCENDING
+ desc: in Settings
+ user: core
+
+ *: "Ascending"
+
+
+ *: "Stigande"
+
+
+ *: "Stigande"
+
+
+
+ id: LANG_DESCENDING
+ desc: in Settings
+ user: core
+
+ *: "Descending"
+
+
+ *: "Søkkande"
+
+
+ *: "Søkkande"
+
+
+
+ id: LANG_ALBUM_ART
+ desc: in Settings
+ user: core
+
+ *: "Album Art"
+
+
+ *: "Omslag"
+
+
+ *: "Omslag"
+
+
+
+ id: LANG_PREFER_EMBEDDED
+ desc: in Settings
+ user: core
+
+ *: "Prefer Embedded"
+
+
+ *: "Bruk innebygde"
+
+
+ *: "Bruk innebygde"
+
+
+
+ id: LANG_PREFER_IMAGE_FILE
+ desc: in Settings
+ user: core
+
+ *: "Prefer Image File"
+
+
+ *: "Bruk biletfil"
+
+
+ *: "Bruk biletfil"
+
+
+
+ id: LANG_FM_SYNC_RDS_TIME
+ desc: in radio screen and Settings
+ user: core
+
+ *: none
+ rds: "Sync RDS Time"
+
+
+ *: none
+ rds: "Synkroniser RDS-tid"
+
+
+ *: none
+ rds: "Synkroniser RDS-tid"
+
+
+
+ id: LANG_SORT_ALBUMS_BY
+ desc: in Settings
+ user: core
+
+ *: "Sort albums by"
+
+
+ *: "Sorter album etter"
+
+
+ *: "Sorter album etter"
+
+
+
+ id: LANG_ARTIST_PLUS_NAME
+ desc: in Settings
+ user: core
+
+ *: "Artist + Name"
+
+
+ *: "Artist + Namn"
+
+
+ *: "Artist og namn"
+
+
+
+ id: LANG_ARTIST_PLUS_YEAR
+ desc: in Settings
+ user: core
+
+ *: "Artist + Year"
+
+
+ *: "Artist + år"
+
+
+ *: "Artist og år"
+
+
+
+ id: LANG_YEAR_SORT_ORDER
+ desc: in Settings
+ user: core
+
+ *: "Year sort order"
+
+
+ *: "Sortering for år"
+
+
+ *: "Sortering for år"
+
+
+
+ id: LANG_SHOW_YEAR_IN_ALBUM_TITLE
+ desc: in Settings
+ user: core
+
+ *: "Show year in album title"
+
+
+ *: "Vis år i albumtittelen"
+
+
+ *: "Vis år i albumtittelen"
+
+
+
+ id: LANG_WAIT_FOR_CACHE
+ desc: in Settings
+ user: core
+
+ *: "Cache needs to finish updating first!"
+
+
+ *: "Mellomlageret må oppdaterast fyrst!"
+
+
+ *: "Mellomlageret må oppdaterast fyrst!"
+
+
+
+ id: LANG_TRACK_INFO
+ desc: Track Info Title
+ user: core
+
+ *: "Track Info"
+
+
+ *: "Sporinfo"
+
+
+ *: "Sporinfo"
+
+
+
+ id: LANG_PLAY
+ desc: play selected file/directory, in playlist context menu
+ user: core
+
+ *: "Play"
+
+
+ *: "Spel"
+
+
+ *: "Spel"
+
+
+
+ id: LANG_PLAY_SHUFFLED
+ desc: play selected files in shuffled order, in playlist context menu
+ user: core
+
+ *: "Play Shuffled"
+
+
+ *: "Spel tilfeldig"
+
+
+ *: "Spel tilfeldig"
+
+
+
+ id: LANG_KEEP_CURRENT_TRACK_ON_REPLACE
+ desc: used in the playlist settings menu
+ user: core
+
+ *: "Keep Current Track When Replacing Playlist"
+
+
+ *: "Hald på dette sporet når du byter ut spelelista"
+
+
+ *: "Hald på dette sporet når du byter ut spelelista"
+
+
+
+ id: LANG_CLEAR_SETTINGS_ON_HOLD
+ desc: in the system sub menu
+ user: core
+
+ *: none
+ clear_settings_on_hold,iriverh10: "Clear settings when reset button is held during startup"
+ ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Clear settings when hold switch is on during startup"
+
+
+ *: none
+ clear_settings_on_hold,iriverh10: "Tøm innstillingar når du held inne nullstill-knappen ved oppstart"
+ ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Tøm innstillingar når du held inne hald-knappen ved oppstart"
+
+
+ *: none
+ clear_settings_on_hold,iriverh10: "Tøm innstillingar når du held inne nullstill-knappen ved oppstart"
+ ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Tøm innstillingar når du held inne hald-knappen ved oppstart"
+
+
+
+ id: LANG_REWIND_ACROSS_TRACKS
+ desc: in playback settings menu
+ user: core
+
+ *: "Rewind Across Tracks"
+
+
+ *: "Spol tilbake fleire spor"
+
+
+ *: "Spol tilbake fleire spor"
+
+
+
+ id: LANG_SET_AS
+ desc: used in the onplay menu
+ user: core
+
+ *: "Set As..."
+
+
+ *: "Bruk som..."
+
+
+ *: "Bruk som"
+
+
+
+ id: LANG_PLAYLIST_DIR
+ desc: used in the onplay menu
+ user: core
+
+ *: "Playlist Directory"
+
+
+ *: "Spelelistemappe"
+
+
+ *: "Spelelistemappe"
+
+
+
+ id: LANG_START_DIR
+ desc: used in the onplay menu
+ user: core
+
+ *: "Start Directory"
+
+
+ *: "Startmappe"
+
+
+ *: "Startmappe"
+
+
+
+ id: LANG_RECORDING_DIR
+ desc: used in the onplay menu
+ user: core
+
+ *: none
+ recording: "Recording Directory"
+
+
+ *: none
+ recording: "Opptaksmappe"
+
+
+ *: none
+ recording: "Opptaksmappe"
+
+
+
+ id: LANG_ADD_TO_PL
+ desc: used in the onplay menu
+ user: core
+
+ *: "Add to Playlist..."
+
+
+ *: "Legg til speleliste..."
+
+
+ *: "Legg til speleliste"
+
+
+
+ id: LANG_ADD_TO_EXISTING_PL
+ desc: used in the onplay menu
+ user: core
+
+ *: "Add to Existing Playlist"
+
+
+ *: "Legg til denne spelelista"
+
+
+ *: "Legg til denne spelelista"
+
+
+
+ id: LANG_PLAYING_NEXT
+ desc: used in the onplay menu
+ user: core
+
+ *: "Playing Next..."
+
+
+ *: "Spelar neste..."
+
+
+ *: "Spelar neste"
+
+
+
+ id: LANG_PLAY_NEXT
+ desc: used in the onplay menu
+ user: core
+
+ *: "Play Next"
+
+
+ *: "Spel neste"
+
+
+ *: "Spel neste"
+
+
+
+ id: LANG_ADD_SHUFFLED
+ desc: used in the onplay menu
+ user: core
+
+ *: "Add Shuffled"
+
+
+ *: "Legg til tilfeldig"
+
+
+ *: "Legg til tilfeldig"
+
+
+
+ id: LANG_PLAY_LAST
+ desc: used in the onplay menu
+ user: core
+
+ *: "Play Last"
+
+
+ *: "Spel siste"
+
+
+ *: "Spel siste"
+
+
+
+ id: LANG_PLAY_LAST_SHUFFLED
+ desc: used in the onplay menu
+ user: core
+
+ *: "Play Last Shuffled"
+
+
+ *: "Spel siste tilfeldige"
+
+
+ *: "Spel siste tilfeldige"
+
+
+
+ id: LANG_VOLUME_ADJUST_MODE
+ desc: in system settings
+ user: core
+
+ *: none
+ perceptual_volume: "Volume Adjustment Mode"
+
+
+ *: none
+ perceptual_volume: "Volumusteringsmodus"
+
+
+ *: none
+ perceptual_volume: "Volumjusteringsmodus"
+
+
+
+ id: LANG_VOLUME_ADJUST_NORM_STEPS
+ desc: in system settings
+ user: core
+
+ *: none
+ perceptual_volume: "Number of Volume Steps"
+
+
+ *: none
+ perceptual_volume: "Kor mange volumsteg"
+
+
+ *: none
+ perceptual_volume: "Kor mange volumsteg"
+
+
+
+ id: LANG_PERCEPTUAL
+ desc: in system settings -> volume adjustment mode
+ user: core
+
+ *: none
+ perceptual_volume: "Perceptual"
+
+
+ *: none
+ perceptual_volume: "Oppfatta"
+
+
+ *: none
+ perceptual_volume: "Oppfatta"
+
+
+
+ id: LANG_SHOW_TRACKS_WHILE_BROWSING
+ desc: in PictureFlow Main Menu
+ user: core
+
+ *: "Show Tracks While Browsing"
+
+
+ *: "Vis spor når du ser gjennom"
+
+
+ *: "Vis spor når du ser gjennom"
+
+
+
+ id: LANG_GOTO_LAST_ALBUM
+ desc: in PictureFlow Main Menu
+ user: core
+
+ *: "Go to Last Album"
+
+
+ *: "Gå til siste album"
+
+
+ *: "Gå til siste album"
+
+
+
+ id: LANG_DATABASE_DIR
+ desc: in database settings menu
+ user: core
+
+ *: "Database Directory"
+
+
+ *: "Databasemappe"
+
+
+ *: "Databasemappe"
+
+
+
+ id: LANG_REMOVE_QUEUED_TRACKS
+ desc: Confirmation dialog
+ user: core
+
+ *: "Remove Queued Tracks?"
+
+
+ *: "Fjern spor i kø?"
+
+
+ *: "Fjern spor i kø?"
+
+
+
+ id: LANG_QUICK_IGNORE_DIRACHE
+ desc: in Settings
+ user: core
+
+ *: "Quick (Ignore Directory Cache)"
+
+
+ *: "Raskt (oversjå mappemellomlager)"
+
+
+ *: "Raskt (oversjå mappemellomlager)"
+
+
+
+ id: LANG_WPS
+ desc: in Settings
+ user: core
+
+ *: "What's Playing Screen"
+
+
+ *: "Speleskjerm"
+
+
+ *: "Speleskjerm"
+
+
+
+ id: LANG_DEFAULT_BROWSER
+ desc: in Settings
+ user: core
+
+ *: "Default Browser"
+
+
+ *: "Standardlesar"
+
+
+ *: "Standardlesar"
+
+
+
+ id: LANG_SET_MAZE_SIZE
+ desc: Maze size in Amaze game
+ user: core
+
+ *: "Set Maze Size"
+
+
+ *: "Labyrintstorleik"
+
+
+ *: "Labyrintstorleik"
+
+
+
+ id: LANG_VIEW_MAP
+ desc: Map in Amaze game
+ user: core
+
+ *: "View Map"
+
+
+ *: "Sjå kartet"
+
+
+ *: "Sjå kartet"
+
+
+
+ id: LANG_SHOW_COMPASS
+ desc: Compass in Amaze game
+ user: core
+
+ *: "Show Compass"
+
+
+ *: "Vis kompasset"
+
+
+ *: "Vis kompasset"
+
+
+
+ id: LANG_SHOW_MAP
+ desc: Map in Amaze game
+ user: core
+
+ *: "Show Map"
+
+
+ *: "Vis kartet"
+
+
+ *: "Vis kartet"
+
+
+
+ id: LANG_REMEMBER_PATH
+ desc: Map in Amaze game
+ user: core
+
+ *: "Remember Path"
+
+
+ *: "Hugs stien"
+
+
+ *: "Hugs stien"
+
+
+
+ id: LANG_USE_LARGE_TILES
+ desc: Map in Amaze game
+ user: core
+
+ *: "Use Large Tiles"
+
+
+ *: "Bruk store fliser"
+
+
+ *: "Bruk store fliser"
+
+
+
+ id: LANG_SHOW_SOLUTION
+ desc: Map in Amaze game
+ user: core
+
+ *: "Show Solution"
+
+
+ *: "Vis løysing"
+
+
+ *: "Vis løysing"
+
+
+
+ id: LANG_QUIT_WITHOUT_SAVING
+ desc:
+ user: core
+
+ *: "Quit without saving"
+
+
+ *: "Avslutt utan å lagra"
+
+
+ *: "Avslutt utan å lagra"
+
+
+
+ id: LANG_GENERATING_MAZE
+ desc: Amaze game
+ user: core
+
+ *: "Generating maze..."
+
+
+ *: "Lagar labyrint..."
+
+
+ *: "Lagar labyrint"
+
+
+
+ id: LANG_YOU_WIN
+ desc: Success in game
+ user: core
+
+ *: "You win!"
+
+
+ *: "Du vann!"
+
+
+ *: "Du vann!"
+
+
+
+ id: LANG_YOU_CHEATED
+ desc: Cheated in game
+ user: core
+
+ *: "You cheated!"
+
+
+ *: "Du juksa!"
+
+
+ *: "Du juksa!"
+
+
+
+ id: LANG_DIFFICULTY_EASY
+ desc: Game difficulty
+ user: core
+
+ *: "Easy"
+
+
+ *: "Lett"
+
+
+ *: "Lett"
+
+
+
+ id: LANG_DIFFICULTY_MEDIUM
+ desc: Game difficulty
+ user: core
+
+ *: "Medium"
+
+
+ *: "Middels"
+
+
+ *: "Middels"
+
+
+
+ id: LANG_DIFFICULTY_HARD
+ desc: Game difficulty
+ user: core
+
+ *: "Hard"
+
+
+ *: "Vanskeleg"
+
+
+ *: "Vanskeleg"
+
+
+
+ id: LANG_DIFFICULTY_EXPERT
+ desc: Game difficulty
+ user: core
+
+ *: "Expert"
+
+
+ *: "Ekspert"
+
+
+ *: "Ekspert"
+
+
+
+ id: LANG_LEGAL_NOTICES
+ desc: in system menu
+ user: core
+
+ *: "Legal Notices"
+
+
+ *: "Juridiske merknader"
+
+
+ *: "Juridiske merknader"
+
+
+
+ id: LANG_ERROR_FORMATSTR
+ desc: for general use
+ user: core
+
+ *: "Error: %s"
+
+
+ *: "Feil: %s"
+
+
+ *: "Feil"
+
+
+
+ id: LANG_MIKMOD_SETTINGS
+ desc: mikmod plugin
+ user: core
+
+ *: "Mikmod Settings"
+
+
+ *: "Mikmod-innstillingar"
+
+
+ *: "Mikmod-innstillingar"
+
+
+
+ id: VOICE_INVALID_VOICE_FILE
+ desc: played if the voice file fails to load
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Ugyldig stemmefil"
+
+
+
+ id: VOICE_LANG_NAME
+ desc: Spoken name of the language
+ user: core
+
+ *: ""
+
+
+ *: ""
+
+
+ *: "Nynorsk"
+
+
+
+ id: LANG_PERCENT_FORMAT
+ desc: percent formatting ( `10%` is default , for `10 %` use '%ld %%' , for `%10` use '%%%ld' and so on)
+ user: core
+
+ *: "%ld%%"
+
+
+ *: "%ld%%"
+
+
+ *: none
+
+
+
+ id: LANG_CHOOSE_FILE
+ desc: file_picker plugin ask user to select a file
+ user: core
+
+ *: "Choose File"
+
+
+ *: "Vel fil"
+
+
+ *: "Vel fil"
+
+
+
+ id: LANG_DISABLE_MAINMENU_SCROLLING
+ desc: Disable main menu scrolling
+ user: core
+
+ *: "Disable main menu scrolling"
+
+
+ *: "Skru av hovudmenyrulling"
+
+
+ *: "Skru av hovudmenyrulling"
+
+
+
+ id: LANG_REMAINING
+ desc: Playing Time
+ user: core
+
+ *: "Remaining"
+
+
+ *: "Står att"
+
+
+ *: "Står att"
+
+
+
+ id: LANG_SHOW_FIRST_LETTER
+ desc: Database menu
+ user: core
+
+ *: "First Letter"
+
+
+ *: "Førebokstav"
+
+
+ *: "Førebokstav"
+
+
+
+ id: LANG_SHOW_BY_FIRST_LETTER
+ desc: Database menu
+ user: core
+
+ *: "By First Letter..."
+
+
+ *: "Etter førebokstav"
+
+
+ *: "Etter førebokstav"
+
+
+
+ id: LANG_SHOW_ARTISTS_BY_FIRST_LETTER
+ desc: Database menu
+ user: core
+
+ *: "Artists by First Letter"
+
+
+ *: "Artistar etter førebokstav"
+
+
+ *: "Artistar etter førebokstav"
+
+
+
+ id: LANG_SHOW_ALBUM_ARTISTS_BY_FIRST_LETTER
+ desc: Database menu
+ user: core
+
+ *: "Album Artists by First Letter"
+
+
+ *: "Albumartistar etter førebokstav"
+
+
+ *: "Albumartistar etter førebokstav"
+
+
+
+ id: LANG_SHOW_ALBUMS_BY_FIRST_LETTER
+ desc: Database menu
+ user: core
+
+ *: "Albums by First Letter"
+
+
+ *: "Album etter førebokstav"
+
+
+ *: "Album etter førebokstav"
+
+
+
+ id: LANG_SHOW_TRACKS_BY_FIRST_LETTER
+ desc: Database menu
+ user: core
+
+ *: "Tracks by First Letter"
+
+
+ *: "Spor etter førebokstav"
+
+
+ *: "Spor etter førebokstav"
+
+
+
+ id: LANG_ARTISTS
+ desc: Database menu
+ user: core
+
+ *: "Artists"
+
+
+ *: "Artistar"
+
+
+ *: "Artistar"
+
+
+
+ id: LANG_ALBUMS
+ desc: Database menu
+ user: core
+
+ *: "Albums"
+
+
+ *: "Album"
+
+
+ *: "Album"
+
+
+
+ id: LANG_TRACKS
+ desc: Database menu
+ user: core
+
+ *: "Tracks"
+
+
+ *: "Spor"
+
+
+ *: "Spor"
+
+
+
+ id: LANG_SHUFFLE_SONGS
+ desc: Database menu
+ user: core
+
+ *: "Shuffle Songs"
+
+
+ *: "Spel songar tilfeldig"
+
+
+ *: "Spel songar tilfeldig"
+
+
+
+ id: LANG_FILENAME
+ desc: Database and recording menus
+ user: core
+
+ *: "Filename"
+
+
+ *: "Filnamn"
+
+
+ *: "Filnamn"
+
+
+
+ id: LANG_TITLE_WITH_DURATION
+ desc: Database menu
+ user: core
+
+ *: "Title (with track duration)"
+
+
+ *: "Tittel (med tid)"
+
+
+ *: "Tittel med tid"
+
+
+
+ id: LANG_USER_RATING
+ desc: Database menu
+ user: core
+
+ *: "User Rating"
+
+
+ *: "Brukarrangering"
+
+
+ *: "Brukarrangering"
+
+
+
+ id: LANG_SEARCH
+ desc: Database menu
+ user: core
+
+ *: "Search"
+
+
+ *: "Søk"
+
+
+ *: "Søk"
+
+
+
+ id: LANG_SEARCH_BY
+ desc: Database menu
+ user: core
+
+ *: "Search by..."
+
+
+ *: "Søk etter..."
+
+
+ *: "Søk etter"
+
+
+
+ id: LANG_RECENTLY_ADDED
+ desc: Database menu
+ user: core
+
+ *: "Recently Added"
+
+
+ *: "Nyst lagt til"
+
+
+ *: "Nyst lagt til"
+
+
+
+ id: LANG_PLAYBACK_HISTORY
+ desc: Database menu
+ user: core
+
+ *: "Playback History"
+
+
+ *: "Sist spelt"
+
+
+ *: "Sist spelt"
+
+
+
+ id: LANG_CUSTOM_MENU
+ desc: Database menu
+ user: core
+
+ *: "Custom menu"
+
+
+ *: "Eigen meny"
+
+
+ *: "Eigen meny"
+
+
+
+ id: LANG_SAME_AS_CURRENT
+ desc: Database menu
+ user: core
+
+ *: "Same as currently played track"
+
+
+ *: "Same som noverande spor"
+
+
+ *: "Same som noverande spor"
+
+
+
+ id: LANG_DIRECTORY
+ desc: Database menu
+ user: core
+
+ *: "Directory"
+
+
+ *: "Mappe"
+
+
+ *: "Mappe"
+
+
+
+ id: LANG_ALBUMS_BY_YEAR
+ desc: Database menu
+ user: core
+
+ *: "Albums by Year"
+
+
+ *: "Album etter år"
+
+
+ *: "Album etter år"
+
+
+
+ id: LANG_ALBUMS_BETWEEN_YEARS
+ desc: Database menu
+ user: core
+
+ *: "Albums between Years"
+
+
+ *: "Album mellom åra"
+
+
+ *: "Album mellom åra"
+
+
+
+ id: LANG_ARTISTS_BETWEEN_YEARS
+ desc: Database menu
+ user: core
+
+ *: "Artists between Years"
+
+
+ *: "Artistar mellom åra"
+
+
+ *: "Artistar mellom åra"
+
+
+
+ id: LANG_HISTORY_MOST_PLAYED
+ desc: Database menu
+ user: core
+
+ *: "Most played (Plays|Score)"
+
+
+ *: "Mest spelte (Avspelingar|Vurdering)"
+
+
+ *: "Mest spelte etter avspelingar og så vurdering"
+
+
+
+ id: LANG_HISTORY_RECENTLY_PLAYED_TRACKS
+ desc: Database menu
+ user: core
+
+ *: "Recently played tracks"
+
+
+ *: "Sist spelte spor"
+
+
+ *: "Sist spelte spor"
+
+
+
+ id: LANG_HISTORY_NEVER_PLAYED_TRACKS
+ desc: Database menu
+ user: core
+
+ *: "Never played tracks"
+
+
+ *: "Aldri spelte spor"
+
+
+ *: "Aldri spelte spor"
+
+
+
+ id: LANG_HISTORY_FAVOURITE_ARTISTS
+ desc: Database menu
+ user: core
+
+ *: "Favourite artists"
+
+
+ *: "Favorittartist"
+
+
+ *: "Favorittartist"
+
+
+
+ id: LANG_HISTORY_FAVOURITE_ALBUMS
+ desc: Database menu
+ user: core
+
+ *: "Favourite albums"
+
+
+ *: "Favorittalbum"
+
+
+ *: "Favorittalbum"
+
+
+
+ id: LANG_HISTORY_RECENT_FAVOURITES
+ desc: Database menu
+ user: core
+
+ *: "Recent favourites"
+
+
+ *: "Siste favorittar"
+
+
+ *: "Siste favorittar"
+
+
+
+ id: LANG_HISTORY_NEW_FAVOURITES
+ desc: Database menu
+ user: core
+
+ *: "New favourites"
+
+
+ *: "Nye favorittar"
+
+
+ *: "Nye favorittar"
+
+
+
+ id: LANG_HISTORY_FORGOTTEN_FAVOURITES
+ desc: Database menu
+ user: core
+
+ *: "Forgotten favourites"
+
+
+ *: "Gløymde favorittar"
+
+
+ *: "Gløymde favorittar"
+
+
+
+ id: LANG_TRACKS_BY
+ desc: Database menu
+ user: core
+
+ *: "Tracks by"
+
+
+ *: "Spor etter"
+
+
+ *: "Spor etter"
+
+
+
+ id: LANG_VIEW_ALBUMART
+ desc: WPS context menu
+ user: core
+
+ *: "View Album Art"
+
+
+ *: "Vis omslag"
+
+
+ *: "Vis omslag"
+
+
+
+ id: LANG_TAGNAVI_ALL_TRACKS_SORTED_BY_ALBUM
+ desc: "[By album]" entry in tag browser
+ user: core
+
+ *: "[By album]"
+
+
+ *: "[Etter album]"
+
+
+ *: "Alle spor sorterte etter album"
+
+
+
+ id: LANG_HP_LO_SELECT
+ desc: Output Select
+ user: core
+
+ *: none
+ erosqnative: "Output Select"
+
+
+ *: none
+ erosqnative: "Vel utgang"
+
+
+ *: none
+ erosqnative: "Vel utgang"
+
+
+
+ id: LANG_HEADPHONE
+ desc: in settings_menu
+ user: core
+
+ *: none
+ erosqnative: "Headphone"
+
+
+ *: none
+ erosqnative: "Øyreklokker"
+
+
+ *: none
+ erosqnative: "Øyreklokker"
+
+
+
+ id: LANG_LINEOUT
+ desc: in settings_menu
+ user: core
+
+ *: none
+ erosqnative,lineout_poweroff: "Line Out"
+
+
+ *: none
+ erosqnative,lineout_poweroff: "Lineutgang"
+
+
+ *: none
+ erosqnative,lineout_poweroff: "Lineutgang"
+
+
+
+ id: LANG_FONT_LOAD_ERROR
+ desc: Displayed when font loading fails
+ user: core
+
+ *: "Unable to load font: (%s)"
+
+
+ *: "Greidde ikkje lasta skrift: (%s)"
+
+
+ *: "Greidde ikkje lasta skrift"
+
+
+
+ id: LANG_LOGGING
+ desc: playback logging
+ user: core
+
+ *: "Logging"
+
+
+ *: "~Logging"
+
+
+ *: "~logging"
+
+
+
+ id: LANG_VIEWLOG
+ desc: view Log
+ user: core
+
+ *: "View log"
+
+
+ *: "Sjå loggen"
+
+
+ *: "sjå loggen"
+
+
+
+ id: LANG_REPLAY_FINISHED_PLAYLIST
+ desc: Resume playback of finished playlist
+ user: core
+
+ *: "Playlist finished. Play again?"
+
+
+ *: "Spelelista er ferdig. Spel på nytt?"
+
+
+ *: "Spelelista er ferdig. Spel på nytt?"
+
+
+
+ id: LANG_SORT_PLAYLISTS
+ desc: playlists sorting setting
+ user: core
+
+ *: "Sort Playlists"
+
+
+ *: "Sorter spelelister"
+
+
+ *: "sorter spelelister"
+
+
+
+ id: LANG_USE_LED_INDICATORS
+ desc: LED indicators setting
+ user: core
+
+ *: none
+ general_purpose_led: "Use LED indicators"
+
+
+ *: none
+ general_purpose_led: "Bruk LED-indikatorar"
+
+
+ *: none
+ general_purpose_led: "Bruk LED-indikatorar"
+
+
+
+ id: LANG_KEEP_DIRECTORY
+ desc: file browser setting
+ user: core
+
+ *: "Always remember last folder"
+
+
+ *: "Alltid hugs siste mappe"
+
+
+ *: "Alltid hugs siste mappe"
+
+
diff --git a/apps/lang/russian.lang b/apps/lang/russian.lang
index 01df4bb766..3866b360b3 100644
--- a/apps/lang/russian.lang
+++ b/apps/lang/russian.lang
@@ -13142,20 +13142,6 @@
*: "в сторону ферзя"
-
- id: LANG_PLAYTIME_ERROR
- desc: playing time screen
- user: core
-
- *: "Error while gathering info"
-
-
- *: "Сбой при сборе информации"
-
-
- *: "Сбой при сборе информации"
-
-
id: LANG_CLEAR_ALL_RESUMES
desc: in the mpegplayer settings menu
@@ -14389,7 +14375,7 @@
user: core
*: "Press LEFT to cancel."
- android,hifietma*,zenvision: "Press BACK to cancel."
+ android,hifietma*: "Press BACK to cancel."
cowond2,creativezenxfi2,ibassodx50,ibassodx90,mrobe500,ondavx747: "Press POWER to cancel."
ihifi760,ihifi960: "Double tap RETURN to cancel."
ihifi770,ihifi770c,ihifi800: "Press HOME to cancel."
@@ -14404,7 +14390,7 @@
*: "Нажмите ВЛЕВО для отмены."
- android,hifietma*,zenvision: "Нажмите НАЗАД для отмены."
+ android,hifietma*: "Нажмите НАЗАД для отмены."
cowond2,creativezenxfi2,ibassodx50,ibassodx90,mrobe500,ondavx747: "Нажмите ВКЛ. для отмены."
ihifi760,ihifi960: "Дважды нажмите ВОЗВРАТ для отмены."
ihifi770,ihifi770c,ihifi800: "Нажмите ДОМОЙ для отмены."
@@ -14419,7 +14405,7 @@
*: "Нажмите кнопку Влево для отмены."
- android,hifietma*,zenvision: "Нажмите кнопку Назад для отмены."
+ android,hifietma*: "Нажмите кнопку Назад для отмены."
cowond2,creativezenxfi2,ibassodx50,ibassodx90,mrobe500,ondavx747: "Нажмите кнопку включения для отмены."
ihifi760,ihifi960: "Дважды нажмите кнопку Назад для отмены."
ihifi770,ihifi770c,ihifi800: "Нажмите кнопку Домой для отмены."
@@ -15790,13 +15776,13 @@
id: LANG_VOICED_DATE_FORMAT
- desc: format string for how dates will be read back. Y == 4-digit year, A == month name, m == numeric month, d == numeric day. For example, "AdY" will read "January 21 2021"
+ desc: format string for how dates will be read back. Y == 4-digit year (grouped), y == 4-digit year (numeric), A == month name, m == numeric month, d == numeric day. For example, for 2021-01-05, "AdY" will be voiced as "January 5 twenty twenty-one" and "dmy" will be voiced as "5 1 two thousand twenty one
user: core
*: "dAY"
- *: "~dAY"
+ *: "dAy"
*: ""
@@ -15872,20 +15858,6 @@
*: "Браузер по умолчанию"
-
- id: LANG_AMAZE_MENU
- desc: Amaze game
- user: core
-
- *: "Amaze Main Menu"
-
-
- *: "Главное меню Amaze"
-
-
- *: "Главное меню Amaze"
-
-
id: LANG_SET_MAZE_SIZE
desc: Maze size in Amaze game
@@ -16138,34 +16110,6 @@
*: "Настройки Mik mod"
-
- id: LANG_MIKMOD_MENU
- desc: mikmod plugin
- user: core
-
- *: "Mikmod Menu"
-
-
- *: "Меню Mikmod"
-
-
- *: "Меню Mik mod"
-
-
-
- id: LANG_CHESSBOX_MENU
- desc: chessbox plugin
- user: core
-
- *: "Chessbox Menu"
-
-
- *: "Меню Chessbox"
-
-
- *: "Меню Chessbox"
-
-
id: VOICE_INVALID_VOICE_FILE
desc: played if the voice file fails to load
@@ -16999,3 +16943,48 @@
*: "Все трэки сортируются по альбому"
+
+ id: LANG_ANNOUNCE_STATUS
+ desc: announnnce_status plugin
+ user: core
+
+ *: "Announce Status"
+
+
+ *: "Объявлять статус"
+
+
+ *: "Объявлять статус"
+
+
+
+ id: LANG_USE_LED_INDICATORS
+ desc: LED indicators setting
+ user: core
+
+ *: none
+ general_purpose_led: "Use LED indicators"
+
+
+ *: none
+ general_purpose_led: "Использовать LED индикаторы"
+
+
+ *: none
+ general_purpose_led: "Использовать LED индикаторы"
+
+
+
+ id: LANG_KEEP_DIRECTORY
+ desc: file browser setting
+ user: core
+
+ *: "Always remember last folder"
+
+
+ *: "Всегда запоминать последнюю папку"
+
+
+ *: "Всегда запоминать последнюю папку"
+
+
diff --git a/apps/misc.c b/apps/misc.c
index 40a55d032f..a44f106fb9 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -866,20 +866,10 @@ void check_bootfile(bool do_rolo)
#endif
#endif
-/* check range, set volume and save settings */
+/* set volume and save settings */
void setvol(void)
{
- const int min_vol = sound_min(SOUND_VOLUME);
- const int max_vol = sound_max(SOUND_VOLUME);
- int volume = global_status.volume;
- if (volume < min_vol)
- volume = min_vol;
- if (volume > max_vol)
- volume = max_vol;
- if (volume > global_settings.volume_limit)
- volume = global_settings.volume_limit;
-
- sound_set_volume(volume);
+ sound_set_volume(global_status.volume);
global_status.last_volume_change = current_tick;
status_save(false);
}
diff --git a/apps/plugins/disktidy.config b/apps/plugins/disktidy.config
index a5f31df5e7..98bb77e6e6 100644
--- a/apps/plugins/disktidy.config
+++ b/apps/plugins/disktidy.config
@@ -19,9 +19,13 @@
.Trashes/: no
.Spotlight-V100/: no
.DS_Store: no
+ __MACOSX/: no
._*: no
< Linux/BSD >: no
.Trash-*/: no
.dolphinview: no
.d3lphinview: no
+< Android >: no
+ Android/: no
+ LOST.DIR/: no
< Other >: no
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c
index 2689e96ba1..d19ff7888b 100644
--- a/apps/plugins/midi/midiplay.c
+++ b/apps/plugins/midi/midiplay.c
@@ -381,6 +381,8 @@
struct MIDIfile * mf IBSS_ATTR;
+int sample_rate IBSS_ATTR;
+int max_voices IBSS_ATTR;
int number_of_samples IBSS_ATTR; /* the number of samples in the current tick */
int playing_time IBSS_ATTR; /* How many seconds into the file have we been playing? */
int samples_this_second IBSS_ATTR; /* How many samples produced during this second so far? */
@@ -490,11 +492,56 @@ static void get_more(const void** start, size_t* size)
*size = samples_in_buf*sizeof(int32_t);
}
+UNUSED_ATTR static int find_min_sampr_ge_22(void)
+{
+ const struct pcm_sink_caps* caps = rb->pcm_current_sink_caps();
+ int ret = caps->samprs[0];
+ for (size_t i = 1; i < caps->num_samprs; i += 1)
+ {
+ /* caps->samprs is in descending order */
+ if (caps->samprs[i] >= SAMPR_22)
+ ret = caps->samprs[i];
+ else
+ break;
+ }
+ return ret;
+}
+
static int midimain(const void * filename)
{
int a, notes_used, vol;
bool is_playing = true; /* false = paused */
+ /* decide sample_rate and max_voices */
+#if defined(SIMULATOR) /* Simulator requires 44100Hz, and we can afford to use more voices */ || \
+ (CONFIG_PLATFORM & PLATFORM_HOSTED) /* All hosted targets have CPU to spare */ || \
+ defined(CPU_MIPS) /* All MIPS targets are pretty fast */
+ sample_rate = SAMPR_44;
+ max_voices = 48;
+#elif defined(CPU_PP)
+ /* Some of the pp based targets can't handle too many voices
+ mainly because they have to use 44100Hz sample rate, this could be
+ improved to increase max_voices for targets that can do 22kHz */
+ sample_rate = find_min_sampr_ge_22();
+ max_voices = sample_rate == SAMPR_22 ? 24 : 16;
+#elif defined(CPU_ARM)
+ /* ARMv4 targets are slow, but treat everything else as fast */
+#if (ARM_ARCH >= 6)
+ sample_rate = SAMPR_44;
+ max_voices = 32;
+#elif (ARM_ARCH >= 5)
+ sample_rate = find_min_sampr_ge_22();
+ max_voices = 32;
+#else /* ie v4 */
+ sample_rate = find_min_sampr_ge_22();
+ max_voices = sample_rate == SAMPR_22 ? 24 : 16;
+#endif
+#else /* !CPU_ARM */
+ /* Treat everything else as slow */
+ sample_rate = find_min_sampr_ge_22();
+ max_voices = sample_rate == SAMPR_22 ? 24 : 16;
+#endif
+
#if defined(HAVE_ADJUSTABLE_CPU_FREQ)
rb->cpu_boost(true);
#endif
@@ -537,7 +584,7 @@ static int midimain(const void * filename)
rb->dsp_set_timestretch(PITCH_SPEED_100);
#endif
rb->dsp_configure(dsp, DSP_SET_SAMPLE_DEPTH, 22);
- rb->dsp_configure(dsp, DSP_SET_FREQUENCY, SAMPLE_RATE); /* 44100 22050 11025 */
+ rb->dsp_configure(dsp, DSP_SET_FREQUENCY, sample_rate); /* 44100 22050 11025 */
rb->dsp_configure(dsp, DSP_SET_STEREO_MODE, STEREO_INTERLEAVED);
/*
@@ -553,14 +600,14 @@ static int midimain(const void * filename)
midi_debug("Okay, starting sequencing");
bpm = mf->div*1000000/tempo;
- number_of_samples = SAMPLE_RATE/bpm;
+ number_of_samples = sample_rate/bpm;
/* Skip over any junk in the beginning of the file, so start playing */
/* after the first note event */
do
{
notes_used = 0;
- for (a = 0; a < MAX_VOICES; a++)
+ for (a = 0; a < max_voices; a++)
if (voices[a].isUsed)
notes_used++;
tick();
diff --git a/apps/plugins/midi/midiutil.c b/apps/plugins/midi/midiutil.c
index b9e57a405b..7438455ca3 100644
--- a/apps/plugins/midi/midiutil.c
+++ b/apps/plugins/midi/midiutil.c
@@ -35,7 +35,7 @@ struct GPatch * gusload(char *);
struct GPatch * patchSet[128];
struct GPatch * drumSet[128];
-struct SynthObject voices[MAX_VOICES] IBSS_ATTR;
+struct SynthObject voices[48] IBSS_ATTR;
static void *alloc(int size)
{
diff --git a/apps/plugins/midi/midiutil.h b/apps/plugins/midi/midiutil.h
index ee9769b108..71da7461e3 100644
--- a/apps/plugins/midi/midiutil.h
+++ b/apps/plugins/midi/midiutil.h
@@ -27,67 +27,6 @@
#define NBUF 2
#define MAX_SAMPLES 512
-#ifdef SIMULATOR
-
-/* Simulator requires 44100Hz, and we can afford to use more voices */
-#define SAMPLE_RATE SAMPR_44
-#define MAX_VOICES 48
-
-#elif (CONFIG_PLATFORM & PLATFORM_HOSTED)
-
-/* All hosted targets have CPU to spare */
-#define MAX_VOICES 48
-#define SAMPLE_RATE SAMPR_44
-
-#elif defined(CPU_PP)
-
-/* Some of the pp based targets can't handle too many voices
- mainly because they have to use 44100Hz sample rate, this could be
- improved to increase MAX_VOICES for targets that can do 22kHz */
-#define SAMPLE_RATE HW_SAMPR_MIN_GE_22
-#if HW_SAMPR_CAPS & SAMPR_CAP_22
-#define MAX_VOICES 24 /* General MIDI minimum */
-#else
-#define MAX_VOICES 16
-#endif
-
-#elif defined(CPU_MIPS)
-
-/* All MIPS targets are pretty fast */
-#define MAX_VOICES 48
-#define SAMPLE_RATE SAMPR_44
-
-#elif defined(CPU_ARM)
-
-/* ARMv4 targets are slow, but treat everything else as fast */
-
-#if (ARM_ARCH >= 6)
-#define MAX_VOICES 32
-#define SAMPLE_RATE SAMPR_44
-#elif (ARM_ARCH >= 5)
-#define MAX_VOICES 32
-#define SAMPLE_RATE HW_SAMPR_MIN_GE_22
-#else /* ie v4 */
-#define SAMPLE_RATE HW_SAMPR_MIN_GE_22
-#if HW_SAMPR_CAPS & SAMPR_CAP_22
-#define MAX_VOICES 24 /* General MIDI minimum */
-#else
-#define MAX_VOICES 16
-#endif
-#endif /* ARM_ARCH < 5*/
-
-#else /* !CPU_ARM */
-
-/* Treat everything else as slow */
-#define SAMPLE_RATE HW_SAMPR_MIN_GE_22
-#if HW_SAMPR_CAPS & SAMPR_CAP_22
-#define MAX_VOICES 24 /* General MIDI minimum */
-#else
-#define MAX_VOICES 16
-#endif
-
-#endif /* Wrap it up. */
-
#define BYTE unsigned char
/* Data chunk ID types, returned by readID() */
@@ -189,7 +128,7 @@ void * readData(int file, int len);
#define malloc(n) my_malloc(n)
void * my_malloc(int size);
-extern struct SynthObject voices[MAX_VOICES];
+extern struct SynthObject voices[48]; /* 48: maximum possible max_voices */
extern int chVol[16]; /* Channel volume */
extern int chPan[16]; /* Channel panning */
@@ -207,6 +146,8 @@ extern struct GPatch * drumSet[128];
extern struct MIDIfile * mf;
+extern int sample_rate;
+extern int max_voices;
extern int number_of_samples;
extern int playing_time IBSS_ATTR;
extern int samples_this_second IBSS_ATTR;
diff --git a/apps/plugins/midi/sequencer.c b/apps/plugins/midi/sequencer.c
index d35a057c32..ce4aa6628a 100644
--- a/apps/plugins/midi/sequencer.c
+++ b/apps/plugins/midi/sequencer.c
@@ -65,7 +65,7 @@ static inline void setVol(int ch, int vol)
/* If channel volume changes, we need to recalculate the volume scale */
/* factor for all voices active on this channel */
- for (a = 0; a < MAX_VOICES; a++)
+ for (a = 0; a < max_voices; a++)
if (voices[a].ch == ch)
setVolScale(a);
}
@@ -156,7 +156,7 @@ static void findDelta(struct SynthObject * so, int ch, int note)
delta = (((freqtable[note+chPBNoteOffset[ch]]))); /* anywhere from 8000 to 8000000 */
delta = delta * wf->sampRate; /* approx 20000 - 44000 but can vary with tuning */
delta = (delta * chPBFractBend[ch]); /* approx 60000 - 70000 */
- delta = delta / (SAMPLE_RATE); /* 44100 or 22050 */
+ delta = delta / (sample_rate); /* 44100 or 22050 */
delta = delta / (wf->rootFreq); /* anywhere from 8000 to 8000000 */
/* Pitch bend is encoded as a fractional of 16 bits, hence the 16 */
@@ -167,7 +167,7 @@ static void findDelta(struct SynthObject * so, int ch, int note)
static inline void computeDeltas(int ch)
{
int a;
- for (a = 0; a < MAX_VOICES; a++)
+ for (a = 0; a < max_voices; a++)
{
if (voices[a].isUsed && voices[a].ch == ch)
{
@@ -210,7 +210,7 @@ static inline void pressNote(int ch, int note, int vol)
if(ch == 15) return;
*/
int a;
- for (a = 0; a < MAX_VOICES; a++)
+ for (a = 0; a < max_voices; a++)
{
if (voices[a].ch == ch && voices[a].note == note)
break;
@@ -218,7 +218,7 @@ static inline void pressNote(int ch, int note, int vol)
if (!voices[a].isUsed)
break;
}
- if (a == MAX_VOICES)
+ if (a == max_voices)
{
// midi_debug("\nVoice kill");
// midi_debug("\nToo many voices playing at once. No more left");
@@ -226,7 +226,7 @@ static inline void pressNote(int ch, int note, int vol)
// for(a=0; a<48; a++)
// midi_debug("\n#%d Ch=%d Note=%d curRate=%d curOffset=%d curPoint=%d targetOffset=%d", a, voices[a].ch, voices[a].note, voices[a].curRate, voices[a].curOffset, voices[a].curPoint, voices[a].targetOffset);
lastKill++;
- if (lastKill == MAX_VOICES)
+ if (lastKill == max_voices)
lastKill = 0;
a = lastKill;
// return; /* None available */
@@ -263,7 +263,7 @@ static inline void pressNote(int ch, int note, int vol)
struct GWaveform * wf = drumSet[note]->waveforms[0];
voices[a].wf = wf;
- voices[a].delta = (((freqtable[note]<rootFreq) * wf->sampRate / SAMPLE_RATE);
+ voices[a].delta = (((freqtable[note]<rootFreq) * wf->sampRate / sample_rate);
if (wf->mode & 28)
// midi_debug("\nWoah, a drum patch has a loop. Stripping the loop...");
wf->mode = wf->mode & (255-28);
@@ -285,7 +285,7 @@ static void releaseNote(int ch, int note)
return;
int a;
- for (a = 0; a < MAX_VOICES; a++)
+ for (a = 0; a < max_voices; a++)
{
if (voices[a].ch == ch && voices[a].note == note)
{
@@ -432,7 +432,7 @@ int tick(void)
tempo = (((short)e->evData[0])<<16)|(((short)e->evData[1])<<8)|(e->evData[2]);
/* midi_debug("\nMeta-Event: Tempo Set = %d", tempo); */
bpm=mf->div*1000000/tempo;
- number_of_samples=SAMPLE_RATE/bpm;
+ number_of_samples=sample_rate/bpm;
}
}
@@ -446,9 +446,9 @@ int tick(void)
samples_this_second += number_of_samples;
- while (samples_this_second >= SAMPLE_RATE)
+ while (samples_this_second >= sample_rate)
{
- samples_this_second -= SAMPLE_RATE;
+ samples_this_second -= sample_rate;
playing_time++;
}
@@ -471,7 +471,7 @@ void seekBackward(int nsec)
/* Set the tempo to defalt */
bpm = mf->div*1000000/tempo;
- number_of_samples = SAMPLE_RATE/bpm;
+ number_of_samples = sample_rate/bpm;
/* Reset the tracks to start */
rewindFile();
@@ -484,7 +484,7 @@ void seekBackward(int nsec)
do
{
notes_used = 0;
- for (a = 0; a < MAX_VOICES; a++)
+ for (a = 0; a < max_voices; a++)
if (voices[a].isUsed)
notes_used++;
tick();
diff --git a/apps/plugins/midi/synth.c b/apps/plugins/midi/synth.c
index f199d544e5..3143e61a4f 100644
--- a/apps/plugins/midi/synth.c
+++ b/apps/plugins/midi/synth.c
@@ -46,7 +46,7 @@ static void readTextBlock(int file, char * buf)
void resetControllers()
{
int a=0;
- for(a=0; amemset(buf_ptr, 0, nsamples * 2 * sizeof(int32_t));
- for(i=0; i < MAX_VOICES; i++)
+ for(i=0; i < max_voices; i++)
{
voicept=&voices[i];
if(voicept->isUsed)
diff --git a/apps/plugins/pacbox/pacbox.c b/apps/plugins/pacbox/pacbox.c
index a8208f1e51..34f103039d 100644
--- a/apps/plugins/pacbox/pacbox.c
+++ b/apps/plugins/pacbox/pacbox.c
@@ -395,19 +395,19 @@ static void start_sound(void)
#endif
/* Get the closest rate >= to what is preferred */
+ const struct pcm_sink_caps* caps = rb->pcm_current_sink_caps();
sr_index = rb->round_value_to_list32(PREFERRED_SAMPLING_RATE,
- rb->hw_freq_sampr, HW_NUM_FREQ, false);
+ caps->samprs, caps->num_samprs, false);
- if (rb->hw_freq_sampr[sr_index] < PREFERRED_SAMPLING_RATE
- && sr_index > 0)
+ if (caps->samprs[sr_index] < PREFERRED_SAMPLING_RATE && sr_index > 0)
{
/* Round up */
sr_index--;
}
- wsg3_set_sampling_rate(rb->hw_freq_sampr[sr_index]);
+ wsg3_set_sampling_rate(caps->samprs[sr_index]);
- rb->mixer_set_frequency(rb->hw_freq_sampr[sr_index]);
+ rb->mixer_set_frequency(caps->samprs[sr_index]);
rb->mixer_channel_play_data(PCM_MIXER_CHAN_PLAYBACK, get_more, NULL, 0);
sound_playing = true;
diff --git a/apps/plugins/pdbox/pdbox.c b/apps/plugins/pdbox/pdbox.c
index 08236bfeba..78d6037fa6 100644
--- a/apps/plugins/pdbox/pdbox.c
+++ b/apps/plugins/pdbox/pdbox.c
@@ -188,6 +188,26 @@ enum plugin_status plugin_start(const void* parameter)
/* Set audio API. */
sys_set_audio_api(API_ROCKBOX);
+ /* Determine sample rate. */
+#if defined(SIMULATOR)
+#define PREFERRED_SAMPR SAMPR_44
+#else
+#define PREFERRED_SAMPR SAMPR_22
+#endif
+ int samplerate;
+ {
+ int i;
+ const struct pcm_sink_caps* caps = rb->pcm_current_sink_caps();
+ for (i = 0; i < caps->num_samprs; i++) {
+ if (caps->samprs[i] == PREFERRED_SAMPR)
+ break;
+ }
+ if (i == caps->num_samprs)
+ samplerate = SAMPR_44;
+ else
+ samplerate = caps->samprs[i];
+ }
+
/* Initialize audio subsystem. */
sys_open_audio(0, /* No sound input yet */
sys_soundindevlist,
@@ -197,7 +217,7 @@ enum plugin_status plugin_start(const void* parameter)
sys_soundoutdevlist,
-1, /* Use the default amount (2) of channels */
sys_choutlist,
- PD_SAMPLERATE, /* Sample rate */
+ samplerate, /* Sample rate */
DEFAULTADVANCE, /* Scheduler advance */
1 /* Enable */);
diff --git a/apps/plugins/pdbox/pdbox.h b/apps/plugins/pdbox/pdbox.h
index 8dcb152479..36fb6c4fa8 100644
--- a/apps/plugins/pdbox/pdbox.h
+++ b/apps/plugins/pdbox/pdbox.h
@@ -40,17 +40,9 @@
#define calloc(elements, elem_size) tlsf_calloc(elements, elem_size)
/* Audio declarations. */
-#ifdef SIMULATOR
- #define PD_SAMPLERATE 44100
-#elif (HW_SAMPR_CAPS & SAMPR_CAP_22)
- #define PD_SAMPLERATE 22050
-#elif (HW_SAMPR_CAPS & SAMPR_CAP_32)
- #define PD_SAMPLERATE 32000
-#elif (HW_SAMPR_CAPS & SAMPR_CAP_44)
- #define PD_SAMPLERATE 44100
-#else
- #error No sufficient sample rate available!
-#endif
+/* Maximum sample rate; used for buffer sizing.
+ * Actual rate is determined at runtime from pcm sink capabilities. */
+#define PD_SAMPLERATE 44100
#define PD_SAMPLES_PER_HZ ((PD_SAMPLERATE / HZ) + \
(PD_SAMPLERATE % HZ > 0 ? 1 : 0))
#define PD_OUT_CHANNELS 2
diff --git a/apps/plugins/xrick/system/syssnd_rockbox.c b/apps/plugins/xrick/system/syssnd_rockbox.c
index afd0766863..74edd98140 100644
--- a/apps/plugins/xrick/system/syssnd_rockbox.c
+++ b/apps/plugins/xrick/system/syssnd_rockbox.c
@@ -222,8 +222,8 @@ void syssnd_update(void)
if (!isAudioPlaying && fillCount > 0)
{
- rb->mixer_channel_play_data(PCM_MIXER_CHAN_PLAYBACK, get_more, NULL, 0);
isAudioPlaying = true;
+ rb->mixer_channel_play_data(PCM_MIXER_CHAN_PLAYBACK, get_more, NULL, 0);
}
}
}
diff --git a/docs/CREDITS b/docs/CREDITS
index fa6e3c3b44..06045db966 100644
--- a/docs/CREDITS
+++ b/docs/CREDITS
@@ -758,6 +758,8 @@ Ingmar Steen
Lourenço Soares
Yegor Chernyshov
Javier Gutiérrez Gertrúdix
+Sergey Puskov
+Eivind Ødegård
The libmad team
The wavpack team
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 14365f965e..888d296fd0 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -527,12 +527,11 @@ drivers/rds.c
#endif /* HAVE_RDS_CAP */
#endif /* PLATFORM_NATIVE */
#endif /* CONFIG_TUNER */
-#endif /* BOOTLOADER */
+#endif /* !BOOTLOADER */
/* Sound */
-sound.c
-
#ifndef BOOTLOADER
+sound.c
pcm_sampr.c
pcm.c
pcm_mixer.c
@@ -544,7 +543,7 @@ enc_base.c
#endif /* HAVE_RECORDING */
drivers/audio/audiohw-swcodec.c
-#endif /* BOOTLOADER */
+#endif /* !BOOTLOADER */
/* Audio codec */
#if !defined(BOOTLOADER)
diff --git a/firmware/export/config.h b/firmware/export/config.h
index 587da6c496..4cd178e405 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -1362,6 +1362,13 @@ Lyre prototype 1 */
//#define USB_HAS_INTERRUPT -- seems to be broken
#endif /* CONFIG_USBOTG */
+#if CONFIG_USBOTG == USBOTG_ARC
+#define USB_BATCH_SLOTS 16
+#else
+#define USB_BATCH_NON_NATIVE
+#define USB_BATCH_SLOTS 1
+#endif
+
/* define the class drivers to enable */
#ifdef BOOTLOADER
diff --git a/firmware/export/pcm_sink.h b/firmware/export/pcm_sink.h
index 27c0c31db1..77c64428f6 100644
--- a/firmware/export/pcm_sink.h
+++ b/firmware/export/pcm_sink.h
@@ -47,6 +47,7 @@ struct pcm_sink {
/* runtime states */
unsigned long pending_freq;
unsigned long configured_freq;
+ unsigned long pcm_is_ready;
};
enum pcm_sink_ids {
diff --git a/firmware/export/usb_drv.h b/firmware/export/usb_drv.h
index ea048a3cd1..6c8949200d 100644
--- a/firmware/export/usb_drv.h
+++ b/firmware/export/usb_drv.h
@@ -109,6 +109,23 @@ int usb_drv_deinit_endpoint(int endpoint);
int usb_drv_get_frame_number(void);
#endif
+/* batched request api is for workloads that perform very high-frequency,
+ * performance-sensitive isochronous transactions continuously.
+ * this api allows multiple transaction requests to be buffered in udc driver.
+ * so that it can maximize the controller's performance. */
+
+/* called when usb system requires more buffer */
+typedef void(*usb_drv_batch_get_more)(const void** ptr, size_t* len);
+
+/* prepare request queue */
+int usb_drv_batch_init(int ep, usb_drv_batch_get_more get_more);
+/* destroy request queue */
+int usb_drv_batch_deinit(void);
+/* start processing */
+int usb_drv_batch_start(void);
+/* stop processing */
+int usb_drv_batch_stop(void);
+
/* USB_STRING_INITIALIZER(u"Example String") */
#define USB_STRING_INITIALIZER(S) { \
sizeof(struct usb_string_descriptor) + sizeof(S) - sizeof(*S), \
diff --git a/firmware/pcm.c b/firmware/pcm.c
index 08383ace2d..eebcf70e1c 100644
--- a/firmware/pcm.c
+++ b/firmware/pcm.c
@@ -76,9 +76,6 @@
*
*/
-/* 'true' when all stages of pcm initialization have completed */
-static bool pcm_is_ready = false;
-
static struct pcm_sink* sinks[1] = {
[PCM_SINK_BUILTIN] = &builtin_pcm_sink,
};
@@ -142,7 +139,7 @@ void pcm_play_stop_int(void)
static void pcm_wait_for_init(void)
{
- while (!pcm_is_ready)
+ while (!sinks[cur_sink]->pcm_is_ready)
sleep(0);
}
@@ -205,7 +202,7 @@ void pcm_do_peak_calculation(struct pcm_peaks *peaks, bool active,
if (active)
{
struct pcm_sink* sink = sinks[cur_sink];
- if (sink->configured_freq == -1UL)
+ if (sink->configured_freq == -1U)
{
logf("not configured yet");
return;
@@ -251,9 +248,11 @@ void pcm_init(void)
logf("pcm_init");
for(size_t i = 0; i < ARRAYLEN(sinks); i += 1) {
- sinks[i]->pending_freq = sinks[i]->caps.default_freq;
- sinks[i]->configured_freq = -1UL;
- sinks[i]->ops.init();
+ struct pcm_sink* sink = sinks[i];
+ sink->pending_freq = sink->caps.default_freq;
+ sink->configured_freq = -1U;
+ sink->pcm_is_ready = false;
+ sink->ops.init();
}
}
@@ -263,15 +262,18 @@ void pcm_postinit(void)
logf("pcm_postinit");
for(size_t i = 0; i < ARRAYLEN(sinks); i += 1) {
- sinks[i]->ops.postinit();
+ struct pcm_sink* sink = sinks[i];
+ sink->ops.postinit();
+ sink->pcm_is_ready = true;
}
- pcm_is_ready = true;
+ /* Ensure mixer is in a sane state */
+ mixer_set_frequency(pcm_get_frequency());
}
bool pcm_is_initialized(void)
{
- return pcm_is_ready;
+ return sinks[cur_sink]->pcm_is_ready;
}
enum pcm_sink_ids pcm_current_sink(void)
diff --git a/firmware/pcm_mixer.c b/firmware/pcm_mixer.c
index d36560f149..a0d26fc86d 100644
--- a/firmware/pcm_mixer.c
+++ b/firmware/pcm_mixer.c
@@ -33,7 +33,7 @@
before the last samples are sent to the codec and so things are done in
parallel (as much as possible) with sending-out data. */
-static unsigned int mixer_sampr = HW_SAMPR_DEFAULT;
+static unsigned int mixer_sampr = -1U;
static unsigned int mix_frame_size = MIX_FRAME_SAMPLES*4;
/* Define this to nonzero to add a marker pulse at each frame start */
@@ -266,7 +266,10 @@ static void mixer_start_pcm(void)
#endif
/* Requires a shared global sample rate for all channels */
- pcm_set_frequency(mixer_sampr);
+ if (mixer_sampr == -1U)
+ mixer_sampr = pcm_get_frequency();
+ else
+ pcm_set_frequency(mixer_sampr);
/* Prepare initial frames and set up the double buffer */
mixer_buffer_callback(PCM_DMAST_STARTED);
diff --git a/firmware/sound.c b/firmware/sound.c
index 0e43f38f5a..06f6906b55 100644
--- a/firmware/sound.c
+++ b/firmware/sound.c
@@ -313,6 +313,16 @@ void sound_set_volume(int value)
return;
#ifndef BOOTLOADER
+ /* Apply limits */
+ const int min_vol = sound_min(SOUND_VOLUME);
+ const int max_vol = sound_max(SOUND_VOLUME);
+ if (value < min_vol)
+ value = min_vol;
+ if (value > max_vol)
+ value = max_vol;
+ if (value > global_settings.volume_limit)
+ value = global_settings.volume_limit;
+
global_status.volume = value;
#endif
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c
index a5a9ee0cee..b72070b312 100644
--- a/firmware/target/arm/as3525/pcm-as3525.c
+++ b/firmware/target/arm/as3525/pcm-as3525.c
@@ -189,7 +189,7 @@ static void sink_dma_init(void)
I2SOUT_CONTROL = (1<<6) | (1<<3); /* enable dma, stereo */
audiohw_preinit();
- sink_set_freq(HW_SAMPR_DEFAULT);
+ sink_set_freq(builtin_pcm_sink.caps.default_freq);
}
#ifdef HAVE_PCM_DMA_ADDRESS
diff --git a/firmware/target/arm/stm32/debug-stm32h7.c b/firmware/target/arm/stm32/debug-stm32h7.c
index f8cd7200c3..4002876e28 100644
--- a/firmware/target/arm/stm32/debug-stm32h7.c
+++ b/firmware/target/arm/stm32/debug-stm32h7.c
@@ -89,8 +89,6 @@ static bool swd_menu(void)
#if defined(ECHO_R1)
extern volatile int pcm_sai_xrun_count;
extern volatile int pcm_dma_teif_count;
-extern volatile int pcm_dma_dmeif_count;
-extern volatile int pcm_dma_feif_count;
struct pcmdebug_counter
{
@@ -102,8 +100,6 @@ static const struct pcmdebug_counter pcmdebug_counters[] =
{
{"SAI xrun count", &pcm_sai_xrun_count},
{"DMA TEIF count", &pcm_dma_teif_count},
- {"DMA DMEIF count", &pcm_dma_dmeif_count},
- {"DMA FEIF count", &pcm_dma_feif_count},
};
static int pcmdebug_menu_action_cb(int action, struct gui_synclist *lists)
diff --git a/firmware/target/arm/stm32/echoplayer/pcm-echoplayer.c b/firmware/target/arm/stm32/echoplayer/pcm-echoplayer.c
index c1d457ef8d..1867b21de0 100644
--- a/firmware/target/arm/stm32/echoplayer/pcm-echoplayer.c
+++ b/firmware/target/arm/stm32/echoplayer/pcm-echoplayer.c
@@ -36,19 +36,16 @@
# define PCM_NATIVE_SAMPLE_SIZE 4
# define DMA_PSIZE_VAL BV_DMA_CHN_CR_PSIZE_32BIT
# define SAI_DSIZE_VAL BV_SAI_SUBBLOCK_CR1_DS_32BIT
-# define SAI_FIFO_THRESH BV_SAI_SUBBLOCK_CR2_FTH_QUARTER
# define SAI_FRL_VAL 64
#elif PCM_NATIVE_BITDEPTH == 24
# define PCM_NATIVE_SAMPLE_SIZE 4
# define DMA_PSIZE_VAL BV_DMA_CHN_CR_PSIZE_32BIT
# define SAI_DSIZE_VAL BV_SAI_SUBBLOCK_CR1_DS_24BIT
-# define SAI_FIFO_THRESH BV_SAI_SUBBLOCK_CR2_FTH_QUARTER
# define SAI_FRL_VAL 64
#elif PCM_NATIVE_BITDEPTH == 16
# define PCM_NATIVE_SAMPLE_SIZE 2
# define DMA_PSIZE_VAL BV_DMA_CHN_CR_PSIZE_16BIT
# define SAI_DSIZE_VAL BV_SAI_SUBBLOCK_CR1_DS_16BIT
-# define SAI_FIFO_THRESH BV_SAI_SUBBLOCK_CR2_FTH_HALF
# define SAI_FRL_VAL 32
#else
# error "Unsupported PCM bit depth"
@@ -67,8 +64,6 @@ static int pcm_last_freq = -1;
volatile int pcm_sai_xrun_count;
volatile int pcm_dma_teif_count;
-volatile int pcm_dma_dmeif_count;
-volatile int pcm_dma_feif_count;
static void play_dma_start(const void *addr, size_t size)
{
@@ -105,7 +100,7 @@ static void sai_init(void)
/* Configure DMA1 channel 0 */
reg_writelf(dma1_ch0, DMA_CHN_CR,
MBURST_V(INCR4), /* 32-bit x 4 burst = 16 bytes */
- PBURST_V(INCR4), /* (16|32)-bit x 4 burst = 8-16 bytes */
+ PBURST_V(SINGLE), /* (16|32)-bit x 4 burst = 8-16 bytes */
TRBUFF(0), /* bufferable mode not used for SAI */
DBM(0), /* double buffer mode off */
PL_V(VERYHIGH), /* highest priority */
@@ -117,10 +112,8 @@ static void sai_init(void)
DIR_V(MEM_TO_PERIPH), /* read from memory, write to SAI */
PFCTRL_V(DMA), /* DMA is flow controller */
TCIE(1), /* transfer complete interrupt */
- TEIE(1), /* transfer error interrupt */
- DMEIE(1)); /* direct mode error interrupt */
+ TEIE(1)); /* transfer error interrupt */
reg_writelf(dma1_ch0, DMA_CHN_FCR,
- FEIE(1), /* fifo error interrupt */
DMDIS(1), /* enable fifo mode */
FTH_V(FULL)); /* fifo threshold = 4 words */
@@ -146,7 +139,7 @@ static void sai_init(void)
MUTEVAL_V(ZERO_SAMPLE), /* send zero sample on mute */
MUTE(1), /* mute output initially */
TRIS(0), /* don't tri-state outputs */
- FTH(SAI_FIFO_THRESH)); /* fifo threshold (2 or 4 samples) */
+ FTH_V(FULL)); /* fifo threshold (2 or 4 samples) */
reg_writelf(sai1a, SAI_SUBBLOCK_FRCR,
FSOFF(1), FSPOL(0), FSDEF(1), /* I2S format */
FSALL(SAI_FRL_VAL/2 - 1), /* FS active for half the frame */
@@ -336,22 +329,12 @@ void dma1_ch0_irq_handler(void)
size_t size;
if (reg_vreadf(lisr, DMA_LISR, TEIF0))
- pcm_dma_teif_count++;
-
- if (reg_vreadf(lisr, DMA_LISR, DMEIF0))
- pcm_dma_dmeif_count++;
-
- if (reg_vreadf(lisr, DMA_LISR, FEIF0))
- pcm_dma_feif_count++;
-
- if (reg_vreadf(lisr, DMA_LISR, TEIF0) ||
- reg_vreadf(lisr, DMA_LISR, DMEIF0) ||
- reg_vreadf(lisr, DMA_LISR, FEIF0))
{
- reg_assignlf(dma1, DMA_LIFCR, TEIF0(1), DMEIF0(1), FEIF0(1));
- reg_writelf(dma1_ch0, DMA_CHN_CR, EN(0));
+ pcm_dma_teif_count++;
+ reg_assignlf(dma1, DMA_LIFCR, TEIF0(1));
- pcm_play_dma_status_callback(PCM_DMAST_ERR_DMA);
+ /* TODO: this case may need additional handling */
+ pcm_play_dma_complete_callback(PCM_DMAST_ERR_DMA, NULL, NULL);
}
else if (reg_vreadf(lisr, DMA_LISR, TCIF0))
{
diff --git a/firmware/target/arm/usb-drv-arc.c b/firmware/target/arm/usb-drv-arc.c
index 1eeee010b3..09c1ade438 100644
--- a/firmware/target/arm/usb-drv-arc.c
+++ b/firmware/target/arm/usb-drv-arc.c
@@ -362,6 +362,7 @@ static const unsigned int pipe2mask[USB_NUM_ENDPOINTS*2] = {
/*-------------------------------------------------------------------------*/
static void transfer_completed(void);
static void control_received(void);
+static void sof_received(void);
static int prime_transfer(int ep_num, void* ptr, int len, bool send, bool wait);
static void prepare_td(struct transfer_descriptor* td,
struct transfer_descriptor* previous_td, void *ptr, int len,int pipe);
@@ -415,6 +416,14 @@ static void usb_drv_reset(void)
#endif
}
+static void td_set_buf_ptr(struct transfer_descriptor* td, const void* ptr){
+ td->buff_ptr0 = (unsigned int)ptr;
+ td->buff_ptr1 = ((unsigned int)ptr & 0xfffff000) + 0x1000;
+ td->buff_ptr2 = ((unsigned int)ptr & 0xfffff000) + 0x2000;
+ td->buff_ptr3 = ((unsigned int)ptr & 0xfffff000) + 0x3000;
+ td->buff_ptr4 = ((unsigned int)ptr & 0xfffff000) + 0x4000;
+}
+
/* One-time driver startup init */
void usb_drv_startup(void)
{
@@ -544,6 +553,12 @@ void usb_drv_int(void)
if (status & USBSTS_PORT_CHANGE) {
REG_USBSTS = USBSTS_PORT_CHANGE;
}
+
+ /* sof */
+ if (status & USBSTS_SOF) {
+ REG_USBSTS = USBSTS_SOF;
+ sof_received();
+ }
}
bool usb_drv_stalled(int endpoint,bool in)
@@ -664,6 +679,183 @@ void usb_drv_set_test_mode(int mode)
REG_USBCMD |= USBCMD_RUN;
}
+/* batched request api */
+static struct transfer_descriptor batch_td_array[USB_BATCH_SLOTS] USB_DEVBSS_ATTR __attribute__((aligned(32)));
+
+static uint8_t batch_ep = 0;
+static uint8_t batch_write_cursor;
+static bool batch_stopped;
+static usb_drv_batch_get_more batch_get_more;
+
+static int ep_to_pipe_index(uint8_t ep) {
+ const int ep_num = EP_NUM(ep);
+ const int ep_dir = EP_DIR(ep);
+ const int pipe = ep_num * 2 + (ep_dir == DIR_IN ? 1 : 0);
+ return pipe;
+}
+
+int usb_drv_batch_init(int ep, usb_drv_batch_get_more get_more) {
+ logf("batch init");
+ if(batch_ep != 0) {
+ logf("batch function not available");
+ return -1;
+ }
+ batch_ep = ep;
+ batch_get_more = get_more;
+ return 0;
+}
+
+int usb_drv_batch_deinit() {
+ logf("batch deinit");
+ usb_drv_batch_stop();
+ batch_ep = 0;
+ return 0;
+}
+
+/* returns whether priming is needed */
+static bool batch_fill_tds(void) {
+ while(!(batch_td_array[batch_write_cursor].size_ioc_sts & DTD_STATUS_ACTIVE)) {
+ /* batch_get_more may call batch_stop() through:
+ * - batch_get_more()
+ * - pcm_play_dma_complete_callback()
+ * - sink_stop()
+ * - usb_drv_batch_stop() */
+ const void* ptr;
+ size_t len;
+ batch_get_more(&ptr, &len);
+ if(len == 0 || batch_stopped) {
+ return false;
+ }
+
+ struct transfer_descriptor* td = &batch_td_array[batch_write_cursor];
+ td_set_buf_ptr(td, ptr);
+ td->size_ioc_sts = (len << DTD_LENGTH_BIT_POS) | DTD_STATUS_ACTIVE;
+ batch_write_cursor = (batch_write_cursor + 1) % USB_BATCH_SLOTS;
+ }
+ return true;
+}
+
+int usb_drv_batch_start(void) {
+ logf("batch start");
+
+ /* reset variables */
+ batch_write_cursor = 0;
+ batch_stopped = false;
+
+ /* chain tds */
+ memset(batch_td_array, 0, sizeof(struct transfer_descriptor) * USB_BATCH_SLOTS);
+ for(int i = 0; i < USB_BATCH_SLOTS; i += 1) {
+ struct transfer_descriptor* td = &batch_td_array[i];
+ td->next_td_ptr = (unsigned int)&batch_td_array[(i + 1) % USB_BATCH_SLOTS];
+ }
+
+ /* configure queue head */
+ const int pipe = ep_to_pipe_index(batch_ep);
+ struct queue_head* const qh = &qh_array[pipe];
+
+ qh->curr_dtd_ptr = (unsigned int)&batch_td_array[0]; /* or error check in sof_received may read random location */
+ qh->dtd.next_td_ptr = (unsigned int)&batch_td_array[0];
+ qh->dtd.size_ioc_sts = 0;
+
+ /* pull initial buffers */
+ batch_fill_tds();
+
+ /* monitor sof */
+ REG_USBINTR |= USBINTR_SOF_EN;
+ return 0;
+}
+
+int usb_drv_batch_stop(void) {
+ batch_stopped = true;
+
+ /* disable sof interrupt */
+ REG_USBINTR &= ~USBINTR_SOF_EN;
+
+ /* break the chain */
+ /* terminating qh->dtd.next_td_ptr is not reliable */
+ for(int i = 0; i < USB_BATCH_SLOTS; i += 1) {
+ struct transfer_descriptor* td = &batch_td_array[i];
+ td->next_td_ptr = DTD_NEXT_TERMINATE;
+ }
+
+ /* flush endpoint */
+ const int pipe = ep_to_pipe_index(batch_ep);
+ const unsigned int mask = pipe2mask[pipe];
+
+ REG_ENDPTFLUSH = mask;
+ while (REG_ENDPTFLUSH & mask);
+
+ return 0;
+}
+
+#if defined(LOGF_ENABLE) && defined(ROCKBOX_HAS_LOGF)
+void usb_drv_dump_regs(void) {
+ logf("==== register dump %ld ====", current_tick);
+ logf("USBSTS 0x%08X", REG_USBSTS);
+ logf("ENDPTSETUPSTAT 0x%08X", REG_ENDPTSETUPSTAT);
+ logf("ENDPTPRIME 0x%08X", REG_ENDPTPRIME);
+ logf("ENDPTFLUSH 0x%08X", REG_ENDPTFLUSH);
+ logf("ENDPTSTATUS 0x%08X", REG_ENDPTSTATUS);
+ logf("ENDPTCOMPLETE 0x%08X", REG_ENDPTCOMPLETE);
+ logf("ENDPTCTRL0 0x%08X", REG_ENDPTCTRL0);
+ logf("ENDPTCTRL1 0x%08X", REG_ENDPTCTRL1);
+ logf("ENDPTCTRL2 0x%08X", REG_ENDPTCTRL2);
+}
+
+static void dump_td_array(struct queue_head* qh, struct transfer_descriptor* tds, size_t size) {
+ void* current = (void*)qh->curr_dtd_ptr;
+ void* next = (void*)qh->dtd.next_td_ptr;
+
+ logf("==== td dump %ld n=%p c=%p ====", current_tick, next, current);
+ for(int i = 0; i < size; i += 1) {
+ int len = (tds[i].size_ioc_sts & DTD_PACKET_SIZE) >> DTD_LENGTH_BIT_POS;
+ char sts[] = {
+ &tds[i] == current ? 'c' : ' ',
+ &tds[i] == next ? 'n' : ' ',
+ i == batch_write_cursor ? 'w' : ' ',
+ '\0',
+ };
+ logf("%s td[%02d] status=0x%08X len=%d", sts, i, tds[i].size_ioc_sts, len);
+ }
+}
+
+void usb_drv_dump_tds(int ep) {
+ const int pipe = ep_to_pipe_index(ep);
+ struct queue_head* const qh = &qh_array[pipe];
+ dump_td_array(qh, &td_array[pipe * NUM_TDS_PER_EP], NUM_TDS_PER_EP);
+}
+
+void usb_drv_batch_dump_tds(void) {
+ const int pipe = ep_to_pipe_index(batch_ep);
+ struct queue_head* const qh = &qh_array[pipe];
+ dump_td_array(qh, batch_td_array, USB_BATCH_SLOTS);
+}
+#endif
+
+static void sof_received(void) {
+ if(batch_ep == 0) {
+ /* should not happen */
+ return;
+ }
+
+ /* error recovery */
+ const int pipe = ep_to_pipe_index(batch_ep);
+ const unsigned int mask = pipe2mask[pipe];
+ struct queue_head* const qh = &qh_array[pipe];
+ struct transfer_descriptor* const td = (void*)qh->curr_dtd_ptr;
+ if(td->size_ioc_sts & DTD_ERROR_MASK) {
+ logf("td error status=0x%08X", td->size_ioc_sts);
+ REG_ENDPTPRIME |= mask;
+ }
+
+ /* do refill */
+ if(batch_fill_tds()) {
+ const int pipe = ep_to_pipe_index(batch_ep);
+ const unsigned int mask = pipe2mask[pipe];
+ REG_ENDPTPRIME |= mask;
+ }
+}
+
/*-------------------------------------------------------------------------*/
/* manual: 32.14.5.2 */
@@ -854,11 +1046,7 @@ static void prepare_td(struct transfer_descriptor* td,
td->next_td_ptr = DTD_NEXT_TERMINATE;
td->size_ioc_sts = (len<< DTD_LENGTH_BIT_POS) |
DTD_STATUS_ACTIVE | DTD_IOC;
- td->buff_ptr0 = (unsigned int)ptr;
- td->buff_ptr1 = ((unsigned int)ptr & 0xfffff000) + 0x1000;
- td->buff_ptr2 = ((unsigned int)ptr & 0xfffff000) + 0x2000;
- td->buff_ptr3 = ((unsigned int)ptr & 0xfffff000) + 0x3000;
- td->buff_ptr4 = ((unsigned int)ptr & 0xfffff000) + 0x4000;
+ td_set_buf_ptr(td, ptr);
td->reserved |= DTD_RESERVED_LENGTH_MASK & len;
td->reserved |= DTD_RESERVED_IN_USE;
td->reserved |= (pipe << DTD_RESERVED_PIPE_OFFSET);
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c
index 9d5fa04d13..9b90fbd5ad 100644
--- a/firmware/usbstack/usb_core.c
+++ b/firmware/usbstack/usb_core.c
@@ -554,6 +554,64 @@ void usb_core_hotswap_event(int volume, bool inserted)
}
#endif
+
+#ifdef USB_BATCH_NON_NATIVE
+static uint8_t batch_ep = 0;
+static bool batch_stopped;
+static usb_drv_batch_get_more batch_get_more;
+
+int usb_drv_batch_init(int ep, usb_drv_batch_get_more get_more)
+{
+ if(batch_ep != 0) {
+ logf("usb_core: batch api in use user=0x%02X", batch_ep);
+ return -1;
+ }
+ batch_ep = ep;
+ batch_get_more = get_more;
+ batch_stopped = false;
+ return 0;
+}
+
+int usb_drv_batch_deinit(void)
+{
+ logf("usb_core: batch deinit");
+ usb_drv_batch_stop();
+ batch_ep = 0;
+ return 0;
+}
+
+static int batch_get_and_send(void)
+{
+ const void* ptr;
+ size_t len;
+ batch_get_more(&ptr, &len);
+ if(len == 0 || batch_stopped) {
+ return 0;
+ }
+ return usb_drv_send_nonblocking(EP_NUM(batch_ep), (void*)ptr, len);
+}
+
+int usb_drv_batch_start(void)
+{
+ logf("usb_core: batch start");
+ batch_stopped = false;
+ return batch_get_and_send();
+}
+
+int usb_drv_batch_stop(void)
+{
+ batch_stopped = true;
+ return 0;
+}
+
+static void batch_xfer_complete(void) {
+ if(batch_stopped) {
+ return;
+ }
+ batch_get_and_send();
+}
+#endif
+
static void usb_core_set_serial_function_id(void)
{
int i, id = 0;
@@ -1130,8 +1188,14 @@ void usb_core_bus_reset(void)
/* called by usb_drv_transfer_completed() */
void usb_core_transfer_complete(int endpoint, int dir, int status, int length)
{
- struct usb_transfer_completion_event_data* completion_event =
- &ep_data[endpoint].completion_event[EP_DIR(dir)];
+#ifdef USB_BATCH_NON_NATIVE
+ /* batch api */
+ if(batch_ep != 0 && (endpoint | dir) == batch_ep) {
+ batch_xfer_complete();
+ return;
+ }
+#endif
+
/* Fast notification */
fast_completion_handler_t handler = ep_data[endpoint].fast_completion_handler[EP_DIR(dir)];
if(handler != NULL && handler(endpoint, dir, status, length))
@@ -1154,6 +1218,9 @@ void usb_core_transfer_complete(int endpoint, int dir, int status, int length)
}
#endif
+ struct usb_transfer_completion_event_data* completion_event =
+ &ep_data[endpoint].completion_event[EP_DIR(dir)];
+
completion_event->endpoint = endpoint;
completion_event->dir = dir;
completion_event->data[0] = data0;
diff --git a/tools/builds.pm b/tools/builds.pm
index 1a283dd9b1..0aafee756f 100644
--- a/tools/builds.pm
+++ b/tools/builds.pm
@@ -782,7 +782,7 @@ sub simbuilds {
'norsk' => {
'lang' => 'norsk',
'name' => 'Norsk (Norwegian)',
- 'short' => 'no',
+ 'short' => 'nb',
'defengine' => 'piper',
'engines' => {
'espeak' => '-vno',
@@ -791,6 +791,18 @@ sub simbuilds {
},
'enabled' => 0,
},
+ 'norsk-nynorsk' => {
+ 'lang' => 'norsk-nynorsk',
+ 'name' => 'Nynorsk (Norwegian Nynorsk)',
+ 'short' => 'nn',
+ 'defengine' => 'piper',
+ 'engines' => {
+ 'espeak' => '-vno',
+ 'gtts' => '-l no',
+ 'piper' => 'no_NO-talesyntese-medium.onnx',
+ },
+ 'enabled' => 1,
+ },
'moldoveneste' => {
'lang' => 'moldoveneste',
'name' => 'Moldovenească (Moldavian)',