waiting is over: initial unicode commit

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8169 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Marcoen Hirschberg 2005-12-06 13:27:15 +00:00
parent 01917ec980
commit b0fee17d6e
70 changed files with 253032 additions and 14343 deletions

View file

@ -47,9 +47,9 @@ void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar,
void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num)
{
int xpos, ypos, button_width, text_width;
int fw, fh;
int fh;
struct screen * display = buttonbar->display;
display->getstringsize("M", &fw, &fh);
display->getstringsize("M", NULL, &fh);
button_width = display->width/BUTTONBAR_MAX_BUTTONS;
xpos = num * button_width;
@ -58,7 +58,7 @@ void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num)
if(buttonbar->caption[num][0] != 0)
{
/* center the text */
text_width = fw * strlen(buttonbar->caption[num]);
text_width = display->getstringsize(buttonbar->caption[num], NULL, NULL);
display->putsxy(xpos + (button_width - text_width)/2,
ypos, buttonbar->caption[num]);
}

View file

@ -52,7 +52,7 @@ void gui_quickscreen_draw(struct gui_quickscreen * qs, struct screen * display)
#endif
gui_textarea_clear(display);
display->setfont(FONT_SYSFIXED);
display->getstringsize((unsigned char *)"M",&w,&h);
display->getstringsize((unsigned char *)"M", NULL, &h);
/* Displays the icons */
display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward],
display->width/2 - 16,

View file

@ -128,12 +128,12 @@ new: "buffer vol"
id: LANG_PLAYINDICES_AMOUNT
desc: number of files in playlist
eng: "%d files"
new: "%d lęers"
new: "%d lêers"
id: LANG_SETTINGS_SAVE_PLAYER
desc: displayed if save settings has failed
eng: "Save failed"
new: "Bęre gebreek"
new: "Bêre gebreek"
id: LANG_SETTINGS_BATTERY_PLAYER
desc: if save settings has failed
@ -143,7 +143,7 @@ new: "Batt. leeg?"
id: LANG_SETTINGS_SAVE_RECORDER
desc: displayed if save settings has failed
eng: "Save failed"
new: "Bęre gebreek"
new: "Bêre gebreek"
id: LANG_SETTINGS_BATTERY_RECORDER
desc: if save settings has failed
@ -323,7 +323,7 @@ new: "Speel"
id: LANG_FILE
desc: in settings_menu()
eng: "File View"
new: "Lęers"
new: "Lêers"
id: LANG_DISPLAY
desc: in settings_menu()
@ -783,7 +783,7 @@ new: "Nuwe Taal"
id: LANG_FILTER
desc: setting name for dir filter
eng: "Show Files"
new: "Wys Lęers"
new: "Wys Lêers"
id: LANG_FILTER_MUSIC
desc: show only music-related files

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,7 @@
# Translated by:
# - Rune Wiinberg
# - Jakob Givoni
# - Jonas Häggqvist
# - Jonas Häggqvist
#
# Try to follow the guidelines from http://www.sslug.dk/locale/ Specifically
# try to avoid english words at (almost) all costs.
@ -41,7 +41,7 @@ id: LANG_DEBUG
desc: in the main menu
eng: "Debug (Keep Out!)"
voice: "Debug, keep out!"
new: "Fejlfinding, bliv væk!"
new: "Fejlfinding, bliv væk!"
id: LANG_USB
desc: in the main menu
@ -77,7 +77,7 @@ id: LANG_PLAYLIST_LOAD
desc: displayed on screen while loading a playlist
eng: "Loading..."
voice: ""
new: "Indlæser..."
new: "Indlæser..."
id: LANG_PLAYLIST_SHUFFLE
desc: displayed on screen while shuffling a playlist
@ -125,7 +125,7 @@ id: LANG_TIME_SET
desc: used in set_time()
eng: "ON To Set"
voice: ""
new: "TÆND: Indstil"
new: "TÆND: Indstil"
id: LANG_TIME_REVERT
desc: used in set_time()
@ -149,7 +149,7 @@ id: LANG_PLAY_SELECTED
desc: in settings_menu
eng: "Play Selected First"
voice: "Play Selected File First"
new: "Spil valgte først"
new: "Spil valgte først"
id: LANG_SORT_CASE
desc: in settings_menu
@ -161,7 +161,7 @@ id: LANG_RESUME
desc: in settings_menu
eng: "Resume on startup"
voice: "Resume on startup"
new: "Forsæt ved tænd"
new: "Forsæt ved tænd"
id: LANG_OFF
desc: Used in a lot of places
@ -173,7 +173,7 @@ id: LANG_RESUME_SETTING_ASK
desc: in settings_menu
eng: "Ask"
voice: "Ask"
new: "Spørg"
new: "Spørg"
id: LANG_ON
desc: Used in a lot of places
@ -191,7 +191,7 @@ id: LANG_SCROLL
desc: in settings_menu
eng: "Scroll Speed Setting Example"
voice: ""
new: "Eksempel på rulle-hastighed"
new: "Eksempel på rulle-hastighed"
id: LANG_DISCHARGE
desc: DEPRECATED
@ -227,7 +227,7 @@ id: LANG_FOLLOW
desc: in settings_menu
eng: "Follow Playlist"
voice: "Follow Playlist"
new: "Følg spilleliste"
new: "Følg spilleliste"
id: LANG_RESET_ASK_RECORDER
desc: confirm to reset settings
@ -269,7 +269,7 @@ id: LANG_RESET
desc: in system_settings_menu()
eng: "Reset Settings"
voice: "Reset Settings"
new: "Nulstil opsætning"
new: "Nulstil opsætning"
id: LANG_PLAYBACK
desc: in settings_menu()
@ -287,7 +287,7 @@ id: LANG_DISPLAY
desc: in settings_menu()
eng: "Display"
voice: "Display"
new: "Skærm"
new: "Skærm"
id: LANG_SYSTEM
desc: in settings_menu()
@ -371,7 +371,7 @@ id: LANG_CHANNEL_RIGHT
desc: in sound_settings
eng: "Mono Right"
voice: "Mono Right"
new: "Mono højre"
new: "Mono højre"
id: LANG_AUTOVOL
desc: in sound_settings
@ -395,7 +395,7 @@ id: LANG_RESUME_ASK
desc: DEPRECATED
eng: ""
voice: ""
new: "Forsæt?"
new: "Forsæt?"
id: LANG_RESUME_CONFIRM_PLAYER
desc: possible answers to resume question
@ -407,25 +407,25 @@ id: LANG_KEYLOCK_ON_PLAYER
desc: displayed when key lock is on
eng: "Key Lock ON"
voice: ""
new: "Lås TIL"
new: "Lås TIL"
id: LANG_KEYLOCK_OFF_PLAYER
desc: displayed when key lock is turned off
eng: "Key Lock OFF"
voice: ""
new: "Lås FRA"
new: "Lås FRA"
id: LANG_KEYLOCK_ON_RECORDER
desc: displayed when key lock is on
eng: "Key Lock Is ON"
voice: ""
new: "Tast. lås er TIL"
new: "Tast. lås er TIL"
id: LANG_KEYLOCK_OFF_RECORDER
desc: displayed when key lock is turned off
eng: "Key Lock Is OFF"
voice: ""
new: "Tast. lås er FRA"
new: "Tast. lås er FRA"
id: LANG_MUTE_ON_PLAYER
desc: DEPRECATED
@ -515,7 +515,7 @@ id: LANG_ID3_LENGHT
desc: in wps
eng: "[Length]"
voice: ""
new: "[Længde]"
new: "[Længde]"
id: LANG_ID3_PLAYLIST
desc: in wps
@ -581,19 +581,19 @@ id: LANG_F3_BAR
desc: in wps F3 pressed
eng: "Bar"
voice: ""
new: "Bjælke"
new: "Bjælke"
id: LANG_END_PLAYLIST_PLAYER
desc: when playlist has finished
eng: "End Of List"
voice: ""
new: "Slut på liste"
new: "Slut på liste"
id: LANG_END_PLAYLIST_RECORDER
desc: when playlist has finished
eng: "End Of Song List"
voice: ""
new: "Slut på liste"
new: "Slut på liste"
id: LANG_POWEROFF_IDLE
desc: in settings_menu
@ -623,7 +623,7 @@ id: LANG_FILTER_SUPPORTED
desc: show all file types supported by Rockbox
eng: "Supported"
voice: "Supported"
new: "Understøttede"
new: "Understøttede"
id: LANG_FILTER_ALL
desc: show all files
@ -647,7 +647,7 @@ id: LANG_PM_MENU
desc: in the display menu
eng: "Peak Meter"
voice: "Peak Meter"
new: "Spids markør"
new: "Spids markør"
id: LANG_PM_RELEASE
desc: in the peak meter menu
@ -677,7 +677,7 @@ id: LANG_PM_UNITS_PER_READ
desc: in the peak meter menu
eng: "Units Per Read"
voice: "Units Per Read"
new: "Enheder per læsning"
new: "Enheder per læsning"
id: LANG_BACKLIGHT_ON_WHEN_CHARGING
desc: in display_settings_menu
@ -737,7 +737,7 @@ id: LANG_WEEKDAY_SUNDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Sun"
voice: ""
new: "Søn"
new: "Søn"
id: LANG_WEEKDAY_MONDAY
desc: Maximum 3-letter abbreviation for weekday
@ -767,7 +767,7 @@ id: LANG_WEEKDAY_SATURDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Sat"
voice: ""
new: "Lør"
new: "Lør"
id: LANG_MONTH_JANUARY
desc: Maximum 3-letter abbreviation for monthname
@ -845,7 +845,7 @@ id: LANG_RESUME_SETTING_ASK_ONCE
desc: DEPRECATED
eng: ""
voice: ""
new: "Spørg én gang"
new: "Spørg én gang"
id: LANG_BATTERY_DISPLAY
desc: Battery type title
@ -905,19 +905,19 @@ id: LANG_PM_LINEAR
desc: in the peak meter menu
eng: "Linear(%)"
voice: "Linear percent"
new: "lineær(%)"
new: "lineær(%)"
id: LANG_PM_MIN
desc: in the peak meter menu
eng: "Minimum Of Range"
voice: "Minimum Of Range"
new: "Mindste værdi"
new: "Mindste værdi"
id: LANG_PM_MAX
desc: in the peak meter menu
eng: "Maximum Of Range"
voice: "Maximum Of Range"
new: "Største værdi"
new: "Største værdi"
id: LANG_RECORDING
desc: in the main menu
@ -929,7 +929,7 @@ id: LANG_RECORDING_GAIN
desc: in the recording screen
eng: "Gain"
voice: ""
new: "Forstærkning"
new: "Forstærkning"
id: LANG_RECORDING_LEFT
desc: in the recording screen
@ -941,7 +941,7 @@ id: LANG_RECORDING_RIGHT
desc: in the recording screen
eng: "Right"
voice: ""
new: "Højre"
new: "Højre"
id: LANG_RECORDING_QUALITY
desc: in the recording settings
@ -1025,19 +1025,19 @@ id: LANG_SLEEP_TIMER
desc: sleep timer setting
eng: "Sleep Timer"
voice: "Sleep Timer"
new: "Søvntimer"
new: "Søvntimer"
id: LANG_STATUS_BAR
desc: display menu, F3 substitute
eng: "Status Bar"
voice: "Status Bar"
new: "Status bjælke"
new: "Status bjælke"
id: LANG_SCROLL_BAR
desc: display menu, F3 substitute
eng: "Scroll Bar"
voice: "Scroll Bar"
new: "Rullebjælke"
new: "Rullebjælke"
id: LANG_WEEKDAY_THURSDAY
desc: Maximum 3-letter abbreviation for weekday
@ -1055,7 +1055,7 @@ id: LANG_BIDIR_SCROLL
desc: Bidirectional scroll limit
eng: "Bidirectional Scroll Limit"
voice: "Bidirectional Scroll Limit"
new: "Tovejs-rul grænse"
new: "Tovejs-rul grænse"
id: LANG_SCROLL_DELAY
desc: Delay before scrolling
@ -1067,7 +1067,7 @@ id: LANG_SCROLL_STEP
desc: Pixels to advance per scroll
eng: "Scroll Step Size"
voice: "Scroll Step Size"
new: "Rul trin størrelse"
new: "Rul trin størrelse"
id: LANG_SCROLL_STEP_EXAMPLE
desc: Pixels to advance per scroll
@ -1115,7 +1115,7 @@ id: LANG_QUEUE
desc: The verb/action Queue
eng: "Queue"
voice: "Queue"
new: "Sæt i kø"
new: "Sæt i kø"
id: LANG_DELETE
desc: The verb/action Delete
@ -1139,7 +1139,7 @@ id: LANG_RENAME
desc: The verb/action Rename
eng: "Rename"
voice: "Rename"
new: "Omdøb"
new: "Omdøb"
id: LANG_FAILED
desc: Something failed. To be appended after above actions
@ -1151,7 +1151,7 @@ id: LANG_ALARM_MOD_ALARM_MENU
desc: The name of the additional entry in the main menu for the RTC alarm mod.
eng: "Wake-Up Alarm"
voice: "Wake-Up Alarm"
new: "Vækkeur"
new: "Vækkeur"
id: LANG_ALARM_MOD_TIME
desc: The current alarm time shown in the alarm menu for the RTC alarm mod.
@ -1163,7 +1163,7 @@ id: LANG_ALARM_MOD_TIME_TO_GO
desc: The time until the alarm will go off shown in the alarm menu for the RTC alarm mod.
eng: "Waking Up In %d:%02d"
voice: ""
new: "Vågner om om %d:%02d"
new: "Vågner om om %d:%02d"
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).
@ -1181,7 +1181,7 @@ id: LANG_ALARM_MOD_KEYS
desc: Shown key functions in alarm menu (for the RTC alarm mod).
eng: "PLAY=Set OFF=Cancel"
voice: ""
new: "SPIL=Sæt SLUK=Anuller"
new: "SPIL=Sæt SLUK=Anuller"
id: LANG_CREATE_PLAYLIST
desc: Menu option for creating a playlist
@ -1235,7 +1235,7 @@ id: LANG_ID3_YEAR
desc: ID3 info 'year'
eng: "[Year]"
voice: ""
new: "[År]"
new: "[År]"
id: LANG_ID3_NO_INFO
desc: ID3 info is missing
@ -1253,7 +1253,7 @@ id: LANG_RECORDING_SIZE
desc: Display of recorded file size
eng: "Size:"
voice: ""
new: "Størrelse:"
new: "Størrelse:"
id: LANG_SETTINGS_LOADED1
desc: Feedback shown when a .cfg file is loaded
@ -1283,7 +1283,7 @@ id: LANG_INVERT
desc: in settings_menu
eng: "LCD Mode"
voice: "LCD Mode"
new: "Skærm tilstand"
new: "Skærm tilstand"
id: LANG_CHANNEL_STEREO_NARROW_PLAYER
desc: DEPRECATED
@ -1349,13 +1349,13 @@ id: LANG_INVERT_CURSOR
desc: in settings_menu
eng: "Line Selector"
voice: "Line Selector"
new: "Linje vælger"
new: "Linje vælger"
id: LANG_RECORDING_EDITABLE
desc: Editable recordings setting
eng: "Independent frames"
voice: "Independent frames"
new: "Uafhængige rammer"
new: "Uafhængige rammer"
id: LANG_CAPTION_BACKLIGHT
desc: in settings_menu
@ -1367,13 +1367,13 @@ id: LANG_INVERT_CURSOR_POINTER
desc: in settings_menu
eng: "Pointer"
voice: "Pointer"
new: "Markør"
new: "Markør"
id: LANG_INVERT_CURSOR_BAR
desc: in settings_menu
eng: "Bar(Inverse)"
voice: "Inverse Bar"
new: "Bjælke (omvendt)"
new: "Bjælke (omvendt)"
id: LANG_INVERT_LCD_NORMAL
desc: in settings_menu
@ -1391,13 +1391,13 @@ id: LANG_MAX_FILES_IN_DIR
desc: in settings_menu
eng: "Max files in dir browser"
voice: "Max files in directory browser"
new: "Maks filer i dir vælger"
new: "Maks filer i dir vælger"
id: LANG_MAX_FILES_IN_PLAYLIST
desc: in settings_menu
eng: "Max playlist size"
voice: "Max playlist size"
new: "Maks spilleliste størrelse"
new: "Maks spilleliste størrelse"
id: LANG_JUMP_SCROLL
desc: (player) menu altarnative for jump scroll
@ -1445,7 +1445,7 @@ id: LANG_DISK_FULL
desc: in recording screen
eng: "The disk is full. Press OFF to continue."
voice: ""
new: "Disken er fuld. Tryk SLUK for at fortsætte."
new: "Disken er fuld. Tryk SLUK for at fortsætte."
id: LANG_CONFIRM_WITH_PLAY_RECORDER
desc: Generic recorder string to use to confirm
@ -1463,13 +1463,13 @@ id: LANG_PLUGIN_CANT_OPEN
desc: Plugin open error message
eng: "Can't open %s"
voice: ""
new: "Kan ikke åbne %s"
new: "Kan ikke åbne %s"
id: LANG_READ_FAILED
desc: There was an error reading a file
eng: "Failed reading %s"
voice: ""
new: "Læsning af %s fejlede"
new: "Læsning af %s fejlede"
id: LANG_PLUGIN_WRONG_MODEL
desc: The plugin is not compatible with the archos model trying to run it
@ -1493,7 +1493,7 @@ id: LANG_BOOT_CHANGED
desc: File browser discovered the boot file was changed
eng: "Boot changed"
voice: ""
new: "Boot ændret"
new: "Boot ændret"
id: LANG_REBOOT_NOW
desc: Do you want to reboot?
@ -1505,31 +1505,31 @@ id: LANG_QUEUE_LAST
desc: in onplay menu. queue a track/playlist at end of playlist.
eng: "Queue last"
voice: "Queue last"
new: "Sæt sidst i køen"
new: "Sæt sidst i køen"
id: LANG_INSERT
desc: in onplay menu. insert a track/playlist into dynamic playlist.
eng: "Insert"
voice: "Insert"
new: "Indsæt"
new: "Indsæt"
id: LANG_INSERT_LAST
desc: in onplay menu. append a track/playlist into dynamic playlist.
eng: "Insert last"
voice: "Insert last"
new: "Indsæt tilsidst"
new: "Indsæt tilsidst"
id: LANG_QUEUE_FIRST
desc: in onplay menu. queue a track/playlist into dynamic playlist.
eng: "Queue next"
voice: "Queue next"
new: "Set i kø som næste"
new: "Set i kø som næste"
id: LANG_INSERT_FIRST
desc: in onplay menu. insert a track/playlist into dynamic playlist.
eng: "Insert next"
voice: "Insert next"
new: "Indsæt som næste"
new: "Indsæt som næste"
id: LANG_SAVE_DYNAMIC_PLAYLIST
desc: in playlist menu.
@ -1553,7 +1553,7 @@ id: LANG_PLAYLIST_QUEUE_COUNT
desc: splash number of tracks queued
eng: "Queued %d tracks (%s)"
voice: ""
new: "Har sat %d numre i kø (%s)"
new: "Har sat %d numre i kø (%s)"
id: LANG_PLAYLIST_SAVE_COUNT
desc: splash number of tracks saved
@ -1607,13 +1607,13 @@ id: LANG_RECURSE_DIRECTORY
desc: In playlist menu
eng: "Recursively Insert Directories"
voice: "Recursively Insert Directories"
new: "Indsæt mapper og undermapper"
new: "Indsæt mapper og undermapper"
id: LANG_RECURSE_DIRECTORY_QUESTION
desc: Asked from onplay screen
eng: "Recursively?"
voice: ""
new: "Indsæt undermapper?"
new: "Indsæt undermapper?"
id: LANG_CUSTOM_FONT
desc: in setting_menu()
@ -1637,7 +1637,7 @@ id: LANG_WHILE_PLAYING
desc: in settings_menu()
eng: "Browse .wps files"
voice: "Browse while-playing-screen files"
new: "Vis afspilnings-skærm filer"
new: "Vis afspilnings-skærm filer"
id: LANG_CUSTOM_CFG
desc: in setting_menu()
@ -1733,7 +1733,7 @@ id: LANG_VIEW_DYNAMIC_PLAYLIST
desc: in playlist menu.
eng: "View Current Playlist"
voice: "View Current Playlist"
new: "Vis nuværende spilleliste"
new: "Vis nuværende spilleliste"
id: LANG_MOVE
desc: The verb/action Move
@ -1751,7 +1751,7 @@ id: LANG_FLIP_DISPLAY
desc: in settings_menu, option to turn display+buttos by 180 degreed
eng: "Upside Down"
voice: "Upside Down"
new: "På hovedet"
new: "På hovedet"
id: LANG_RECORD_PRERECORD
desc: in recording and radio screen
@ -1769,13 +1769,13 @@ id: LANG_BOOKMARK_AUTOLOAD_QUERY
desc: prompt for user to decide to create a bookmark
eng: "Load Last Bookmark?"
voice: ""
new: "Hent seneste bogmærke?"
new: "Hent seneste bogmærke?"
id: LANG_AUTO_BOOKMARK_QUERY
desc: prompt for user to decide to create an bookmark
eng: "Create a Bookmark?"
voice: ""
new: "Opret bogmærke?"
new: "Opret bogmærke?"
id: LANG_BOOKMARK_SELECT_LIST_BOOKMARKS
desc: From the auto-load screen, allows user to list all bookmarks
@ -1793,7 +1793,7 @@ id: LANG_BOOKMARK_SELECT_BOOKMARK_TEXT
desc: Used on the bookmark select window to label bookmark number
eng: "Bookmark"
voice: ""
new: "Bogmærke"
new: "Bogmærke"
id: LANG_BOOKMARK_SELECT_INDEX_TEXT
desc: Used on the bookmark select window to label index number
@ -1811,55 +1811,55 @@ id: LANG_BOOKMARK_SELECT_PLAY
desc: Used on the bookmark select window to indicated the play option
eng: "PLAY = Select"
voice: ""
new: "SPIL = Vælg"
new: "SPIL = Vælg"
id: LANG_BOOKMARK_SELECT_DELETE
desc: Used on the bookmark select window to indicated the bookmark delete option
eng: "ON+Play = Delete"
voice: ""
new: "TÆND+Spil = Slet"
new: "TÆND+Spil = Slet"
id: LANG_BOOKMARK_CREATE_SUCCESS
desc: Indicates bookmark was successfully created
eng: "Bookmark Created"
voice: ""
new: "Bogmærke oprettet"
new: "Bogmærke oprettet"
id: LANG_BOOKMARK_CREATE_FAILURE
desc: Indicates bookmark was not created
eng: "Bookmark Failed!"
voice: ""
new: "Bogmærke fejlede!"
new: "Bogmærke fejlede!"
id: LANG_BOOKMARK_LOAD_EMPTY
desc: Indicates bookmark was empty
eng: "Bookmark Empty"
voice: ""
new: "Bogmærke tomt"
new: "Bogmærke tomt"
id: LANG_BOOKMARK_SETTINGS
desc: in general settings
eng: "Bookmarking"
voice: "Bookmarking"
new: "Bogmærker"
new: "Bogmærker"
id: LANG_BOOKMARK_SETTINGS_AUTOLOAD
desc: prompt for user to decide to create a bookmark
eng: "Load Last Bookmark"
voice: "Load Last Bookmark"
new: "Hent seneste bogmærke"
new: "Hent seneste bogmærke"
id: LANG_BOOKMARK_SETTINGS_AUTOCREATE
desc: prompt for user to decide to create an bookmark
eng: "Bookmark on Stop"
voice: "Bookmark on Stop"
new: "Opret bogmærke ved stop"
new: "Opret bogmærke ved stop"
id: LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS
desc: Configuration option to maintain a list of recent bookmarks
eng: "Maintain a List of Recent Bookmarks?"
voice: "Maintain a List of Recent Bookmarks?"
new: "Vedligehold liste af seneste bogmærker?"
new: "Vedligehold liste af seneste bogmærker?"
id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES
desc: Save in recent bookmarks only
@ -1871,7 +1871,7 @@ id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK
desc: Save in recent bookmarks only
eng: "Ask - Recent only"
voice: "Ask - Recent only"
new: "Spørg - kun seneste"
new: "Spørg - kun seneste"
id: LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY
desc: Save only on bookmark for each playlist in recent bookmarks
@ -1883,25 +1883,25 @@ id: LANG_BOOKMARK_MENU
desc: Text on main menu to get to bookmark commands
eng: "Bookmarks"
voice: "Bookmarks"
new: "Bogmærker"
new: "Bogmærker"
id: LANG_BOOKMARK_MENU_CREATE
desc: Used off of the bookmark menu to create a bookmark
eng: "Create Bookmark"
voice: "Create Bookmark"
new: "Opret bogmærke"
new: "Opret bogmærke"
id: LANG_BOOKMARK_MENU_LIST
desc: Used off of the bookmark menu to list available bookmarks for the currently playing directory or M3U
eng: "List Bookmarks"
voice: "List Bookmarks"
new: "Vis bogmærker"
new: "Vis bogmærker"
id: LANG_BOOKMARK_MENU_RECENT_BOOKMARKS
desc: Text for the menu text to access the most recent bookmarks list
eng: "Recent Bookmarks"
voice: "Recent Bookmarks"
new: "Seneste bogmærker"
new: "Seneste bogmærker"
id: LANG_INFO_MENU
desc: in the info sub menu
@ -1913,7 +1913,7 @@ id: LANG_RECORDING_MENU
desc: in the recording sub menu
eng: "Recording screen"
voice: "Recording screen"
new: "Optage skærm"
new: "Optage skærm"
id: LANG_WIND_MENU
desc: in the playback sub menu
@ -1925,13 +1925,13 @@ id: LANG_LCD_MENU
desc: in the display sub menu
eng: "LCD Settings"
voice: "LCD Settings"
new: "Skærm indstillinger"
new: "Skærm indstillinger"
id: LANG_BARS_MENU
desc: in the display sub menu
eng: "Status-/Scrollbar"
voice: "Status- and Scrollbar"
new: "Status- og rulle-bjælke"
new: "Status- og rulle-bjælke"
id: LANG_BATTERY_MENU
desc: in the system sub menu
@ -1955,13 +1955,13 @@ id: LANG_LIMITS_MENU
desc: in the system sub menu
eng: "Limits"
voice: "Limits"
new: "Begrænsninger"
new: "Begrænsninger"
id: LANG_MANAGE_MENU
desc: in the system sub menu
eng: "Manage Settings"
voice: "Manage Settings"
new: "Håndter opsætning"
new: "Håndter opsætning"
id: LANG_RECORD_DIRECTORY
desc: in recording settings_menu
@ -1973,7 +1973,7 @@ id: LANG_RECORD_CURRENT_DIR
desc: in recording directory options
eng: "Current dir"
voice: "Current directory"
new: "Nuværende mappe"
new: "Nuværende mappe"
id: LANG_CREATE_DIR
desc: in main menu
@ -1997,7 +1997,7 @@ id: LANG_TRACK_DISPLAY
desc: in playlist viewer on+play menu
eng: "Track Display"
voice: "Track Display"
new: "Nummer skærm"
new: "Nummer skærm"
id: LANG_DISPLAY_TRACK_NAME_ONLY
desc: track display options
@ -2027,7 +2027,7 @@ id: LANG_BUTTON_BAR
desc: in settings menu
eng: "Button bar"
voice: "Button bar"
new: "Knap bjælke"
new: "Knap bjælke"
id: LANG_DIRBROWSE_F1
desc: in dir browser, F1 button bar text
@ -2045,7 +2045,7 @@ id: LANG_DIRBROWSE_F3
desc: in dir browser, F3 button bar text
eng: "LCD"
voice: ""
new: "Skærm"
new: "Skærm"
id: VOICE_ZERO
desc: spoken only, for composing numbers
@ -2663,7 +2663,7 @@ id: LANG_ONPLAY_OPEN_WITH
desc: Onplay open with
eng: "Open with"
voice: "open with"
new: "Åben med"
new: "Åben med"
id: LANG_SORT_DIR
desc: browser sorting setting
@ -2729,7 +2729,7 @@ id: LANG_FM_BUTTONBAR_ADD
desc: in radio screen
eng: "Add"
voice: ""
new: "Tilføj"
new: "Tilføj"
id: LANG_FM_BUTTONBAR_ACTION
desc: in radio screen
@ -2795,19 +2795,19 @@ id: LANG_ID3_ORDER
desc: in playback settings screen
eng: "ID3 tag priority"
voice: "ID3 tag priority"
new: "ID3 mærke prioritet"
new: "ID3 mærke prioritet"
id: LANG_ID3_V1_FIRST
desc: in playback settings screen
eng: "V1 then V2"
voice: "Version 1 then version 2"
new: "V1 før V2"
new: "V1 før V2"
id: LANG_ID3_V2_FIRST
desc: in playback settings screen
eng: "V2 then V1"
voice: "Version 2 then version 1"
new: "V2 før V1"
new: "V2 før V1"
id: LANG_NO_ROCKBOX_DIR
desc: in browse root
@ -2819,7 +2819,7 @@ id: LANG_INSTALLATION_INCOMPLETE
desc: in browse root
eng: "Installation incomplete"
voice: ""
new: "Installation fuldført"
new: "Installation fuldført"
id: LANG_REMOVE_MMC
desc: before acknowledging usb in case an MMC is inserted (Ondio)
@ -2879,25 +2879,25 @@ id: LANG_ID3DB_SEARCH
desc: ID3 virtual folder name
eng: "Search"
voice: ""
new: "Søg"
new: "Søg"
id: LANG_ID3DB_SEARCH_ARTISTS
desc: ID3 virtual folder name
eng: "Search Artists"
voice: ""
new: "Søg på kunstnere"
new: "Søg på kunstnere"
id: LANG_ID3DB_SEARCH_ALBUMS
desc: ID3 virtual folder name
eng: "Search Albums"
voice: ""
new: "Søg på albums"
new: "Søg på albums"
id: LANG_ID3DB_SEARCH_SONGS
desc: ID3 virtual folder name
eng: "Search Songs"
voice: ""
new: "Søg på sange"
new: "Søg på sange"
id: LANG_ID3DB_MATCHES
desc: ID3 virtual folder name
@ -2981,19 +2981,19 @@ id: LANG_RECORD_STARTUP
desc: Start Rockbox in Recording screen
eng: "Show recording screen on startup"
voice: "Show recording screen on startup"
new: "Vis optage skærm ved start"
new: "Vis optage skærm ved start"
id: LANG_ALARM_MOD_DISABLE
desc: Announce that the RTC alarm has been turned off
eng: "Alarm Disabled"
voice: "Alarm Disabled"
new: "Alarm slået fra"
new: "Alarm slået fra"
id: LANG_RECORD_TRIGGER
desc: in recording settings_menu
eng: "Trigger"
voice:
new: "Udløser"
new: "Udløser"
id: LANG_RECORD_START_THRESHOLD
desc: in recording settings_menu
@ -3023,13 +3023,13 @@ id: LANG_RECORD_STOP_GAP
desc: in recording settings_menu
eng: "Presplit gap"
voice:
new: "Pause før deling"
new: "Pause før deling"
id: LANG_RECORD_TRIGGER_MODE
desc: in recording settings_menu
eng: "Trigger"
voice:
new: "Udløser"
new: "Udløser"
id: LANG_RECORD_TRIG_NOREARM
desc: in recording settings_menu
@ -3053,19 +3053,19 @@ id: LANG_RECORD_TRIG_IDLE
desc: waiting for threshold
eng: "Trigger idle"
voice:
new: "Udløser venter"
new: "Udløser venter"
id: LANG_RECORD_TRIGGER_ACTIVE
desc:
eng: "Trigger active"
voice:
new: "Udløser klar"
new: "Udløser klar"
id: LANG_LCD_REMOTE_MENU
desc: in the display sub menu
eng: "Remote-LCD Settings"
voice:
new: "Fjernbetjenings-skærm indstillinger"
new: "Fjernbetjenings-skærm indstillinger"
id: LANG_DISK_NAME_INTERNAL
desc: in info menu; name for internal disk with multivolume (keep short!)
@ -3089,13 +3089,13 @@ id: LANG_BACKLIGHT_FADE_IN
desc: in settings_menu
eng: "Backlight fade in"
voice: "Backlight fade in"
new: "Tænd lys langsomt"
new: "Tænd lys langsomt"
id: LANG_BACKLIGHT_FADE_OUT
desc: in settings_menu
eng: "Backlight fade out"
voice: "Backlight fade out"
new: "Dæmp lys"
new: "Dæmp lys"
id: LANG_SHUFFLE_PLAYLIST
desc: in playlist menu, reshuffles the order in which songs are played
@ -3107,13 +3107,13 @@ id: LANG_INSERT_SHUFFLED
desc: in onplay menu. insert a track/playlist randomly into dynamic playlist
eng: "Insert shuffled"
voice: "Insert shuffled"
new: "Indsæt blandet"
new: "Indsæt blandet"
id: LANG_NOTHING_TO_RESUME
desc: Error message displayed when resume button pressed but no playlist
eng: "Nothing to resume"
voice: ""
new: "Intet at fortsætte"
new: "Intet at fortsætte"
id: LANG_SPDIF_ENABLE
desc: in playback settings menu. enable/disable the optical out
@ -3125,7 +3125,7 @@ id: LANG_NEXT_FOLDER
desc: in settings_menu. Should we move to next folder when current one ends
eng: "Move to Next Folder"
voice: "Move to Next Folder"
new: "Fortsæt med næste mappe"
new: "Fortsæt med næste mappe"
id: LANG_RUNTIMEDB_ACTIVE
desc: in settings_menu.
@ -3137,19 +3137,19 @@ id: LANG_MENU_SET_RATING
desc: in wps context menu
eng: "Set song rating"
voice: "Set song rating"
new: "Sæt bedømmelse"
new: "Sæt bedømmelse"
id: LANG_RATING
desc: in set_rating
eng: "Rating:"
voice: "Rating"
new: "Bedømmelse:"
new: "Bedømmelse:"
id: LANG_CROSSFADE_DURATION
desc: in playback settings
eng: "Crossfade duration"
voice: "Crossfade duration"
new: "Længde af glidende overgang"
new: "Længde af glidende overgang"
id: LANG_MIX
desc: in playback settings, crossfade option
@ -3179,7 +3179,7 @@ id: LANG_REPLAYGAIN_NOCLIP
desc: in replaygain
eng: "Prevent clipping"
voice:
new: "Undgå klipning"
new: "Undgå klipning"
id: LANG_REPLAYGAIN_MODE
desc: in replaygain
@ -3221,13 +3221,13 @@ id: LANG_BIDI_SUPPORT
desc: in settings_menu, option to enable reversal of hebrew/arabic text
eng: "BiDi Hebrew/Arabic"
voice:
new: "Højre mod venstre sprog"
new: "Højre mod venstre sprog"
id: LANG_REPLAYGAIN_PREAMP
desc: in browse_id3
eng: "Pre-amp"
voice:
new: "Forforstærkning"
new: "Forforstærkning"
id: LANG_UNIT_DB
desc: in browse_id3

View file

@ -58,7 +58,7 @@ id: LANG_BATTERY_CHARGE
desc: tells that the battery is charging, instead of battery level
eng: "Battery: Charging"
voice: ""
new: "Akku: lädt"
new: "Akku: lädt"
id: LANG_PLAYLIST_LOAD
desc: displayed on screen while loading a playlist
@ -135,14 +135,14 @@ new: "Zufallswiedergabe"
id: LANG_PLAY_SELECTED
desc: in settings_menu
eng: "Play Selected First"
voice: "Gewählte zuerst wiedergeben"
new: "Gewählte zuerst wiedergeben"
voice: "Gewählte zuerst wiedergeben"
new: "Gewählte zuerst wiedergeben"
id: LANG_SORT_CASE
desc: in settings_menu
eng: "Sort Case Sensitive"
voice: "Sortiere Groß- und Kleinschreibung"
new: "Sortiere Groß-/Kleinschreibung"
voice: "Sortiere Groß- und Kleinschreibung"
new: "Sortiere Groß-/Kleinschreibung"
id: LANG_RESUME
desc: in settings_menu
@ -178,7 +178,7 @@ id: LANG_SCROLL
desc: in settings_menu
eng: "Scroll Speed Setting Example"
voice: ""
new: "Beispieltext für die Scrollgeschwindigkeit"
new: "Beispieltext für die Scrollgeschwindigkeit"
id: LANG_DISCHARGE
desc: DEPRECATED
@ -232,7 +232,7 @@ id: LANG_RESET_DONE_CLEAR
desc: visual confirmation after settings reset
eng: "Cleared"
voice: ""
new: "Gelöscht"
new: "Gelöscht"
id: LANG_RESET_DONE_CANCEL
desc: Visual confirmation of cancelation
@ -255,8 +255,8 @@ new: "Scroll-Einstellungen"
id: LANG_RESET
desc: in system_settings_menu()
eng: "Reset Settings"
voice: "Einstellungen zurücksetzen"
new: "Einstellungen zurücksetzen"
voice: "Einstellungen zurücksetzen"
new: "Einstellungen zurücksetzen"
id: LANG_PLAYBACK
desc: in settings_menu()
@ -285,8 +285,8 @@ new: "System"
id: LANG_VOLUME
desc: in sound_settings
eng: "Volume"
voice: "Lautstärke"
new: "Lautstärke"
voice: "Lautstärke"
new: "Lautstärke"
id: LANG_BALANCE
desc: in sound_settings
@ -303,8 +303,8 @@ new: "Bass"
id: LANG_TREBLE
desc: in sound_settings
eng: "Treble"
voice: "Höhen"
new: "Höhen"
voice: "Höhen"
new: "Höhen"
id: LANG_LOUDNESS
desc: in sound_settings
@ -322,13 +322,13 @@ id: LANG_DECAY
desc: in sound_settings
eng: "AV Decay Time"
voice: ""
new: "AV-Trägheit"
new: "AV-Trägheit"
id: LANG_CHANNEL_MENU
desc: in sound_settings
eng: "Channels"
voice: "Kanäle"
new: "Kanäle"
voice: "Kanäle"
new: "Kanäle"
id: LANG_CHANNEL
desc: in sound_settings
@ -363,8 +363,8 @@ new: "Mono rechts"
id: LANG_AUTOVOL
desc: in sound_settings
eng: "Auto Volume"
voice: "Automatische Lautstärke"
new: "Autom. Lautstärke"
voice: "Automatische Lautstärke"
new: "Autom. Lautstärke"
id: LANG_SHOWDIR_ERROR_BUFFER
desc: in showdir(), displayed on screen when you reach buffer limit
@ -466,7 +466,7 @@ id: LANG_ID3_ARTIST
desc: in wps
eng: "[Artist]"
voice: ""
new: "[Künstler]"
new: "[Künstler]"
id: LANG_ID3_NO_ARTIST
desc: DEPRECATED
@ -502,7 +502,7 @@ id: LANG_ID3_LENGHT
desc: in wps
eng: "[Length]"
voice: ""
new: "[Länge]"
new: "[Länge]"
id: LANG_ID3_PLAYLIST
desc: in wps
@ -609,8 +609,8 @@ new: "Musik"
id: LANG_FILTER_SUPPORTED
desc: show all file types supported by Rockbox
eng: "Supported"
voice: "Unterstützte"
new: "Unterstützte"
voice: "Unterstützte"
new: "Unterstützte"
id: LANG_FILTER_ALL
desc: show all files
@ -651,8 +651,8 @@ new: "Aussteuerung Haltezeit"
id: LANG_PM_CLIP_HOLD
desc: in the peak meter menu
eng: "Clip Hold Time"
voice: "Übersteuerung Haltezeit"
new: "Übersteuerung Haltezeit"
voice: "Übersteuerung Haltezeit"
new: "Übersteuerung Haltezeit"
id: LANG_PM_ETERNAL
desc: in the peak meter menu
@ -777,8 +777,8 @@ new: "Feb"
id: LANG_MONTH_MARCH
desc: Maximum 3-letter abbreviation for monthname
eng: "Mar"
voice: "März"
new: "Mär"
voice: "März"
new: "Mär"
id: LANG_MONTH_APRIL
desc: Maximum 3-letter abbreviation for monthname
@ -849,8 +849,8 @@ new: "Batterieanzeige"
id: LANG_VOLUME_DISPLAY
desc: Volume type title
eng: "Volume Display"
voice: "Lautstärkeanzeige"
new: "Lautstärkeanzeige"
voice: "Lautstärkeanzeige"
new: "Lautstärkeanzeige"
id: LANG_DISPLAY_GRAPHIC
desc: Label for type of icon display
@ -909,8 +909,8 @@ new: "Kleinster Wert"
id: LANG_PM_MAX
desc: in the peak meter menu
eng: "Maximum Of Range"
voice: "Größter Wert"
new: "Größter Wert"
voice: "Größter Wert"
new: "Größter Wert"
id: LANG_RECORDING
desc: in the main menu
@ -939,8 +939,8 @@ new: "V. Rechts"
id: LANG_RECORDING_QUALITY
desc: in the recording settings
eng: "Quality"
voice: "Qualität"
new: "Qualität"
voice: "Qualität"
new: "Qualität"
id: LANG_RECORDING_FREQUENCY
desc: in the recording settings
@ -957,8 +957,8 @@ new: "Quelle"
id: LANG_RECORDING_CHANNELS
desc: in the recording settings
eng: "Channels"
voice: "Kanäle"
new: "Kanäle"
voice: "Kanäle"
new: "Kanäle"
id: LANG_RECORDING_SRC_MIC
desc: in the recording settings
@ -1023,8 +1023,8 @@ new: "Einschlaftimer"
id: LANG_MP3BUFFER_MARGIN
desc: MP3 buffer margin time
eng: "Anti-Skip Buffer"
voice: "Puffer vorzeitig füllen"
new: "Puffer vorzeitig füllen"
voice: "Puffer vorzeitig füllen"
new: "Puffer vorzeitig füllen"
id: LANG_BIDIR_SCROLL
desc: Bidirectional scroll limit
@ -1035,8 +1035,8 @@ new: "Bidirektionales Scroll-Limit"
id: LANG_SCROLL_DELAY
desc: Delay before scrolling
eng: "Scroll Start Delay"
voice: "Start-Verzögerung"
new: "Start-Verzögerung"
voice: "Start-Verzögerung"
new: "Start-Verzögerung"
id: LANG_SCROLL_STEP
desc: Pixels to advance per scroll
@ -1048,7 +1048,7 @@ id: LANG_SCROLL_STEP_EXAMPLE
desc: Pixels to advance per scroll
eng: "Scroll Step Size Setting Example Text"
voice: ""
new: "Beispieltext für die Schrittweite"
new: "Beispieltext für die Schrittweite"
id: LANG_SCROLL_SPEED
desc: in display_settings_menu()
@ -1066,7 +1066,7 @@ id: LANG_BATTERY_TOPOFF_CHARGE
desc: in info display, shows that top off charge is running
eng: "Battery: Top-Off Chg"
voice: ""
new: "Akku: Übergangsladen"
new: "Akku: Übergangsladen"
id: LANG_BATTERY_TRICKLE_CHARGE
desc: in info display, shows that trickle charge is running
@ -1077,8 +1077,8 @@ new: "Akku: Erhaltladen"
id: LANG_BATTERY_CAPACITY
desc: in settings_menu
eng: "Battery Capacity"
voice: "Batteriekapazität"
new: "Batteriekapazität"
voice: "Batteriekapazität"
new: "Batteriekapazität"
id: LANG_MENU_SETTING_CANCEL
desc: Visual confirmation of canceling a changed setting
@ -1095,20 +1095,20 @@ new: "In Warteschlange stellen"
id: LANG_DELETE
desc: The verb/action Delete
eng: "Delete"
voice: "Löschen"
new: "Löschen"
voice: "Löschen"
new: "Löschen"
id: LANG_REALLY_DELETE
desc: Really Delete?
eng: "Delete?"
voice: ""
new: "Löschen?"
new: "Löschen?"
id: LANG_DELETED
desc: A file has beed deleted
eng: "Deleted"
voice: ""
new: "Gelöscht"
new: "Gelöscht"
id: LANG_RENAME
desc: The verb/action Rename
@ -1150,7 +1150,7 @@ id: LANG_ALARM_MOD_ERROR
desc: The text that tells that the time is incorrect (for the RTC alarm mod).
eng: "Alarm Time Is Too Soon!"
voice: ""
new: "Weckzeit ist zu früh!"
new: "Weckzeit ist zu früh!"
id: LANG_ALARM_MOD_KEYS
desc: Shown key functions in alarm menu (for the RTC alarm mod).
@ -1228,7 +1228,7 @@ id: LANG_RECORDING_SIZE
desc: Display of recorded file size
eng: "Size:"
voice: ""
new: "Größe:"
new: "Größe:"
id: LANG_SETTINGS_LOADED1
desc: Feedback shown when a .cfg file is loaded
@ -1329,8 +1329,8 @@ new: "Zeilenauswahl"
id: LANG_RECORDING_EDITABLE
desc: Editable recordings setting
eng: "Independent frames"
voice: "Unabhängige mp3-Rahmen"
new: "Unabhängige mp3-Frames"
voice: "Unabhängige mp3-Rahmen"
new: "Unabhängige mp3-Frames"
id: LANG_STATUS_BAR
desc: display menu, F3 substitute
@ -1383,8 +1383,8 @@ new: "Max Anzahl Dateien in Verzeichnisanzeige"
id: LANG_MAX_FILES_IN_PLAYLIST
desc: in settings_menu
eng: "Max playlist size"
voice: "Maximale Länge Abspielliste"
new: "Max Playlist-Länge"
voice: "Maximale Länge Abspielliste"
new: "Max Playlist-Länge"
id: LANG_JUMP_SCROLL
desc: (player) menu altarnative for jump scroll
@ -1407,14 +1407,14 @@ new: "Immer"
id: LANG_JUMP_SCROLL_DELAY
desc: (player) Delay before making a jump scroll
eng: "Jump Scroll Delay"
voice: "Sprung-Scroll Verzögerung"
new: "Sprung-Scroll Verzögerung"
voice: "Sprung-Scroll Verzögerung"
new: "Sprung-Scroll Verzögerung"
id: LANG_RECORD_TIMESPLIT
desc: Prompt for record timer interval setting, in the record settings menu
eng: "Time Split"
voice: "Zeitabhängiges Aufteilen"
new: "Zeitabhängiges Aufteilen"
voice: "Zeitabhängiges Aufteilen"
new: "Zeitabhängiges Aufteilen"
id: LANG_RECORD_TIMESPLIT_REC
desc: Display of record timer interval setting, on the record screen
@ -1432,7 +1432,7 @@ id: LANG_DISK_FULL
desc: in recording screen
eng: "The disk is full. Press OFF to continue."
voice: ""
new: "Festplatte voll. Drücke OFF zum fortfahren."
new: "Festplatte voll. Drücke OFF zum fortfahren."
id: LANG_CONFIRM_WITH_PLAY_RECORDER
desc: Generic recorder string to use to confirm
@ -1454,7 +1454,7 @@ id: LANG_PLUGIN_CANT_OPEN
desc: Plugin open error message
eng: "Can't open %s"
voice: ""
new: "Kann %s nicht öffnen"
new: "Kann %s nicht öffnen"
id: LANG_READ_FAILED
desc: There was an error reading a file
@ -1488,7 +1488,7 @@ id: LANG_BOOT_CHANGED
desc: File browser discovered the boot file was changed
eng: "Boot changed"
voice: ""
new: "Boot geändert"
new: "Boot geändert"
id: LANG_REBOOT_NOW
desc: Do you want to reboot?
@ -1505,26 +1505,26 @@ new: "Warteschlange als Letzten"
id: LANG_INSERT
desc: in onplay menu. insert a track/playlist into dynamic playlist.
eng: "Insert"
voice: "Einfügen"
new: "Einfügen"
voice: "Einfügen"
new: "Einfügen"
id: LANG_INSERT_LAST
desc: in onplay menu. append a track/playlist into dynamic playlist.
eng: "Insert last"
voice: "Einfügen als Letzten"
new: "Einfügen als Letzten"
voice: "Einfügen als Letzten"
new: "Einfügen als Letzten"
id: LANG_QUEUE_FIRST
desc: in onplay menu. queue a track/playlist into dynamic playlist.
eng: "Queue next"
voice: "Warteschlange als Nächsten"
new: "Warteschlange als Nächsten"
voice: "Warteschlange als Nächsten"
new: "Warteschlange als Nächsten"
id: LANG_INSERT_FIRST
desc: in onplay menu. insert a track/playlist into dynamic playlist.
eng: "Insert next"
voice: "Einfügen als Nächsten"
new: "Einfügen als Nächsten"
voice: "Einfügen als Nächsten"
new: "Einfügen als Nächsten"
id: LANG_SAVE_DYNAMIC_PLAYLIST
desc: in playlist menu.
@ -1542,7 +1542,7 @@ id: LANG_PLAYLIST_INSERT_COUNT
desc: splash number of tracks inserted
eng: "Inserted %d tracks (%s)"
voice: ""
new: "%d Tracks eingefügt (%s)"
new: "%d Tracks eingefügt (%s)"
id: LANG_PLAYLIST_QUEUE_COUNT
desc: splash number of tracks queued
@ -1596,13 +1596,13 @@ id: LANG_PLAYLIST_CONTROL_INVALID
desc: Playlist resume error
eng: "Playlist control file is invalid"
voice: ""
new: "Playlist-Steuerdatei ist ungültig"
new: "Playlist-Steuerdatei ist ungültig"
id: LANG_RECURSE_DIRECTORY
desc: In playlist menu
eng: "Recursively Insert Directories"
voice: "Verzeichnisse rekursiv hinzufügen"
new: "Verzeichnisse rekursiv hinzufügen"
voice: "Verzeichnisse rekursiv hinzufügen"
new: "Verzeichnisse rekursiv hinzufügen"
id: LANG_RECURSE_DIRECTORY_QUESTION
desc: Asked from onplay screen
@ -1613,8 +1613,8 @@ new: "Rekursiv?"
id: LANG_CUSTOM_FONT
desc: in setting_menu()
eng: "Browse Fonts"
voice: "Zeige Zeichensätze"
new: "Zeige Zeichensätze"
voice: "Zeige Zeichensätze"
new: "Zeige Zeichensätze"
id: LANG_FIRMWARE
desc: in the main menu
@ -1668,7 +1668,7 @@ id: LANG_BUTTONBAR_MENU
desc: in button bar
eng: "Menu"
voice: ""
new: "Menü"
new: "Menü"
id: LANG_FM_BUTTONBAR_PRESETS
desc: in button bar
@ -1757,8 +1757,8 @@ new: "Vorab-Aufnahme"
id: LANG_RECORD_PRERECORD_TIME
desc: in recording settings_menu
eng: "Prerecord time"
voice: "Vorab-Aufnahme-Länge"
new: "Vorab-Aufnahme-Länge"
voice: "Vorab-Aufnahme-Länge"
new: "Vorab-Aufnahme-Länge"
#Auto bookmark prompts
@ -1810,13 +1810,13 @@ id: LANG_BOOKMARK_SELECT_PLAY
desc: Used on the bookmark select window to indicated the play option
eng: "PLAY = Select"
voice: ""
new: "PLAY = Auswählen"
new: "PLAY = Auswählen"
id: LANG_BOOKMARK_SELECT_DELETE
desc: Used on the bookmark select window to indicated the bookmark delete option
eng: "ON+Play = Delete"
voice: ""
new: "ON+Play = Löschen"
new: "ON+Play = Löschen"
# Bookmark creation/failure text
@ -1925,7 +1925,7 @@ new: "Aufnahmemodus"
id: LANG_WIND_MENU
desc: in the playback sub menu
eng: "FFwd/Rewind"
voice: "Vor- und Rücklauf"
voice: "Vor- und Rücklauf"
new: "FF/RW"
id: LANG_LCD_MENU
@ -2042,7 +2042,7 @@ id: LANG_DIRBROWSE_F1
desc: in dir browser, F1 button bar text
eng: "Menu"
voice: ""
new: "Menü"
new: "Menü"
id: LANG_DIRBROWSE_F2
desc: in dir browser, F2 button bar text
@ -2375,8 +2375,8 @@ new: "Sprachausgabe"
id: LANG_VOICE_MENU
desc: item of voice menu, enable/disable the voice UI
eng: "Voice Menus"
voice: "Menüs"
new: "Menüs"
voice: "Menüs"
new: "Menüs"
id: LANG_VOICE_DIR
desc: item of voice menu, set the "talkbox" mode for directories
@ -2639,8 +2639,8 @@ new:
id: LANG_DELETE_DIR
desc: in on+play menu
eng: "Delete directory"
voice: "Verzeichnis löschen"
new: "Verzeichnis löschen"
voice: "Verzeichnis löschen"
new: "Verzeichnis löschen"
id: VOICE_CURRENT_TIME
desc: spoken only, for wall clock announce
@ -2677,8 +2677,8 @@ new: "Dateitypen-Zeichenpuffer leer"
id: LANG_ONPLAY_OPEN_WITH
desc: Onplay open with
eng: "Open with"
voice: "öffnen mit"
new: "Öffnen mit"
voice: "öffnen mit"
new: "Öffnen mit"
id: LANG_SORT_DIR
desc: browser sorting setting
@ -2755,14 +2755,14 @@ new: "Aktion"
id: LANG_MDB_STRENGTH
desc: in sound settings
eng: "MDB Strength"
voice: "MDB Stärke"
new: "MDB Stärke"
voice: "MDB Stärke"
new: "MDB Stärke"
id: LANG_MDB_HARMONICS
desc: in sound settings
eng: "MDB Harmonics"
voice: "MDB Obertöne"
new: "MDB Obertöne"
voice: "MDB Obertöne"
new: "MDB Obertöne"
id: LANG_MDB_CENTER
desc: in sound settings
@ -2834,7 +2834,7 @@ id: LANG_INSTALLATION_INCOMPLETE
desc: in browse root
eng: "Installation incomplete"
voice: ""
new: "Installation unvollständig"
new: "Installation unvollständig"
id: LANG_REMOVE_MMC
desc: before acknowledging usb in case an MMC is inserted (Ondio)
@ -2876,7 +2876,7 @@ id: LANG_ID3DB_ARTISTS
desc: ID3 virtual folder name
eng: "Artists"
voice: ""
new: "Künstler"
new: "Künstler"
id: LANG_ID3DB_ALBUMS
desc: ID3 virtual folder name
@ -2900,7 +2900,7 @@ id: LANG_ID3DB_SEARCH_ARTISTS
desc: ID3 virtual folder name
eng: "Search Artists"
voice: ""
new: "Suche Künstler"
new: "Suche Künstler"
id: LANG_ID3DB_SEARCH_ALBUMS
desc: ID3 virtual folder name
@ -3020,7 +3020,7 @@ id: LANG_RECORD_MIN_DURATION
desc: in recording settings_menu
eng: "for at least"
voice:
new: "für mindestens"
new: "für mindestens"
id: LANG_RECORD_STOP_THRESHOLD
desc: in recording settings_menu
@ -3032,7 +3032,7 @@ id: LANG_RECORD_STOP_POSTREC
desc: in recording settings_menu
eng: "for at least"
voice:
new: "für mindestens"
new: "für mindestens"
id: LANG_RECORD_STOP_GAP
desc: in recording settings_menu
@ -3097,8 +3097,8 @@ new: "MMC:"
id: LANG_CROSSFADE
desc: in playback settings
eng: "Crossfade"
voice: "Überblenden"
new: "Überblenden"
voice: "Überblenden"
new: "Überblenden"
id: LANG_BACKLIGHT_FADE_IN
desc: in settings_menu
@ -3127,8 +3127,8 @@ new: "Nichts fortzusetzen"
id: LANG_INSERT_SHUFFLED
desc: in onplay menu. insert a track/playlist randomly into dynamic playlist
eng: "Insert shuffled"
voice: "Zufällig einfügen"
new: "Zufällig einfügen"
voice: "Zufällig einfügen"
new: "Zufällig einfügen"
id: LANG_SPDIF_ENABLE
desc: in playback settings menu. enable/disable the optical out
@ -3181,50 +3181,50 @@ new: "Neustart der Wiedergabe..."
id: LANG_REPLAYGAIN
desc: in replaygain
eng: "Replaygain"
voice: "Lautstärkeanpassung"
new: "Lautstärkeanpassung"
voice: "Lautstärkeanpassung"
new: "Lautstärkeanpassung"
id: LANG_REPLAYGAIN_ENABLE
desc: in replaygain
eng: "Enable replaygain"
voice: "Lautstärkeanpassung aktivieren"
new: "Lautstärkeanpassung aktivieren"
voice: "Lautstärkeanpassung aktivieren"
new: "Lautstärkeanpassung aktivieren"
id: LANG_REPLAYGAIN_NOCLIP
desc: in replaygain
eng: "Prevent clipping"
voice: "Übersteuerung verhindern"
new: "Übersteuerung verhindern"
voice: "Übersteuerung verhindern"
new: "Übersteuerung verhindern"
id: LANG_REPLAYGAIN_MODE
desc: in replaygain
eng: "Replaygain type"
voice: "Lautstärkeanpassungstyp"
new: "Lautstärkeanpassungstyp"
voice: "Lautstärkeanpassungstyp"
new: "Lautstärkeanpassungstyp"
id: LANG_TRACK_GAIN
desc: in replaygain
eng: "Track gain"
voice: "Titellautstärke"
new: "Titellautstärke"
voice: "Titellautstärke"
new: "Titellautstärke"
id: LANG_ALBUM_GAIN
desc: in replaygain
eng: "Album gain"
voice: "Albumlautstärke"
new: "Albumlautstärke"
voice: "Albumlautstärke"
new: "Albumlautstärke"
id: LANG_ID3_TRACK_GAIN
desc: in browse_id3
eng: "[Track gain]"
voice:
new: "[Titellautstärke]"
new: "[Titellautstärke]"
id: LANG_ID3_ALBUM_GAIN
desc: in browse_id3
eng: "[Album gain]"
voice:
new: "[Albumlautstärke]"
new: "[Albumlautstärke]"
id: LANG_ID3_NO_GAIN
desc: DEPRECATED
@ -3236,13 +3236,13 @@ id: LANG_BIDI_SUPPORT
desc: in settings_menu, option to enable reversal of hebrew/arabic text
eng: "BiDi Hebrew/Arabic"
voice: "Bidirektionaler Text"
new: "BiDi Hebräisch/Arabisch"
new: "BiDi Hebräisch/Arabisch"
id: LANG_REPLAYGAIN_PREAMP
desc: in replaygain settings
eng: "Pre-amp"
voice: "Vorverstärkung"
new: "Vorverstärkung"
voice: "Vorverstärkung"
new: "Vorverstärkung"
id: LANG_UNIT_DB
desc: in browse_id3
@ -3259,8 +3259,8 @@ new: " (VBR)"
id: LANG_BEEP
desc: in playback settings
eng: "Beep volume"
voice: "Piep-Lautstärke"
new: "Piep-Lautstärke"
voice: "Piep-Lautstärke"
new: "Piep-Lautstärke"
id: LANG_WEAK
desc: in beep volume in playback settings
@ -3289,8 +3289,8 @@ new: "A-B"
id: LANG_SHUFFLE_GAIN
desc: use track gain if shuffle mode is on, album gain otherwise
eng: "Track gain if shuffling"
voice: "Titellautstärke beim Mischen"
new: "Titellautstärke beim Mischen"
voice: "Titellautstärke beim Mischen"
new: "Titellautstärke beim Mischen"
id: LANG_DIRCACHE_ENABLE
desc: in directory cache settings
@ -3313,20 +3313,20 @@ new: "Lese Festplatte..."
id: LANG_CROSSFADE_ENABLE
desc: in crossfade settings menu
eng: "Enable crossfade"
voice: "Überblenden aktivieren"
new: "Überblenden aktivieren"
voice: "Überblenden aktivieren"
new: "Überblenden aktivieren"
id: LANG_CROSSFADE_FADE_IN_DELAY
desc: in crossfade settings menu
eng: "Fade in delay"
voice: "Einblendverzögerung"
new: "Einblendverzögerung"
voice: "Einblendverzögerung"
new: "Einblendverzögerung"
id: LANG_CROSSFADE_FADE_OUT_DELAY
desc: in crossfade settings menu
eng: "Fade out delay"
voice: "Ausblendverzögerung"
new: "Ausblendverzögerung"
voice: "Ausblendverzögerung"
new: "Ausblendverzögerung"
id: LANG_CROSSFADE_FADE_IN_DURATION
desc: in crossfade settings menu
@ -3349,14 +3349,14 @@ new: "Ausblendmodus"
id: LANG_RECORDING_ADC_RIGHT
desc: in the recording settings
eng: "ADC Gain Right"
voice: "Verstärkung rechts"
new: "Verstärkung rechts"
voice: "Verstärkung rechts"
new: "Verstärkung rechts"
id: LANG_RECORDING_ADC_LEFT
desc: in the recording settings
eng: "ADC Gain Left"
voice: "Verstärkung links"
new: "Verstärkung links"
voice: "Verstärkung links"
new: "Verstärkung links"
id: LANG_RECORDING_MONITOR
desc: DEPRECATED
@ -3415,14 +3415,14 @@ new: "%d,%01dMHz"
id: LANG_FM_ADD_PRESET
desc: in radio menu
eng: "Add preset"
voice: "Sender hinzufügen"
new: "Sender hinzufügen"
voice: "Sender hinzufügen"
new: "Sender hinzufügen"
id: LANG_FM_CLEAR_PRESETS
desc: confirmation if presets can be cleared
eng: "Clear current presets?"
voice: ""
new: "Alle Sender löschen?"
new: "Alle Sender löschen?"
id: LANG_WAIT
desc: general please wait splash

View file

@ -3240,9 +3240,9 @@ voice: ""
new:
id: LANG_BIDI_SUPPORT
desc: in settings_menu, option to enable reversal of hebrew/arabic text
eng: "BiDi Hebrew/Arabic"
voice: "Bidirectional text"
desc: DEPRECATED
eng: ""
voice: ""
new:
id: LANG_REPLAYGAIN_PREAMP
@ -3389,6 +3389,90 @@ eng: "Screen frozen!"
voice: ""
new:
id: LANG_DEFAULT_CODEPAGE
desc: default encoding used with id3 tags
eng: "Default Codepage"
voice:
new:
id: LANG_CODEPAGE_LATIN1
desc: in codepage setting menu
eng: "Latin1 (ISO-8859-1)"
voice:
new:
id: LANG_CODEPAGE_GREEK
desc: in codepage setting menu
eng: "Greek (ISO-8859-7)"
voice:
new:
id: LANG_CODEPAGE_HEBREW
desc: in codepage setting menu
eng: "Hebrew (ISO-8859-8)"
voice:
new:
id: LANG_CODEPAGE_RUSSIAN
desc: in codepage setting menu
eng: "Russian (CP1251)"
voice:
new:
id: LANG_CODEPAGE_THAI
desc: in codepage setting menu
eng: "Thai (ISO-8859-11)"
voice:
new:
id: LANG_CODEPAGE_ARABIC
desc: in codepage setting menu
eng: "Arabic (ISO-8859-6)"
voice:
new:
id: LANG_CODEPAGE_TURKISH
desc: in codepage setting menu
eng: "Turkish (ISO-8859-9)"
voice:
new:
id: LANG_CODEPAGE_LATIN_EXTENDED
desc: in codepage setting menu
eng: "Latin Extended (ISO-8859-2)"
voice:
new:
id: LANG_CODEPAGE_JAPANESE
desc: in codepage setting menu
eng: "Japanese (SJIS)"
voice:
new:
id: LANG_CODEPAGE_SIMPLIFIED
desc: in codepage setting menu
eng: "Simp. Chinese (GB2312)"
voice:
new:
id: LANG_CODEPAGE_KOREAN
desc: in codepage setting menu
eng: "Korean (KSX1001)"
voice:
new:
id: LANG_CODEPAGE_TRADITIONAL
desc: in codepage setting menu
eng: "Trad. Chinese (BIG5)"
voice:
new:
id: LANG_CODEPAGE_UTF8
decs: in codepage setting menu
eng: "Unicode (UTF-8)"
voice:
new:
id: LANG_CROSSFEED_ENABLE
desc: DEPRECATED
eng: ""

View file

@ -14,20 +14,20 @@ new: "Opciones Generales"
id: LANG_INFO
desc: in the main menu
eng: "Info"
voice: "Información"
new: "Información"
voice: "Información"
new: "Información"
id: LANG_VERSION
desc: in the main menu
eng: "Version"
voice: "Versión"
new: "Versión"
voice: "Versión"
new: "Versión"
id: LANG_DEBUG
desc: in the main menu
eng: "Debug (Keep Out!)"
voice: "Depuración (¡no tocar!)"
new: "Depuración (¡no tocar!)"
voice: "Depuración (¡no tocar!)"
new: "Depuración (¡no tocar!)"
id: LANG_USB
desc: in the main menu
@ -57,7 +57,7 @@ id: LANG_BATTERY_CHARGE
desc: tells that the battery is charging, instead of battery level
eng: "Battery: Charging"
voice: ""
new: "Batería: Cargando"
new: "Batería: Cargando"
id: LANG_PLAYLIST_LOAD
desc: displayed on screen while loading a playlist
@ -93,7 +93,7 @@ id: LANG_SETTINGS_BATTERY_PLAYER
desc: if save settings has failed
eng: "Partition?"
voice: ""
new: "Partición?"
new: "Partición?"
id: LANG_SETTINGS_SAVE_RECORDER
desc: displayed if save settings has failed
@ -105,7 +105,7 @@ id: LANG_SETTINGS_BATTERY_RECORDER
desc: if save settings has failed
eng: "No partition?"
voice: ""
new: "¿No hay partición?"
new: "¿No hay partición?"
id: LANG_TIME_SET
desc: used in set_time()
@ -134,14 +134,14 @@ new: "Aleatorio"
id: LANG_PLAY_SELECTED
desc: in settings_menu
eng: "Play Selected First"
voice: "Reproducir primero la canción marcada"
new: "Reproducir primero la canción marcada"
voice: "Reproducir primero la canción marcada"
new: "Reproducir primero la canción marcada"
id: LANG_SORT_CASE
desc: in settings_menu
eng: "Sort Case Sensitive"
voice: "Sensible a May/minúsculas"
new: "Sensible a May/minúsculas"
voice: "Sensible a May/minúsculas"
new: "Sensible a May/minúsculas"
id: LANG_RESUME
desc: in settings_menu
@ -170,8 +170,8 @@ new: "Activo"
id: LANG_BACKLIGHT
desc: in settings_menu
eng: "Backlight"
voice: "Iluminación"
new: "Iluminación"
voice: "Iluminación"
new: "Iluminación"
id: LANG_SCROLL
desc: in settings_menu
@ -200,26 +200,26 @@ new: "Parada del disco duro"
id: LANG_FFRW_STEP
desc: in settings_menu
eng: "FF/RW Min Step"
voice: "Paso mínimo"
new: "Paso mínimo FF/RW"
voice: "Paso mínimo"
new: "Paso mínimo FF/RW"
id: LANG_FFRW_ACCEL
desc: in settings_menu
eng: "FF/RW Accel"
voice: "Aceleración"
new: "Aceleración FF/RW"
voice: "Aceleración"
new: "Aceleración FF/RW"
id: LANG_FOLLOW
desc: in settings_menu
eng: "Follow Playlist"
voice: "Seguir lista de reproducción"
voice: "Seguir lista de reproducción"
new: "Seguir lista de repr."
id: LANG_RESET_ASK_RECORDER
desc: confirm to reset settings
eng: "Are You Sure?"
voice: ""
new: "¿Estás seguro?"
new: "¿Estás seguro?"
id: LANG_RESET_DONE_SETTING
desc: visual confirmation after settings reset
@ -260,8 +260,8 @@ new: "Reiniciar opciones"
id: LANG_PLAYBACK
desc: in settings_menu()
eng: "Playback"
voice: "Reproducción"
new: "Reproducción"
voice: "Reproducción"
new: "Reproducción"
id: LANG_FILE
desc: in settings_menu()
@ -321,7 +321,7 @@ id: LANG_DECAY
desc: in sound_settings
eng: "AV Decay Time"
voice: ""
new: "Tiempo de caída del AV"
new: "Tiempo de caída del AV"
id: LANG_CHANNEL_MENU
desc: in sound_settings
@ -333,13 +333,13 @@ id: LANG_CHANNEL
desc: in sound_settings
eng: "Channel Configuration"
voice: ""
new: "Configuración de canales"
new: "Configuración de canales"
id: LANG_CHANNEL_STEREO
desc: in sound_settings
eng: "Stereo"
voice: "Estéreo"
new: "Estéreo"
voice: "Estéreo"
new: "Estéreo"
id: LANG_CHANNEL_MONO
desc: in sound_settings
@ -453,13 +453,13 @@ id: LANG_ID3_TITLE
desc: in wps
eng: "[Title]"
voice: ""
new: "[Título]"
new: "[Título]"
id: LANG_ID3_NO_TITLE
desc: in wps when no title is avaible
eng: "<No Title>"
voice: ""
new: "<sin título>"
new: "<sin título>"
id: LANG_ID3_ARTIST
desc: in wps
@ -477,31 +477,31 @@ id: LANG_ID3_ALBUM
desc: in wps
eng: "[Album]"
voice: ""
new: "[Álbum]"
new: "[Álbum]"
id: LANG_ID3_NO_ALBUM
desc: in wps when no album is avaible
eng: "<No Album>"
voice: ""
new: "<sin álbum>"
new: "<sin álbum>"
id: LANG_ID3_TRACKNUM
desc: in wps
eng: "[Tracknum]"
voice: ""
new: "[Nº pista]"
new: "[Nº pista]"
id: LANG_ID3_NO_TRACKNUM
desc: in wps if no track number is avaible
eng: "<No Tracknum>"
voice: ""
new: "<sin nº pista>"
new: "<sin nº pista>"
id: LANG_ID3_LENGHT
desc: in wps
eng: "[Length]"
voice: ""
new: "[Tamaño]"
new: "[Tamaño]"
id: LANG_ID3_PLAYLIST
desc: in wps
@ -602,8 +602,8 @@ new: "Mostrar archivos"
id: LANG_FILTER_MUSIC
desc: show only music-related files
eng: "Music"
voice: "Música"
new: "Música"
voice: "Música"
new: "Música"
id: LANG_FILTER_SUPPORTED
desc: show all file types supported by Rockbox
@ -668,8 +668,8 @@ new: "Unidades por lectura"
id: LANG_BACKLIGHT_ON_WHEN_CHARGING
desc: in display_settings_menu
eng: "Backlight On When Plugged"
voice: "Iluminación estando enchufado"
new: "Iluminación estando enchufado"
voice: "Iluminación estando enchufado"
new: "Iluminación estando enchufado"
id: LANG_REPEAT
desc: in settings_menu
@ -746,44 +746,44 @@ new: "Despertandose en %d:%02d"
id: LANG_BATTERY_CAPACITY
desc: in settings_menu
eng: "Battery Capacity"
voice: "Capacidad Batería"
new: "Capacidad Batería"
voice: "Capacidad Batería"
new: "Capacidad Batería"
id: LANG_BATTERY_DISPLAY
desc: Battery type title
eng: "Battery Display"
voice: "Mostrar Batería"
new: "Mostrar Batería"
voice: "Mostrar Batería"
new: "Mostrar Batería"
id: LANG_BATTERY_TIME
desc: battery level in % and estimated time remaining
eng: "%d%% %dh %dm"
voice: "Nivel de batería"
voice: "Nivel de batería"
new: "%d%% %dh %dm"
id: LANG_BATTERY_TOPOFF_CHARGE
desc: in info display, shows that top off charge is running
eng: "Battery: Top-Off Chg"
voice: ""
new: "Batería: Top-Off Chg"
new: "Batería: Top-Off Chg"
id: LANG_BATTERY_TRICKLE_CHARGE
desc: in info display, shows that trickle charge is running
eng: "Battery: Trickle Chg"
voice: ""
new: "Batería: Trickle Chg"
new: "Batería: Trickle Chg"
id: LANG_BIDIR_SCROLL
desc: Bidirectional scroll limit
eng: "Bidirectional Scroll Limit"
voice: "Límite de desplazamiento bidireccional"
new: "Límite de desplaz. bidireccional"
voice: "Límite de desplazamiento bidireccional"
new: "Límite de desplaz. bidireccional"
id: LANG_CREATE_PLAYLIST
desc: Menu option for creating a playlist
eng: "Create Playlist"
voice: "Crear lista de reproducción"
new: "Crear Lista de Reproducción"
voice: "Crear lista de reproducción"
new: "Crear Lista de Reproducción"
id: LANG_CREATING
desc: Screen feedback during playlist creation
@ -818,14 +818,14 @@ new:
id: LANG_DISPLAY_GRAPHIC
desc: Label for type of icon display
eng: "Graphic"
voice: "Gráfico"
new: "Gráfico"
voice: "Gráfico"
new: "Gráfico"
id: LANG_DISPLAY_NUMERIC
desc: Label for type of icon display
eng: "Numeric"
voice: "Numérico"
new: "Numérico"
voice: "Numérico"
new: "Numérico"
id: LANG_FAILED
desc: Something failed. To be appended after above actions
@ -836,14 +836,14 @@ new: "Fallido"
id: LANG_FILTER_PLAYLIST
desc: show only playlist
eng: "Playlists"
voice: "Listas de reproducción"
new: "Listas de reproducción"
voice: "Listas de reproducción"
new: "Listas de reproducción"
id: LANG_ID3_GENRE
desc: ID3 frame 'genre'
eng: "[Genre]"
voice: ""
new: "[Género]"
new: "[Género]"
id: LANG_ID3_NO_INFO
desc: ID3 info is missing
@ -855,7 +855,7 @@ id: LANG_ID3_YEAR
desc: ID3 info 'year'
eng: "[Year]"
voice: ""
new: "[Año]"
new: "[Año]"
id: LANG_MENU_SETTING_CANCEL
desc: Visual confirmation of canceling a changed setting
@ -974,13 +974,13 @@ new:
id: LANG_PM_DBFS
desc: in the peak meter menu
eng: "Logarithmic(dB)"
voice: "Logarítmica decibelio"
new: "Logarítmica(dB)"
voice: "Logarítmica decibelio"
new: "Logarítmica(dB)"
id: LANG_PM_ENERGY_SAVER
desc: in the peak meter menu
eng: "Save Energy"
voice: "Ahorrar energía"
voice: "Ahorrar energía"
new: "Ahorrar energia"
id: LANG_PM_HIGH_PERFORMANCE
@ -998,14 +998,14 @@ new: "Lineal(%)"
id: LANG_PM_MAX
desc: in the peak meter menu
eng: "Maximum Of Range"
voice: "Máximo de rango"
new: "Máximo de rango"
voice: "Máximo de rango"
new: "Máximo de rango"
id: LANG_PM_MIN
desc: in the peak meter menu
eng: "Minimum Of Range"
voice: "Mínimo de rango"
new: "Mínimo de rango"
voice: "Mínimo de rango"
new: "Mínimo de rango"
id: LANG_PM_PERFORMANCE
desc: in the peak meter menu
@ -1035,13 +1035,13 @@ id: LANG_REALLY_DELETE
desc: Really Delete?
eng: "Delete?"
voice: ""
new: "¿Borrar?"
new: "¿Borrar?"
id: LANG_RECORDING
desc: in the main menu
eng: "Recording"
voice: "Grabación"
new: "Grabación"
voice: "Grabación"
new: "Grabación"
id: LANG_RECORDING_CHANNELS
desc: in the recording settings
@ -1082,8 +1082,8 @@ new: "Derecho"
id: LANG_RECORDING_SETTINGS
desc: in the main menu
eng: "Recording Settings"
voice: "Opciones de Grabación"
new: "Opciones de Grabación"
voice: "Opciones de Grabación"
new: "Opciones de Grabación"
id: LANG_RECORDING_SOURCE
desc: in the recording settings
@ -1100,13 +1100,13 @@ new: "Digital"
id: LANG_RECORDING_SRC_LINE
desc: in the recording settings
eng: "Line In"
voice: "Analógica"
new: "Analógica"
voice: "Analógica"
new: "Analógica"
id: LANG_RECORDING_SRC_MIC
desc: in the recording settings
eng: "Mic"
voice: "Micrófono"
voice: "Micrófono"
new: "Micro"
id: LANG_RENAME
@ -1148,14 +1148,14 @@ new: "Velocidad de Desplazamiento"
id: LANG_SCROLL_STEP
desc: Pixels to advance per scroll
eng: "Scroll Step Size"
voice: "Tamaño del paso de Desplazamiento"
new: "Tamaño del paso de Desplaz."
voice: "Tamaño del paso de Desplazamiento"
new: "Tamaño del paso de Desplaz."
id: LANG_SCROLL_STEP_EXAMPLE
desc: Pixels to advance per scroll
eng: "Scroll Step Size Setting Example Text"
voice: ""
new: "Texto de ejemplo del tamaño de paso de desplazamiento"
new: "Texto de ejemplo del tamaño de paso de desplazamiento"
id: LANG_SLEEP_TIMER
desc: sleep timer setting
@ -1257,7 +1257,7 @@ id: LANG_RECORDING_SIZE
desc: Display of recorded file size
eng: "Size:"
voice: ""
new: "Tamaño:"
new: "Tamaño:"
id: LANG_RECORDING_TIME
desc: Display of recorded time
@ -1268,7 +1268,7 @@ new: "Tiempo"
id: LANG_SAVE_SETTINGS
desc: in system_settings_menu()
eng: "Write .cfg file"
voice: "Escribir archivo de configuración"
voice: "Escribir archivo de configuración"
new: "Escribir archivo .cfg"
id: LANG_SETTINGS_LOADED1
@ -1346,8 +1346,8 @@ new: "Barra de Desplazamiento"
id: LANG_CAPTION_BACKLIGHT
desc: in settings_menu
eng: "Caption backlight"
voice: "Iluminacion al iniciar Canción"
new: "Iluminación al iniciar Canción"
voice: "Iluminacion al iniciar Canción"
new: "Iluminación al iniciar Canción"
id: LANG_INVERT_CURSOR_POINTER
desc: in settings_menu
@ -1383,7 +1383,7 @@ id: LANG_AUTO_BOOKMARK_QUERY
desc: prompt for user to decide to create an bookmark
eng: "Create a Bookmark?"
voice: ""
new: "¿Crear un marcapáginas?"
new: "¿Crear un marcapáginas?"
id: LANG_BARS_MENU
desc: in the display sub menu
@ -1394,62 +1394,62 @@ new: "Barras de Estado/Desplazamiento"
id: LANG_BATTERY_MENU
desc: in the system sub menu
eng: "Battery"
voice: "Batería"
new: "Batería"
voice: "Batería"
new: "Batería"
id: LANG_BOOKMARK_AUTOLOAD_QUERY
desc: prompt for user to decide to create a bookmark
eng: "Load Last Bookmark?"
voice: ""
new: "¿Cargar último Marcapáginas?"
new: "¿Cargar último Marcapáginas?"
id: LANG_BOOKMARK_CREATE_FAILURE
desc: Indicates bookmark was not created
eng: "Bookmark Failed!"
voice: ""
new: "Falló el Marcapáginas"
new: "Falló el Marcapáginas"
id: LANG_BOOKMARK_CREATE_SUCCESS
desc: Indicates bookmark was successfully created
eng: "Bookmark Created"
voice: ""
new: "Marcapáginas Creado"
new: "Marcapáginas Creado"
id: LANG_BOOKMARK_LOAD_EMPTY
desc: Indicates bookmark was empty
eng: "Bookmark Empty"
voice: ""
new: "Marcapáginas Vacio"
new: "Marcapáginas Vacio"
id: LANG_BOOKMARK_MENU
desc: Text on main menu to get to bookmark commands
eng: "Bookmarks"
voice: "Marcapáginas"
new: "Marcapáginas"
voice: "Marcapáginas"
new: "Marcapáginas"
id: LANG_BOOKMARK_MENU_CREATE
desc: Used off of the bookmark menu to create a bookmark
eng: "Create Bookmark"
voice: "Crear Marcapáginas"
new: "Crear Marcapáginas"
voice: "Crear Marcapáginas"
new: "Crear Marcapáginas"
id: LANG_BOOKMARK_MENU_LIST
desc: Used off of the bookmark menu to list available bookmarks for the currently playing directory or M3U
eng: "List Bookmarks"
voice: "Listar Marcapáginas"
new: "Listar Marcapáginas"
voice: "Listar Marcapáginas"
new: "Listar Marcapáginas"
id: LANG_BOOKMARK_MENU_RECENT_BOOKMARKS
desc: Text for the menu text to access the most recent bookmarks list
eng: "Recent Bookmarks"
voice: "Marcapáginas Recientes"
new: "Marcapáginas Recientes"
voice: "Marcapáginas Recientes"
new: "Marcapáginas Recientes"
id: LANG_BOOKMARK_SELECT_BOOKMARK_TEXT
desc: Used on the bookmark select window to label bookmark number
eng: "Bookmark"
voice: ""
new: "Marcapáginas"
new: "Marcapáginas"
id: LANG_BOOKMARK_SELECT_DELETE
desc: Used on the bookmark select window to indicated the bookmark delete option
@ -1466,8 +1466,8 @@ new: "OFF = Salir"
id: LANG_BOOKMARK_SELECT_INDEX_TEXT
desc: Used on the bookmark select window to label index number
eng: "Index"
voice: "Índice"
new: "Índice"
voice: "Índice"
new: "Índice"
id: LANG_BOOKMARK_SELECT_LIST_BOOKMARKS
desc: From the auto-load screen, allows user to list all bookmarks
@ -1490,44 +1490,44 @@ new: "Tiempo"
id: LANG_BOOKMARK_SETTINGS
desc: in general settings
eng: "Bookmarking"
voice: "Marcapáginas"
new: "Marcapáginas"
voice: "Marcapáginas"
new: "Marcapáginas"
id: LANG_BOOKMARK_SETTINGS_AUTOCREATE
desc: prompt for user to decide to create an bookmark
eng: "Bookmark on Stop"
voice: "Marcar página al Detener"
new: "Marcar página al Detener"
voice: "Marcar página al Detener"
new: "Marcar página al Detener"
id: LANG_BOOKMARK_SETTINGS_AUTOLOAD
desc: prompt for user to decide to create a bookmark
eng: "Load Last Bookmark"
voice: "Cargar último Marcapáginas"
new: "Cargar último Marcapáginas"
voice: "Cargar último Marcapáginas"
new: "Cargar último Marcapáginas"
id: LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS
desc: Configuration option to maintain a list of recent bookmarks
eng: "Maintain a List of Recent Bookmarks?"
voice: "¿Mantener una Lista de Marcapáginas Recientes?"
new: "¿Mantener una Lista de Marcapáginas Recientes?"
voice: "¿Mantener una Lista de Marcapáginas Recientes?"
new: "¿Mantener una Lista de Marcapáginas Recientes?"
id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK
desc: Save in recent bookmarks only
eng: "Ask - Recent only"
voice: "Preguntar - Sólo Recientes"
new: "Preguntar - Sólo Recientes"
voice: "Preguntar - Sólo Recientes"
new: "Preguntar - Sólo Recientes"
id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES
desc: Save in recent bookmarks only
eng: "Yes - Recent only"
voice: "Si - Sólo Recientes"
new: "Si - Sólo Recientes"
voice: "Si - Sólo Recientes"
new: "Si - Sólo Recientes"
id: LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY
desc: Save only on bookmark for each playlist in recent bookmarks
eng: "Unique only"
voice: "Sólo único"
new: "Sólo único"
voice: "Sólo único"
new: "Sólo único"
id: LANG_BOOT_CHANGED
desc: File browser discovered the boot file was changed
@ -1562,7 +1562,7 @@ new: "PLAY = SI"
id: LANG_CUSTOM_CFG
desc: in setting_menu()
eng: "Browse .cfg files"
voice: "Mostrar archivos de configuración"
voice: "Mostrar archivos de configuración"
new: "Mostrar archivos .cfg"
id: LANG_CUSTOM_FONT
@ -1652,26 +1652,26 @@ new: "Emisora: %d.%dMHz"
id: LANG_INFO_MENU
desc: in the info sub menu
eng: "Rockbox Info"
voice: "Información de Rockbox"
voice: "Información de Rockbox"
new: "Info. de Rockbox"
id: LANG_INSERT
desc: in onplay menu. insert a track/playlist into dynamic playlist.
eng: "Insert"
voice: "Añadir"
new: "Añadir"
voice: "Añadir"
new: "Añadir"
id: LANG_INSERT_FIRST
desc: in onplay menu. insert a track/playlist into dynamic playlist.
eng: "Insert next"
voice: "Añadir como próxima"
new: "Añadir como próxima"
voice: "Añadir como próxima"
new: "Añadir como próxima"
id: LANG_INSERT_LAST
desc: in onplay menu. append a track/playlist into dynamic playlist.
eng: "Insert last"
voice: "Añadir al final"
new: "Añadir al final"
voice: "Añadir al final"
new: "Añadir al final"
id: LANG_JUMP_SCROLL
desc: (player) menu altarnative for jump scroll
@ -1700,14 +1700,14 @@ new: "Opciones del LCD"
id: LANG_LIMITS_MENU
desc: in the system sub menu
eng: "Limits"
voice: "Límites"
new: "Límites"
voice: "Límites"
new: "Límites"
id: LANG_LINE_IN
desc: in settings_menu
eng: "Line In"
voice: "Entrada Analógica"
new: "Analógica"
voice: "Entrada Analógica"
new: "Analógica"
id: LANG_MANAGE_MENU
desc: in the system sub menu
@ -1718,14 +1718,14 @@ new: "Gestionar Opciones"
id: LANG_MAX_FILES_IN_DIR
desc: in settings_menu
eng: "Max files in dir browser"
voice: "Número maximo de archivos por directorio"
voice: "Número maximo de archivos por directorio"
new: "Max. Archivos por directorio"
id: LANG_MAX_FILES_IN_PLAYLIST
desc: in settings_menu
eng: "Max playlist size"
voice: "Tamaño maximo de Lista de Reproducción"
new: "Tamaño maximo de Lista de Reproducción"
voice: "Tamaño maximo de Lista de Reproducción"
new: "Tamaño maximo de Lista de Reproducción"
id: LANG_MOVE
desc: The verb/action Move
@ -1761,25 +1761,25 @@ id: LANG_PLAYLIST_ACCESS_ERROR
desc: Playlist error
eng: "Error accessing playlist file"
voice: ""
new: "Error al acceder a la Lista de Reproducción"
new: "Error al acceder a la Lista de Reproducción"
id: LANG_PLAYLIST_CONTROL_ACCESS_ERROR
desc: Playlist error
eng: "Error accessing playlist control file"
voice: ""
new: "Error al acceder al archivo de control de Listas de Reproducción"
new: "Error al acceder al archivo de control de Listas de Reproducción"
id: LANG_PLAYLIST_CONTROL_INVALID
desc: Playlist resume error
eng: "Playlist control file is invalid"
voice: ""
new: "Archivo de Control de Listas de Reproducción inválido"
new: "Archivo de Control de Listas de Reproducción inválido"
id: LANG_PLAYLIST_CONTROL_UPDATE_ERROR
desc: Playlist error
eng: "Error updating playlist control file"
voice: ""
new: "Error al Actualizar el Archivo de Control de Listas de Reproducción"
new: "Error al Actualizar el Archivo de Control de Listas de Reproducción"
id: LANG_PLAYLIST_DIRECTORY_ACCESS_ERROR
desc: Playlist error
@ -1791,13 +1791,13 @@ id: LANG_PLAYLIST_INSERT_COUNT
desc: splash number of tracks inserted
eng: "Inserted %d tracks (%s)"
voice: ""
new: "Añadidas %d Pistas (%s)"
new: "Añadidas %d Pistas (%s)"
id: LANG_PLAYLIST_MENU
desc: in main menu.
eng: "Playlist Options"
voice: "Opciones de la Lista de Reproducción"
new: "Opciones de la Lista de Reproducción"
voice: "Opciones de la Lista de Reproducción"
new: "Opciones de la Lista de Reproducción"
id: LANG_PLAYLIST_QUEUE_COUNT
desc: splash number of tracks queued
@ -1839,7 +1839,7 @@ id: LANG_PLUGIN_WRONG_VERSION
desc: The plugin is not compatible with the rockbox version trying to run it
eng: "Incompatible version"
voice: ""
new: "Versión Incompatible"
new: "Versión Incompatible"
id: LANG_QUEUE_FIRST
desc: in onplay menu. queue a track/playlist into dynamic playlist.
@ -1868,50 +1868,50 @@ new: "Reiniciar ahora?"
id: LANG_RECORDING_MENU
desc: in the recording sub menu
eng: "Recording screen"
voice: "Pantalla de Grabación"
new: "Pantalla de Grabación"
voice: "Pantalla de Grabación"
new: "Pantalla de Grabación"
id: LANG_RECORD_PRERECORD
desc: in recording and radio screen
eng: "Prerecording"
voice: ""
new: "Pregrabación"
new: "Pregrabación"
id: LANG_RECORD_PRERECORD_TIME
desc: in recording settings_menu
eng: "Prerecord time"
voice: "Tiempo de Pregrabación"
new: "Tiempo de Pregrabación"
voice: "Tiempo de Pregrabación"
new: "Tiempo de Pregrabación"
id: LANG_RECORD_TIMESPLIT
desc: Prompt for record timer interval setting, in the record settings menu
eng: "Time Split"
voice: "Separación por Tiempo"
new: "Separación por Tiempo"
voice: "Separación por Tiempo"
new: "Separación por Tiempo"
id: LANG_RECORD_TIMESPLIT_REC
desc: Display of record timer interval setting, on the record screen
eng: "Split time:"
voice: ""
new: "Tiempo de Separación:"
new: "Tiempo de Separación:"
id: LANG_RECURSE_DIRECTORY
desc: In playlist menu
eng: "Recursively Insert Directories"
voice: "Añadir Directorios Recursivamente"
new: "Añadir Directorios Recursivamente"
voice: "Añadir Directorios Recursivamente"
new: "Añadir Directorios Recursivamente"
id: LANG_RECURSE_DIRECTORY_QUESTION
desc: Asked from onplay screen
eng: "Recursively?"
voice: ""
new: "¿Recursivamente?"
new: "¿Recursivamente?"
id: LANG_SAVE_DYNAMIC_PLAYLIST
desc: in playlist menu.
eng: "Save Current Playlist"
voice: "Guardar Lista de Reproducción Actual"
new: "Guardar Lista de Reproducción Actual"
voice: "Guardar Lista de Reproducción Actual"
new: "Guardar Lista de Reproducción Actual"
id: LANG_SHOW_ICONS
desc: in settings_menu
@ -1934,20 +1934,20 @@ new: "Fecha y Hora"
id: LANG_VIEW_DYNAMIC_PLAYLIST
desc: in playlist menu.
eng: "View Current Playlist"
voice: "Ver Lista de Reproducción Actual"
new: "Ver Lista de Reproducción Actual"
voice: "Ver Lista de Reproducción Actual"
new: "Ver Lista de Reproducción Actual"
id: LANG_WHILE_PLAYING
desc: in settings_menu()
eng: "Browse .wps files"
voice: "Mostrar archivos de pantalla de reproducción"
voice: "Mostrar archivos de pantalla de reproducción"
new: "Mostrar archivos .wps"
id: LANG_WIND_MENU
desc: in the playback sub menu
eng: "FFwd/Rewind"
voice: "Avance rápido y rebobinar"
new: "Av.Rápido/Rebobinar"
voice: "Avance rápido y rebobinar"
new: "Av.Rápido/Rebobinar"
id: LANG_CREATE_DIR
desc: in main menu
@ -1964,8 +1964,8 @@ new: "Ruta Completa"
id: LANG_DISPLAY_TRACK_NAME_ONLY
desc: track display options
eng: "Track name only"
voice: "Sólo nombre de pista"
new: "Sólo nombre de pista"
voice: "Sólo nombre de pista"
new: "Sólo nombre de pista"
id: LANG_FILE_OPTIONS
desc: in playlist viewer on+play menu
@ -1994,8 +1994,8 @@ new: "Eliminar"
id: LANG_SHOW_INDICES
desc: in playlist viewer menu
eng: "Show Indices"
voice: "Mostrar Índices"
new: "Mostrar Índices"
voice: "Mostrar Índices"
new: "Mostrar Índices"
id: LANG_TRACK_DISPLAY
desc: in playlist viewer on+play menu
@ -2036,7 +2036,7 @@ new: "LCD"
id: VOICE_BILLION
desc: spoken only, for composing numbers
eng: ""
voice: "billón"
voice: "billón"
new: ""
id: VOICE_DB
@ -2144,7 +2144,7 @@ new:
id: VOICE_MILLION
desc: spoken only, for composing numbers
eng: ""
voice: "millón"
voice: "millón"
new: ""
id: VOICE_MILLISECONDS
@ -2204,7 +2204,7 @@ new: ""
id: VOICE_PLUS
desc: spoken only, for composing numbers
eng: ""
voice: "más"
voice: "más"
new: ""
id: VOICE_POINT
@ -2391,13 +2391,13 @@ id: LANG_FM_BUTTONBAR_ACTION
desc: in radio screen
eng: "Action"
voice: ""
new: "Acción"
new: "Acción"
id: LANG_FM_BUTTONBAR_ADD
desc: in radio screen
eng: "Add"
voice: ""
new: "Añadir"
new: "Añadir"
id: LANG_FM_BUTTONBAR_EDIT
desc: DEPRECATED
@ -2415,7 +2415,7 @@ id: LANG_FM_EDIT_PRESET
desc: in radio screen
eng: "Edit preset"
voice: ""
new: "Edit presintonía"
new: "Edit presintonía"
id: LANG_FM_MONO_MODE
desc: in radio screen
@ -2432,20 +2432,20 @@ new: "Prioridad etiqueta ID3"
id: LANG_ID3_V1_FIRST
desc: in playback settings screen
eng: "V1 then V2"
voice: "Versión 1 y despues versión 2"
voice: "Versión 1 y despues versión 2"
new: "V1 y despues V2"
id: LANG_ID3_V2_FIRST
desc: in playback settings screen
eng: "V2 then V1"
voice: "Versión 2 y despues versión 1"
voice: "Versión 2 y despues versión 1"
new: "V2 y despues V1"
id: LANG_INSTALLATION_INCOMPLETE
desc: in browse root
eng: "Installation incomplete"
voice: ""
new: "Instalación incompleta"
new: "Instalación incompleta"
id: LANG_MDB_CENTER
desc: in sound settings
@ -2462,8 +2462,8 @@ new: "Activar MDB"
id: LANG_MDB_HARMONICS
desc: in sound settings
eng: "MDB Harmonics"
voice: "Armónicos MDB"
new: "Armónicos MDB"
voice: "Armónicos MDB"
new: "Armónicos MDB"
id: LANG_MDB_SHAPE
desc: in sound settings
@ -2510,8 +2510,8 @@ new: "Apagando..."
id: LANG_SORT_ALPHA
desc: browser sorting setting
eng: "Alphabetical"
voice: "Alfabético"
new: "Alfabético"
voice: "Alfabético"
new: "Alfabético"
id: LANG_SORT_DATE
desc: browser sorting setting
@ -2522,8 +2522,8 @@ new: "Por fecha"
id: LANG_SORT_DATE_REVERSE
desc: browser sorting setting
eng: "by newest date"
voice: "más reciente"
new: "más reciente"
voice: "más reciente"
new: "más reciente"
id: LANG_SORT_DIR
desc: browser sorting setting
@ -2546,8 +2546,8 @@ new: "por tipo"
id: LANG_STEREO_WIDTH
desc: in sound_settings
eng: "Stereo width"
voice: "Amplitud estéreo"
new: "Amplitud Estéreo"
voice: "Amplitud estéreo"
new: "Amplitud Estéreo"
id: LANG_SUPERBASS
desc: in sound settings
@ -2595,7 +2595,7 @@ id: LANG_VOICE_NUMBER
desc: "talkbox" mode for files+directories
eng: "Numbers"
voice: "Numeros"
new: "Números"
new: "Números"
id: LANG_VOICE_SPELL
desc: "talkbox" mode for files+directories
@ -2786,13 +2786,13 @@ new: ""
id: VOICE_EXT_BMARK
desc: spoken only, for file extension and the word in general
eng: ""
voice: "marcapáginas"
voice: "marcapáginas"
new: ""
id: VOICE_EXT_CFG
desc: spoken only, for file extension
eng: ""
voice: "configuración"
voice: "configuración"
new: ""
id: VOICE_EXT_FONT
@ -2846,8 +2846,8 @@ new: ""
id: LANG_BATTERY_TYPE
desc: in battery settings
eng: "Battery Type"
voice: "Tipo de batería"
new: "Tipo de batería"
voice: "Tipo de batería"
new: "Tipo de batería"
id: LANG_BATTERY_TYPE_ALKALINE
desc: in battery settings
@ -2858,7 +2858,7 @@ new: "Alcalina"
id: LANG_BATTERY_TYPE_NIMH
desc: in battery settings
eng: "NiMH"
voice: "Níquel hidruro de metal"
voice: "Níquel hidruro de metal"
new: "NiMH"
id: LANG_BYTE
@ -2907,7 +2907,7 @@ id: LANG_ID3DB_SEARCH
desc: ID3 virtual folder name
eng: "Search"
voice: ""
new: "Búsqueda"
new: "Búsqueda"
id: LANG_ID3DB_SEARCH_ALBUMS
desc: ID3 virtual folder name
@ -2960,14 +2960,14 @@ new: "<Todas las Canciones>"
id: LANG_PLAYLIST
desc: Used when you need to say playlist, also voiced
eng: "Playlist"
voice: "Lista de reproducción"
new: "Lista de reproducción"
voice: "Lista de reproducción"
new: "Lista de reproducción"
id: LANG_RECORD_STARTUP
desc: Start Rockbox in Recording screen
eng: "Show recording screen on startup"
voice: "Mostrar pantalla de grabación al encender"
new: "Mostrar pantalla de grabación al encender"
voice: "Mostrar pantalla de grabación al encender"
new: "Mostrar pantalla de grabación al encender"
id: LANG_ALARM_MOD_DISABLE
desc: Announce that the RTC alarm has been turned off

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -17,31 +17,31 @@ id: LANG_SOUND_SETTINGS
desc: in the main menu
eng: "Sound Settings"
voice: "Sound Settings"
new: "Opcións de Son"
new: "Opcións de Son"
id: LANG_GENERAL_SETTINGS
desc: in the main menu
eng: "General Settings"
voice: "General Settings"
new: "Opcións Xerais"
new: "Opcións Xerais"
id: LANG_INFO
desc: in the main menu
eng: "Info"
voice: "Info"
new: "Información"
new: "Información"
id: LANG_VERSION
desc: in the main menu
eng: "Version"
voice: "Version"
new: "Versión"
new: "Versión"
id: LANG_DEBUG
desc: in the main menu
eng: "Debug (Keep Out!)"
voice: "Debug, keep out!"
new: "Depuración (¡non tocar!)"
new: "Depuración (¡non tocar!)"
id: LANG_USB
desc: in the main menu
@ -71,7 +71,7 @@ id: LANG_BATTERY_CHARGE
desc: tells that the battery is charging, instead of battery level
eng: "Battery: Charging"
voice: ""
new: "Batería: Cargando"
new: "Batería: Cargando"
id: LANG_PLAYLIST_LOAD
desc: displayed on screen while loading a playlist
@ -89,13 +89,13 @@ id: LANG_PLAYINDICES_PLAYLIST
desc: in playlist.indices() when playlist is full *WARNING* this and next ID are only used in this function.
eng: "Playlist"
voice: ""
new: "O búfer da"
new: "O búfer da"
ií: LANG_PLAYINDICES_BUFFER
ií: LANG_PLAYINDICES_BUFFER
desc: in playlist.indices() when playlist is full
eng: "Buffer Full"
voice: ""
new: "lista está cheo"
new: "lista está cheo"
id: LANG_SETTINGS_SAVE_PLAYER
desc: displayed if save settings has failed
@ -149,13 +149,13 @@ id: LANG_PLAY_SELECTED
desc: in settings_menu
eng: "Play Selected First"
voice: "Play Selected File First"
new: "Reproducir primeiro a canción marcada"
new: "Reproducir primeiro a canción marcada"
id: LANG_SORT_CASE
desc: in settings_menu
eng: "Sort Case Sensitive"
voice: "Sort Case Sensitive"
new: "Sensible a Mai/minúsculas"
new: "Sensible a Mai/minúsculas"
id: LANG_RESUME
desc: in settings_menu
@ -185,7 +185,7 @@ id: LANG_BACKLIGHT
desc: in settings_menu
eng: "Backlight"
voice: "Backlight"
new: "Ilumicación"
new: "Ilumicación"
id: LANG_SCROLL
desc: in settings_menu
@ -215,13 +215,13 @@ id: LANG_FFRW_STEP
desc: in settings_menu
eng: "FF/RW Min Step"
voice: "Minimum Step"
new: "Paso mínimo FF/RW"
new: "Paso mínimo FF/RW"
id: LANG_FFRW_ACCEL
desc: in settings_menu
eng: "FF/RW Accel"
voice: "Acceleration"
new: "Aceleración FF/RW"
new: "Aceleración FF/RW"
id: LANG_FOLLOW
desc: in settings_menu
@ -233,7 +233,7 @@ id: LANG_RESET_ASK_RECORDER
desc: confirm to reset settings
eng: "Are You Sure?"
voice: ""
new: "¿Estas certo?"
new: "¿Estas certo?"
id: LANG_RESET_DONE_SETTING
desc: visual confirmation after settings reset
@ -269,13 +269,13 @@ id: LANG_RESET
desc: in system_settings_menu()
eng: "Reset Settings"
voice: "Reset Settings"
new: "Reiniciar opcións"
new: "Reiniciar opcións"
id: LANG_PLAYBACK
desc: in settings_menu()
eng: "Playback"
voice: "Playback"
new: "Reproducción"
new: "Reproducción"
id: LANG_FILE
desc: in settings_menu()
@ -335,7 +335,7 @@ id: LANG_DECAY
desc: in sound_settings
eng: "AV Decay Time"
voice: ""
new: "Tempo de caída do AV"
new: "Tempo de caída do AV"
id: LANG_CHANNEL_MENU
desc: in sound_settings
@ -347,13 +347,13 @@ id: LANG_CHANNEL
desc: in sound_settings
eng: "Channel Configuration"
voice: ""
new: "Configuración de canais"
new: "Configuración de canais"
id: LANG_CHANNEL_STEREO
desc: in sound_settings
eng: "Stereo"
voice: "Stereo"
new: "Estéreo"
new: "Estéreo"
id: LANG_CHANNEL_MONO
desc: in sound_settings
@ -377,13 +377,13 @@ id: LANG_AUTOVOL
desc: in sound_settings
eng: "Auto Volume"
voice: "Auto Volume"
new: "Volumen automático"
new: "Volumen automático"
id: LANG_SHOWDIR_ERROR_BUFFER
desc: in showdir(), displayed on screen when you reach buffer limit
eng: "Dir Buffer"
voice: ""
new: "Búfer do directorio"
new: "Búfer do directorio"
id: LANG_SHOWDIR_ERROR_FULL
desc: in showdir(), displayed on screen when you reach buffer limit
@ -467,13 +467,13 @@ id: LANG_ID3_TITLE
desc: in wps
eng: "[Title]"
voice: ""
new: "[Título]"
new: "[Título]"
id: LANG_ID3_NO_TITLE
desc: in wps when no title is avaible
eng: "<No Title>"
voice: ""
new: "[Sen Títuo]"
new: "[Sen Títuo]"
id: LANG_ID3_ARTIST
desc: in wps
@ -503,13 +503,13 @@ id: LANG_ID3_TRACKNUM
desc: in wps
eng: "[Tracknum]"
voice: ""
new: "[Nº Pista]"
new: "[Nº Pista]"
id: LANG_ID3_NO_TRACKNUM
desc: in wps if no track number is avaible
eng: "<No Tracknum>"
voice: ""
new: "<Sen Nº de Pista>"
new: "<Sen Nº de Pista>"
id: LANG_ID3_LENGHT
desc: in wps
@ -593,7 +593,7 @@ id: LANG_END_PLAYLIST_RECORDER
desc: when playlist has finished
eng: "End Of Song List"
voice: ""
new: "Fin da lista de cancións"
new: "Fin da lista de cancións"
id: LANG_POWEROFF_IDLE
desc: in settings_menu
@ -617,7 +617,7 @@ id: LANG_FILTER_MUSIC
desc: show only music-related files
eng: "Music"
voice: "Music"
new: "Música"
new: "Música"
id: LANG_FILTER_SUPPORTED
desc: show all file types supported by Rockbox
@ -635,7 +635,7 @@ id: LANG_SET_BOOL_YES
desc: bool true representation
eng: "Yes"
voice: "Yes"
new: "Sí"
new: "Sí"
id: LANG_SET_BOOL_NO
desc: bool false representation
@ -683,7 +683,7 @@ id: LANG_BACKLIGHT_ON_WHEN_CHARGING
desc: in display_settings_menu
eng: "Backlight On When Plugged"
voice: "Backlight On When Plugged"
new: "Iluminación estando enchufado"
new: "Iluminación estando enchufado"
id: LANG_REPEAT
desc: in settings_menu
@ -809,7 +809,7 @@ id: LANG_MONTH_JUNE
desc: Maximum 3-letter abbreviation for monthname
eng: "Jun"
voice: "June"
new: "Xuñ"
new: "Xuñ"
id: LANG_MONTH_JULY
desc: Maximum 3-letter abbreviation for monthname
@ -857,7 +857,7 @@ id: LANG_BATTERY_DISPLAY
desc: Battery type title
eng: "Battery Display"
voice: "Battery Display"
new: "Amosar Batería"
new: "Amosar Batería"
id: LANG_VOLUME_DISPLAY
desc: Volume type title
@ -869,13 +869,13 @@ id: LANG_DISPLAY_GRAPHIC
desc: Label for type of icon display
eng: "Graphic"
voice: "Graphic"
new: "Gráfico"
new: "Gráfico"
id: LANG_DISPLAY_NUMERIC
desc: Label for type of icon display
eng: "Numeric"
voice: "Numeric"
new: "Numérico"
new: "Numérico"
id: LANG_PM_PERFORMANCE
desc: in the peak meter menu
@ -893,7 +893,7 @@ id: LANG_PM_ENERGY_SAVER
desc: in the peak meter menu
eng: "Save Energy"
voice: "Save Energy"
new: "Aforrar Enerxía"
new: "Aforrar Enerxía"
id: LANG_PM_SCALE
desc: in the peak meter menu
@ -905,7 +905,7 @@ id: LANG_PM_DBFS
desc: in the peak meter menu
eng: "Logarithmic(dB)"
voice: "Logarithmic decibel"
new: "Logarítmico(dB)"
new: "Logarítmico(dB)"
id: LANG_PM_LINEAR
desc: in the peak meter menu
@ -917,25 +917,25 @@ id: LANG_PM_MIN
desc: in the peak meter menu
eng: "Minimum Of Range"
voice: "Minimum Of Range"
new: "Mínimo do Rango"
new: "Mínimo do Rango"
id: LANG_PM_MAX
desc: in the peak meter menu
eng: "Maximum Of Range"
voice: "Maximum Of Range"
new: "Máximo do Rango"
new: "Máximo do Rango"
id: LANG_RECORDING
desc: in the main menu
eng: "Recording"
voice: "Recording"
new: "Gravación"
new: "Gravación"
id: LANG_RECORDING_GAIN
desc: in the recording screen
eng: "Gain"
voice: ""
new: "Gañanza"
new: "Gañanza"
id: LANG_RECORDING_LEFT
desc: in the recording screen
@ -983,7 +983,7 @@ id: LANG_RECORDING_SRC_LINE
desc: in the recording settings
eng: "Line In"
voice: "Line In"
new: "Entrada Analóxica"
new: "Entrada Analóxica"
id: LANG_RECORDING_SRC_DIGITAL
desc: in the recording settings
@ -995,7 +995,7 @@ id: LANG_RECORDING_SETTINGS
desc: in the main menu
eng: "Recording Settings"
voice: "Recording Settings"
new: "Opcións de Gravación"
new: "Opcións de Gravación"
id: LANG_DISK_STAT
desc: DEPRECATED
@ -1019,7 +1019,7 @@ id: LANG_FILTER_PLAYLIST
desc: show only playlist
eng: "Playlists"
voice: "Playlists"
new: "Listas de Reprodución"
new: "Listas de Reprodución"
id: LANG_BATTERY_TIME
desc: battery level in % and estimated time remaining
@ -1043,7 +1043,7 @@ id: LANG_BIDIR_SCROLL
desc: Bidirectional scroll limit
eng: "Bidirectional Scroll Limit"
voice: "Bidirectional Scroll Limit"
new: "Límite de despraz. bidireccional"
new: "Límite de despraz. bidireccional"
id: LANG_SCROLL_DELAY
desc: Delay before scrolling
@ -1055,13 +1055,13 @@ id: LANG_SCROLL_STEP
desc: Pixels to advance per scroll
eng: "Scroll Step Size"
voice: "Scroll Step Size"
new: "Tamaño do paso de Despraz."
new: "Tamaño do paso de Despraz."
id: LANG_SCROLL_STEP_EXAMPLE
desc: Pixels to advance per scroll
eng: "Scroll Step Size Setting Example Text"
voice: ""
new: "Texto de exemplo do tamaño de paso de desprazamento"
new: "Texto de exemplo do tamaño de paso de desprazamento"
id: LANG_SCROLL_SPEED
desc: in display_settings_menu()
@ -1079,19 +1079,19 @@ id: LANG_BATTERY_TOPOFF_CHARGE
desc: in info display, shows that top off charge is running
eng: "Battery: Top-Off Chg"
voice: ""
new: "Batería: Tope-de-Carga"
new: "Batería: Tope-de-Carga"
id: LANG_BATTERY_TRICKLE_CHARGE
desc: in info display, shows that trickle charge is running
eng: "Battery: Trickle Chg"
voice: ""
new: "Batería: Trickle Chg"
new: "Batería: Trickle Chg"
id: LANG_BATTERY_CAPACITY
desc: in settings_menu
eng: "Battery Capacity"
voice: "Battery Capacity"
new: "Capacidade da Batería"
new: "Capacidade da Batería"
id: LANG_MENU_SETTING_CANCEL
desc: Visual confirmation of canceling a changed setting
@ -1115,7 +1115,7 @@ id: LANG_REALLY_DELETE
desc: Really Delete?
eng: "Delete?"
voice: ""
new: "¿Borrar?"
new: "¿Borrar?"
id: LANG_DELETED
desc: A file has beed deleted
@ -1175,7 +1175,7 @@ id: LANG_CREATE_PLAYLIST
desc: Menu option for creating a playlist
eng: "Create Playlist"
voice: "Create Playlist"
new: "Crear Lista de Reproducción"
new: "Crear Lista de Reproducción"
id: LANG_CREATING
desc: Screen feedback during playlist creation
@ -1217,7 +1217,7 @@ id: LANG_ID3_GENRE
desc: ID3 frame 'genre'
eng: "[Genre]"
voice: ""
new: "[Xénero]"
new: "[Xénero]"
id: LANG_ID3_YEAR
desc: ID3 info 'year'
@ -1241,13 +1241,13 @@ id: LANG_RECORDING_SIZE
desc: Display of recorded file size
eng: "Size:"
voice: ""
new: "Tamaño:"
new: "Tamaño:"
id: LANG_SETTINGS_LOADED1
desc: Feedback shown when a .cfg file is loaded
eng: "Settings"
voice: ""
new: "Optións"
new: "Optións"
id: LANG_SETTINGS_LOADED2
desc: Feedback shown when a .cfg file is loaded
@ -1259,7 +1259,7 @@ id: LANG_FADE_ON_STOP
desc: options menu to set fade on stop or pause
eng: "Fade On Stop/Pause"
voice: "Fade On Stop and Pause"
new: "Fade ó Parar/Pausar"
new: "Fade ó Parar/Pausar"
id: LANG_SOKOBAN_ON
desc: DEPRECATED
@ -1337,7 +1337,7 @@ id: LANG_INVERT_CURSOR
desc: in settings_menu
eng: "Line Selector"
voice: "Line Selector"
new: "Selector de liña"
new: "Selector de liña"
id: LANG_RECORDING_EDITABLE
desc: Editable recordings setting
@ -1361,7 +1361,7 @@ id: LANG_CAPTION_BACKLIGHT
desc: in settings_menu
eng: "Caption backlight"
voice: "Caption backlight"
new: "Iluminación ó iniciar MP3"
new: "Iluminación ó iniciar MP3"
id: LANG_INVERT_CURSOR_POINTER
desc: in settings_menu
@ -1391,13 +1391,13 @@ id: LANG_MAX_FILES_IN_DIR
desc: in settings_menu
eng: "Max files in dir browser"
voice: "Max files in directory browser"
new: "Máx arquivos no visor de directorios"
new: "Máx arquivos no visor de directorios"
id: LANG_MAX_FILES_IN_PLAYLIST
desc: in settings_menu
eng: "Max playlist size"
voice: "Max playlist size"
new: "Tamaño Max da lista de reproducción"
new: "Tamaño Max da lista de reproducción"
id: LANG_JUMP_SCROLL
desc: (player) menu altarnative for jump scroll
@ -1433,7 +1433,7 @@ id: LANG_RECORD_TIMESPLIT_REC
desc: Display of record timer interval setting, on the record screen
eng: "Split time:"
voice: ""
new: "Tempo de División"
new: "Tempo de División"
id: LANG_SHOW_ICONS
desc: in settings_menu
@ -1485,7 +1485,7 @@ id: LANG_PLUGIN_WRONG_VERSION
desc: The plugin is not compatible with the rockbox version trying to run it
eng: "Incompatible version"
voice: ""
new: "Versión Incompatible"
new: "Versión Incompatible"
id: LANG_PLUGIN_ERROR
desc: The plugin return an error code
@ -1507,13 +1507,13 @@ id: LANG_REBOOT_NOW
desc: Do you want to reboot?
eng: "Reboot now?"
voice: ""
new: "¿Reiniciar agora?"
new: "¿Reiniciar agora?"
id: LANG_QUEUE_LAST
desc: in onplay menu. queue a track/playlist at end of playlist.
eng: "Queue last"
voice: "Queue last"
new: "Poñer último na cola"
new: "Poñer último na cola"
id: LANG_INSERT
desc: in onplay menu. insert a track/playlist into dynamic playlist.
@ -1525,19 +1525,19 @@ id: LANG_INSERT_LAST
desc: in onplay menu. append a track/playlist into dynamic playlist.
eng: "Insert last"
voice: "Insert last"
new: "Insertar de último"
new: "Insertar de último"
id: LANG_QUEUE_FIRST
desc: in onplay menu. queue a track/playlist into dynamic playlist.
eng: "Queue next"
voice: "Queue next"
new: "Poñer seguinte na cola"
new: "Poñer seguinte na cola"
id: LANG_INSERT_FIRST
desc: in onplay menu. insert a track/playlist into dynamic playlist.
eng: "Insert next"
voice: "Insert next"
new: "Insertar como próximo"
new: "Insertar como próximo"
id: LANG_SAVE_DYNAMIC_PLAYLIST
desc: in playlist menu.
@ -1549,7 +1549,7 @@ id: LANG_PLAYLIST_MENU
desc: in main menu.
eng: "Playlist Options"
voice: "Playlist Options"
new: "Opcións da lista de reproducción"
new: "Opcións da lista de reproducción"
id: LANG_PLAYLIST_INSERT_COUNT
desc: splash number of tracks inserted
@ -1591,7 +1591,7 @@ id: LANG_PLAYLIST_ACCESS_ERROR
desc: Playlist error
eng: "Error accessing playlist file"
voice: ""
new: "Erro acedendo o arquivo da lista de reproducción"
new: "Erro acedendo o arquivo da lista de reproducción"
id: LANG_PLAYLIST_CONTROL_ACCESS_ERROR
desc: Playlist error
@ -1621,7 +1621,7 @@ id: LANG_RECURSE_DIRECTORY_QUESTION
desc: Asked from onplay screen
eng: "Recursively?"
voice: ""
new: "¿Recursivamente?"
new: "¿Recursivamente?"
id: LANG_CUSTOM_FONT
desc: in setting_menu()
@ -1651,7 +1651,7 @@ id: LANG_CUSTOM_CFG
desc: in setting_menu()
eng: "Browse .cfg files"
voice: "Browse configuration files"
new: "Visualizar arquivos de configuración"
new: "Visualizar arquivos de configuración"
id: LANG_PLUGINS
desc: in main_menu()
@ -1669,7 +1669,7 @@ id: LANG_LINE_IN
desc: in settings_menu
eng: "Line In"
voice: "Line In"
new: "Entrada de liña"
new: "Entrada de liña"
id: LANG_NO_FILES
desc: in settings_menu
@ -1681,13 +1681,13 @@ id: LANG_BUTTONBAR_MENU
desc: in button bar
eng: "Menu"
voice: ""
new: "Menú"
new: "Menú"
id: LANG_FM_BUTTONBAR_PRESETS
desc: in button bar
eng: "Preset"
voice: ""
new: "Presintonía"
new: "Presintonía"
id: LANG_FM_SAVE_PRESET
desc: DEPRECATED
@ -1699,19 +1699,19 @@ id: LANG_FM_DELETE_PRESET
desc: in radio screen
eng: "Remove preset"
voice: ""
new: "Borrar presintonía"
new: "Borrar presintonía"
id: LANG_FM_STATION
desc: in radio screen
eng: "Station: %d.%dMHz"
voice: ""
new: "Estación: %d.%dMHz"
new: "Estación: %d.%dMHz"
id: LANG_FM_PRESET_SAVE_FAILED
desc: in radio screen
eng: "Preset save failed"
voice: ""
new: "Fallo o gardar a presintonía"
new: "Fallo o gardar a presintonía"
id: LANG_FM_NO_PRESETS
desc: DEPRECATED
@ -1735,7 +1735,7 @@ id: LANG_FM_BUTTONBAR_RECORD
desc: in main menu
eng: "Record"
voice: ""
new: "Gravación"
new: "Gravación"
id: LANG_VIEW_DYNAMIC_PLAYLIST
desc: in playlist menu.
@ -1765,26 +1765,26 @@ id: LANG_RECORD_PRERECORD
desc: in recording and radio screen
eng: "Prerecording"
voice: ""
new: "Pregravación"
new: "Pregravación"
id: LANG_RECORD_PRERECORD_TIME
desc: in recording settings_menu
eng: "Prerecord time"
voice: "Pre-Record time"
new: "Tempo de Pre-gravación"
new: "Tempo de Pre-gravación"
#Auto bookmark prompts
id: LANG_BOOKMARK_AUTOLOAD_QUERY
desc: prompt for user to decide to create a bookmark
voice: ""
eng: "Load Last Bookmark?"
new: "¿Cargar o último marcador?"
new: "¿Cargar o último marcador?"
id: LANG_AUTO_BOOKMARK_QUERY
desc: prompt for user to decide to create an bookmark
voice: ""
eng: "Create a Bookmark?"
new: "¿Crear un marcador?"
new: "¿Crear un marcador?"
# Bookmark Select Menu Text
id: LANG_BOOKMARK_SELECT_LIST_BOOKMARKS
@ -1860,7 +1860,7 @@ id: LANG_BOOKMARK_SETTINGS_AUTOLOAD
desc: prompt for user to decide to create a bookmark
eng: "Load Last Bookmark"
voice: "Load Last Bookmark"
new: "Cargar o último marcador"
new: "Cargar o último marcador"
id: LANG_BOOKMARK_SETTINGS_AUTOCREATE
desc: prompt for user to decide to create an bookmark
@ -1872,7 +1872,7 @@ id: LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS
desc: Configuration option to maintain a list of recent bookmarks
eng: "Maintain a List of Recent Bookmarks?"
voice: "Maintain a List of Recent Bookmarks?"
new: "¿Manter unha lista de marcadores recentes?"
new: "¿Manter unha lista de marcadores recentes?"
id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES
desc: Save in recent bookmarks only
@ -1928,7 +1928,7 @@ id: LANG_RECORDING_MENU
desc: in the recording sub menu
eng: "Recording screen"
voice: "Recording screen"
new: "Pantalla de Gravación"
new: "Pantalla de Gravación"
id: LANG_WIND_MENU
desc: in the playback sub menu
@ -1952,7 +1952,7 @@ id: LANG_BATTERY_MENU
desc: in the system sub menu
eng: "Battery"
voice: "Battery"
new: "Batería"
new: "Batería"
id: LANG_DISK_MENU
desc: in the system sub menu
@ -1971,7 +1971,7 @@ id: LANG_LIMITS_MENU
desc: in the system sub menu
eng: "Limits"
voice: "Limits"
new: "Límites"
new: "Límites"
id: LANG_MANAGE_MENU
desc: in the system sub menu
@ -2037,7 +2037,7 @@ id: LANG_FILE_OPTIONS
desc: in playlist viewer on+play menu
eng: "File Options"
voice: "File Options"
new: "Opcións de arquivo"
new: "Opcións de arquivo"
id: LANG_BUTTON_BAR
desc: in settings menu
@ -2055,7 +2055,7 @@ id: LANG_DIRBROWSE_F2
desc: in dir browser, F2 button bar text
eng: "Option"
voice: ""
new: "Opción"
new: "Opción"
id: LANG_DIRBROWSE_F3
desc: in dir browser, F3 button bar text
@ -2401,7 +2401,7 @@ id: LANG_VOICE_NUMBER
desc: "talkbox" mode for files+directories
eng: "Numbers"
voice: "Numbers"
new: "Números"
new: "Números"
id: LANG_VOICE_DIR_ENTER
desc: DEPRECATED
@ -2702,7 +2702,7 @@ id: LANG_SORT_ALPHA
desc: browser sorting setting
eng: "Alphabetical"
voice: "Alphabetical"
new: "Alfanumérico"
new: "Alfanumérico"
id: LANG_SORT_DATE
desc: browser sorting setting
@ -2726,7 +2726,7 @@ id: LANG_FM_EDIT_PRESET
desc: in radio screen
eng: "Edit preset"
voice: ""
new: "Editar presintonía"
new: "Editar presintonía"
id: LANG_FM_MONO_MODE
desc: in radio screen
@ -2750,13 +2750,13 @@ id: LANG_FM_BUTTONBAR_ADD
desc: in radio screen
eng: "Add"
voice: ""
new: "Añadir"
new: "Añadir"
id: LANG_FM_BUTTONBAR_ACTION
desc: in radio screen
eng: "Action"
voice: ""
new: "Acción"
new: "Acción"
id: LANG_MDB_STRENGTH
desc: in sound settings
@ -2822,13 +2822,13 @@ id: LANG_ID3_V1_FIRST
desc: in playback settings screen
eng: "V1 then V2"
voice: "Version 1 then version 2"
new: "Versión 1 entonces versión 2"
new: "Versión 1 entonces versión 2"
id: LANG_ID3_V2_FIRST
desc: in playback settings screen
eng: "V2 then V1"
voice: "Version 2 then version 1"
new: "Versión 2 entonces version 1"
new: "Versión 2 entonces version 1"
id: LANG_NO_ROCKBOX_DIR
desc: in browse root
@ -2840,7 +2840,7 @@ id: LANG_INSTALLATION_INCOMPLETE
desc: in browse root
eng: "Installation incomplete"
voice: ""
new: "Intalación incompleta"
new: "Intalación incompleta"
id: LANG_REMOVE_MMC
desc: before acknowledging usb in case an MMC is inserted (Ondio)
@ -2930,7 +2930,7 @@ id: LANG_BATTERY_TYPE
desc: in battery settings
eng: "Battery Type"
voice: "Battery type"
new: "Tipo de batería"
new: "Tipo de batería"
id: LANG_BATTERY_TYPE_ALKALINE
desc: in battery settings
@ -3002,7 +3002,7 @@ id: LANG_RECORD_STARTUP
desc: Start Rockbox in Recording screen
eng: "Show recording screen on startup"
voice: "Show recording screen on startup"
new: "Ve la pantalla de gravación no comenzo"
new: "Ve la pantalla de gravación no comenzo"
id: LANG_ALARM_MOD_DISABLE
desc: Announce that the RTC alarm has been turned off
@ -3045,7 +3045,7 @@ id: LANG_RECORD_STOP_GAP
desc: in recording settings_menu
eng: "Presplit gap"
voice:
new: "Espacio Predivisión"
new: "Espacio Predivisión"
id: LANG_RECORD_TRIGGER_MODE
desc: in recording settings_menu
@ -3111,13 +3111,13 @@ id: LANG_BACKLIGHT_FADE_IN
desc: in settings_menu
eng: "Backlight fade in"
voice: "Backlight fade in"
new: "Incrementar Iluminación"
new: "Incrementar Iluminación"
id: LANG_BACKLIGHT_FADE_OUT
desc: in settings_menu
eng: "Backlight fade out"
voice: "Backlight fade out"
new: "Decrementar Iluminación"
new: "Decrementar Iluminación"
id: LANG_SHUFFLE_PLAYLIST
desc: in playlist menu, reshuffles the order in which songs are played
@ -3141,7 +3141,7 @@ id: LANG_SPDIF_ENABLE
desc: in playback settings menu. enable/disable the optical out
eng: "Optical output"
voice: "Optical output"
new: "Saida óptica"
new: "Saida óptica"
id: LANG_NEXT_FOLDER
desc: in settings_menu. Should we move to next folder when current one ends
@ -3153,16 +3153,16 @@ id: LANG_RUNTIMEDB_ACTIVE
desc: in settings_menu.
eng: "Gather runtime data (experimental)"
voice: "Gather runtime data"
new: "Recoller datos en tempo de execución"
new: "Recoller datos en tempo de execución"
id: LANG_MENU_SET_RATING
desc: in wps context menu
eng: "Set song rating"
voice: "Set song rating"
new: "Establecer a evaluación da canción"
new: "Establecer a evaluación da canción"
id: LANG_RATING
desc: in set_rating
eng: "Rating:"
voice "Rating"
new: "Evaluación:"
new: "Evaluación:"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -177,7 +177,7 @@ id: LANG_SCROLL
desc: in settings_menu
eng: "Scroll Speed Setting Example"
voice:
new: "Esempio velocità scorrimento impostata"
new: "Esempio velocità scorrimento impostata"
id: LANG_DISCHARGE
desc: DEPRECATED
@ -375,7 +375,7 @@ id: LANG_SHOWDIR_ERROR_FULL
desc: in showdir(), displayed on screen when you reach buffer limit
eng: "Is Full!"
voice:
new: "è pieno!"
new: "è pieno!"
id: LANG_RESUME_ASK
desc: DEPRECATED
@ -537,7 +537,7 @@ id: LANG_PITCH_DOWN
desc: in wps
eng: "Pitch Down"
voice:
new: "Tono giù"
new: "Tono giù"
id: LANG_PAUSE
desc: in wps
@ -584,8 +584,8 @@ new: "Fine della playlist"
id: LANG_POWEROFF_IDLE
desc: in settings_menu
eng: "Idle Poweroff"
voice: "Spegnimento per Inattività"
new: "Spegnimento per inattività"
voice: "Spegnimento per Inattività"
new: "Spegnimento per inattività"
id: LANG_LANGUAGE_LOADED
desc: shown when a language has been loaded from the dir browser
@ -662,8 +662,8 @@ new: "Eterno"
id: LANG_PM_UNITS_PER_READ
desc: in the peak meter menu
eng: "Units Per Read"
voice: "Unità per lettura"
new: "Unità per lettura"
voice: "Unità per lettura"
new: "Unità per lettura"
id: LANG_BACKLIGHT_ON_WHEN_CHARGING
desc: in display_settings_menu
@ -938,8 +938,8 @@ new: "Destro"
id: LANG_RECORDING_QUALITY
desc: in the recording settings
eng: "Quality"
voice: "Qualità"
new: "Qualità"
voice: "Qualità"
new: "Qualità"
id: LANG_RECORDING_FREQUENCY
desc: in the recording settings
@ -1052,8 +1052,8 @@ new: "Testo d'esempio per il passo di scorrimento corrente"
id: LANG_SCROLL_SPEED
desc: in display_settings_menu()
eng: "Scroll Speed"
voice: "Velocità Scorrimento"
new: "Velocità scorrimento"
voice: "Velocità Scorrimento"
new: "Velocità scorrimento"
id: LANG_TRICKLE_CHARGE
desc: DEPRECATED
@ -1076,8 +1076,8 @@ new: "Batteria: Mantenimento carica"
id: LANG_BATTERY_CAPACITY
desc: in settings_menu
eng: "Battery Capacity"
voice: "Capacità Batteria"
new: "Capacità batteria"
voice: "Capacità Batteria"
new: "Capacità batteria"
id: LANG_MENU_SETTING_CANCEL
desc: Visual confirmation of canceling a changed setting
@ -1149,7 +1149,7 @@ id: LANG_ALARM_MOD_ERROR
desc: The text that tells that the time is incorrect (for the RTC alarm mod).
eng: "Alarm Time Is Too Soon!"
voice:
new: "L'orario impostato è troppo vicino!"
new: "L'orario impostato è troppo vicino!"
id: LANG_ALARM_MOD_KEYS
desc: Shown key functions in alarm menu (for the RTC alarm mod).
@ -1648,8 +1648,8 @@ new: "Avvia plugins"
id: LANG_CAR_ADAPTER_MODE
desc: Displayed for setting car adapter mode to on/off
eng: "Car Adapter Mode"
voice: "Modalità Adattatore Auto"
new: "Modalità adattatore auto"
voice: "Modalità Adattatore Auto"
new: "Modalità adattatore auto"
id: LANG_LINE_IN
desc: in settings_menu
@ -1667,7 +1667,7 @@ id: LANG_BUTTONBAR_MENU
desc: in button bar
eng: "Menu"
voice: ""
new: "Menù"
new: "Menù"
id: LANG_FM_BUTTONBAR_PRESETS
desc: in button bar
@ -1709,7 +1709,7 @@ id: LANG_FM_NO_FREE_PRESETS
desc: in radio screen
eng: "The preset list is full"
voice: ""
new: "La lista delle stazioni è piena"
new: "La lista delle stazioni è piena"
id: LANG_FM_RADIO
desc: in main menu
@ -2027,7 +2027,7 @@ id: LANG_DIRBROWSE_F1
desc: in dir browser, F1 button bar text
eng: "Menu"
voice: ""
new: "Menù"
new: "Menù"
id: LANG_DIRBROWSE_F2
desc: in dir browser, F2 button bar text
@ -2242,7 +2242,7 @@ new:
id: VOICE_PLUS
desc: spoken only, for composing numbers
eng: ""
voice: "più"
voice: "più"
new:
id: VOICE_POINT
@ -2356,8 +2356,8 @@ new: "Voce"
id: LANG_VOICE_MENU
desc: item of voice menu, enable/disable the voice UI
eng: "Voice Menus"
voice: "Pronuncia Menù"
new: "Pronuncia menù"
voice: "Pronuncia Menù"
new: "Pronuncia menù"
id: LANG_VOICE_DIR
desc: item of voice menu, set the "talkbox" mode for directories
@ -2686,8 +2686,8 @@ new: "Per data"
id: LANG_SORT_DATE_REVERSE
desc: browser sorting setting
eng: "by newest date"
voice: "dal più recente"
new: "Dal più recente"
voice: "dal più recente"
new: "Dal più recente"
id: LANG_SORT_TYPE
desc: browser sorting setting
@ -2734,8 +2734,8 @@ new: "Azione"
id: LANG_MDB_STRENGTH
desc: in sound settings
eng: "MDB Strength"
voice: "Intensità MDB"
new: "Intensità MDB"
voice: "Intensità MDB"
new: "Intensità MDB"
id: LANG_MDB_HARMONICS
desc: in sound settings
@ -2788,8 +2788,8 @@ new: "Premere OFF per spegnere"
id: LANG_ID3_ORDER
desc: in playback settings screen
eng: "ID3 tag priority"
voice: "Priorità ID3 tag"
new: "Priorità info ID3"
voice: "Priorità ID3 tag"
new: "Priorità info ID3"
id: LANG_ID3_V1_FIRST
desc: in playback settings screen

View file

@ -1168,7 +1168,7 @@ id: LANG_CREATING
desc: Screen feedback during playlist creation
eng: "Creating"
voice: ""
new: "Creeëren..."
new: "Creeëren..."
id: LANG_FADE_ON_STOP
desc: options menu to set fade on stop or pause
@ -1365,8 +1365,8 @@ new: ""
id: LANG_INVERT_LCD_INVERSE
desc: in settings_menu
eng: "Inverse"
voice: "Geïnverteerd"
new: "Geïnverteerd"
voice: "Geïnverteerd"
new: "Geïnverteerd"
id: LANG_INVERT_LCD_NORMAL
desc: in settings_menu

View file

@ -28,7 +28,7 @@ id: LANG_DEBUG
desc: in the main menu
eng: "Debug (Keep Out!)"
voice: "Debug, keep out!"
new: "Debug (ikke rør!)"
new: "Debug (ikke rør!)"
id: LANG_USB
desc: in the main menu
@ -112,13 +112,13 @@ id: LANG_TIME_SET
desc: used in set_time()
eng: "ON To Set"
voice: ""
new: "PÅ for å stille"
new: "PÅ for å stille"
id: LANG_TIME_REVERT
desc: used in set_time()
eng: "OFF To Revert"
voice: ""
new: "AV for å tilbakestille"
new: "AV for å tilbakestille"
id: LANG_CONTRAST
desc: in settings_menu
@ -130,19 +130,19 @@ id: LANG_SHUFFLE
desc: in settings_menu
eng: "Shuffle"
voice: "Shuffle"
new: "Stokk om rekkefølge"
new: "Stokk om rekkefølge"
id: LANG_PLAY_SELECTED
desc: in settings_menu
eng: "Play Selected First"
voice: "Play Selected File First"
new: "Spill valgte først"
new: "Spill valgte først"
id: LANG_SORT_CASE
desc: in settings_menu
eng: "Sort Case Sensitive"
voice: "Sort Case Sensitive"
new: "Sortere små/store bokstaver"
new: "Sortere små/store bokstaver"
id: LANG_RESUME
desc: in settings_menu
@ -160,13 +160,13 @@ id: LANG_RESUME_SETTING_ASK
desc: in settings_menu
eng: "Ask"
voice: "Ask"
new: "Spør"
new: "Spør"
id: LANG_ON
desc: Used in a lot of places
eng: "On"
voice: "On"
new: "På"
new: "På"
id: LANG_BACKLIGHT
desc: in settings_menu
@ -196,25 +196,25 @@ id: LANG_SPINDOWN
desc: in settings_menu
eng: "Disk Spindown"
voice: "Disk Spindown"
new: "Slå av harddiskmotor"
new: "Slå av harddiskmotor"
id: LANG_FFRW_STEP
desc: in settings_menu
eng: "FF/RW Min Step"
voice: "Minimum Step"
new: "Minimum søkesteg"
new: "Minimum søkesteg"
id: LANG_FFRW_ACCEL
desc: in settings_menu
eng: "FF/RW Accel"
voice: "Acceleration"
new: "Søkeaksellerasjon"
new: "Søkeaksellerasjon"
id: LANG_FOLLOW
desc: in settings_menu
eng: "Follow Playlist"
voice: "Follow Playlist"
new: "Følg spillelisten"
new: "Følg spillelisten"
id: LANG_RESET_ASK_RECORDER
desc: confirm to reset settings
@ -358,7 +358,7 @@ id: LANG_CHANNEL_RIGHT
desc: in sound_settings
eng: "Mono Right"
voice: "Mono Right"
new: "Mono høyre"
new: "Mono høyre"
id: LANG_AUTOVOL
desc: in sound_settings
@ -394,25 +394,25 @@ id: LANG_KEYLOCK_ON_PLAYER
desc: displayed when key lock is on
eng: "Key Lock ON"
voice: ""
new: "Tastelås PÅ"
new: "Tastelås PÅ"
id: LANG_KEYLOCK_OFF_PLAYER
desc: displayed when key lock is turned off
eng: "Key Lock OFF"
voice: ""
new: "Tastelås AV"
new: "Tastelås AV"
id: LANG_KEYLOCK_ON_RECORDER
desc: displayed when key lock is on
eng: "Key Lock Is ON"
voice: ""
new: "Tastelås er PÅ"
new: "Tastelås er PÅ"
id: LANG_KEYLOCK_OFF_RECORDER
desc: displayed when key lock is turned off
eng: "Key Lock Is OFF"
voice: ""
new: "Tastelås er AV"
new: "Tastelås er AV"
id: LANG_MUTE_ON_PLAYER
desc: DEPRECATED
@ -586,13 +586,13 @@ id: LANG_POWEROFF_IDLE
desc: in settings_menu
eng: "Idle Poweroff"
voice: "Idle Poweroff"
new: "Slå av når ikke i bruk"
new: "Slå av når ikke i bruk"
id: LANG_LANGUAGE_LOADED
desc: shown when a language has been loaded from the dir browser
eng: "New Language"
voice: ""
new: "Nytt språk"
new: "Nytt språk"
id: LANG_FILTER
desc: setting name for dir filter
@ -610,7 +610,7 @@ id: LANG_FILTER_SUPPORTED
desc: show all file types supported by Rockbox
eng: "Supported"
voice: "Supported"
new: "Støttede"
new: "Støttede"
id: LANG_FILTER_ALL
desc: show all files
@ -634,7 +634,7 @@ id: LANG_BACKLIGHT_ON_WHEN_CHARGING
desc: in display_settings_menu
eng: "Backlight On When Plugged"
voice: "Backlight On When Plugged"
new: "Skjermlys på ved tilkoblet strøm"
new: "Skjermlys på ved tilkoblet strøm"
id: LANG_PM_CLIP_HOLD
desc: in the peak meter menu
@ -652,7 +652,7 @@ id: LANG_PM_MENU
desc: in the display menu
eng: "Peak Meter"
voice: "Peak Meter"
new: "Toppmåler"
new: "Toppmåler"
id: LANG_PM_PEAK_HOLD
desc: in the peak meter menu
@ -820,13 +820,13 @@ id: LANG_WEEKDAY_SATURDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Sat"
voice: ""
new: "Lør"
new: "Lør"
id: LANG_WEEKDAY_SUNDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Sun"
voice: ""
new: "Søn"
new: "Søn"
id: LANG_WEEKDAY_TUESDAY
desc: Maximum 3-letter abbreviation for weekday
@ -892,13 +892,13 @@ id: LANG_PM_LINEAR
desc: in the peak meter menu
eng: "Linear(%)"
voice: "Linear percent"
new: "Lineær(%)"
new: "Lineær(%)"
id: LANG_PM_MAX
desc: in the peak meter menu
eng: "Maximum Of Range"
voice: "Maximum Of Range"
new: "Største verdi"
new: "Største verdi"
id: LANG_PM_MIN
desc: in the peak meter menu
@ -958,7 +958,7 @@ id: LANG_RECORDING_RIGHT
desc: in the recording screen
eng: "Right"
voice: ""
new: "Høyre"
new: "Høyre"
id: LANG_RECORDING_SETTINGS
desc: in the main menu
@ -1006,7 +1006,7 @@ id: LANG_POWEROFF
desc: disk poweroff flag
eng: "Disk Poweroff"
voice: "Disk Poweroff"
new: "Disken slås av"
new: "Disken slås av"
id: LANG_BATTERY_TIME
desc: battery level in % and estimated time remaining
@ -1054,7 +1054,7 @@ id: LANG_SCROLL_DELAY
desc: Delay before scrolling
eng: "Scroll Start Delay"
voice: "Scroll Start Delay"
new: "Pause før rullestart"
new: "Pause før rullestart"
id: LANG_SCROLL_SPEED
desc: in display_settings_menu()
@ -1072,7 +1072,7 @@ id: LANG_SCROLL_STEP_EXAMPLE
desc: Pixels to advance per scroll
eng: "Scroll Step Size Setting Example Text"
voice: ""
new: "Eksempel for å sette rullesteglengde"
new: "Eksempel for å sette rullesteglengde"
id: LANG_TRICKLE_CHARGE
desc: DEPRECATED
@ -1120,7 +1120,7 @@ id: LANG_ALARM_MOD_TIME_TO_GO
desc: The time until the alarm will go off shown in the alarm menu for the RTC alarm mod.
eng: "Waking Up In %d:%02d"
voice: ""
new: "Våkner om %d:%02d"
new: "Våkner om %d:%02d"
id: LANG_CREATE_PLAYLIST
desc: Menu option for creating a playlist
@ -1156,7 +1156,7 @@ id: LANG_QUEUE
desc: The verb/action Queue
eng: "Queue"
voice: "Queue"
new: "Legg til i kø"
new: "Legg til i kø"
id: LANG_REALLY_DELETE
desc: Really Delete?
@ -1210,7 +1210,7 @@ id: LANG_ID3_YEAR
desc: ID3 info 'year'
eng: "[Year]"
voice: ""
new: "[År]"
new: "[År]"
id: LANG_MENU_SHOW_ID3_INFO
desc: Menu option to start id3 viewer
@ -1228,7 +1228,7 @@ id: LANG_RECORDING_SIZE
desc: Display of recorded file size
eng: "Size:"
voice: ""
new: "Størrelse:"
new: "Størrelse:"
id: LANG_RECORDING_TIME
desc: Display of recorded time
@ -1384,7 +1384,7 @@ id: LANG_MAX_FILES_IN_PLAYLIST
desc: in settings_menu
eng: "Max playlist size"
voice: "Max playlist size"
new: "Maks. spillelistestørrelse"
new: "Maks. spillelistestørrelse"
id: LANG_JUMP_SCROLL
desc: (player) menu altarnative for jump scroll
@ -1396,7 +1396,7 @@ id: LANG_ONE_TIME
desc: (player) the jump scroll shall be done "one time"
eng: "One time"
voice: "One time"
new: "Én gang"
new: "Én gang"
id: LANG_ALWAYS
desc: (player) the jump scroll shall be done "always"
@ -1432,7 +1432,7 @@ id: LANG_DISK_FULL
desc: in recording screen
eng: "The disk is full. Press OFF to continue."
voice: ""
new: "Disken er full. Trykk AV for å fortsette."
new: "Disken er full. Trykk AV for å fortsette."
id: LANG_CONFIRM_WITH_PLAY_RECORDER
desc: Generic recorder string to use to confirm
@ -1450,7 +1450,7 @@ id: LANG_PLUGIN_CANT_OPEN
desc: Plugin open error message
eng: "Can't open %s"
voice: ""
new: "Kan ikke åpne %s"
new: "Kan ikke åpne %s"
id: LANG_READ_FAILED
desc: There was an error reading a file
@ -1486,13 +1486,13 @@ id: LANG_REBOOT_NOW
desc: Do you want to reboot?
eng: "Reboot now?"
voice: ""
new: "Omstart nå?"
new: "Omstart nå?"
id: LANG_QUEUE_LAST
desc: in onplay menu. queue a track/playlist at end of playlist.
eng: "Queue last"
voice: "Queue last"
new: "Legg til sist i kø"
new: "Legg til sist i kø"
id: LANG_INSERT
desc: in onplay menu. insert a track/playlist into dynamic playlist.
@ -1510,7 +1510,7 @@ id: LANG_QUEUE_FIRST
desc: in onplay menu. queue a track/playlist into dynamic playlist.
eng: "Queue next"
voice: "Queue next"
new: "Legg til som neste i kø"
new: "Legg til som neste i kø"
id: LANG_INSERT_FIRST
desc: in onplay menu. insert a track/playlist into dynamic playlist.
@ -1522,7 +1522,7 @@ id: LANG_SAVE_DYNAMIC_PLAYLIST
desc: in playlist menu.
eng: "Save Current Playlist"
voice: "Save Current Playlist"
new: "Lagre nåværende spilleliste"
new: "Lagre nåværende spilleliste"
id: LANG_PLAYLIST_MENU
desc: in main menu.
@ -1540,7 +1540,7 @@ id: LANG_PLAYLIST_QUEUE_COUNT
desc: splash number of tracks queued
eng: "Queued %d tracks (%s)"
voice: ""
new: "La til %d spor i køen (%s)"
new: "La til %d spor i køen (%s)"
id: LANG_PLAYLIST_SAVE_COUNT
desc: splash number of tracks saved
@ -1552,13 +1552,13 @@ id: LANG_OFF_ABORT
desc: Used on recorder models
eng: "OFF to abort"
voice: ""
new: "AV for å avbryte"
new: "AV for å avbryte"
id: LANG_STOP_ABORT
desc: Used on player models
eng: "STOP to abort"
voice: ""
new: "STOP for å avbryte"
new: "STOP for å avbryte"
id: LANG_PLAYLIST_CONTROL_UPDATE_ERROR
desc: Playlist error
@ -1618,7 +1618,7 @@ id: LANG_LANGUAGE
desc: in settings_menu
eng: "Language"
voice: "Language"
new: "Språk"
new: "Språk"
id: LANG_WHILE_PLAYING
desc: in settings_menu()
@ -1666,7 +1666,7 @@ id: LANG_FM_BUTTONBAR_PRESETS
desc: in button bar
eng: "Preset"
voice: ""
new: "Forhåndsinnstilling"
new: "Forhåndsinnstilling"
id: LANG_FM_SAVE_PRESET
desc: DEPRECATED
@ -1678,7 +1678,7 @@ id: LANG_FM_DELETE_PRESET
desc: in radio screen
eng: "Remove preset"
voice: ""
new: "Fjern forhåndsinnstilling"
new: "Fjern forhåndsinnstilling"
id: LANG_FM_STATION
desc: in radio screen
@ -1690,7 +1690,7 @@ id: LANG_FM_PRESET_SAVE_FAILED
desc: in radio screen
eng: "Preset save failed"
voice: ""
new: "Lagring av forhåndsinnstilling feilet"
new: "Lagring av forhåndsinnstilling feilet"
id: LANG_FM_NO_PRESETS
desc: DEPRECATED
@ -1702,7 +1702,7 @@ id: LANG_FM_NO_FREE_PRESETS
desc: in radio screen
eng: "The preset list is full"
voice: ""
new: "Forhåndsinnstillingslisten er full"
new: "Forhåndsinnstillingslisten er full"
id: LANG_FM_RADIO
desc: in main menu
@ -1720,7 +1720,7 @@ id: LANG_VIEW_DYNAMIC_PLAYLIST
desc: in playlist menu.
eng: "View Current Playlist"
voice: "View Current Playlist"
new: "Vis nåværende spilleliste"
new: "Vis nåværende spilleliste"
id: LANG_MOVE
desc: The verb/action Move
@ -1804,7 +1804,7 @@ id: LANG_BOOKMARK_SELECT_DELETE
desc: Used on the bookmark select window to indicated the bookmark delete option
eng: "ON+Play = Delete"
voice: ""
new: "PÅ+Play = Slett"
new: "PÅ+Play = Slett"
id: LANG_BOOKMARK_CREATE_SUCCESS
desc: Indicates bookmark was successfully created
@ -1858,7 +1858,7 @@ id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK
desc: Save in recent bookmarks only
eng: "Ask - Recent only"
voice: "Ask - Recent only"
new: "Spør - Kun nylige"
new: "Spør - Kun nylige"
id: LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY
desc: Save only on bookmark for each playlist in recent bookmarks
@ -1960,7 +1960,7 @@ id: LANG_RECORD_CURRENT_DIR
desc: in recording directory options
eng: "Current dir"
voice: "Current directory"
new: "Nåværende katalog"
new: "Nåværende katalog"
id: LANG_CREATE_DIR
desc: in main menu
@ -2650,7 +2650,7 @@ id: LANG_ONPLAY_OPEN_WITH
desc: Onplay open with
eng: "Open with"
voice: "open with"
new: "Åpne med"
new: "Åpne med"
id: LANG_SORT_DIR
desc: browser sorting setting
@ -2692,7 +2692,7 @@ id: LANG_FM_EDIT_PRESET
desc: in radio screen
eng: "Edit preset"
voice: ""
new: "Editer forhåndsinnstilling"
new: "Editer forhåndsinnstilling"
id: LANG_FM_MONO_MODE
desc: in radio screen
@ -2752,7 +2752,7 @@ id: LANG_MDB_ENABLE
desc: in sound settings
eng: "MDB Enable"
voice: "MDB Enable"
new: "MDB på"
new: "MDB på"
id: LANG_SUPERBASS
desc: in sound settings
@ -2776,7 +2776,7 @@ id: LANG_CONFIRM_SHUTDOWN
desc: in shutdown screen
eng: "Press OFF to shut down"
voice: ""
new: "Trykk AV for å avslutte"
new: "Trykk AV for å avslutte"
id: LANG_ID3_ORDER
desc: in playback settings screen
@ -2788,13 +2788,13 @@ id: LANG_ID3_V1_FIRST
desc: in playback settings screen
eng: "V1 then V2"
voice: "Version 1 then version 2"
new: "V1 så V2"
new: "V1 så V2"
id: LANG_ID3_V2_FIRST
desc: in playback settings screen
eng: "V2 then V1"
voice: "Version 2 then version 1"
new: "V2 så V1"
new: "V2 så V1"
id: LANG_NO_ROCKBOX_DIR
desc: in browse root
@ -2866,25 +2866,25 @@ id: LANG_ID3DB_SEARCH
desc: ID3 virtual folder name
eng: "Search"
voice: ""
new: "Søk"
new: "Søk"
id: LANG_ID3DB_SEARCH_ARTISTS
desc: ID3 virtual folder name
eng: "Search Artists"
voice: ""
new: "Søk i artister"
new: "Søk i artister"
id: LANG_ID3DB_SEARCH_ALBUMS
desc: ID3 virtual folder name
eng: "Search Albums"
voice: ""
new: "Søk i album"
new: "Søk i album"
id: LANG_ID3DB_SEARCH_SONGS
desc: ID3 virtual folder name
eng: "Search Songs"
voice: ""
new: "Søk i sanger"
new: "Søk i sanger"
id: LANG_ID3DB_MATCHES
desc: ID3 virtual folder name
@ -2974,13 +2974,13 @@ id: LANG_ALARM_MOD_DISABLE
desc: Announce that the RTC alarm has been turned off
eng: "Alarm Disabled"
voice: "Alarm Disabled"
new: "Alarm avslått"
new: "Alarm avslått"
id: LANG_RECORD_TRIGGER
desc: in recording settings_menu
eng: "Trigger"
voice:
new: "Utløser"
new: "Utløser"
id: LANG_RECORD_START_THRESHOLD
desc: in recording settings_menu
@ -3010,19 +3010,19 @@ id: LANG_RECORD_STOP_GAP
desc: in recording settings_menu
eng: "Presplit gap"
voice:
new: "Førsplitt-mellomrom"
new: "Førsplitt-mellomrom"
id: LANG_RECORD_TRIGGER_MODE
desc: in recording settings_menu
eng: "Trigger"
voice:
new: "Utløser"
new: "Utløser"
id: LANG_RECORD_TRIG_NOREARM
desc: in recording settings_menu
eng: "Once"
voice:
new: "Én gang"
new: "Én gang"
id: LANG_RECORD_TRIG_REARM
desc: in recording settings_menu
@ -3040,13 +3040,13 @@ id: LANG_RECORD_TRIG_IDLE
desc: waiting for threshold
eng: "Trigger idle"
voice:
new: "Utløser venter"
new: "Utløser venter"
id: LANG_RECORD_TRIGGER_ACTIVE
desc:
eng: "Trigger active"
voice:
new: "Utløser aktiv"
new: "Utløser aktiv"
id: LANG_LCD_REMOTE_MENU
desc: in the display sub menu
@ -3100,7 +3100,7 @@ id: LANG_NOTHING_TO_RESUME
desc: Error message displayed when resume button pressed but no playlist
eng: "Nothing to resume"
voice: ""
new: "Ingenting å fortsette"
new: "Ingenting å fortsette"
id: LANG_SPDIF_ENABLE
desc: in playback settings menu. enable/disable the optical out
@ -3124,13 +3124,13 @@ id: LANG_MENU_SET_RATING
desc: in wps context menu
eng: "Set song rating"
voice: "Set song rating"
new: "Sett sangbedømmelse"
new: "Sett sangbedømmelse"
id: LANG_RATING
desc: in set_rating
eng: "Rating:"
voice:
new: "Bedømmelse:"
new: "Bedømmelse:"
id: LANG_CROSSFADE_DURATION
desc: in playback settings
@ -3160,7 +3160,7 @@ id: LANG_REPLAYGAIN_ENABLE
desc: in replaygain
eng: "Enable replaygain"
voice:
new: "Slå på replaygain"
new: "Slå på replaygain"
id: LANG_REPLAYGAIN_NOCLIP
desc: in replaygain
@ -3178,25 +3178,25 @@ id: LANG_TRACK_GAIN
desc: in replaygain
eng: "Track gain"
voice:
new: "Spornivå"
new: "Spornivå"
id: LANG_ALBUM_GAIN
desc: in replaygain
eng: "Album gain"
voice:
new: "Albumnivå"
new: "Albumnivå"
id: LANG_ID3_TRACK_GAIN
desc: in browse_id3
eng: "[Track gain]"
voice:
new: "[Spornivå]"
new: "[Spornivå]"
id: LANG_ID3_ALBUM_GAIN
desc: in browse_id3
eng: "[Album gain]"
voice:
new: "[Albumnivå]"
new: "[Albumnivå]"
id: LANG_ID3_NO_GAIN
desc: DEPRECATED

View file

@ -5,12 +5,12 @@
id: LANG_SOUND_SETTINGS
desc: in the main menu
eng: "Sound Settings"
new: "Ustawienia dźwięku"
new: "Ustawienia dźwięku"
id: LANG_GENERAL_SETTINGS
desc: in the main menu
eng: "General Settings"
new: "Ustawienia główne"
new: "Ustawienia główne"
id: LANG_GAMES
desc: in the main menu
@ -35,7 +35,7 @@ new: "Wersja"
id: LANG_DEBUG
desc: in the main menu
eng: "Debug (Keep Out!)"
new: "Podgląd procesów"
new: "Podgląd procesów"
id: LANG_USB
desc: in the main menu
@ -70,17 +70,17 @@ new: "Bateria: %d%%%s"
id: LANG_BATTERY_CHARGE
desc: tells that the battery is charging, instead of battery level
eng: "Battery: Charging"
new: "Bateria: Ładowanie"
new: "Bateria: Ładowanie"
id: LANG_BOUNCE
desc: in the demos menu
eng: "Bounce"
new: "Skaczący napis"
new: "Skaczący napis"
id: LANG_SNOW
desc: in the demos menu
eng: "Snow"
new: "Śnieg"
new: "Śnieg"
id: LANG_TETRIS
desc: in the games menu
@ -100,18 +100,18 @@ new: "Robal"
id: LANG_SNAKE
desc: in the games menu
eng: "Snake"
new: "Wąż"
new: "Wąż"
id: LANG_PLAYLIST_LOAD
desc: displayed on screen while loading a playlist
eng: "Loading..."
new: "Ładuję..."
new: "Ładuję..."
# NO LONGER USED
id: LANG_PLAYLIST_SHUFFLE
desc: displayed on screen while shuffling a playlist
eng: "Shuffling..."
new: "Losuję..."
new: "Losuję..."
# NO LONGER USED
id: LANG_PLAYLIST_PLAY
@ -127,18 +127,18 @@ new: "Playlista"
id: LANG_PLAYINDICES_BUFFER
desc: in playlist.indices() when playlist is full
eng: "Buffer Full"
new: "Pełny bufor"
new: "Pełny bufor"
# NO LONGER USED
id: LANG_PLAYINDICES_AMOUNT
desc: number of files in playlist
eng: "%d Files"
new: "%d plików"
new: "%d plików"
id: LANG_SETTINGS_SAVE_PLAYER
desc: displayed if save settings has failed
eng: "Save Failed"
new: "Błąd zapisu"
new: "Błąd zapisu"
id: LANG_SETTINGS_BATTERY_PLAYER
desc: if save settings has failed
@ -148,7 +148,7 @@ new: "Partycja?"
id: LANG_SETTINGS_SAVE_RECORDER
desc: displayed if save settings has failed
eng: "Save Failed"
new: "Błąd zapisu"
new: "Błąd zapisu"
id: LANG_SETTINGS_BATTERY_RECORDER
desc: if save settings has failed
@ -163,7 +163,7 @@ new: "ON - ustaw"
id: LANG_TIME_REVERT
desc: used in set_time()
eng: "OFF To Revert"
new: "OFF - przywróć"
new: "OFF - przywróć"
id: LANG_HIDDEN
desc: in settings_menu
@ -203,17 +203,17 @@ new:
id: LANG_SORT_CASE
desc: in settings_menu
eng: "Sort Case Sensitive"
new: "Sortuj uwzgl. wielkość liter"
new: "Sortuj uwzgl. wielkość liter"
id: LANG_RESUME
desc: in settings_menu
eng: "Resume"
new: "Dokończ"
new: "Dokończ"
id: LANG_OFF
desc: Used in a lot of places
eng: "Off"
new: "wył."
new: "wył."
id: LANG_RESUME_SETTING_ASK
desc: in settings_menu
@ -223,17 +223,17 @@ new: "Pytaj"
id: LANG_ON
desc: Used in a lot of places
eng: "On"
new: "włącz"
new: "włącz"
id: LANG_BACKLIGHT
desc: in settings_menu
eng: "Backlight"
new: "Podświetlenie"
new: "Podświetlenie"
id: LANG_SCROLL
desc: in settings_menu
eng: "Scroll Speed Setting Example"
new: "Przykładowa prędkość przesuwu"
new: "Przykładowa prędkość przesuwu"
id: LANG_DISCHARGE
desc: DEPRECATED
@ -243,7 +243,7 @@ new: ""
id: LANG_TIME
desc: in settings_menu
eng: "Set Time/Date"
new: "Ustaw datę/czas"
new: "Ustaw datę/czas"
id: LANG_SPINDOWN
desc: in settings_menu
@ -258,12 +258,12 @@ new: "Minim. skok przewijania"
id: LANG_FFRW_ACCEL
desc: in settings_menu
eng: "FF/RW Accel"
new: "Przyśpieszenie przewijania"
new: "Przyśpieszenie przewijania"
id: LANG_FOLLOW
desc: in settings_menu
eng: "Follow Playlist"
new: "Idź do playlisty"
new: "Idź do playlisty"
# depreciated
id: LANG_RESET_ASK_PLAYER
@ -280,7 +280,7 @@ new:
id: LANG_RESET_ASK_RECORDER
desc: confirm to reset settings
eng: "Are You Sure?"
new: "Jesteś pewny?"
new: "Jesteś pewny?"
# depreciated
id: LANG_RESET_CONFIRM_RECORDER
@ -317,12 +317,12 @@ new: "Tryb sortowania"
id: LANG_SCROLL_MENU
desc: in display_settings_menu()
eng: "Scroll"
new: "Przesuwanie napisów"
new: "Przesuwanie napisów"
id: LANG_RESET
desc: in system_settings_menu()
eng: "Reset Settings"
new: "Ustawienia domyślne"
new: "Ustawienia domyślne"
id: LANG_PLAYBACK
desc: in settings_menu()
@ -332,12 +332,12 @@ new: "Odtwarzanie"
id: LANG_FILE
desc: in settings_menu()
eng: "File View"
new: "Widok plików"
new: "Widok plików"
id: LANG_DISPLAY
desc: in settings_menu()
eng: "Display"
new: "Wyświetlanie"
new: "Wyświetlanie"
id: LANG_SYSTEM
desc: in settings_menu()
@ -367,7 +367,7 @@ new: "Wysokie"
id: LANG_LOUDNESS
desc: in sound_settings
eng: "Loudness"
new: "Głośność"
new: "Głośność"
id: LANG_BBOOST
desc: in sound settings
@ -382,12 +382,12 @@ new: "Czas wyciszenia"
id: LANG_CHANNEL_MENU
desc: in sound_settings
eng: "Channels"
new: "Kanały"
new: "Kanały"
id: LANG_CHANNEL
desc: in sound_settings
eng: "Channel Configuration"
new: "Konfiguracja kanałów"
new: "Konfiguracja kanałów"
id: LANG_CHANNEL_STEREO
desc: in sound_settings
@ -417,17 +417,17 @@ new: "Aut. wzmocnienie"
id: LANG_SHOWDIR_ERROR_BUFFER
desc: in showdir(), displayed on screen when you reach buffer limit
eng: "Dir Buffer"
new: "Bufor katalogów"
new: "Bufor katalogów"
id: LANG_SHOWDIR_ERROR_FULL
desc: in showdir(), displayed on screen when you reach buffer limit
eng: "Is Full!"
new: "jest pełny!"
new: "jest pełny!"
id: LANG_RESUME_ASK
desc: question asked at the begining when resume is on
eng: "Resume?"
new: "Dokończyć?"
new: "Dokończyć?"
id: LANG_RESUME_CONFIRM_PLAYER
desc: possible answers to resume question
@ -459,12 +459,12 @@ new: "Klawisze odblokowane"
id: LANG_KEYLOCK_ON_RECORDER
desc: displayed when key lock is on
eng: "Key Lock Is ON"
new: "Klawisze są zablokowane"
new: "Klawisze są zablokowane"
id: LANG_KEYLOCK_OFF_RECORDER
desc: displayed when key lock is turned off
eng: "Key Lock Is OFF"
new: "Klawisze są odblokowane"
new: "Klawisze są odblokowane"
id: LANG_MUTE_ON_PLAYER
desc: displayed when mute is on
@ -499,12 +499,12 @@ new: "--Ekran-- "
id: LANG_ID3_TITLE
desc: in wps
eng: "[Title]"
new: "[Tytuł]"
new: "[Tytuł]"
id: LANG_ID3_NO_TITLE
desc: in wps when no title is avaible
eng: "<No Title>"
new: "<bez tytułu>"
new: "<bez tytułu>"
id: LANG_ID3_ARTIST
desc: in wps
@ -529,17 +529,17 @@ new: "<brak albumu>"
id: LANG_ID3_TRACKNUM
desc: in wps
eng: "[Tracknum]"
new: "[Ścieżka nr]"
new: "[Ścieżka nr]"
id: LANG_ID3_NO_TRACKNUM
desc: in wps if no track number is avaible
eng: "<No Tracknum>"
new: "<brak nru ścieżki>"
new: "<brak nru ścieżki>"
id: LANG_ID3_LENGHT
desc: in wps
eng: "[Length]"
new: "[Długość]"
new: "[Długość]"
id: LANG_ID3_PLAYLIST
desc: in wps
@ -554,22 +554,22 @@ new: "[Bitrate]"
id: LANG_ID3_FRECUENCY
desc: in wps
eng: "[Frequency]"
new: "[Częstotl.]"
new: "[Częstotl.]"
id: LANG_ID3_PATH
desc: in wps
eng: "[Path]"
new: "[Ścieżka]"
new: "[Ścieżka]"
id: LANG_PITCH_UP
desc: in wps
eng: "Pitch Up"
new: "Podnieś"
new: "Podnieś"
id: LANG_PITCH_DOWN
desc: in wps
eng: "Pitch Down"
new: "Obniż"
new: "Obniż"
id: LANG_PAUSE
desc: in wps
@ -589,7 +589,7 @@ new:
id: LANG_F3_STATUS
desc: in wps F3 pressed
eng: "Status"
new: "Górny"
new: "Górny"
id: LANG_F3_SCROLL
desc: in wps F3 pressed
@ -624,7 +624,7 @@ new:
id: LANG_SNAKE_SCORE
desc: when you die in snake game
eng: "Your score:"
new: "Twój wynik:"
new: "Twój wynik:"
id: LANG_SNAKE_HISCORE
desc: high score in snake game
@ -649,7 +649,7 @@ new: "[GRAJ] dalej"
id: LANG_SNAKE_QUIT
desc: how to quit game
eng: "[OFF] To Quit"
new: "[OFF] zakończ"
new: "[OFF] zakończ"
id: LANG_SNAKE_LEVEL
desc: level of difficulty
@ -795,17 +795,17 @@ new:
id: LANG_POWEROFF_IDLE
desc: in settings_menu
eng: "Idle Poweroff"
new: "Aut. wylączanie"
new: "Aut. wylączanie"
id: LANG_LANGUAGE_LOADED
desc: shown when a language has been loaded from the dir browser
eng: "New Language"
new: "Nowy język"
new: "Nowy język"
id: LANG_FILTER
desc: setting name for dir filter
eng: "Show Files"
new: "Pokaż pliki"
new: "Pokaż pliki"
id: LANG_FILTER_MUSIC
desc: show only music-related files
@ -835,7 +835,7 @@ new: "Nie"
id: LANG_PM_MENU
desc: in the display menu
eng: "Peak Meter"
new: "Wskaźnik szczyt."
new: "Wskaźnik szczyt."
id: LANG_PM_RELEASE
desc: in the peak meter menu
@ -865,12 +865,12 @@ new: "fragm. na odczyt"
id: LANG_BACKLIGHT_ON_WHEN_CHARGING
desc: in display_settings_menu
eng: "Backlight On When Plugged"
new: "Podświetl kiedy podłączony"
new: "Podświetl kiedy podłączony"
id: LANG_REPEAT
desc: in settings_menu
eng: "Repeat"
new: "Powtórz"
new: "Powtórz"
id: LANG_REPEAT_ALL
desc: repeat playlist once all songs have completed
@ -929,7 +929,7 @@ new: "Wto"
id: LANG_WEEKDAY_WEDNESDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Wed"
new: "Śro"
new: "Śro"
id: LANG_WEEKDAY_THURSDAY
desc: Maximum 3-letter abbreviation for weekday
@ -939,7 +939,7 @@ new: "Czw"
id: LANG_WEEKDAY_FRIDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Fri"
new: "Pią"
new: "Pią"
id: LANG_WEEKDAY_SATURDAY
desc: Maximum 3-letter abbreviation for weekday
@ -994,7 +994,7 @@ new: "Wrz"
id: LANG_MONTH_OCTOBER
desc: Maximum 3-letter abbreviation for monthname
eng: "Oct"
new: "Paź"
new: "Paź"
id: LANG_MONTH_NOVEMBER
desc: Maximum 3-letter abbreviation for monthname
@ -1009,7 +1009,7 @@ new: "Gru"
id: LANG_CUBE
desc: the name of the cube demo in the demo menu
eng: "Cube"
new: "Bryła"
new: "Bryła"
id: LANG_OSCILLOGRAPH
desc: the name of the oscillograph demo in the demo menu
@ -1024,12 +1024,12 @@ new: "Zapytaj raz"
id: LANG_BATTERY_DISPLAY
desc: Battery type title
eng: "Battery Display"
new: "Wyświetlanie baterii"
new: "Wyświetlanie baterii"
id: LANG_VOLUME_DISPLAY
desc: Volume type title
eng: "Volume Display"
new: "Wyświetlanie wzmocnienia"
new: "Wyświetlanie wzmocnienia"
id: LANG_DISPLAY_GRAPHIC
desc: Label for type of icon display
@ -1044,22 +1044,22 @@ new: "numerycznie"
id: LANG_PM_PERFORMANCE
desc: in the peak meter menu
eng: "Performance"
new: "Wydajność"
new: "Wydajność"
id: LANG_PM_HIGH_PERFORMANCE
desc: in the peak meter menu
eng: "High performance"
new: "Wysoka wydajność"
new: "Wysoka wydajność"
id: LANG_PM_ENERGY_SAVER
desc: in the peak meter menu
eng: "Save Energy"
new: "Oszczędz. energii"
new: "Oszczędz. energii"
id: LANG_PM_SCALE
desc: in the peak meter menu
eng: "Scale"
new: "Wskaźnik"
new: "Wskaźnik"
id: LANG_PM_DBFS
desc: in the peak meter menu
@ -1104,22 +1104,22 @@ new: "prawy"
id: LANG_RECORDING_QUALITY
desc: in the recording settings
eng: "Quality"
new: "Jakość"
new: "Jakość"
id: LANG_RECORDING_FREQUENCY
desc: in the recording settings
eng: "Frequency"
new: "Częstotliwość"
new: "Częstotliwość"
id: LANG_RECORDING_SOURCE
desc: in the recording settings
eng: "Source"
new: "Źródło"
new: "Źródło"
id: LANG_RECORDING_CHANNELS
desc: in the recording settings
eng: "Channels"
new: "Kanały"
new: "Kanały"
id: LANG_RECORDING_SRC_MIC
desc: in the recording settings
@ -1154,7 +1154,7 @@ new: "Wolne: %d.%GB"
id: LANG_POWEROFF
desc: disk poweroff flag
eng: "Disk Poweroff"
new: "Wyłączanie dysku"
new: "Wyłączanie dysku"
id: LANG_FILTER_PLAYLIST
desc: show only playlist
@ -1174,7 +1174,7 @@ new: "Usypiacz"
id: LANG_MP3BUFFER_MARGIN
desc: MP3 buffer margin time
eng: "Anti-Skip Buffer"
new: "Bufor antywstrząsowy"
new: "Bufor antywstrząsowy"
id: LANG_BIDIR_SCROLL
desc: Bidirectional scroll limit
@ -1184,7 +1184,7 @@ new: "Limit przesuwania dwukierunkowego"
id: LANG_SCROLL_DELAY
desc: Delay before scrolling
eng: "Scroll Start Delay"
new: "Opóźnienie rozpoczęcia przesuwania"
new: "Opóźnienie rozpoczęcia przesuwania"
id: LANG_SCROLL_STEP
desc: Pixels to advance per scroll
@ -1194,12 +1194,12 @@ new: "Rozmiar skoku przesuwania"
id: LANG_SCROLL_STEP_EXAMPLE
desc: Pixels to advance per scroll
eng: "Scroll Step Size Setting Example Text"
new: "Przykładowy rozmiar skoku przesuwania"
new: "Przykładowy rozmiar skoku przesuwania"
id: LANG_SCROLL_SPEED
desc: in display_settings_menu()
eng: "Scroll Speed"
new: "Prędkość przesuwania"
new: "Prędkość przesuwania"
id: LANG_TRICKLE_CHARGE
desc: DEPRECATED
@ -1209,17 +1209,17 @@ new: ""
id: LANG_BATTERY_TOPOFF_CHARGE
desc: in info display, shows that top off charge is running
eng: "Battery: Top-Off Chg"
new: "Bateria: Doładowanie"
new: "Bateria: Doładowanie"
id: LANG_BATTERY_TRICKLE_CHARGE
desc: in info display, shows that trickle charge is running
eng: "Battery: Trickle Chg"
new: "Bateria: Wolne ładowanie"
new: "Bateria: Wolne ładowanie"
id: LANG_BATTERY_CAPACITY
desc: in settings_menu
eng: "Battery Capacity"
new: "Pojemność baterii"
new: "Pojemność baterii"
id: LANG_QUEUE_QUEUED
desc: queued track name %s
@ -1269,7 +1269,7 @@ new: "Skasuj"
id: LANG_REALLY_DELETE
desc: Really Delete?
eng: "Delete?"
new: "Skasować?"
new: "Skasować?"
id: LANG_DELETED
desc: A file has beed deleted
@ -1284,7 +1284,7 @@ new: "Zm.Naz"
id: LANG_FAILED
desc: Something failed. To be appended after above actions
eng: "Failed"
new: "nie udało się"
new: "nie udało się"
id: LANG_ALARM_MOD_ALARM_MENU
desc: The name of the additional entry in the main menu for the RTC alarm mod.
@ -1304,7 +1304,7 @@ new: "Budzenie za %d:%02d"
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).
eng: "Shutting Down..."
new: "Wyłączanie..."
new: "Wyłączanie..."
id: LANG_ALARM_MOD_ERROR
desc: The text that tells that the time is incorrect (for the RTC alarm mod).
@ -1319,12 +1319,12 @@ new: "GRAJ=Ustaw OFF=Anuluj"
id: LANG_CREATE_PLAYLIST
desc: Menu option for creating a playlist
eng: "Create Playlist"
new: "Stwórz playlistę"
new: "Stwórz playlistę"
id: LANG_CREATING
desc: Screen feedback during playlist creation
eng: "Creating"
new: "Tworzę"
new: "Tworzę"
id: LANG_PLAYER_KEYBOARD_BACKSPACE
desc: Backspace alternative in player keyboard interaction
@ -1344,12 +1344,12 @@ new: "Akceptuj"
id: LANG_PLAYER_KEYBOARD_ABORT
desc: Abort alternative in player keyboard interaction
eng: "Abort"
new: "Opuść"
new: "Opuść"
id: LANG_MENU_SHOW_ID3_INFO
desc: Menu option to start id3 viewer
eng: "Show ID3 Info"
new: "Pokaż info ID3"
new: "Pokaż info ID3"
id: LANG_ID3_GENRE
desc: ID3 frame 'genre'
@ -1389,7 +1389,7 @@ new: "Ustawienia"
id: LANG_SETTINGS_LOADED2
desc: Feedback shown when a .cfg file is loaded
eng: "Loaded"
new: "załadowane"
new: "załadowane"
id: LANG_FADE_ON_STOP
desc: options menu to set fade on stop or pause
@ -1399,7 +1399,7 @@ new: "Wycisz przy zatrzymaniu"
id: LANG_SOKOBAN_ON
desc: how to undo move
eng: "[ON] To Undo"
new: "[ON] przywróć"
new: "[ON] przywróć"
id: LANG_INVERT
desc: in settings_menu
@ -1409,12 +1409,12 @@ new: "Tryb LCD"
id: LANG_CHANNEL_STEREO_NARROW_PLAYER
desc: in sound_settings
eng: "St. Narrow"
new: "wąskie st."
new: "wąskie st."
id: LANG_CHANNEL_STEREO_NARROW_RECORDER
desc: in sound_settings
eng: "Stereo Narrow"
new: "wąskie stereo"
new: "wąskie stereo"
id: LANG_CHANNEL_STEREO_WIDE
desc: in sound_settings
@ -1464,7 +1464,7 @@ new: "Zaznaczanie linii"
id: LANG_RECORDING_EDITABLE
desc: Editable recordings setting
eng: "Independent frames"
new: "Niezależne ramki"
new: "Niezależne ramki"
id: LANG_STATUS_BAR
desc: display menu, F3 substitute
@ -1479,12 +1479,12 @@ new: "Pasek przewijania"
id: LANG_CAPTION_BACKLIGHT
desc: in settings_menu
eng: "Caption backlight"
new: "Podświetlanie napisów"
new: "Podświetlanie napisów"
id: LANG_INVERT_CURSOR_POINTER
desc: in settings_menu
eng: "Pointer"
new: "wskaźnik"
new: "wskaźnik"
id: LANG_INVERT_CURSOR_BAR
desc: in settings_menu
@ -1504,7 +1504,7 @@ new: "w negatywie"
id: LANG_MAX_FILES_IN_DIR
desc: in settings_menu
eng: "Max files in dir browser"
new: "Maksym. plików w przeglądarce katalogów"
new: "Maksym. plików w przeglądarce katalogów"
id: LANG_MAX_FILES_IN_PLAYLIST
desc: in settings_menu
@ -1529,7 +1529,7 @@ new: "zawsze"
id: LANG_JUMP_SCROLL_DELAY
desc: (player) Delay before making a jump scroll
eng: "Jump Scroll Delay"
new: "opóźnienie skoku przewijania"
new: "opóźnienie skoku przewijania"
id: LANG_RECORD_TIMESPLIT
desc: Prompt for record timer interval setting, in the record settings menu
@ -1544,12 +1544,12 @@ new: "Dziel co:"
id: LANG_SHOW_ICONS
desc: in settings_menu
eng: "Show Icons"
new: "Pokaż ikony"
new: "Pokaż ikony"
id: LANG_DISK_FULL
desc: in recording screen
eng: "The disk is full. Press OFF to continue."
new: "Dysk jest pełny. Wciśnij OFF żeby kontynuować."
new: "Dysk jest pełny. Wciśnij OFF żeby kontynuować."
id: LANG_CONFIRM_WITH_PLAY_RECORDER
desc: Generic recorder string to use to confirm
@ -1559,7 +1559,7 @@ new: "GRAJ = Tak"
id: LANG_CANCEL_WITH_ANY_RECORDER
desc: Generic recorder string to use to cancel
eng: "Any Other = No"
new: "Każdy inny = Nie"
new: "Każdy inny = Nie"
##
## Strings used in the plugin loader:
@ -1568,12 +1568,12 @@ new: "Ka
id: LANG_PLUGIN_CANT_OPEN
desc: Plugin open error message
eng: "Can't open %s"
new: "Nie mogę otworzyć %s"
new: "Nie mogę otworzyć %s"
id: LANG_READ_FAILED
desc: There was an error reading a file
eng: "Failed reading %s"
new: "Błąd odczytu %s"
new: "Błąd odczytu %s"
id: LANG_PLUGIN_WRONG_MODEL
desc: The plugin is not compatible with the archos model trying to run it
@ -1588,7 +1588,7 @@ new: "Wersja niekompatybilna"
id: LANG_PLUGIN_ERROR
desc: The plugin return an error code
eng: "Plugin returned error"
new: "Wtyczka zwróciła błąd"
new: "Wtyczka zwróciła błąd"
##
## boot change detection
@ -1597,17 +1597,17 @@ new: "Wtyczka zwr
id: LANG_BOOT_CHANGED
desc: File browser discovered the boot file was changed
eng: "Boot changed"
new: "Zmienił się plik startowy"
new: "Zmienił się plik startowy"
id: LANG_REBOOT_NOW
desc: Do you want to reboot?
eng: "Reboot now?"
new: "Zresetować teraz?"
new: "Zresetować teraz?"
id: LANG_FLIPIT
desc: in the games menu
eng: "Flipit"
new: "Odwróć"
new: "Odwróć"
id: LANG_OTHELO
desc: in the games menu
@ -1627,7 +1627,7 @@ new: "Gwiazda"
id: LANG_QUEUE_LAST
desc: in onplay menu. queue a track/playlist at end of playlist.
eng: "Queue last"
new: "Kolejkuj ostatni/ą"
new: "Kolejkuj ostatni/ą"
id: LANG_INSERT
desc: in onplay menu. insert a track/playlist into dynamic playlist.
@ -1637,22 +1637,22 @@ new: "Wstaw"
id: LANG_INSERT_LAST
desc: in onplay menu. append a track/playlist into dynamic playlist.
eng: "Insert last"
new: "Wstaw ostatni/ą"
new: "Wstaw ostatni/ą"
id: LANG_QUEUE_FIRST
desc: in onplay menu. queue a track/playlist into dynamic playlist.
eng: "Queue next"
new: "Kolejkuj następny/ą"
new: "Kolejkuj następny/ą"
id: LANG_INSERT_FIRST
desc: in onplay menu. insert a track/playlist into dynamic playlist.
eng: "Insert next"
new: "Wstaw następny/ą"
new: "Wstaw następny/ą"
id: LANG_SAVE_DYNAMIC_PLAYLIST
desc: in playlist menu.
eng: "Save Dynamic Playlist"
new: "Zachowaj dynamiczną playlistę"
new: "Zachowaj dynamiczną playlistę"
id: LANG_PLAYLIST_MENU
desc: in main menu.
@ -1662,17 +1662,17 @@ new: "Opcje playlisty"
id: LANG_PLAYLIST_INSERT_COUNT
desc: splash number of tracks inserted
eng: "Inserted %d tracks (%s)"
new: "Wstawione %d plików (%s)"
new: "Wstawione %d plików (%s)"
id: LANG_PLAYLIST_QUEUE_COUNT
desc: splash number of tracks queued
eng: "Queued %d tracks (%s)"
new: "W kolejce %d plików (%s)"
new: "W kolejce %d plików (%s)"
id: LANG_PLAYLIST_SAVE_COUNT
desc: splash number of tracks saved
eng: "Saved %d tracks (%s)"
new: "Zachowane %d plików (%s)"
new: "Zachowane %d plików (%s)"
id: LANG_OFF_ABORT
desc: Used on recorder models
@ -1687,22 +1687,22 @@ new: "STOP - anuluj"
id: LANG_PLAYLIST_CONTROL_UPDATE_ERROR
desc: Playlist error
eng: "Error updating playlist control file"
new: "Błąd przy odświeżaniu pliku kontroli playlisty"
new: "Błąd przy odświeżaniu pliku kontroli playlisty"
id: LANG_PLAYLIST_ACCESS_ERROR
desc: Playlist error
eng: "Error accessing playlist file"
new: "Brak dostępu do pliku playlisty"
new: "Brak dostępu do pliku playlisty"
id: LANG_PLAYLIST_CONTROL_ACCESS_ERROR
desc: Playlist error
eng: "Error accessing playlist control file"
new: "Brak dostępu do pliku kontroli playlisty"
new: "Brak dostępu do pliku kontroli playlisty"
id: LANG_PLAYLIST_DIRECTORY_ACCESS_ERROR
desc: Playlist error
eng: "Error accessing directory"
new: "Brak dostępu do katalogu"
new: "Brak dostępu do katalogu"
id: LANG_PLAYLIST_CONTROL_INVALID
desc: Playlist resume error
@ -1732,7 +1732,7 @@ new: "Firmware"
id: LANG_LANGUAGE
desc: in settings_menu
eng: "Language"
new: "Język"
new: "Język"
id: LANG_WHILE_PLAYING
desc: in settings_menu()

View file

@ -3,12 +3,12 @@
id: LANG_SOUND_SETTINGS
desc: in the main menu
eng: "Sound Settings"
new: "Opções de Som"
new: "Opções de Som"
id: LANG_GENERAL_SETTINGS
desc: in the main menu
eng: "General Settings"
new: "Opções Gerais"
new: "Opções Gerais"
id: LANG_GAMES
desc: in the main menu
@ -28,12 +28,12 @@ new: "Info"
id: LANG_VERSION
desc: in the main menu
eng: "Version"
new: "Versão"
new: "Versão"
id: LANG_DEBUG
desc: in the main menu
eng: "Debug (keep out!)"
new: "Debug (não entre!)"
new: "Debug (não entre!)"
id: LANG_USB
desc: in the main menu
@ -118,7 +118,7 @@ new: "A reproduzir..."
id: LANG_PLAYINDICES_PLAYLIST
desc: in playlist.indices() when playlist is full
eng: "Playlist"
new: "Lista de reprodução"
new: "Lista de reprodução"
id: LANG_PLAYINDICES_BUFFER
desc: in playlist.indices() when playlist is full
@ -148,7 +148,7 @@ new: "Falhou a Salvaguarda"
id: LANG_SETTINGS_BATTERY_RECORDER
desc: if save settings has failed
eng: "Is battery low?"
new: "Está a bat. baixa?"
new: "Está a bat. baixa?"
id: LANG_TIME_SET
desc: used in set_time()
@ -183,7 +183,7 @@ new: "Contraste"
id: LANG_SHUFFLE
desc: in settings_menu
eng: "Shuffle"
new: "Aleatório"
new: "Aleatório"
id: LANG_PLAY_SELECTED
desc: in settings_menu
@ -198,7 +198,7 @@ new: ""
id: LANG_SORT_CASE
desc: in settings_menu
eng: "Sort Case Sensitive"
new: "Ordenação sensível a maisc./min."
new: "Ordenação sensível a maisc./min."
id: LANG_RESUME
desc: in settings_menu
@ -223,7 +223,7 @@ new: "Ligar"
id: LANG_BACKLIGHT
desc: in settings_menu
eng: "Backlight"
new: "Retro-iluminação"
new: "Retro-iluminação"
id: LANG_BACKLIGHT_ON
desc: in settings_menu
@ -253,7 +253,7 @@ new: "Paragem do disco"
id: LANG_FFRW_STEP
desc: in settings_menu
eng: "FF/RW Min Step"
new: "Passo mínimo de FF/RW"
new: "Passo mínimo de FF/RW"
id: LANG_FFRW_ACCEL
desc: in settings_menu
@ -263,7 +263,7 @@ new: "Acelar. FF/RW"
id: LANG_FOLLOW
desc: in settings_menu
eng: "Follow Playlist"
new: "Seguir a lista de reprodução"
new: "Seguir a lista de reprodução"
# depreciated
id: LANG_RESET_ASK_PLAYER
@ -297,7 +297,7 @@ new: "OFF=Cancelar"
id: LANG_RESET_DONE_SETTING
desc: visual confirmation after settings reset
eng: "Settings"
new: "Opções"
new: "Opções"
id: LANG_RESET_DONE_CLEAR
desc: visual confirmation after settings reset
@ -312,7 +312,7 @@ new: "Cancelado"
id: LANG_CASE_MENU
desc: in fileview_settings_menu()
eng: "Sort Mode"
new: "Modo de ordenação"
new: "Modo de ordenação"
id: LANG_SCROLL_MENU
desc: in display_settings_menu()
@ -322,7 +322,7 @@ new: "Vel. de desloc. do ecran"
id: LANG_RESET
desc: in system_settings_menu()
eng: "Reset settings"
new: "Opções de reinicialização"
new: "Opções de reinicialização"
id: LANG_PLAYBACK
desc: in settings_menu()
@ -352,7 +352,7 @@ new: "Volume"
id: LANG_BALANCE
desc: in sound_settings
eng: "Balance"
new: "Balanço"
new: "Balanço"
id: LANG_BASS
desc: in sound_settings
@ -377,7 +377,7 @@ new: "Realce dos graves"
id: LANG_DECAY
desc: in sound_settings
eng: "AV Decay Time"
new: "Tempo de caída de AV"
new: "Tempo de caída de AV"
id: LANG_CHANNEL_MENU
desc: in sound_settings
@ -387,7 +387,7 @@ new: "Canais"
id: LANG_CHANNEL
desc: in sound_settings
eng: "Channel Configuration"
new: "Configuração de canal"
new: "Configuração de canal"
id: LANG_CHANNEL_STEREO
desc: in sound_settings
@ -422,7 +422,7 @@ new: "Buffer de direct."
id: LANG_SHOWDIR_ERROR_FULL
desc: in showdir(), displayed on screen when you reach buffer limit
eng: "is full!"
new: "está cheio!"
new: "está cheio!"
id: LANG_RESUME_ASK
desc: question asked at the begining when resume is on
@ -442,7 +442,7 @@ new: "PLAY = Sim"
id: LANG_RESUME_CANCEL_RECORDER
desc: possible answer to resume question
eng: "Any Other = No"
new: "Qualquer outra = Não"
new: "Qualquer outra = Não"
id: LANG_KEYLOCK_ON_PLAYER
desc: displayed when key lock is on
@ -457,32 +457,32 @@ new: "Teclado desbloq."
id: LANG_KEYLOCK_ON_RECORDER
desc: displayed when key lock is on
eng: "Key lock is ON"
new: "Teclado está bloq."
new: "Teclado está bloq."
id: LANG_KEYLOCK_OFF_RECORDER
desc: displayed when key lock is turned off
eng: "Key lock is OFF"
new: "Teclado está desbloq."
new: "Teclado está desbloq."
id: LANG_MUTE_ON_PLAYER
desc: displayed when mute is on
eng: "Mute ON"
new: "Silêncio activo"
new: "Silêncio activo"
id: LANG_MUTE_OFF_PLAYER
desc: displayed when mute is off
eng: "Mute OFF"
new: "Silêncio desactivo"
new: "Silêncio desactivo"
id: LANG_MUTE_ON_RECORDER
desc: displayed when mute is on
eng: "Mute is ON"
new: "Silêncio está activo"
new: "Silêncio está activo"
id: LANG_MUTE_OFF_RECORDER
desc: displayed when mute is off
eng: "Mute is OFF"
new: "Silêncio está desactivo"
new: "Silêncio está desactivo"
id: LANG_ID3_INFO
desc: in the browse_id3() function
@ -497,12 +497,12 @@ new: "--Ecran-- "
id: LANG_ID3_TITLE
desc: in wps
eng: "[Title]"
new: "[Título]"
new: "[Título]"
id: LANG_ID3_NO_TITLE
desc: in wps when no title is avaible
eng: "<no title>"
new: "<sem título>"
new: "<sem título>"
id: LANG_ID3_ARTIST
desc: in wps
@ -527,12 +527,12 @@ new: "<sem album>"
id: LANG_ID3_TRACKNUM
desc: in wps
eng: "[Tracknum]"
new: "[Número pista]"
new: "[Número pista]"
id: LANG_ID3_NO_TRACKNUM
desc: in wps if no track number is avaible
eng: "<no tracknum>"
new: "<sem número pista>"
new: "<sem número pista>"
id: LANG_ID3_LENGHT
desc: in wps
@ -552,7 +552,7 @@ new: "[Bitrate]"
id: LANG_ID3_FRECUENCY
desc: in wps
eng: "[Frequency]"
new: "[Frequência]"
new: "[Frequência]"
id: LANG_ID3_PATH
desc: in wps
@ -612,7 +612,7 @@ new: ""
id: LANG_END_PLAYLIST_RECORDER
desc: when playlist has finished
eng: "End of song list"
new: "Fim da lista de canções"
new: "Fim da lista de canções"
id: LANG_END_CONFIRM_RECORDER
desc: when playlist has finished
@ -622,17 +622,17 @@ new: ""
id: LANG_SNAKE_SCORE
desc: when you die in snake game
eng: "Your score:"
new: "A sua pontuação:"
new: "A sua pontuação:"
id: LANG_SNAKE_HISCORE
desc: high score in snake game
eng: "High Score: %d"
new: "Maior Pontuação: %d"
new: "Maior Pontuação: %d"
id: LANG_SNAKE_HISCORE_NEW
desc: new high score in snake game
eng: "New High Score!"
new: "Nova maior pontuação!"
new: "Nova maior pontuação!"
id: LANG_SNAKE_PAUSE
desc: displayed when game is paused
@ -652,7 +652,7 @@ new: "[OFF] para sair"
id: LANG_SNAKE_LEVEL
desc: level of difficulty
eng: "Level - %d"
new: "Nível - %d"
new: "Nível - %d"
id: LANG_SNAKE_RANGE
desc: range of levels
@ -662,12 +662,12 @@ new: "(1 - devagar, 9 - depressa)"
id: LANG_SNAKE_START
desc: how to start or pause the game
eng: "[PLAY] to start/pause"
new: "[PLAY] para começar/pausa"
new: "[PLAY] para começar/pausa"
id: LANG_SOKOBAN_LEVEL
desc: must be smaller than 6 characters
eng: "Level"
new: "Nível"
new: "Nível"
id: LANG_SOKOBAN_MOVE
desc: must be smaller than 6 characters
@ -687,17 +687,17 @@ new: "[OFF] para parar"
id: LANG_SOKOBAN_F1
desc: what does F1 do
eng: "[F1] - level"
new: "[F1] - nível"
new: "[F1] - nível"
id: LANG_SOKOBAN_F2
desc: what does F2 do
eng: "[F2] same level"
new: "[F2] mesmo nível"
new: "[F2] mesmo nível"
id: LANG_SOKOBAN_F3
desc: what does F3 do
eng: "[F3] + level"
new: "[F3] + nível"
new: "[F3] + nível"
# Next ids are for Worlmet Game.
# Lenght restrictions for score board strings (LANG_SB_XXX):
@ -788,7 +788,7 @@ new: "Perdeu!"
id: LANG_TETRIS_LEVEL
desc: tetris game
eng: "Rows - Level"
new: "Linhas - Nível"
new: "Linhas - Nível"
id: LANG_POWEROFF_IDLE
desc: in settings_menu
@ -798,7 +798,7 @@ new: "Auto Desligar"
id: LANG_LANGUAGE_LOADED
desc: shown when a language has been loaded from the dir browser
eng: "new language"
new: "nova língua"
new: "nova língua"
id: LANG_FILTER
desc: setting name for dir filter
@ -808,7 +808,7 @@ new: "Mostrar ficheiros"
id: LANG_FILTER_MUSIC
desc: show only music-related files
eng: "Music"
new: "Música"
new: "Música"
id: LANG_FILTER_SUPPORTED
desc: show all file types supported by Rockbox
@ -828,7 +828,7 @@ new: "Sim"
id: LANG_SET_BOOL_NO
desc: bool false representation
eng: "No"
new: "Não"
new: "Não"
id: LANG_PM_MENU
desc: in the display menu
@ -863,7 +863,7 @@ new: "Unidades por leitura"
id: LANG_BACKLIGHT_ON_WHEN_CHARGING
desc: in display_settings_menu
eng: "Backlight On When Plugged"
new: "Com Retro-iluminação quando ligado"
new: "Com Retro-iluminação quando ligado"
id: LANG_REPEAT
desc: in settings_menu
@ -898,12 +898,12 @@ new: "Formato Horas"
id: LANG_12_HOUR_CLOCK
desc: option for 12 hour clock
eng: "12 hour clock"
new: "Relógio 12 horas"
new: "Relógio 12 horas"
id: LANG_24_HOUR_CLOCK
desc: option for 24 hour clock
eng: "24 hour clock"
new: "Relógio 24 horas"
new: "Relógio 24 horas"
id: LANG_WEEKDAY_SUNDAY
desc: Maximum 3-letter abbreviation for weekday
@ -913,32 +913,32 @@ new: "Dom"
id: LANG_WEEKDAY_MONDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Mon"
new: "2ªf"
new: "2ªf"
id: LANG_WEEKDAY_TUESDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Tue"
new: "3ªf"
new: "3ªf"
id: LANG_WEEKDAY_WEDNESDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Wed"
new: "4ªf"
new: "4ªf"
id: LANG_WEEKDAY_THURSDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Thu"
new: "5ªf"
new: "5ªf"
id: LANG_WEEKDAY_FRIDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Fri"
new: "6ªf"
new: "6ªf"
id: LANG_WEEKDAY_SATURDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Sat"
new: "Sáb"
new: "Sáb"
id: LANG_MONTH_JANUARY
desc: Maximum 3-letter abbreviation for monthname
@ -1008,7 +1008,7 @@ new: "Cubo"
id: LANG_OSCILLOGRAPH
desc: the name of the oscillograph demo in the demo menu
eng: "Oscillograph"
new: "Oscilosgráfico"
new: "Oscilosgráfico"
id: LANG_RESUME_SETTING_ASK_ONCE
desc: in settings_menu

View file

@ -66,12 +66,12 @@ new: "Baterie: %d%%%s"
id: LANG_BATTERY_CHARGE
desc: tells that the battery is charging, instead of battery level
eng: "Battery: Charging"
new: "Bateria se încarca"
new: "Bateria se încarca"
id: LANG_BOUNCE
desc: in the demos menu
eng: "Bounce"
new: "Text în salturi"
new: "Text în salturi"
id: LANG_SNOW
desc: in the demos menu
@ -101,7 +101,7 @@ new: "Sarpe"
id: LANG_PLAYLIST_LOAD
desc: displayed on screen while loading a playlist
eng: "Loading..."
new: "Încarcare..."
new: "Încarcare..."
id: LANG_PLAYLIST_SHUFFLE
desc: displayed on screen while shuffling a playlist
@ -201,7 +201,7 @@ new: "Continuare"
id: LANG_OFF
desc: Used in a lot of places
eng: "Off"
new: "Închis"
new: "Închis"
id: LANG_RESUME_SETTING_ASK
desc: in settings_menu
@ -346,7 +346,7 @@ new: "Grave"
id: LANG_TREBLE
desc: in sound_settings
eng: "Treble"
new: "Înalte"
new: "Înalte"
id: LANG_LOUDNESS
desc: in sound_settings
@ -386,7 +386,7 @@ new: "Mono"
id: LANG_CHANNEL_LEFT
desc: in sound_settings
eng: "Mono Left"
new: "Mono Stânga"
new: "Mono Stânga"
id: LANG_CHANNEL_RIGHT
desc: in sound_settings
@ -586,7 +586,7 @@ new: "Bara"
id: LANG_END_PLAYLIST_PLAYER
desc: when playlist has finished
eng: "End Of List"
new: "Sfârsit de lista"
new: "Sfârsit de lista"
id: LANG_END_CONFIRM_PLAYER
desc: when playlist has finished
@ -596,7 +596,7 @@ new: ""
id: LANG_END_PLAYLIST_RECORDER
desc: when playlist has finished
eng: "End Of Song List"
new: "Sfârsitul listei"
new: "Sfârsitul listei"
id: LANG_END_CONFIRM_RECORDER
desc: when playlist has finished
@ -631,7 +631,7 @@ new: "[PLAY] pentru continuare"
id: LANG_SNAKE_QUIT
desc: how to quit game
eng: "[OFF] To Quit"
new: "[OFF] pentru încetare"
new: "[OFF] pentru încetare"
id: LANG_SNAKE_LEVEL
desc: level of difficulty
@ -646,7 +646,7 @@ new: "(1 - lent, 9 - rapid)"
id: LANG_SNAKE_START
desc: how to start or pause the game
eng: "[PLAY] To Start/Pause"
new: "[PLAY] pentru început/pauza"
new: "[PLAY] pentru început/pauza"
id: LANG_SOKOBAN_LEVEL
desc: must be smaller than 6 characters
@ -661,7 +661,7 @@ new: "Deplasari"
id: LANG_SOKOBAN_WIN
desc: displayed when you win
eng: "YOU WIN!!"
new: "AI CÂSTIGAT!!"
new: "AI CÂSTIGAT!!"
id: LANG_SOKOBAN_QUIT
desc: how to quit game
@ -696,7 +696,7 @@ new: "Creste"
id: LANG_WORMLET_HUNGRY
desc: wormlet game
eng: "Hungry"
new: "Flamând"
new: "Flamând"
id: LANG_WORMLET_WORMED
desc: wormlet game
@ -1236,7 +1236,7 @@ new: "Alarma: %02d:%02d"
id: LANG_ALARM_MOD_TIME_TO_GO
desc: The time until the alarm will go off shown in the alarm menu for the RTC alarm mod.
eng: "Waking Up In %d:%02d"
new: "Alarma în %d:%02d"
new: "Alarma în %d:%02d"
id: LANG_CREATE_PLAYLIST
desc: Menu option for creating a playlist

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -268,7 +268,7 @@ new: "Gercekten?"
id: LANG_RESET_CONFIRM_PLAYER
desc: confirm to reset settings
eng: "Play/Stop"
new: "Çal/Dur"
new: "Çal/Dur"
id: LANG_RESET_ASK_RECORDER
desc: confirm to reset settings
@ -279,7 +279,7 @@ new: "Emin misiniz?"
id: LANG_RESET_CONFIRM_RECORDER
desc: confirm to reset settings
eng: "Play = Yes"
new: "Çal = Evet"
new: "Çal = Evet"
# depreciated
id: LANG_RESET_CANCEL_RECORDER
@ -320,7 +320,7 @@ new: "Ayarlari basa dondur"
id: LANG_PLAYBACK
desc: in settings_menu()
eng: "Playback"
new: "Çalma"
new: "Çalma"
id: LANG_FILE
desc: in settings_menu()
@ -370,7 +370,7 @@ new: "Bass Boost"
id: LANG_DECAY
desc: in sound_settings
eng: "AV decay time"
new: "AV sönüm zamani"
new: "AV sönüm zamani"
id: LANG_CHANNEL_MENU
desc: in sound_settings
@ -425,12 +425,12 @@ new: "Kaldigi yerden?"
id: LANG_RESUME_CONFIRM_PLAYER
desc: posible answers to resume question
eng: "(PLAY/STOP)"
new: "(ÇAL/DUR)"
new: "(ÇAL/DUR)"
id: LANG_RESUME_CONFIRM_RECORDER
desc: posible answer to resume question
eng: "Play = Yes"
new: "Çal = Evet"
new: "Çal = Evet"
id: LANG_RESUME_CANCEL_RECORDER
desc: posible answer to resume question
@ -876,7 +876,7 @@ new: "Calani"
id: LANG_RESET_CONFIRM
desc: confirm to reset settings
eng: "PLAY=Reset"
new: "PLAY=Basa Dön"
new: "PLAY=Basa Dön"
id: LANG_RESET_CANCEL
desc: confirm to reset settings
@ -916,7 +916,7 @@ new: "Sal"
id: LANG_WEEKDAY_WEDNESDAY
desc: abbreviation for weekday
eng: "Wed"
new: "Çar"
new: "Çar"
id: LANG_WEEKDAY_THURSDAY
desc: abbreviation for weekday

View file

@ -48,7 +48,7 @@ new: "Puffer: %d.%03dMB"
id: LANG_BATTERY_CHARGE
desc: tells that the battery is charging, instead of battery level
eng: "Battery: Charging"
new: "Akku: Üfladu"
new: "Akku: Üfladu"
id: LANG_PLAYLIST_LOAD
desc: displayed on screen while loading a playlist
@ -73,22 +73,22 @@ new: "Puffer voll"
id: LANG_SETTINGS_SAVE_PLAYER
desc: displayed if save settings has failed
eng: "Save Failed"
new: "Spiicherfähler"
new: "Spiicherfähler"
id: LANG_SETTINGS_BATTERY_PLAYER
desc: if save settings has failed
eng: "Partition?"
new: "Akku läär?"
new: "Akku läär?"
id: LANG_SETTINGS_SAVE_RECORDER
desc: displayed if save settings has failed
eng: "Save Failed"
new: "Spiicherfähler"
new: "Spiicherfähler"
id: LANG_SETTINGS_BATTERY_RECORDER
desc: if save settings has failed
eng: "No partition?"
new: "Akku läär?"
new: "Akku läär?"
id: LANG_TIME_SET
desc: used in set_time()
@ -98,7 +98,7 @@ new: "ON = spiichru"
id: LANG_TIME_REVERT
desc: used in set_time()
eng: "OFF To Revert"
new: "OFF = abbrächu"
new: "OFF = abbrächu"
id: LANG_CONTRAST
desc: in settings_menu
@ -108,12 +108,12 @@ new: "Kontrascht"
id: LANG_SHUFFLE
desc: in settings_menu
eng: "Shuffle"
new: "Züefall"
new: "Züefall"
id: LANG_PLAY_SELECTED
desc: in settings_menu
eng: "Play Selected First"
new: "Gwählts zersch abschpilu"
new: "Gwählts zersch abschpilu"
id: LANG_SORT_CASE
desc: in settings_menu
@ -128,12 +128,12 @@ new: "Fortsetzu"
id: LANG_OFF
desc: Used in a lot of places
eng: "Off"
new: "Üs"
new: "Üs"
id: LANG_RESUME_SETTING_ASK
desc: in settings_menu
eng: "Ask"
new: "Naafrägu"
new: "Naafrägu"
id: LANG_ON
desc: Used in a lot of places
@ -143,7 +143,7 @@ new: "A"
id: LANG_BACKLIGHT
desc: in settings_menu
eng: "Backlight"
new: "Bilüüchtig"
new: "Bilüüchtig"
id: LANG_SCROLL
desc: in settings_menu
@ -163,7 +163,7 @@ new: "Zit/Datum setzu"
id: LANG_SPINDOWN
desc: in settings_menu
eng: "Disk Spindown"
new: "HDD Motor-Üsschaltzit"
new: "HDD Motor-Üsschaltzit"
id: LANG_FFRW_STEP
desc: in settings_menu
@ -238,7 +238,7 @@ new: "Syschtem"
id: LANG_VOLUME
desc: in sound_settings
eng: "Volume"
new: "Lütschterchi"
new: "Lütschterchi"
id: LANG_BALANCE
desc: in sound_settings
@ -268,12 +268,12 @@ new: "Bass-Verschtercher"
id: LANG_DECAY
desc: in sound_settings
eng: "AV Decay Time"
new: "AV Trägheit"
new: "AV Trägheit"
id: LANG_CHANNEL_MENU
desc: in sound_settings
eng: "Channels"
new: "Kanäl"
new: "Kanäl"
id: LANG_CHANNEL
desc: in sound_settings
@ -298,12 +298,12 @@ new: "Mono Lings"
id: LANG_CHANNEL_RIGHT
desc: in sound_settings
eng: "Mono Right"
new: "Mono Rächts"
new: "Mono Rächts"
id: LANG_AUTOVOL
desc: in sound_settings
eng: "Auto Volume"
new: "Autom. Lütschterchi"
new: "Autom. Lütschterchi"
id: LANG_SHOWDIR_ERROR_BUFFER
desc: in showdir(), displayed on screen when you reach buffer limit
@ -333,7 +333,7 @@ new: "Schperri A"
id: LANG_KEYLOCK_OFF_PLAYER
desc: displayed when key lock is turned off
eng: "Key Lock OFF"
new: "Schperri Üs"
new: "Schperri Üs"
id: LANG_KEYLOCK_ON_RECORDER
desc: displayed when key lock is on
@ -343,7 +343,7 @@ new: "Schperri isch A"
id: LANG_KEYLOCK_OFF_RECORDER
desc: displayed when key lock is turned off
eng: "Key Lock Is OFF"
new: "Schperri isch Üs"
new: "Schperri isch Üs"
id: LANG_MUTE_ON_PLAYER
desc: displayed when mute is on
@ -353,7 +353,7 @@ new: "Schtumm A"
id: LANG_MUTE_OFF_PLAYER
desc: displayed when mute is off
eng: "Mute OFF"
new: "Schtumm Üs"
new: "Schtumm Üs"
id: LANG_MUTE_ON_RECORDER
desc: displayed when mute is on
@ -363,12 +363,12 @@ new: "Schtumm isch A"
id: LANG_MUTE_OFF_RECORDER
desc: displayed when mute is off
eng: "Mute Is OFF"
new: "Schtumm isch Üs"
new: "Schtumm isch Üs"
id: LANG_ID3_INFO
desc: in the browse_id3() function
eng: "-ID3 Info- "
new: "|¯ ID3 Info"
new: "|¯ ID3 Info"
id: LANG_ID3_SCREEN
desc: in the browse_id3() function
@ -388,12 +388,12 @@ new: "<kei Titel>"
id: LANG_ID3_ARTIST
desc: in wps
eng: "[Artist]"
new: "[Künschtler]"
new: "[Künschtler]"
id: LANG_ID3_NO_ARTIST
desc: in wps when no artist is avaible
eng: "<No Artist>"
new: "<kei Künschtler>"
new: "<kei Künschtler>"
id: LANG_ID3_ALBUM
desc: in wps
@ -433,7 +433,7 @@ new: "[Bitrata]"
id: LANG_ID3_FRECUENCY
desc: in wps
eng: "[Frequency]"
new: "[Frequänz]"
new: "[Frequänz]"
id: LANG_ID3_PATH
desc: in wps
@ -443,7 +443,7 @@ new: "[Pfad]"
id: LANG_PITCH_UP
desc: in wps
eng: "Pitch Up"
new: "schnäller"
new: "schnäller"
id: LANG_PITCH_DOWN
desc: in wps
@ -488,12 +488,12 @@ new: "Lischtuendi"
id: LANG_POWEROFF_IDLE
desc: in settings_menu
eng: "Idle Poweroff"
new: "automatischus Üsschaltu"
new: "automatischus Üsschaltu"
id: LANG_LANGUAGE_LOADED
desc: shown when a language has been loaded from the dir browser
eng: "New Language"
new: "Nöiji Spraach"
new: "Nöiji Spraach"
id: LANG_FILTER
desc: setting name for dir filter
@ -503,12 +503,12 @@ new: "Datiifilter"
id: LANG_FILTER_MUSIC
desc: show only music-related files
eng: "Music"
new: "Müsig"
new: "Müsig"
id: LANG_FILTER_SUPPORTED
desc: show all file types supported by Rockbox
eng: "Supported"
new: "Unnerschtützti"
new: "Unnerschtützti"
id: LANG_FILTER_ALL
desc: show all files
@ -528,7 +528,7 @@ new: "Nei"
id: LANG_PM_MENU
desc: in the display menu
eng: "Peak Meter"
new: "Üsstiirigsazeig"
new: "Üsstiirigsazeig"
id: LANG_PM_RELEASE
desc: in the peak meter menu
@ -538,7 +538,7 @@ new: "Gschw. bim Abfallu"
id: LANG_PM_PEAK_HOLD
desc: in the peak meter menu
eng: "Peak Hold Time"
new: "Üsstiirig Haltezit"
new: "Üsstiirig Haltezit"
id: LANG_PM_CLIP_HOLD
desc: in the peak meter menu
@ -553,12 +553,12 @@ new: "Ewig"
id: LANG_PM_UNITS_PER_READ
desc: in the peak meter menu
eng: "Units Per Read"
new: "Einheite pro Mässig"
new: "Einheite pro Mässig"
id: LANG_BACKLIGHT_ON_WHEN_CHARGING
desc: in display_settings_menu
eng: "Backlight On When Plugged"
new: "Bilüüchtig a bim Netzbitrieb"
new: "Bilüüchtig a bim Netzbitrieb"
id: LANG_REPEAT
desc: in settings_menu
@ -583,7 +583,7 @@ new: "PLAY=Zruggsetzu"
id: LANG_RESET_CANCEL
desc: confirm to reset settings
eng: "OFF=Cancel"
new: "OFF=Abbrächu"
new: "OFF=Abbrächu"
id: LANG_TIMEFORMAT
desc: select the time format of time in status bar
@ -593,12 +593,12 @@ new: "Zitformat"
id: LANG_12_HOUR_CLOCK
desc: option for 12 hour clock
eng: "12 Hour Clock"
new: "12 Std. Ühr"
new: "12 Std. Ühr"
id: LANG_24_HOUR_CLOCK
desc: option for 24 hour clock
eng: "24 Hour Clock"
new: "24 Std. Ühr"
new: "24 Std. Ühr"
id: LANG_WEEKDAY_SUNDAY
desc: Maximum 3-letter abbreviation for weekday
@ -608,7 +608,7 @@ new: "Sun"
id: LANG_WEEKDAY_MONDAY
desc: Maximum 3-letter abbreviation for weekday
eng: "Mon"
new: "Män"
new: "Män"
id: LANG_WEEKDAY_TUESDAY
desc: Maximum 3-letter abbreviation for weekday
@ -648,7 +648,7 @@ new: "Feb"
id: LANG_MONTH_MARCH
desc: Maximum 3-letter abbreviation for monthname
eng: "Mar"
new: "Mär"
new: "Mär"
id: LANG_MONTH_APRIL
desc: Maximum 3-letter abbreviation for monthname
@ -673,7 +673,7 @@ new: "Jul"
id: LANG_MONTH_AUGUST
desc: Maximum 3-letter abbreviation for monthname
eng: "Aug"
new: "Öüg"
new: "Öüg"
id: LANG_MONTH_SEPTEMBER
desc: Maximum 3-letter abbreviation for monthname
@ -698,7 +698,7 @@ new: "Dez"
id: LANG_RESUME_SETTING_ASK_ONCE
desc: in settings_menu
eng: "Ask Once"
new: "eismal frägu"
new: "eismal frägu"
id: LANG_BATTERY_DISPLAY
desc: Battery type title
@ -708,7 +708,7 @@ new: "Akku Azeig"
id: LANG_VOLUME_DISPLAY
desc: Volume type title
eng: "Volume Display"
new: "Lütschterchiazeig"
new: "Lütschterchiazeig"
id: LANG_DISPLAY_GRAPHIC
desc: Label for type of icon display
@ -753,17 +753,17 @@ new: "linear (%)"
id: LANG_PM_MIN
desc: in the peak meter menu
eng: "Minimum Of Range"
new: "chlinschte Wärt"
new: "chlinschte Wärt"
id: LANG_PM_MAX
desc: in the peak meter menu
eng: "Maximum Of Range"
new: "greeschte Wärt"
new: "greeschte Wärt"
id: LANG_RECORDING
desc: in the main menu
eng: "Recording"
new: "Üfnahm"
new: "Üfnahm"
id: LANG_RECORDING_GAIN
desc: in the recording screen
@ -778,17 +778,17 @@ new: "Lings"
id: LANG_RECORDING_RIGHT
desc: in the recording screen
eng: "Right"
new: "Rächts"
new: "Rächts"
id: LANG_RECORDING_QUALITY
desc: in the recording settings
eng: "Quality"
new: "Qualität"
new: "Qualität"
id: LANG_RECORDING_FREQUENCY
desc: in the recording settings
eng: "Frequency"
new: "Frequänz"
new: "Frequänz"
id: LANG_RECORDING_SOURCE
desc: in the recording settings
@ -818,7 +818,7 @@ new: "Digital"
id: LANG_RECORDING_SETTINGS
desc: in the main menu
eng: "Recording Settings"
new: "Üfnahmeischtellige"
new: "Üfnahmeischtellige"
id: LANG_DISK_STAT
desc: disk size info
@ -833,7 +833,7 @@ new: "Frii: %d.%dGB"
id: LANG_POWEROFF
desc: disk poweroff flag
eng: "Disk Poweroff"
new: "HDD Üsschaltbifähl brüüchu"
new: "HDD Üsschaltbifähl brüüchu"
id: LANG_FILTER_PLAYLIST
desc: show only playlist
@ -853,7 +853,7 @@ new: "Ischlaaftimer"
id: LANG_MP3BUFFER_MARGIN
desc: MP3 buffer margin time
eng: "Anti-Skip Buffer"
new: "Puffer zum vorüs fillu"
new: "Puffer zum vorüs fillu"
id: LANG_BIDIR_SCROLL
desc: Bidirectional scroll limit
@ -863,7 +863,7 @@ new: "Beidsitigs Scroll-Limit"
id: LANG_SCROLL_DELAY
desc: Delay before scrolling
eng: "Scroll Start Delay"
new: "Scroll-Startverzögrig"
new: "Scroll-Startverzögrig"
id: LANG_SCROLL_STEP
desc: Pixels to advance per scroll
@ -898,7 +898,7 @@ new: "Akku: Erhaltladu"
id: LANG_BATTERY_CAPACITY
desc: in settings_menu
eng: "Battery Capacity"
new: "Akku: Kapazität"
new: "Akku: Kapazität"
id: LANG_MENU_SETTING_CANCEL
desc: Visual confirmation of canceling a changed setting
@ -948,22 +948,22 @@ new: "Weckzit: %02d:%02d"
id: LANG_ALARM_MOD_TIME_TO_GO
desc: The time until the alarm will go off shown in the alarm menu for the RTC alarm mod.
eng: "Waking Up In %d:%02d"
new: "Üfwachu in %d:%02d"
new: "Üfwachu in %d:%02d"
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).
eng: "Shutting Down..."
new: "Schaltu üs..."
new: "Schaltu üs..."
id: LANG_ALARM_MOD_ERROR
desc: The text that tells that the time is incorrect (for the RTC alarm mod).
eng: "Alarm Time Is Too Soon!"
new: "Weckzit isch zfrüeh"
new: "Weckzit isch zfrüeh"
id: LANG_ALARM_MOD_KEYS
desc: Shown key functions in alarm menu (for the RTC alarm mod).
eng: "PLAY=Set OFF=Cancel"
new: "PLAY=Ok OFF=Abbrächu"
new: "PLAY=Ok OFF=Abbrächu"
id: LANG_CREATE_PLAYLIST
desc: Menu option for creating a playlist
@ -973,7 +973,7 @@ new: "Abschpillischta Erschtellu"
id: LANG_CREATING
desc: Screen feedback during playlist creation
eng: "Creating"
new: "Am Zämuschtellu"
new: "Am Zämuschtellu"
id: LANG_PLAYER_KEYBOARD_BACKSPACE
desc: Backspace alternative in player keyboard interaction
@ -988,7 +988,7 @@ new: "Leschu"
id: LANG_PLAYER_KEYBOARD_ACCEPT
desc: Accept alternative in player keyboard interaction
eng: "Accept"
new: "Anäh"
new: "Anäh"
id: LANG_PLAYER_KEYBOARD_ABORT
desc: Abort alternative in player keyboard interaction
@ -1103,12 +1103,12 @@ new: "VBR-Datii aktualisieru"
id: LANG_INVERT_CURSOR
desc: in settings_menu
eng: "Line Selector"
new: "Ziiluüswahl"
new: "Ziiluüswahl"
id: LANG_RECORDING_EDITABLE
desc: Editable recordings setting
eng: "Independent frames"
new: "unabhängigi Frames"
new: "unabhängigi Frames"
id: LANG_STATUS_BAR
desc: display menu, F3 substitute
@ -1123,7 +1123,7 @@ new: "Scrolliischta"
id: LANG_CAPTION_BACKLIGHT
desc: in settings_menu
eng: "Caption backlight"
new: "Bilüüchtig a bim Titelwägsel"
new: "Bilüüchtig a bim Titelwägsel"
id: LANG_INVERT_CURSOR_POINTER
desc: in settings_menu
@ -1173,17 +1173,17 @@ new: "immer"
id: LANG_JUMP_SCROLL_DELAY
desc: (player) Delay before making a jump scroll
eng: "Jump Scroll Delay"
new: "Gumpverzögrig"
new: "Gumpverzögrig"
id: LANG_RECORD_TIMESPLIT
desc: Prompt for record timer interval setting, in the record settings menu
eng: "Time Split"
new: "Üfnahm teilu"
new: "Üfnahm teilu"
id: LANG_RECORD_TIMESPLIT_REC
decs: Display of record timer interval setting, on the record screen
eng: "Split time:"
new: "Üfnahm teilu:"
new: "Üfnahm teilu:"
id: LANG_SHOW_ICONS
desc: in settings_menu
@ -1212,12 +1212,12 @@ new: "Andri = Nei"
id: LANG_PLUGIN_CANT_OPEN
desc: Plugin open error message
eng: "Can't open %s"
new: "Cha %s nit üftüe"
new: "Cha %s nit üftüe"
id: LANG_READ_FAILED
desc: There was an error reading a file
eng: "Failed reading %s"
new: "Fähler bim läsu fa %s"
new: "Fähler bim läsu fa %s"
id: LANG_PLUGIN_WRONG_MODEL
desc: The plugin is not compatible with the archos model trying to run it
@ -1232,7 +1232,7 @@ new: "nit kompatibli Version"
id: LANG_PLUGIN_ERROR
desc: The plugin return an error code
eng: "Plugin returned error"
new: "Plugin mäldut Fähler"
new: "Plugin mäldut Fähler"
##
## boot change detection
@ -1241,12 +1241,12 @@ new: "Plugin m
id: LANG_BOOT_CHANGED
desc: File browser discovered the boot file was changed
eng: "Boot changed"
new: "Boot gändrut"
new: "Boot gändrut"
id: LANG_REBOOT_NOW
desc: Do you want to reboot?
eng: "Reboot now?"
new: "jetz nöü bootu?"
new: "jetz nöü bootu?"
id: LANG_QUEUE_LAST
desc: in onplay menu. queue a track/playlist at end of playlist.
@ -1301,37 +1301,37 @@ new: "%d Lieder abgspiichrut (%s)"
id: LANG_OFF_ABORT
desc: Used on recorder models
eng: "OFF to abort"
new: "Off fer abzbrächu"
new: "Off fer abzbrächu"
id: LANG_STOP_ABORT
desc: Used on player models
eng: "STOP to abort"
new: "STOP fer abzbrächu"
new: "STOP fer abzbrächu"
id: LANG_PLAYLIST_CONTROL_UPDATE_ERROR
desc: Playlist error
eng: "Error updating playlist control file"
new: "Fähler: Aktualisierig Abschpillischta-Kontrolldatii"
new: "Fähler: Aktualisierig Abschpillischta-Kontrolldatii"
id: LANG_PLAYLIST_ACCESS_ERROR
desc: Playlist error
eng: "Error accessing playlist file"
new: "Fähler: Züegriff Abschpillischta"
new: "Fähler: Züegriff Abschpillischta"
id: LANG_PLAYLIST_CONTROL_ACCESS_ERROR
desc: Playlist error
eng: "Error accessing playlist control file"
new: "Fähler: Züegriff Abschpillischta-Kontrolldatii"
new: "Fähler: Züegriff Abschpillischta-Kontrolldatii"
id: LANG_PLAYLIST_DIRECTORY_ACCESS_ERROR
desc: Playlist error
eng: "Error accessing directory"
new: "Fähler: Verzeichniszüegriff"
new: "Fähler: Verzeichniszüegriff"
id: LANG_PLAYLIST_CONTROL_INVALID
desc: Playlist resume error
eng: "Playlist control file is invalid"
new: "Abschpillischta-Kontrolldatii isch ungültig"
new: "Abschpillischta-Kontrolldatii isch ungültig"
id: LANG_RECURSE_DIRECTORY
desc: In playlist menu
@ -1391,7 +1391,7 @@ new: "kei Datije"
id: LANG_BUTTONBAR_MENU
desc: in button bar
eng: "Menu"
new: "Mönü"
new: "Mönü"
id: LANG_FM_BUTTONBAR_PRESETS
desc: in button bar
@ -1416,12 +1416,12 @@ new: "Sender: %d.%dMHz"
id: LANG_FM_PRESET_SAVE_FAILED
desc: in radio screen
eng: "Preset save failed"
new: "Fähler bim spiichru"
new: "Fähler bim spiichru"
id: LANG_FM_NO_PRESETS
desc: in radio screen
eng: "The preset list is empty"
new: "Senderlischta läär"
new: "Senderlischta läär"
id: LANG_FM_NO_FREE_PRESETS
desc: in radio screen
@ -1436,7 +1436,7 @@ new: "FM Radio"
id: LANG_FM_BUTTONBAR_RECORD
desc: in main menu
eng: "Record"
new: "Üfnäh"
new: "Üfnäh"
id: LANG_VIEW_DYNAMIC_PLAYLIST
desc: in playlist menu.
@ -1451,33 +1451,33 @@ new: "verschiebu"
id: LANG_MOVE_FAILED
desc: Error message displayed in playlist viewer
eng: "Move failed"
new: "Fähler bim verschiebu"
new: "Fähler bim verschiebu"
id: LANG_FLIP_DISPLAY
desc: in settings_menu, option to turn display+buttos by 180 degreed
eng: "Upside Down"
new: "umgidräht"
new: "umgidräht"
id: LANG_RECORD_PRERECORD
desc: in recording and radio screen
eng: "Prerecording"
new: "Vorüsüfnahm"
new: "Vorüsüfnahm"
id: LANG_RECORD_PRERECORD_TIME
desc: in recording settings_menu
eng: "Prerecord time"
new: "Vorüsüfnahmezit"
new: "Vorüsüfnahmezit"
#Auto bookmark prompts
id: LANG_BOOKMARK_AUTOLOAD_QUERY
desc: prompt for user to decide to create a bookmark
eng: "Load Last Bookmark?"
new: "zletscht Läsezeichu ladu?"
new: "zletscht Läsezeichu ladu?"
id: LANG_AUTO_BOOKMARK_QUERY
desc: prompt for user to decide to create an bookmark
eng: "Create a Bookmark?"
new: "Läsezeichu erschtellu?"
new: "Läsezeichu erschtellu?"
# Bookmark Select Menu Text
id: LANG_BOOKMARK_SELECT_LIST_BOOKMARKS
@ -1493,7 +1493,7 @@ new: "OFF = Biendu"
id: LANG_BOOKMARK_SELECT_BOOKMARK_TEXT
desc: Used on the bookmark select window to label bookmark number
eng: "Bookmark"
new: "Läsezeichu"
new: "Läsezeichu"
id: LANG_BOOKMARK_SELECT_INDEX_TEXT
desc: Used on the bookmark select window to label index number
@ -1508,7 +1508,7 @@ new: "Zit"
id: LANG_BOOKMARK_SELECT_PLAY
desc: Used on the bookmark select window to indicated the play option
eng: "PLAY = Select"
new: "PLAY = üswählu"
new: "PLAY = üswählu"
id: LANG_BOOKMARK_SELECT_DELETE
desc: Used on the bookmark select window to indicated the bookmark delete option
@ -1519,49 +1519,49 @@ new: "ON+PLAY = leschu"
id: LANG_BOOKMARK_CREATE_SUCCESS
desc: Indicates bookmark was successfully created
eng: "Bookmark Created"
new: "Läsezeichu erschtellt"
new: "Läsezeichu erschtellt"
id: LANG_BOOKMARK_CREATE_FAILURE
desc: Indicates bookmark was not created
eng: "Bookmark Failed!"
new: "Fähler bim Erschtellu fam Läsezeichu"
new: "Fähler bim Erschtellu fam Läsezeichu"
# Bookmark creation/failure text
id: LANG_BOOKMARK_LOAD_EMPTY
desc: Indicates bookmark was empty
eng: "Bookmark Empty"
new: "kei Läsezeichu"
new: "kei Läsezeichu"
# Bookmark Settings Text
id: LANG_BOOKMARK_SETTINGS
desc: in general settings
eng: "Bookmarking"
new: "Läsezeichu"
new: "Läsezeichu"
id: LANG_BOOKMARK_SETTINGS_AUTOLOAD
desc: prompt for user to decide to create a bookmark
eng: "Load Last Bookmark"
new: "letschts Läsezeichu ladu"
new: "letschts Läsezeichu ladu"
id: LANG_BOOKMARK_SETTINGS_AUTOCREATE
desc: prompt for user to decide to create an bookmark
eng: "Bookmark on Stop"
new: "Bim Stoppu Läsezeichu erschtellu"
new: "Bim Stoppu Läsezeichu erschtellu"
id: LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS
desc: Configuration option to maintain a list of recent bookmarks
eng: "Maintain a List of Recent Bookmarks?"
new: "Lischta mit zletscht gibrüchte Läsezeichu verwaltu?"
new: "Lischta mit zletscht gibrüchte Läsezeichu verwaltu?"
id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES
desc: Save in recent bookmarks only
eng: "Yes - Recent only"
new: "Ja - nur znöüschta"
new: "Ja - nur znöüschta"
id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK
desc: Save in recent bookmarks only
eng: "Ask - Recent only"
new: "Frägu - Nur znöüschta"
new: "Frägu - Nur znöüschta"
id: LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY
@ -1573,22 +1573,22 @@ new: "nur verschidni"
id: LANG_BOOKMARK_MENU
desc: Text on main menu to get to bookmark commands
eng: "Bookmarks"
new: "Läsezeichu"
new: "Läsezeichu"
id: LANG_BOOKMARK_MENU_CREATE
desc: Used off of the bookmark menu to create a bookmark
eng: "Create Bookmark"
new: "Läsezeichu erschtellu"
new: "Läsezeichu erschtellu"
id: LANG_BOOKMARK_MENU_LIST
desc: Used off of the bookmark menu to list available bookmarks for the currently playing directory or M3U
eng: "List Bookmarks"
new: "Läsezeichu üflischtu"
new: "Läsezeichu üflischtu"
id: LANG_BOOKMARK_MENU_RECENT_BOOKMARKS
desc: Text for the menu text to access the most recent bookmarks list
eng: "Recent Bookmarks"
new: "nöüschti Läsezeichu"
new: "nöüschti Läsezeichu"
id: LANG_INFO_MENU
desc: in the info sub menu
@ -1598,7 +1598,7 @@ new: "Rockbox Info"
id: LANG_RECORDING_MENU
desc: in the recording sub menu
eng: "Start Recording"
new: "Üfnahm startu"
new: "Üfnahm startu"
id: LANG_WIND_MENU
desc: in the playback sub menu
@ -1634,7 +1634,7 @@ new: "Zit & Datum"
id: LANG_LIMITS_MENU
desc: in the system sub menu
eng: "Limits"
new: "Grenzwärta"
new: "Grenzwärta"
id: LANG_MANAGE_MENU
desc: in the system sub menu
@ -1699,7 +1699,7 @@ new: "Taschtuliischta"
id: LANG_DIRBROWSE_F1
desc: in dir browser, F1 button bar text
eng: "Menu"
new: "Mönü"
new: "Mönü"
id: LANG_DIRBROWSE_F2
desc: in dir browser, F2 button bar text
@ -2025,13 +2025,13 @@ id: LANG_VOICE
desc: root of voice menu
eng: "Voice"
voice: ""
new: "Spraachüsgab"
new: "Spraachüsgab"
id: LANG_VOICE_MENU
desc: item of voice menu, enable/disable the voice UI
eng: "Voice Menus"
voice: ""
new: "Mönüs"
new: "Mönüs"
id: LANG_VOICE_DIR
desc: item of voice menu, set the "talkbox" mode for directories
@ -2079,7 +2079,7 @@ id: LANG_VOICE_SPELL
desc: "talkbox" mode for files+directories
eng: "Spell"
voice: ""
new: "büechschtabieru"
new: "büechschtabieru"
id: VOICE_CHAR_A
desc: spoken only, for spelling
@ -2326,13 +2326,13 @@ id: LANG_FILETYPES_STRING_BUFFER_EMPTY
desc: Filetype string buffer empty
eng: "Filetype string buffer empty"
voice: ""
new: "Datiitypu-Zeichubuffer läär"
new: "Datiitypu-Zeichubuffer läär"
id: LANG_ONPLAY_OPEN_WITH
desc: Onplay open with
eng: "Open with"
voice: ""
new: "Öffnu mit"
new: "Öffnu mit"
id: LANG_SORT_DIR
desc: browser sorting setting
@ -2362,7 +2362,7 @@ id: LANG_SORT_DATE_REVERSE
desc: browser sorting setting
eng: "by newest date"
voice: ""
new: "nach nöüschtum Datum"
new: "nach nöüschtum Datum"
id: LANG_SORT_TYPE
desc: browser sorting setting
@ -2398,7 +2398,7 @@ id: LANG_FM_BUTTONBAR_ADD
desc: in radio screen
eng: "Add"
voice: ""
new: "Derzüe"
new: "Derzüe"
id: LANG_FM_BUTTONBAR_ACTION
desc: in radio screen
@ -2422,7 +2422,7 @@ id: LANG_MDB_CENTER
desc: in sound settings
eng: "MDB Center frequency"
voice: ""
new: "MDB Mittufrequänz"
new: "MDB Mittufrequänz"
id: LANG_MDB_SHAPE
desc: in sound settings
@ -2446,19 +2446,19 @@ id: LANG_SHUTDOWN
desc: in main menu
eng: "Shut down"
voice: ""
new: "Üsschaltu"
new: "Üsschaltu"
id: LANG_SHUTTINGDOWN
desc: in main menu
eng: "Shutting down..."
voice: ""
new: "am Üsschaltu..."
new: "am Üsschaltu..."
id: LANG_CONFIRM_SHUTDOWN
desc: in shutdown screen
eng: "Press OFF to shut down"
voice: ""
new: "OFF fer Üszschaltu"
new: "OFF fer Üszschaltu"
id: LANG_ID3_ORDER
desc: in playback settings screen
@ -2482,19 +2482,19 @@ id: LANG_NO_ROCKBOX_DIR
desc: in browse root
eng: "No .rockbox directory"
voice: ""
new: "Verzeichnis .rockbox fählt"
new: "Verzeichnis .rockbox fählt"
id: LANG_INSTALLATION_INCOMPLETE
desc: in browse root
eng: "Installation incomplete"
voice: ""
new: "Inschtallation unvollschtändig"
new: "Inschtallation unvollschtändig"
id: LANG_REMOVE_MMC
desc: before acknowledging usb in case an MMC is inserted (Ondio)
eng: "Please remove inserted MMC"
voice: ""
new: "Bitte MMC üsanäh"
new: "Bitte MMC üsanäh"
id: VOICE_DOT
desc: spoken only, for spelling

View file

@ -18,7 +18,7 @@
****************************************************************************/
/* size of the buffer used for loadable, translated strings */
#define MAX_LANGUAGE_SIZE 8000
#define MAX_LANGUAGE_SIZE 14000
/* both these must match the two initial bytes in the binary lang file */
#define LANGUAGE_COOKIE 0x1a

View file

@ -216,83 +216,6 @@ static unsigned long get_long(void* buf)
return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
}
/* Convert an UTF-8 string to Latin-1, overwriting the old string (the new
* string is never longer than the original, so this is safe). Non-latin-1
* chars are replaced with '?'.
*/
static void convert_utf8(char* utf8)
{
char* dest = utf8;
long code = 0;
unsigned char c;
int tail = 0;
int size = 0;
while ((c = *utf8++) != 0)
{
if ((tail <= 0) && ((c <= 0x7f) || (c >= 0xc2)))
{
/* Start of new character. */
if (c < 0x80)
{
size = 1;
}
else if (c < 0xe0)
{
size = 2;
c &= 0x1f;
}
else if (c < 0xf0)
{
size = 3;
c &= 0x0f;
}
else if (c < 0xf5)
{
size = 4;
c &= 0x07;
}
else
{
/* Invalid size. */
size = 0;
}
code = c;
tail = size - 1;
}
else if ((tail > 0) && ((c & 0xc0) == 0x80))
{
/* Valid continuation character. */
code = (code << 6) | (c & 0x3f);
tail--;
if (tail == 0)
{
if (((size == 2) && (code < 0x80))
|| ((size == 3) && (code < 0x800))
|| ((size == 4) && (code < 0x10000)))
{
/* Invalid encoding. */
code = 0;
}
}
}
else
{
tail = -1;
}
if ((tail == 0) && (code > 0))
{
*dest++ = (code <= 0xff) ? (char) (code & 0xff) : '?';
}
}
*dest = 0;
}
/* Read a string tag from an M4A file */
void read_m4a_tag_string(int fd, int len,char** bufptr,size_t* bytes_remaining, char** dest)
{
@ -316,7 +239,6 @@ void read_m4a_tag_string(int fd, int len,char** bufptr,size_t* bytes_remaining,
}
**bufptr=(char)0;
convert_utf8(*dest);
data_length = strlen(*dest)+1;
*bufptr=(*dest)+data_length;
*bytes_remaining-=data_length;
@ -468,7 +390,6 @@ static bool read_ape_tags(int fd, struct mp3entry* id3)
return false;
}
convert_utf8(value);
len = parse_tag(name, value, id3, buf, buf_remaining,
TAGTYPE_APE);
buf += len;
@ -563,7 +484,6 @@ static bool read_vorbis_tags(int fd, struct mp3entry *id3,
return false;
}
convert_utf8(value);
len = parse_tag(name, value, id3, buf, buf_remaining,
TAGTYPE_VORBIS);
buf += len;

View file

@ -1024,6 +1024,12 @@ static bool read_next_metadata(void)
* is manipulating the playlist a lot, we will just lose battery. */
// filling = true;
status = get_metadata(&tracks[next_track],fd,trackname,v1first);
/* Preload the glyphs in the tags */
if (status) {
lcd_getstringsize(tracks[next_track].id3.title, NULL, NULL);
lcd_getstringsize(tracks[next_track].id3.artist, NULL, NULL);
lcd_getstringsize(tracks[next_track].id3.album, NULL, NULL);
}
track_changed = true;
close(fd);

View file

@ -29,6 +29,7 @@
#include "statusbar.h"
#include "talk.h"
#include "misc.h"
#include "rbunicode.h"
#define KEYBOARD_PAGES 3
@ -98,14 +99,16 @@ int kbd_input(char* text, int buflen)
int page = 0, x = 0;
int linelen;
int len, i;
int len, len_utf8, i, j;
int editpos, curpos, leftpos;
unsigned short* line = kbd_setupkeys(page, &linelen);
unsigned char temptext[12];
unsigned char temptext[36];
unsigned short tmp;
unsigned char *utf8;
int button, lastbutton = 0;
editpos = strlen(text);
editpos = utf8length(text);
if (global_settings.talk_menu) /* voice UI? */
talk_spell(text, true); /* spell initial text */
@ -113,7 +116,8 @@ int kbd_input(char* text, int buflen)
while (!done)
{
len = strlen(text);
len_utf8 = utf8length(text);
if (redraw)
{
if (line_edit)
@ -128,26 +132,47 @@ int kbd_input(char* text, int buflen)
}
/* Draw insert chars */
temptext[0] = KEYBOARD_INSERT_LEFT;
temptext[1] = line[x];
temptext[2] = KEYBOARD_INSERT_RIGHT;
utf8 = temptext;
tmp = KEYBOARD_INSERT_LEFT;
utf8 = iso_decode((unsigned char*)&tmp, utf8, 0, 1);
tmp = line[x];
utf8 = iso_decode((unsigned char*)&tmp, utf8, 0, 1);
tmp = KEYBOARD_INSERT_RIGHT;
utf8 = iso_decode((unsigned char*)&tmp, utf8, 0, 1);
for (i = 1; i < 8; i++)
{
temptext[i+2] = line[(x+i)%linelen];
utf8 = iso_decode((unsigned char*)&line[(x+i)%linelen], utf8, 0, 1);
/* temptext[i+2] = line[(x+i)%linelen]; */
}
temptext[i+2] = 0;
*utf8 = 0;
lcd_puts(1, 0, temptext);
/* write out the text */
curpos = MIN(MIN(editpos, 10 - MIN(len - editpos, 3)), 9);
curpos = MIN(MIN(editpos, 10 - MIN(len_utf8 - editpos, 3)), 9);
leftpos = editpos - curpos;
strncpy(temptext, text + leftpos, 10);
temptext[10] = 0;
if (leftpos)
if (!leftpos) {
utf8 = text + utf8seek(text, leftpos);
i = 0;
j = 0;
} else {
temptext[0] = '<';
if (len - leftpos > 10)
temptext[9] = '>';
i = 1;
j = 1;
utf8 = text + utf8seek(text, leftpos+1);
}
while (*utf8 && i < 10) {
temptext[j++] = *utf8++;
if ((*utf8 & MASK) != COMP)
i++;
}
temptext[j] = 0;
if (len_utf8 - leftpos > 10) {
utf8 = temptext + utf8seek(temptext, 9);
*utf8++ = '>';
*utf8 = 0;
}
lcd_remove_cursor();
lcd_puts(1, 1, temptext);
@ -185,10 +210,11 @@ int kbd_input(char* text, int buflen)
case BUTTON_RIGHT | BUTTON_REPEAT:
if (line_edit)
{
if (editpos < len)
if (editpos < len_utf8)
{
editpos++;
kbd_spellchar(text[editpos]);
int c = utf8seek(text, editpos);
kbd_spellchar(text[c]);
}
}
else
@ -206,7 +232,8 @@ int kbd_input(char* text, int buflen)
if (editpos)
{
editpos--;
kbd_spellchar(text[editpos]);
int c = utf8seek(text, editpos);
kbd_spellchar(text[c]);
}
}
else
@ -229,20 +256,35 @@ int kbd_input(char* text, int buflen)
{
if (editpos > 0)
{
for (i = editpos; i < len; i++)
text[i-1] = text[i];
text[i-1] = '\0';
utf8 = text + utf8seek(text, editpos);
i = 0;
do {
i++;
utf8--;
} while ((*utf8 & MASK) == COMP);
while (utf8[i]) {
*utf8 = utf8[i];
utf8++;
}
*utf8 = 0;
editpos--;
}
}
else /* inserts the selected char */
{
if (len + 1 < buflen)
utf8 = iso_decode((unsigned char*)&line[x], temptext, 0, 1);
*utf8 = 0;
j = strlen(temptext);
if (len + j < buflen)
{
for (i = len ; i > editpos; i--)
text[i] = text[i-1];
text[len+1] = 0;
text[editpos] = line[x];
int k = len_utf8;
for (i = len+j; k >= editpos; i--) {
text[i] = text[i-j];
if ((text[i] & MASK) != COMP)
k--;
}
while (j--)
text[i--] = temptext[j];
editpos++;
}
}

View file

@ -361,7 +361,14 @@ static const struct plugin_api rockbox_api = {
#ifdef HAVE_LCD_BITMAP
screen_dump_set_hook,
font_get_width,
#endif
utf8decode,
iso_decode,
utf16LEdecode,
utf16BEdecode,
utf8encode,
utf8length,
};
int plugin_load(const char* plugin, void* parameter)

View file

@ -57,6 +57,7 @@
#endif
#include "sound.h"
#include "menu.h"
#include "rbunicode.h"
#ifdef HAVE_REMOTE_LCD
#include "lcd-remote.h"
@ -90,7 +91,7 @@
#endif
/* increase this every time the api struct changes */
#define PLUGIN_API_VERSION 52
#define PLUGIN_API_VERSION 53
/* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any
@ -441,7 +442,14 @@ struct plugin_api {
#ifdef HAVE_LCD_BITMAP
void (*screen_dump_set_hook)(void (*hook)(int fh));
int (*font_get_width)(struct font* pf, unsigned short char_code);
#endif
const unsigned char* (*utf8decode)(const unsigned char *utf8, unsigned short *ucs);
unsigned char* (*iso_decode)(const unsigned char *iso, unsigned char *utf8, int cp, int count);
unsigned char* (*utf16LEdecode)(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* (*utf16BEdecode)(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* (*utf8encode)(unsigned long ucs, unsigned char *utf8);
unsigned long (*utf8length)(const unsigned char *utf8);
};
int plugin_load(const char* plugin, void* parameter);

View file

@ -30,6 +30,7 @@
#include "talk.h"
#include "settings.h"
#include "misc.h"
#include "rbunicode.h"
#include "buttonbar.h"
#include "logf.h"
@ -117,32 +118,32 @@
#if KEYBOARD_PAGES == 1
static const char * const kbdpages[KEYBOARD_PAGES][KEYBOARD_LINES] = {
{ "ABCDEFG abcdefg !?\" @#$%+'",
{ "ABCDEFG abcdefg !?\" @#$%+'",
"HIJKLMN hijklmn 789 &_()-`",
"OPQRSTU opqrstu 456 §|{}/<",
"OPQRSTU opqrstu 456 §|{}/<",
"VWXYZ., vwxyz.,0123 ~=[]*>",
"ÀÁÂÃÄÅÆ ÌÍÎÏ ÈÉÊË ¢£¤¥¦§©®",
"àáâãäåæ ìíîï èéêë «»°ºª¹²³",
"ÓÒÔÕÖØ ÇÐÞÝß ÙÚÛÜ ¯±×÷¡¿µ·",
"òóôõöø çðþýÿ ùúûü ¼½¾¬¶¨ " },
"ÀÁÂÃÄÅÆ ÌÍÎÏ ÈÉÊË ¢£¤¥¦§©®",
"àáâãäåæ ìíîï èéêë «»°ºª¹²³",
"ÓÒÔÕÖØ ÇÐÞÝß ÙÚÛÜ ¯±×÷¡¿µ·",
"òóôõöø çðþýÿ ùúûü ¼½¾¬¶¨ " },
};
#else
static const char * const kbdpages[KEYBOARD_PAGES][KEYBOARD_LINES] = {
{ "ABCDEFG !?\" @#$%+'",
{ "ABCDEFG !?\" @#$%+'",
"HIJKLMN 789 &_()-`",
"OPQRSTU 456 §|{}/<",
"OPQRSTU 456 §|{}/<",
"VWXYZ.,0123 ~=[]*>" },
{ "abcdefg ¢£¤¥¦§©®¬",
"hijklmn «»°ºª¹²³¶",
"opqrstu ¯±×÷¡¿µ·¨",
"vwxyz., ¼½¾ " },
{ "abcdefg ¢£¤¥¦§©®¬",
"hijklmn «»°ºª¹²³¶",
"opqrstu ¯±×÷¡¿µ·¨",
"vwxyz., ¼½¾ " },
{ "ÀÁÂÃÄÅÆ ÌÍÎÏ ÈÉÊË",
"àáâãäåæ ìíîï èéêë",
"ÓÒÔÕÖØ ÇÐÞÝß ÙÚÛÜ",
"òóôõöø çðþýÿ ùúûü" },
{ "ÀÁÂÃÄÅÆ ÌÍÎÏ ÈÉÊË",
"àáâãäåæ ìíîï èéêë",
"ÓÒÔÕÖØ ÇÐÞÝß ÙÚÛÜ",
"òóôõöø çðþýÿ ùúûü" },
};
#endif
@ -178,18 +179,19 @@ int kbd_input(char* text, int buflen)
#if defined(KBD_PAGE_FLIP) || (KEYBOARD_PAGES > 1)
int page = 0;
#endif
int font_w = 0, font_h = 0, i;
int font_w = 0, font_h = 0, i, j;
int x = 0, y = 0;
int main_x, main_y, max_chars;
int status_y1, status_y2;
int len;
int len, len_utf8, c = 0;
int editpos, curpos, leftpos;
bool redraw = true;
unsigned char *utf8;
const char * const *line;
#ifdef HAVE_MORSE_INPUT
bool morse_reading = false;
unsigned char morse_code = 0;
int morse_tick = 0, morse_len, j;
int morse_tick = 0, morse_len;
char buf[2];
#endif
#ifdef KBD_MODES
@ -218,7 +220,7 @@ int kbd_input(char* text, int buflen)
status_y1 = LCD_HEIGHT - font_h;
status_y2 = LCD_HEIGHT;
editpos = strlen(text);
editpos = utf8length(text);
max_chars = LCD_WIDTH / font_w - 2; /* leave room for < and > */
line = kbdpages[0];
@ -229,11 +231,12 @@ int kbd_input(char* text, int buflen)
while(!done)
{
len = strlen(text);
len_utf8 = utf8length(text);
if (redraw)
if(redraw)
{
lcd_clear_display();
lcd_setfont(FONT_SYSFIXED);
#ifdef HAVE_MORSE_INPUT
@ -279,18 +282,24 @@ int kbd_input(char* text, int buflen)
/* separator */
lcd_hline(0, LCD_WIDTH - 1, main_y - KEYBOARD_MARGIN);
/* write out the text */
curpos = MIN(editpos, max_chars - MIN(len - editpos, 2));
curpos = MIN(editpos, max_chars - MIN(len_utf8 - editpos, 2));
leftpos = editpos - curpos;
strncpy(outline, text + leftpos, max_chars);
outline[max_chars] = 0;
utf8 = text + utf8seek(text, leftpos);
i=j=0;
while (*utf8 && i < max_chars) {
outline[j++] = *utf8++;
if ((*utf8 & MASK) != COMP)
i++;
}
outline[j] = 0;
lcd_putsxy(font_w, main_y, outline);
if (leftpos)
lcd_putsxy(0, main_y, "<");
if (len - leftpos > max_chars)
if (len_utf8 - leftpos > max_chars)
lcd_putsxy(LCD_WIDTH - font_w, main_y, ">");
/* cursor */
@ -361,7 +370,8 @@ int kbd_input(char* text, int buflen)
#endif
}
line = kbdpages[page];
kbd_spellchar(line[y][x]);
c = utf8seek(line[y], x);
kbd_spellchar(line[y][c]);
break;
#endif
@ -374,16 +384,17 @@ int kbd_input(char* text, int buflen)
#ifdef KBD_MODES
if (line_edit) /* right doubles as cursor_right in line_edit */
{
if (editpos < len)
if (editpos < len_utf8)
{
editpos++;
kbd_spellchar(text[editpos]);
c = utf8seek(text, editpos);
kbd_spellchar(text[c]);
}
}
else
#endif
{
if (x < (int)strlen(line[y]) - 1)
if (x < (int)utf8length(line[y]) - 1)
x++;
else
{
@ -395,7 +406,8 @@ int kbd_input(char* text, int buflen)
line = kbdpages[page];
#endif
}
kbd_spellchar(line[y][x]);
c = utf8seek(line[y], x);
kbd_spellchar(line[y][c]);
}
break;
@ -411,7 +423,8 @@ int kbd_input(char* text, int buflen)
if (editpos)
{
editpos--;
kbd_spellchar(text[editpos]);
c = utf8seek(text, editpos);
kbd_spellchar(text[c]);
}
}
else
@ -427,9 +440,10 @@ int kbd_input(char* text, int buflen)
page = (KEYBOARD_PAGES-1);
line = kbdpages[page];
#endif
x = strlen(line[y]) - 1;
x = utf8length(line[y]) - 1;
}
kbd_spellchar(line[y][x]);
c = utf8seek(line[y], x);
kbd_spellchar(line[y][c]);
}
break;
@ -458,7 +472,8 @@ int kbd_input(char* text, int buflen)
}
if (!line_edit)
#endif
kbd_spellchar(line[y][x]);
c = utf8seek(line[y], x);
kbd_spellchar(line[y][c]);
break;
case KBD_UP:
@ -486,7 +501,8 @@ int kbd_input(char* text, int buflen)
}
if (!line_edit)
#endif
kbd_spellchar(line[y][x]);
c = utf8seek(line[y], x);
kbd_spellchar(line[y][c]);
break;
case KBD_DONE:
@ -534,21 +550,38 @@ int kbd_input(char* text, int buflen)
{
if (editpos > 0)
{
for (i = editpos; i < len; i++)
text[i-1] = text[i];
text[i-1] = '\0';
utf8 = text + utf8seek(text, editpos);
i = 0;
do {
i++;
utf8--;
} while ((*utf8 & MASK) == COMP);
while (utf8[i]) {
*utf8 = utf8[i];
utf8++;
}
*utf8 = 0;
editpos--;
}
}
else
#endif
{
if (len + 1 < buflen)
const unsigned char *inschar = line[y] + utf8seek(line[y], x);
j = 0;
do {
j++;
} while ((inschar[j] & MASK) == COMP);
if (len + j < buflen)
{
for (i = len ; i > editpos; i--)
text[i] = text[i-1];
text[len+1] = 0;
text[editpos] = line[y][x];
int k = len_utf8;
for (i = len+j; k >= editpos; i--) {
text[i] = text[i-j];
if ((text[i] & MASK) != COMP)
k--;
}
while (j--)
text[i--] = inschar[j];
editpos++;
}
}
@ -561,9 +594,17 @@ int kbd_input(char* text, int buflen)
case KBD_BACKSPACE | BUTTON_REPEAT:
if (editpos > 0)
{
for (i = editpos; i < len; i++)
text[i-1] = text[i];
text[i-1] = '\0';
utf8 = text + utf8seek(text, editpos);
i = 0;
do {
i++;
utf8--;
} while ((*utf8 & MASK) == COMP);
while (utf8[i]) {
*utf8 = utf8[i];
utf8++;
}
*utf8 = 0;
editpos--;
}
if (global_settings.talk_menu) /* voice UI? */
@ -572,10 +613,11 @@ int kbd_input(char* text, int buflen)
case KBD_CURSOR_RIGHT:
case KBD_CURSOR_RIGHT | BUTTON_REPEAT:
if (editpos < len)
if (editpos < len_utf8)
{
editpos++;
kbd_spellchar(text[editpos]);
c = utf8seek(text, editpos);
kbd_spellchar(text[c]);
}
break;
@ -584,7 +626,8 @@ int kbd_input(char* text, int buflen)
if (editpos)
{
editpos--;
kbd_spellchar(text[editpos]);
c = utf8seek(text, editpos);
kbd_spellchar(text[c]);
}
break;
#endif /* !KBD_MODES */

View file

@ -41,7 +41,6 @@
#include "power.h"
#include "backlight.h"
#include "powermgmt.h"
#include "bidi.h"
#include "status.h"
#include "atoi.h"
#include "screens.h"
@ -67,6 +66,7 @@
#include "version.h"
#include "rtc.h"
#include "sound.h"
#include "rbunicode.h"
#include "dircache.h"
#include "select.h"
#include "statusbar.h"
@ -85,7 +85,7 @@ const char rec_base_directory[] = REC_BASE_DIR;
#include "dsp.h"
#endif
#define CONFIG_BLOCK_VERSION 34
#define CONFIG_BLOCK_VERSION 35
#define CONFIG_BLOCK_SIZE 512
#define RTC_BLOCK_SIZE 44
@ -243,7 +243,6 @@ static const struct bit_entry rtc_bits[] =
{1, S_O(volume_type), 0, "volume display", graphic_numeric },
{1, S_O(battery_display), 0, "battery display", graphic_numeric },
{1, S_O(timeformat), 0, "time format", "24hour,12hour" },
{1, S_O(bidi_support), false, "bidi hebrew/arabic", off_on },
#endif /* HAVE_LCD_BITMAP */
{1, S_O(show_icons), true, "show icons", off_on },
/* system */
@ -910,7 +909,6 @@ void settings_apply(void)
#endif
#ifdef HAVE_LCD_BITMAP
set_bidi_support(global_settings.bidi_support);
lcd_set_invert_display(global_settings.invert);
lcd_set_flip(global_settings.flip_display);
button_set_flip(global_settings.flip_display);
@ -967,6 +965,8 @@ void settings_apply(void)
talk_init(); /* use voice of same language */
}
set_codepage(global_settings.default_codepage);
#if CONFIG_CODEC == SWCODEC
audio_set_crossfade(global_settings.crossfade);
dsp_set_replaygain(true);

View file

@ -219,7 +219,6 @@ struct user_settings
bool invert_cursor; /* invert the current file in dir browser and menu
instead of using the default cursor */
bool flip_display; /* turn display (and button layout) by 180 degrees */
bool bidi_support; /* reverse hebrew/arabic chars: 0=off, 1=on */
int poweroff; /* power off timer */
int backlight_timeout; /* backlight off timeout: 0-18 0=never,
1=always,
@ -370,6 +369,7 @@ struct user_settings
bool dircache; /* enable directory cache */
int dircache_size; /* directory cache structure last size, 22 bits */
#endif
int default_codepage; /* set default codepage for tag conversion */
#ifdef HAVE_REMOTE_LCD
unsigned char rwps_file[MAX_FILENAME+1]; /* last remote-wps */
#endif

View file

@ -38,7 +38,6 @@
#include "fat.h" /* For dotfile settings */
#include "sleeptimer.h"
#include "powermgmt.h"
#include "bidi.h"
#include "rtc.h"
#include "ata.h"
#include "tree.h"
@ -51,6 +50,7 @@
#include "database.h"
#include "dir.h"
#include "dircache.h"
#include "rbunicode.h"
#include "splash.h"
#include "yesno.h"
@ -290,18 +290,6 @@ static bool invert_cursor(void)
NULL);
}
/**
* Menu to reverse Hebrew and Arabic text according to BiDi algorythm
*/
static bool bidi_support(void)
{
return set_bool_options( str(LANG_BIDI_SUPPORT),
&global_settings.bidi_support,
STR(LANG_SET_BOOL_YES),
STR(LANG_SET_BOOL_NO),
set_bidi_support);
}
/**
* Menu to configure the battery display on status bar
*/
@ -1150,6 +1138,28 @@ static bool runtimedb(void)
return rc;
}
static bool codepage_setting(void)
{
static const struct opt_items names[] = {
{ STR(LANG_CODEPAGE_LATIN1) },
{ STR(LANG_CODEPAGE_GREEK) },
{ STR(LANG_CODEPAGE_HEBREW) },
{ STR(LANG_CODEPAGE_RUSSIAN) },
{ STR(LANG_CODEPAGE_THAI) },
{ STR(LANG_CODEPAGE_ARABIC) },
{ STR(LANG_CODEPAGE_TURKISH) },
{ STR(LANG_CODEPAGE_LATIN_EXTENDED) },
{ STR(LANG_CODEPAGE_JAPANESE) },
{ STR(LANG_CODEPAGE_SIMPLIFIED) },
{ STR(LANG_CODEPAGE_KOREAN) },
{ STR(LANG_CODEPAGE_TRADITIONAL) },
{ STR(LANG_CODEPAGE_UTF8) },
};
return set_option(str(LANG_DEFAULT_CODEPAGE),
&global_settings.default_codepage,
INT, names, 13, set_codepage );
}
#if CONFIG_CODEC == SWCODEC
static bool replaygain(void)
{
@ -1606,8 +1616,8 @@ static bool display_settings_menu(void)
#ifdef HAVE_LCD_BITMAP
{ ID2P(LANG_BARS_MENU), bars_settings_menu },
{ ID2P(LANG_PM_MENU), peak_meter_menu },
{ ID2P(LANG_BIDI_SUPPORT), bidi_support },
#endif
{ ID2P(LANG_DEFAULT_CODEPAGE), codepage_setting },
};
m=menu_init( items, sizeof(items) / sizeof(*items), NULL,

View file

@ -8,7 +8,7 @@
People that have contributed to the project, one way or another. Friends!
Björn Stenberg
Björn Stenberg
Linus Nielsen Feltzing
Andy Choi
Andrew Jamieson
@ -20,17 +20,17 @@ Gary Czvitkovicz
Stuart Martin
Felix Arends
Ulf Ralberg
David Härdeman
David Härdeman
Thomas Saeys
Grant Wier
Julien Labruyére
Julien Labruyére
Nicolas Sauzede
Robert Hak
Dave Chapman
Stefan Meyer
Eric Linenberg
Tom Cvitan
Magnus Öman
Magnus Öman
Jerome Kuptz
Julien Boissinot
Nuutti Kotivuori
@ -59,14 +59,14 @@ Kjell Ericson
Jim Hagani
Ludovic Lange
Mike Holden
Simon Elén
Simon Elén
Matthew P. OReilly
Christian Schönberger
Christian Schönberger
Henrik Backe
Craig Sather
José Maria Garcia-Valdecasas Bernal
José Maria Garcia-Valdecasas Bernal
Stevie Oh
Jörg Hohensohn
Jörg Hohensohn
Dave Jones
Thomas Paul Diffenbach
Roland Kletzing
@ -96,7 +96,7 @@ Jiri Jurecek
Jacob Erlbeck
Jean-Philippe Bernardy
Dave Hooper
Jonas Häggqvist
Jonas Häggqvist
Thom Johansen
Rinat Zakirov
Manuel Dejonghe
@ -105,12 +105,12 @@ Michiel van der Kolk
Tony Motakis
Andy Young
Alexandre Bourget
Richard S. La Charité III
Richard S. La Charité III
Christian Gmeiner
Tomas Salfischberger
Miika Pekkarinen
Tapio Karppinen
Richard Ottó O'Brien
Richard Ottó O'Brien
Luca Burelli
Alessio Lenzi
David Bryant
@ -126,9 +126,9 @@ Hristo Kovachev
Sander Sweers
Antonius Hellman
Ryan Jackson
Per Holmäng
Per Holmäng
Frederic Devernay
José M. Fandiño
José M. Fandiño
Gadi Cohen
Naftali Goldstein
David Dent

View file

@ -1,3 +1,4 @@
common/unicode.c
#ifdef ROCKBOX_HAS_LOGF
logf.c
#endif
@ -103,6 +104,8 @@ drivers/rtc.c
drivers/serial.c
#endif /* !SIMULATOR */
#ifdef HAVE_LCD_BITMAP
lru.c
font_cache.c
font.c
#endif
id3.c

205
firmware/arabjoin.h Normal file
View file

@ -0,0 +1,205 @@
typedef struct {
unsigned short isolated;
unsigned short final;
unsigned short medial;
unsigned short initial;
} arab_t;
//static arab_t dummy = {0,0,0,0};
static arab_t zwj = {0x20,0x20,0x20,0x20}; //zero-width joiner
static arab_t lamaleph[] = {
{0xfefb,0xfefc,0,0},
{0xfef9,0xfefa,0,0},
{0xfef7,0xfef8,0,0},
{0xfef5,0xfef6,0,0}
};
static arab_t jointable[] = {
{0xfe80,0x0000,0x0000,0x0000}, // 0x0621
{0xfe81,0xfe82,0x0000,0x0000}, // 0x0622
{0xfe83,0xfe84,0x0000,0x0000}, // 0x0623
{0xfe85,0xfe86,0x0000,0x0000}, // 0x0624
{0xfe87,0xfe88,0x0000,0x0000}, // 0x0625
{0xfe89,0xfe8a,0xfe8c,0xfe8b}, // 0x0626
{0xfe8d,0xfe8e,0x0000,0x0000}, // 0x0627
{0xfe8f,0xfe90,0xfe92,0xfe91}, // 0x0628
{0xfe93,0xfe94,0x0000,0x0000}, // 0x0629
{0xfe95,0xfe96,0xfe98,0xfe97}, // 0x062a
{0xfe99,0xfe9a,0xfe9c,0xfe9b}, // 0x062b
{0xfe9d,0xfe9e,0xfea0,0xfe9f}, // 0x062c
{0xfea1,0xfea2,0xfea4,0xfea3}, // 0x062d
{0xfea5,0xfea6,0xfea8,0xfea7}, // 0x062e
{0xfea9,0xfeaa,0x0000,0x0000}, // 0x062f
{0xfeab,0xfeac,0x0000,0x0000}, // 0x0630
{0xfead,0xfeae,0x0000,0x0000}, // 0x0631
{0xfeaf,0xfeb0,0x0000,0x0000}, // 0x0632
{0xfeb1,0xfeb2,0xfeb4,0xfeb3}, // 0x0633
{0xfeb5,0xfeb6,0xfeb8,0xfeb7}, // 0x0634
{0xfeb9,0xfeba,0xfebc,0xfebb}, // 0x0635
{0xfebd,0xfebe,0xfec0,0xfebf}, // 0x0636
{0xfec1,0xfec2,0xfec4,0xfec3}, // 0x0637
{0xfec5,0xfec6,0xfec8,0xfec7}, // 0x0638
{0xfec9,0xfeca,0xfecc,0xfecb}, // 0x0639
{0xfecd,0xfece,0xfed0,0xfecf}, // 0x063a
#if 0
{0x0000,0x0000,0x0000,0x0000}, // 0x063b
{0x0000,0x0000,0x0000,0x0000}, // 0x063c
{0x0000,0x0000,0x0000,0x0000}, // 0x063d
{0x0000,0x0000,0x0000,0x0000}, // 0x063e
{0x0000,0x0000,0x0000,0x0000}, // 0x063f
#endif
{0x0640,0x0640,0x0640,0x0640}, // 0x0640
{0xfed1,0xfed2,0xfed4,0xfed3}, // 0x0641
{0xfed5,0xfed6,0xfed8,0xfed7}, // 0x0642
{0xfed9,0xfeda,0xfedc,0xfedb}, // 0x0643
{0xfedd,0xfede,0xfee0,0xfedf}, // 0x0644
{0xfee1,0xfee2,0xfee4,0xfee3}, // 0x0645
{0xfee5,0xfee6,0xfee8,0xfee7}, // 0x0646
{0xfee9,0xfeea,0xfeec,0xfeeb}, // 0x0647
{0xfeed,0xfeee,0x0000,0x0000}, // 0x0648
{0xfeef,0xfef0,0x0000,0x0000}, // 0x0649
{0xfef1,0xfef2,0xfef4,0xfef3}, // 0x064a
# if 0
{0x0000,0x0000,0x0000,0x0000}, // 0x064b
{0x0000,0x0000,0x0000,0x0000}, // 0x064c
{0x0000,0x0000,0x0000,0x0000}, // 0x064d
{0x0000,0x0000,0x0000,0x0000}, // 0x064e
{0x0000,0x0000,0x0000,0x0000}, // 0x064f
{0x0000,0x0000,0x0000,0x0000}, // 0x0650
{0x0000,0x0000,0x0000,0x0000}, // 0x0651
{0x0000,0x0000,0x0000,0x0000}, // 0x0652
{0x0000,0x0000,0x0000,0x0000}, // 0x0653
{0x0000,0x0000,0x0000,0x0000}, // 0x0654
{0x0000,0x0000,0x0000,0x0000}, // 0x0655
{0x0000,0x0000,0x0000,0x0000}, // 0x0656
{0x0000,0x0000,0x0000,0x0000}, // 0x0657
{0x0000,0x0000,0x0000,0x0000}, // 0x0658
{0x0000,0x0000,0x0000,0x0000}, // 0x0659
{0x0000,0x0000,0x0000,0x0000}, // 0x065a
{0x0000,0x0000,0x0000,0x0000}, // 0x065b
{0x0000,0x0000,0x0000,0x0000}, // 0x065c
{0x0000,0x0000,0x0000,0x0000}, // 0x065d
{0x0000,0x0000,0x0000,0x0000}, // 0x065e
{0x0000,0x0000,0x0000,0x0000}, // 0x065f
{0x0000,0x0000,0x0000,0x0000}, // 0x0660
{0x0000,0x0000,0x0000,0x0000}, // 0x0661
{0x0000,0x0000,0x0000,0x0000}, // 0x0662
{0x0000,0x0000,0x0000,0x0000}, // 0x0663
{0x0000,0x0000,0x0000,0x0000}, // 0x0664
{0x0000,0x0000,0x0000,0x0000}, // 0x0665
{0x0000,0x0000,0x0000,0x0000}, // 0x0666
{0x0000,0x0000,0x0000,0x0000}, // 0x0667
{0x0000,0x0000,0x0000,0x0000}, // 0x0668
{0x0000,0x0000,0x0000,0x0000}, // 0x0669
{0x0000,0x0000,0x0000,0x0000}, // 0x066a
{0x0000,0x0000,0x0000,0x0000}, // 0x066b
{0x0000,0x0000,0x0000,0x0000}, // 0x066c
{0x0000,0x0000,0x0000,0x0000}, // 0x066d
{0x0000,0x0000,0x0000,0x0000}, // 0x066e
{0x0000,0x0000,0x0000,0x0000}, // 0x066f
{0x0000,0x0000,0x0000,0x0000}, // 0x0670
#endif
{0xfb50,0x0000,0x0000,0x0000}, // 0x0671
{0x0672,0x0672,0x0000,0x0000}, // 0x0672
{0x0673,0x0673,0x0000,0x0000}, // 0x0673
{0x0674,0x0000,0x0000,0x0000}, // 0x0674
{0x0675,0x0675,0x0000,0x0000}, // 0x0675
{0x0676,0x0676,0x0000,0x0000}, // 0x0676
{0xfbdd,0x0677,0x0000,0x0000}, // 0x0677
{0x0678,0x0678,0x0678,0x0678}, // 0x0678
{0xfb66,0xfb67,0xfb69,0xfb68}, // 0x0679
{0xfb5e,0xfb5f,0xfb61,0xfb60}, // 0x067a
{0xfb52,0xfb53,0xfb55,0xfb54}, // 0x067b
{0x067c,0x067c,0x067c,0x067c}, // 0x067c
{0x067d,0x067d,0x067d,0x067d}, // 0x067d
{0xfb56,0xfb57,0xfb59,0xfb58}, // 0x067e
{0xfb62,0xfb63,0xfb65,0xfb64}, // 0x067f
{0xfb5a,0xfb5b,0xfb5d,0xfb5c}, // 0x0680
{0x0681,0x0681,0x0681,0x0681}, // 0x0681
{0x0682,0x0682,0x0682,0x0682}, // 0x0682
{0xfb76,0xfb77,0xfb79,0xfb78}, // 0x0683
{0xfb72,0xfb73,0xfb75,0xfb74}, // 0x0684
{0x0685,0x0685,0x0685,0x0685}, // 0x0685
{0xfb7a,0xfb7b,0xfb7d,0xfb7c}, // 0x0686
{0xfb7e,0xfb7f,0xfb81,0xfb80}, // 0x0687
{0xfb88,0xfb89,0x0000,0x0000}, // 0x0688
{0x0689,0x0689,0x0000,0x0000}, // 0x0689
{0x068a,0x068a,0x0000,0x0000}, // 0x068a
{0x068b,0x068b,0x0000,0x0000}, // 0x068b
{0xfb84,0xfb85,0x0000,0x0000}, // 0x068c
{0xfb82,0xfb83,0x0000,0x0000}, // 0x068d
{0xfb86,0xfb87,0x0000,0x0000}, // 0x068e
{0x068f,0x068f,0x0000,0x0000}, // 0x068f
{0x0690,0x0690,0x0000,0x0000}, // 0x0690
{0xfb8c,0xfb8d,0x0000,0x0000}, // 0x0691
{0x0692,0x0692,0x0000,0x0000}, // 0x0692
{0x0693,0x0693,0x0000,0x0000}, // 0x0693
{0x0694,0x0694,0x0000,0x0000}, // 0x0694
{0x0695,0x0695,0x0000,0x0000}, // 0x0695
{0x0695,0x0696,0x0000,0x0000}, // 0x0696
{0x0697,0x0697,0x0000,0x0000}, // 0x0697
{0xfb8a,0xfb8b,0x0000,0x0000}, // 0x0698
{0x0699,0x0699,0x0000,0x0000}, // 0x0699
{0x069a,0x069a,0x069a,0x069a}, // 0x069a
{0x069b,0x069b,0x069b,0x069b}, // 0x069b
{0x069c,0x069c,0x069c,0x069c}, // 0x069c
{0x069d,0x069d,0x069d,0x069d}, // 0x069d
{0x069e,0x069e,0x069e,0x069e}, // 0x069e
{0x069f,0x069f,0x069f,0x069f}, // 0x069f
{0x06a0,0x06a0,0x06a0,0x06a0}, // 0x06a0
{0x06a1,0x06a1,0x06a1,0x06a1}, // 0x06a1
{0x06a2,0x06a2,0x06a2,0x06a2}, // 0x06a2
{0x06a3,0x06a3,0x06a3,0x06a3}, // 0x06a3
{0xfb6a,0xfb6b,0xfb6d,0xfb6c}, // 0x06a4
{0x06a5,0x06a5,0x06a5,0x06a5}, // 0x06a5
{0xfb6e,0xfb6f,0xfb71,0xfb70}, // 0x06a6
{0x06a7,0x06a7,0x06a7,0x06a7}, // 0x06a7
{0x06a8,0x06a8,0x06a8,0x06a8}, // 0x06a8
{0xfb8e,0xfb8f,0xfb91,0xfb90}, // 0x06a9
{0x06aa,0x06aa,0x06aa,0x06aa}, // 0x06aa
{0x06ab,0x06ab,0x06ab,0x06ab}, // 0x06ab
{0x06ac,0x06ac,0x06ac,0x06ac}, // 0x06ac
{0xfbd3,0xfbd4,0xfbd6,0xfbd5}, // 0x06ad
{0x06ae,0x06ae,0x06ae,0x06ae}, // 0x06ae
{0xfb92,0xfb93,0xfb95,0xfb94}, // 0x06af
{0x06b0,0x06b0,0x06b0,0x06b0}, // 0x06b0
{0xfb9a,0xfb9b,0xfb9d,0xfb9c}, // 0x06b1
{0x06b2,0x06b2,0x06b2,0x06b2}, // 0x06b2
{0xfb96,0xfb97,0xfb99,0xfb98}, // 0x06b3
{0x06b4,0x06b4,0x06b4,0x06b4}, // 0x06b4
{0x06b5,0x06b5,0x06b5,0x06b5}, // 0x06b5
{0x06b6,0x06b6,0x06b6,0x06b6}, // 0x06b6
{0x06b7,0x06b7,0x06b7,0x06b7}, // 0x06b7
{0x0000,0x0000,0x0000,0x0000}, // 0x06b8
{0x0000,0x0000,0x0000,0x0000}, // 0x06b9
{0xfb9e,0xfb9f,0x06ba,0x06ba}, // 0x06ba
{0xfba0,0xfba1,0xfba3,0xfba2}, // 0x06bb
{0x06bc,0x06bc,0x06bc,0x06bc}, // 0x06bc
{0x06bd,0x06bd,0x06bd,0x06bd}, // 0x06bd
{0xfbaa,0xfbab,0xfbad,0xfbac}, // 0x06be
{0x0000,0x0000,0x0000,0x0000}, // 0x06bf
{0xfba4,0xfba5,0x0000,0x0000}, // 0x06c0
{0x06c1,0x06c1,0x06c1,0x06c1}, // 0x06c1
{0x06c2,0x06c2,0x0000,0x0000}, // 0x06c2
{0x06c3,0x06c3,0x0000,0x0000}, // 0x06c3
{0x06c4,0x06c4,0x0000,0x0000}, // 0x06c4
{0x06c5,0x06c5,0x0000,0x0000}, // 0x06c5
{0x06c6,0x06c6,0x0000,0x0000}, // 0x06c6
{0x06c7,0x06c7,0x0000,0x0000}, // 0x06c7
{0x06c8,0x06c8,0x0000,0x0000}, // 0x06c8
{0x06c9,0x06c9,0x0000,0x0000}, // 0x06c9
{0x06ca,0x06ca,0x0000,0x0000}, // 0x06ca
{0x06cb,0x06cb,0x0000,0x0000}, // 0x06cb
{0x06cc,0x06cc,0x06cc,0x06cc}, // 0x06cc
{0x06cd,0x06cd,0x0000,0x0000}, // 0x06cd
{0x06ce,0x06ce,0x06ce,0x06ce}, // 0x06ce
{0x0000,0x0000,0x0000,0x0000}, // 0x06cf
{0x06d0,0x06d0,0x06d0,0x06d0}, // 0x06d0
{0x06d1,0x06d1,0x06d1,0x06d1}, // 0x06d1
{0xfbae,0xfbaf,0x0000,0x0000}, // 0x06d2
{0xfbb0,0xfbb1,0x0000,0x0000}, // 0x06d3
{0x0000,0x0000,0x0000,0x0000}, // 0x06d4
{0x06d5,0x0000,0x0000,0x0000} // 0x06d5
};

View file

@ -24,75 +24,168 @@
#include <ctype.h>
#include "file.h"
#include "lcd.h"
#include "rbunicode.h"
#include "arabjoin.h"
#define _HEB_BUFFER_LENGTH MAX_PATH + LCD_WIDTH/2 + 3 + 2 + 2
//#define _HEB_BUFFER_LENGTH (MAX_PATH + LCD_WIDTH/2 + 3 + 2 + 2) * 2
#define _HEB_BLOCK_TYPE_ENG 1
#define _HEB_BLOCK_TYPE_HEB 0
#define _HEB_ORIENTATION_LTR 1
#define _HEB_ORIENTATION_RTL 0
#define ischar(c) (((((unsigned char) c)>=193) && (((unsigned char) c)<=250)) ? 1 : 0)
#define _isblank(c) (((((unsigned char) c)==' ' || ((unsigned char) c)=='\t')) ? 1 : 0)
#define _isnewline(c) (((((unsigned char) c)=='\n' || ((unsigned char) c)=='\r')) ? 1 : 0)
#define ischar(c) ((c > 0x0589 && c < 0x0700) || (c >= 0xfb50 && c <= 0xfefc) ? 1 : 0)
#define _isblank(c) ((c==' ' || c=='\t') ? 1 : 0)
#define _isnewline(c) ((c=='\n' || c=='\r') ? 1 : 0)
#define XOR(a,b) ((a||b) && !(a&&b))
bool bidi_support_enabled = false;
unsigned char *bidi_l2v(const char *str, int orientation)
arab_t * arab_lookup(unsigned short uchar)
{
static unsigned char buf_heb_str[_HEB_BUFFER_LENGTH];
static unsigned char buf_broken_str[_HEB_BUFFER_LENGTH];
const unsigned char *tmp;
unsigned char *heb_str, *target, *opposite_target, *broken_str;
if (uchar >= 0x621 && uchar <= 0x63a)
return &(jointable[uchar - 0x621]);
if (uchar >= 0x640 && uchar <= 0x64a)
return &(jointable[uchar - 0x621 - 5]);
if (uchar >= 0x671 && uchar <= 0x6d5)
return &(jointable[uchar - 0x621 - 5 - 38]);
if (uchar == 0x200D) /* Support for the zero-width joiner */
return &zwj;
return 0;
}
void arabjoin(unsigned short * stringprt, int length){
bool connected = false;
unsigned short * writeprt = stringprt;
arab_t * prev = 0;
arab_t * cur;
arab_t * ligature = 0;
short uchar;
int i;
for (i = 0; i <= length; i++) {
cur = arab_lookup(uchar = *stringprt++);
/* Skip non-arabic chars */
if (cur == 0) {
if (prev) {
/* Finish the last char */
if (connected) {
*writeprt++ = prev->final;
connected = false;
} else
*writeprt++ = prev->isolated;
prev = 0;
*writeprt++ = uchar;
} else {
*writeprt++ = uchar;
}
continue;
}
/* nothing to do for arabic char if the previous was non-arabic */
if (prev == 0) {
prev = cur;
continue;
}
/* if it's LAM, check for LAM+ALEPH ligatures */
if (prev->isolated == 0xfedd) {
switch (cur->isolated) {
case 0xfe8d:
ligature = &(lamaleph[0]);
break;
case 0xfe87:
ligature = &(lamaleph[1]);
break;
case 0xfe83:
ligature = &(lamaleph[2]);
break;
case 0xfe81:
ligature = &(lamaleph[3]);
}
}
if (ligature) { /* replace the 2 glyphs by their ligature */
prev = ligature;
ligature = 0;
} else {
if (connected) { /* previous char has something connected to it */
if (prev->medial && cur->final) /* Can we connect to it? */
*writeprt++ = prev->medial;
else {
*writeprt++ = prev->final;
connected = false;
}
} else {
if (prev->initial && cur->final) { /* Can we connect to it? */
*writeprt++ = prev->initial;
connected = true;
} else
*writeprt++ = prev->isolated;
}
prev = cur;
}
}
}
unsigned short *bidi_l2v(const unsigned char *str, int orientation)
{
int length = utf8length(str);
static unsigned short utf16_buf[MAX_PATH+1];
static unsigned short bidi_buf[MAX_PATH+1];
unsigned short *heb_str, *target, *tmp; // *broken_str
int block_start, block_end, block_type, block_length, i;
int block_ended;
long max_chars=0;
int begin, end, char_count, orig_begin;
//long max_chars=0;
//int begin, end, char_count, orig_begin;
if (!str || !*str)
return (unsigned char *)"";
return &(unsigned short){0};
tmp = (unsigned char *)str;
block_start=block_end=0;
block_ended=0;
//tmp = str;
target = tmp = utf16_buf;
while (*str)
str = utf8decode(str, target++);
*target = 0;
heb_str = buf_heb_str;
/* properly join any arabic chars */
arabjoin(utf16_buf, length);
block_start=block_end=block_length=0;
heb_str = bidi_buf;
if (orientation) {
target = heb_str;
opposite_target = heb_str + strlen(str);
} else {
target = heb_str + strlen(str);
opposite_target = heb_str;
target = heb_str + length;
*target = 0;
target--;
}
block_length=0;
if (ischar(*tmp))
block_type = _HEB_BLOCK_TYPE_HEB;
else
block_type = _HEB_BLOCK_TYPE_ENG;
do {
while((XOR(ischar((int)*(tmp+1)),block_type)
|| _isblank((int)*(tmp+1)) || ispunct((int)*(tmp+1))
|| (int)*(tmp+1)=='\n')
&& block_end<(int)strlen(str)-1) {
tmp++;
block_end++;
block_length++;
while((XOR(ischar(*(tmp+1)),block_type)
|| _isblank(*(tmp+1)) || ispunct((int)*(tmp+1))
|| *(tmp+1)=='\n')
&& block_end < length-1) {
tmp++;
block_end++;
block_length++;
}
if (block_type != orientation) {
while ((_isblank((int)*tmp) || ispunct((int)*tmp))
while ((_isblank(*tmp) || ispunct((int)*tmp))
&& *tmp!='/' && *tmp!='-' && block_end>block_start) {
tmp--;
block_end--;
}
}
for (i=block_start; i<=block_end; i++) {
*target = (block_type == orientation) ? *(str+i) : *(str+block_end-i+block_start);
*target = (block_type == orientation) ? *(utf16_buf+i) : *(utf16_buf+block_end-i+block_start);
if (block_type!=orientation) {
switch (*target) {
case '(':
@ -109,12 +202,15 @@ unsigned char *bidi_l2v(const char *str, int orientation)
}
block_type = !block_type;
block_start=block_end+1;
} while(block_end<(int)strlen(str)-1);
broken_str = buf_broken_str;
begin=end=strlen(str)-1;
} while(block_end<length-1);
*target = 0;
#if 0 /* Is this code really necessary? */
broken_str = utf16_buf;
begin=end=length-1;
target = broken_str;
while (1) {
char_count=0;
while ((!max_chars || char_count<max_chars) && begin>0) {
@ -147,9 +243,9 @@ unsigned char *bidi_l2v(const char *str, int orientation)
}
orig_begin=begin;
if (_isblank(heb_str[begin])) {
/* if (_isblank(heb_str[begin])) {
heb_str[begin]='\n';
}
} */
/* skip leading newlines */
while (begin<=end && _isnewline(heb_str[begin])) {
@ -176,9 +272,7 @@ unsigned char *bidi_l2v(const char *str, int orientation)
end=begin;
}
return broken_str;
#endif
return heb_str;
}
void set_bidi_support(bool setting)
{
bidi_support_enabled = setting;
}

307
firmware/common/unicode.c Normal file
View file

@ -0,0 +1,307 @@
/* Some conversion functions for handling UTF-8
*
* copyright Marcoen Hirschberg (2004,2005)
*
* I got all the info from:
* http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
* and
* http://en.wikipedia.org/wiki/Unicode
*/
#include <stdio.h>
#include "file.h"
#include "debug.h"
#include "rbunicode.h"
#ifndef O_BINARY
#define O_BINARY 0
#endif
#define NUM_TABLES 5
#define NUM_CODEPAGES 13
static int default_codepage = 0;
static unsigned short codepage_table[MAX_CP_TABLE_SIZE];
static int loaded_cp_table = 0;
static const unsigned char utf8comp[6] =
{
0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC
};
static const char *filename[NUM_TABLES] =
{
CODEPAGE_DIR"/iso.cp",
CODEPAGE_DIR"/932.cp", /* SJIS */
CODEPAGE_DIR"/936.cp", /* GB2312 */
CODEPAGE_DIR"/949.cp", /* KSX1001 */
CODEPAGE_DIR"/950.cp" /* BIG5 */
};
static const char cp_2_table[NUM_CODEPAGES] =
{
0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5
};
/* Load codepage file into memory */
int load_cp_table(int cp)
{
int i=0;
int table = cp_2_table[cp];
int file, tablesize;
unsigned char tmp[2];
if (cp == 0 || table == loaded_cp_table)
return 1;
file = open(filename[table-1], O_RDONLY|O_BINARY);
if (file < 0) {
DEBUGF("Can't open codepage file: %s.cp\n", filename[table-1]);
return 0;
}
tablesize = lseek(file, 0, SEEK_END) / 2;
lseek(file, 0, SEEK_SET);
if (tablesize > MAX_CP_TABLE_SIZE) {
DEBUGF("Invalid codepage file: %s.cp\n", filename[table-1]);
close(file);
return 0;
}
while (i < tablesize) {
if (!read(file, tmp, 2)) {
DEBUGF("Can't read from codepage file: %s.cp\n", filename[table-1]);
loaded_cp_table = 0;
return 0;
}
codepage_table[i++] = (tmp[1] << 8) | tmp[0];
}
loaded_cp_table = table;
close(file);
return 1;
}
/* Encode a UCS value as UTF-8 and return a pointer after this UTF-8 char. */
unsigned char* utf8encode(unsigned long ucs, unsigned char *utf8)
{
int tail = 0;
if (ucs > 0x7F)
while (ucs >> (6*tail + 2))
tail++;
*utf8++ = (ucs >> (6*tail)) | utf8comp[tail];
while (tail--)
*utf8++ = ((ucs >> (6*tail)) & (MASK ^ 0xFF)) | COMP;
return utf8;
}
/* Recode an iso encoded string to UTF-8 */
unsigned char* iso_decode(const unsigned char *iso, unsigned char *utf8,
int cp, int count)
{
unsigned short ucs, tmp;
if (cp == -1) /* use default codepage */
cp = default_codepage;
if (!load_cp_table(cp)) cp = 0;
while (count--) {
if (*iso < 128)
*utf8++ = *iso++;
else {
/* cp tells us which codepage to convert from */
switch (cp) {
case 0x01: /* Greek (ISO-8859-7) */
case 0x02: /* Hebrew (ISO-8859-8) */
case 0x03: /* Russian (CP1251) */
case 0x04: /* Thai (ISO-8859-11) */
case 0x05: /* Arabic (ISO-8859-6) */
case 0x06: /* Turkish (ISO-8859-9) */
case 0x07: /* Latin Extended (ISO-8859-2) */
tmp = ((cp-1)*128) + (*iso++ - 128);
ucs = codepage_table[tmp];
break;
case 0x08: /* Japanese (SJIS) */
if (*iso > 0xA0 && *iso < 0xE0) {
tmp = *iso | 0xA100;
ucs = codepage_table[tmp];
break;
}
case 0x09: /* Simplified Chinese (GB2312) */
case 0x0A: /* Korean (KSX1001) */
case 0x0B: /* Traditional Chinese (BIG5) */
if (count < 1 || !iso[1]) {
ucs = *iso++;
break;
}
/* we assume all cjk strings are written
in big endian order */
tmp = *iso++ << 8;
tmp |= *iso++;
tmp -= 0x8000;
ucs = codepage_table[tmp];
count--;
break;
case 0x0C: /* UTF-8, do nothing */
default:
ucs = *iso++;
break;
}
if (ucs == 0) /* unknown char, assume invalid encoding */
ucs = 0xffff;
utf8 = utf8encode(ucs, utf8);
}
}
return utf8;
}
/* Recode a UTF-16 string with little-endian byte ordering to UTF-8 */
unsigned char* utf16LEdecode(const unsigned char *utf16, unsigned char *utf8, unsigned int count)
{
unsigned long ucs;
while (count != 0) {
if (utf16[1] >= 0xD8 && utf16[1] < 0xE0) { /* Check for a surrogate pair */
ucs = 0x10000 + ((utf16[0] << 10) | ((utf16[1] - 0xD8) << 18) | utf16[2] | ((utf16[3] - 0xDC) << 8));
utf16 += 4;
count -= 2;
} else {
ucs = (utf16[0] | (utf16[1] << 8));
utf16 += 2;
count -= 1;
}
utf8 = utf8encode(ucs, utf8);
}
return utf8;
}
/* Recode a UTF-16 string with big-endian byte ordering to UTF-8 */
unsigned char* utf16BEdecode(const unsigned char *utf16, unsigned char *utf8, unsigned int count)
{
unsigned long ucs;
while (count != 0) {
if (*utf16 >= 0xD8 && *utf16 < 0xE0) { /* Check for a surrogate pair */
ucs = 0x10000 + (((utf16[0] - 0xD8) << 18) | (utf16[1] << 10) | ((utf16[2] - 0xDC) << 8) | utf16[3]);
utf16 += 4;
count -= 2;
} else {
ucs = (utf16[0] << 8) | utf16[1];
utf16 += 2;
count -= 1;
}
utf8 = utf8encode(ucs, utf8);
}
return utf8;
}
/* Recode any UTF-16 string to UTF-8 */
//unsigned char* utf16decode(unsigned const char *utf16, unsigned char *utf8, unsigned int count)
unsigned char* utf16decode(const unsigned char *utf16, unsigned char *utf8, unsigned int count)
{
unsigned long ucs;
ucs = *(utf16++) << 8;
ucs |= *(utf16++);
if (ucs == 0xFEFF) /* Check for BOM */
return utf16BEdecode(utf16, utf8, count-1);
else if (ucs == 0xFFFE)
return utf16LEdecode(utf16, utf8, count-1);
else { /* ADDME: Should default be LE or BE? */
utf16 -= 2;
return utf16BEdecode(utf16, utf8, count);
}
}
/* Return the number of UTF-8 chars in a string */
unsigned long utf8length(const unsigned char *utf8)
{
unsigned long l = 0;
while (*utf8 != 0)
if ((*utf8++ & MASK) != COMP)
l++;
return l;
}
/* Decode 1 UTF-8 char and return a pointer to the next char. */
const unsigned char* utf8decode(const unsigned char *utf8, unsigned short *ucs)
{
unsigned char c = *utf8++;
unsigned long code;
int tail = 0;
if ((c <= 0x7f) || (c >= 0xc2)) {
/* Start of new character. */
if (c < 0x80) { /* U-00000000 - U-0000007F, 1 byte */
code = c;
} else if (c < 0xe0) { /* U-00000080 - U-000007FF, 2 bytes */
tail = 1;
code = c & 0x1f;
} else if (c < 0xf0) { /* U-00000800 - U-0000FFFF, 3 bytes */
tail = 2;
code = c & 0x0f;
} else if (c < 0xf5) { /* U-00010000 - U-001FFFFF, 4 bytes */
tail = 3;
code = c & 0x07;
} else {
/* Invalid size. */
code = 0xffff;
}
while (tail-- && ((c = *utf8++) != 0)) {
if ((c & 0xc0) == 0x80) {
/* Valid continuation character. */
code = (code << 6) | (c & 0x3f);
} else {
/* Invalid continuation char */
code = 0xffff;
utf8--;
break;
}
}
} else {
/* Invalid UTF-8 char */
code = 0xffff;
}
/* currently we don't support chars above U-FFFF */
*ucs = (code < 0x10000) ? code : 0xffff;
return utf8;
}
void set_codepage(int cp)
{
default_codepage = cp;
return;
}
/* seek to a given char in a utf8 string and
return its start position in the string */
int utf8seek(const unsigned char* utf8, int offset)
{
int pos = 0;
while (offset--) {
pos++;
while ((utf8[pos] & MASK) == COMP)
pos++;
}
return pos;
}

View file

@ -28,6 +28,7 @@
#include "system.h"
#include "timefuncs.h"
#include "kernel.h"
#include "rbunicode.h"
#define BYTES2INT16(array,pos) \
(array[pos] | (array[pos+1] << 8 ))
@ -115,74 +116,6 @@
#define FAT_BAD_MARK 0x0ffffff7
#define FAT_EOF_MARK 0x0ffffff8
/* filename charset conversion table */
static const unsigned char unicode2iso8859_2[] = {
0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xb1, 0xc6, 0xe6, /* 0x0100 */
0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0xcf, 0xef, /* 0x0108 */
0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0110 */
0xca, 0xea, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x0118 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0120 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0128 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0130 */
0x00, 0xc5, 0xe5, 0x00, 0x00, 0xa5, 0xb5, 0x00, /* 0x0138 */
0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0xd2, /* 0x0140 */
0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0148 */
0xd5, 0xf5, 0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00, /* 0x0150 */
0xd8, 0xf8, 0xa6, 0xb6, 0x00, 0x00, 0xaa, 0xba, /* 0x0158 */
0xa9, 0xb9, 0xde, 0xfe, 0xab, 0xbb, 0x00, 0x00, /* 0x0160 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf9, /* 0x0168 */
0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0170 */
0x00, 0xac, 0xbc, 0xaf, 0xbf, 0xae, 0xbe, 0x00, /* 0x0178 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0188 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0190 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0198 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01a0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01a8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01b0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01b8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01d0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01d8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01e0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01e8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01f0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01f8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0208 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0210 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0218 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0220 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0228 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0230 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0238 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0248 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0250 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0258 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0260 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0268 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0270 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0278 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0288 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0290 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0298 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02a0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02a8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02b0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02b8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0x02c0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02d0 */
0xa2, 0xff, 0x00, 0xb2, 0x00, 0xbd, 0x00, 0x00, /* 0x02d8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02e0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02e8 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02f0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x02f8 */
};
struct fsinfo {
unsigned long freecount; /* last known free cluster count */
unsigned long nextfree; /* first cluster to start looking for free
@ -1106,10 +1039,11 @@ static int write_long_name(struct fat_file* file,
unsigned char* entry;
unsigned int idx = firstentry % DIR_ENTRIES_PER_SECTOR;
unsigned int sector = firstentry / DIR_ENTRIES_PER_SECTOR;
unsigned int i, j=0;
unsigned char chksum = 0;
int nameidx=0, namelen = strlen(name);
unsigned int i, j=0;
unsigned int nameidx=0, namelen = utf8length(name);
int rc;
unsigned short name_utf16[namelen + 1];
LDEBUGF("write_long_name(file:%lx, first:%d, num:%d, name:%s)\n",
file->firstcluster, firstentry, numentries, name);
@ -1132,6 +1066,11 @@ static int write_long_name(struct fat_file* file,
nameidx < (namelen - NAME_BYTES_PER_ENTRY);
nameidx += NAME_BYTES_PER_ENTRY);
/* we need to convert the name first */
/* since it is written in reverse order */
for (i = 0; i <= namelen; i++)
name = utf8decode(name, &name_utf16[i]);
for (i=0; i < numentries; i++) {
/* new sector? */
if ( idx >= DIR_ENTRIES_PER_SECTOR ) {
@ -1170,7 +1109,7 @@ static int write_long_name(struct fat_file* file,
memset(entry, 0, DIR_ENTRY_SIZE);
if ( i+1 < numentries ) {
/* longname entry */
int k, l = nameidx;
unsigned int k, l = nameidx;
entry[FATLONG_ORDER] = numentries-i-1;
if (i==0) {
@ -1178,22 +1117,22 @@ static int write_long_name(struct fat_file* file,
entry[FATLONG_ORDER] |= 0x40;
/* pad name with 0xffff */
for (k=1; k<12; k++) entry[k] = 0xff;
for (k=1; k<11; k++) entry[k] = 0xff;
for (k=14; k<26; k++) entry[k] = 0xff;
for (k=28; k<32; k++) entry[k] = 0xff;
};
/* set name */
for (k=0; k<5 && l <= namelen; k++) {
entry[k*2 + 1] = name[l++];
entry[k*2 + 2] = 0;
entry[k*2 + 1] = (unsigned char)(name_utf16[l] & 0xff);
entry[k*2 + 2] = (unsigned char)(name_utf16[l++] >> 8);
}
for (k=0; k<6 && l <= namelen; k++) {
entry[k*2 + 14] = name[l++];
entry[k*2 + 15] = 0;
entry[k*2 + 14] = (unsigned char)(name_utf16[l] & 0xff);
entry[k*2 + 15] = (unsigned char)(name_utf16[l++] >> 8);
}
for (k=0; k<2 && l <= namelen; k++) {
entry[k*2 + 28] = name[l++];
entry[k*2 + 29] = 0;
entry[k*2 + 28] = (unsigned char)(name_utf16[l] & 0xff);
entry[k*2 + 29] = (unsigned char)(name_utf16[l++] >> 8);
}
entry[FATDIR_ATTR] = FAT_ATTR_LONG_NAME;
@ -1291,7 +1230,7 @@ static int add_dir_entry(struct fat_dir* dir,
/* one dir entry needed for every 13 bytes of filename,
plus one entry for the short name */
entries_needed = (strlen(name) + (NAME_BYTES_PER_ENTRY-1))
entries_needed = (utf8length(name) + (NAME_BYTES_PER_ENTRY-1))
/ NAME_BYTES_PER_ENTRY + 1;
}
@ -2226,58 +2165,6 @@ int fat_opendir(IF_MV2(int volume,)
return 0;
}
/* convert from unicode to a single-byte charset */
static void unicode2iso(const unsigned char* unicode, unsigned char* iso,
int count)
{
int i;
for (i=0; i<count; i++) {
int x = i*2;
switch (unicode[x+1]) {
case 0x01: /* latin extended. convert to ISO 8859-2 */
case 0x02:
iso[i] = unicode2iso8859_2[unicode[x]];
break;
case 0x03: /* greek, convert to ISO 8859-7 */
iso[i] = unicode[x] + 0x30;
break;
/* Sergei says most russians use Win1251, so we will too.
Win1251 differs from ISO 8859-5 by an offset of 0x10. */
case 0x04: /* cyrillic, convert to Win1251 */
switch (unicode[x]) {
case 1:
iso[i] = 168;
break;
case 81:
iso[i] = 184;
break;
default:
iso[i] = unicode[x] + 0xb0; /* 0xa0 for ISO 8859-5 */
break;
}
break;
case 0x05: /* hebrew, convert to ISO 8859-8 */
iso[i] = unicode[x] + 0x10;
break;
case 0x06: /* arabic, convert to ISO 8859-6 */
case 0x0e: /* thai, convert to ISO 8859-11 */
iso[i] = unicode[x] + 0xa0;
break;
default:
iso[i] = unicode[x];
break;
}
}
}
int fat_getnext(struct fat_dir *dir, struct fat_direntry *entry)
{
bool done = false;
@ -2348,7 +2235,8 @@ int fat_getnext(struct fat_dir *dir, struct fat_direntry *entry)
/* replace shortname with longname? */
if ( longs ) {
int j,l=0;
int j;
unsigned char* utf8 = entry->name;
/* iterate backwards through the dir entries */
for (j=longs-1; j>=0; j--) {
unsigned char* ptr = cached_buf;
@ -2370,16 +2258,11 @@ int fat_getnext(struct fat_dir *dir, struct fat_direntry *entry)
index &= SECTOR_SIZE-1;
}
/* names are stored in unicode, but we
only grab the low byte (iso8859-1). */
unicode2iso(ptr + index + 1, entry->name + l, 5);
l+= 5;
unicode2iso(ptr + index + 14, entry->name + l, 6);
l+= 6;
unicode2iso(ptr + index + 28, entry->name + l, 2);
l+= 2;
utf8 = utf16LEdecode(ptr + index + 1, utf8, 5);
utf8 = utf16LEdecode(ptr + index + 14, utf8, 6);
utf8 = utf16LEdecode(ptr + index + 28, utf8, 2);
}
entry->name[l]=0;
*utf8 = 0;
}
done = true;
sectoridx = 0;

View file

@ -30,6 +30,7 @@
#include "debug.h"
#include "system.h"
#include "font.h"
#include "rbunicode.h"
#include "bidi.h"
#define SCROLLABLE_LINES 26
@ -542,13 +543,13 @@ void lcd_bitmap(const fb_data *src, int x, int y, int width, int height)
/* put a string at a given pixel position, skipping first ofs pixel columns */
static void lcd_putsxyofs(int x, int y, int ofs, const unsigned char *str)
{
int ch;
unsigned short ch;
unsigned short *ucs;
struct font* pf = font_get(curfont);
if (bidi_support_enabled)
str = bidi_l2v(str, 1);
ucs = bidi_l2v(str, 1);
while ((ch = *str++) != '\0' && x < LCD_WIDTH)
while ((ch = *ucs++) != 0 && x < LCD_WIDTH)
{
int width;
const unsigned char *bits;
@ -559,7 +560,7 @@ static void lcd_putsxyofs(int x, int y, int ofs, const unsigned char *str)
ch -= pf->firstchar;
/* get proportional width and glyph bits */
width = pf->width ? pf->width[ch] : pf->maxwidth;
width = font_get_width(pf,ch);
if (ofs > width)
{
@ -567,8 +568,7 @@ static void lcd_putsxyofs(int x, int y, int ofs, const unsigned char *str)
continue;
}
bits = pf->bits + (pf->offset ?
pf->offset[ch] : ((pf->height + 7) / 8 * pf->maxwidth * ch));
bits = font_get_bits(pf, ch);
lcd_mono_bitmap_part(bits, ofs, 0, width, x, y, width - ofs, pf->height);
@ -597,7 +597,7 @@ void lcd_puts_style(int x, int y, const unsigned char *str, int style)
return;
lcd_getstringsize(str, &w, &h);
xpos = xmargin + x*w / strlen(str);
xpos = xmargin + x*w / utf8length(str);
ypos = ymargin + y*h;
lcd_putsxy(xpos, ypos, str);
drawmode = (DRMODE_SOLID|DRMODE_INVERSEVID);
@ -707,7 +707,7 @@ void lcd_puts_scroll_style(int x, int y, const unsigned char *string, int style)
end = strchr(s->line, '\0');
strncpy(end, string, LCD_WIDTH/2);
s->len = strlen(string);
s->len = utf8length(string);
s->offset = 0;
s->startx = x;
s->backward = false;
@ -765,9 +765,11 @@ static void scroll_thread(void)
}
}
else {
/* scroll forward the whole time */
if (s->offset >= s->width)
s->offset %= s->width;
/* pause at beginning of line */
if (s->offset >= s->width) {
s->offset = 0;
s->start_tick = current_tick + scroll_delay * 2;
}
}
lastmode = drawmode;

View file

@ -29,6 +29,7 @@
#include "debug.h"
#include "system.h"
#include "font.h"
#include "rbunicode.h"
#include "bidi.h"
/*** definitions ***/
@ -1091,13 +1092,13 @@ void lcd_remote_bitmap(const unsigned char *src, int x, int y, int width,
/* put a string at a given pixel position, skipping first ofs pixel columns */
static void lcd_remote_putsxyofs(int x, int y, int ofs, const unsigned char *str)
{
int ch;
unsigned short ch;
unsigned short *ucs;
struct font* pf = font_get(curfont);
if (bidi_support_enabled)
str = bidi_l2v(str, 1);
ucs = bidi_l2v(str, 1);
while ((ch = *str++) != '\0' && x < LCD_REMOTE_WIDTH)
while ((ch = *ucs++) != 0 && x < LCD_REMOTE_WIDTH)
{
int width;
const unsigned char *bits;
@ -1108,7 +1109,7 @@ static void lcd_remote_putsxyofs(int x, int y, int ofs, const unsigned char *str
ch -= pf->firstchar;
/* get proportional width and glyph bits */
width = pf->width ? pf->width[ch] : pf->maxwidth;
width = font_get_width(pf, ch);
if (ofs > width)
{
@ -1116,8 +1117,7 @@ static void lcd_remote_putsxyofs(int x, int y, int ofs, const unsigned char *str
continue;
}
bits = pf->bits + (pf->offset ?
pf->offset[ch] : ((pf->height + 7) / 8 * pf->maxwidth * ch));
bits = font_get_bits(pf, ch);
lcd_remote_bitmap_part(bits, ofs, 0, width, x, y, width - ofs,
pf->height);
@ -1153,7 +1153,7 @@ void lcd_remote_puts_style(int x, int y, const unsigned char *str, int style)
return;
lcd_remote_getstringsize(str, &w, &h);
xpos = xmargin + x*w / strlen((char *)str);
xpos = xmargin + x*w / utf8length((char *)str);
ypos = ymargin + y*h;
lcd_remote_putsxy(xpos, ypos, str);
drawmode = (DRMODE_SOLID|DRMODE_INVERSEVID);
@ -1256,7 +1256,7 @@ void lcd_remote_puts_scroll_style(int x, int y, const unsigned char *string, int
end = strchr(s->line, '\0');
strncpy(end, (char *)string, LCD_REMOTE_WIDTH/2);
s->len = strlen((char *)string);
s->len = utf8length((char *)string);
s->offset = 0;
s->startx = x;
s->backward = false;
@ -1323,9 +1323,11 @@ static void scroll_thread(void)
}
}
else {
/* scroll forward the whole time */
if (s->offset >= s->width)
s->offset %= s->width;
/* pause at beginning of line */
if (s->offset >= s->width) {
s->offset = 0;
s->start_tick = current_tick + scroll_delay * 2;
}
}
lastmode = drawmode;

View file

@ -28,6 +28,7 @@
#include "debug.h"
#include "system.h"
#include "font.h"
#include "rbunicode.h"
#include "bidi.h"
/*** definitions ***/
@ -1014,13 +1015,13 @@ void lcd_bitmap(const unsigned char *src, int x, int y, int width, int height)
/* put a string at a given pixel position, skipping first ofs pixel columns */
static void lcd_putsxyofs(int x, int y, int ofs, const unsigned char *str)
{
int ch;
unsigned short ch;
unsigned short *ucs;
struct font* pf = font_get(curfont);
if (bidi_support_enabled)
str = bidi_l2v(str, 1);
ucs = bidi_l2v(str, 1);
while ((ch = *str++) != '\0' && x < LCD_WIDTH)
while ((ch = *ucs++) != 0 && x < LCD_WIDTH)
{
int width;
const unsigned char *bits;
@ -1031,7 +1032,7 @@ static void lcd_putsxyofs(int x, int y, int ofs, const unsigned char *str)
ch -= pf->firstchar;
/* get proportional width and glyph bits */
width = pf->width ? pf->width[ch] : pf->maxwidth;
width = font_get_width(pf,ch);
if (ofs > width)
{
@ -1039,8 +1040,7 @@ static void lcd_putsxyofs(int x, int y, int ofs, const unsigned char *str)
continue;
}
bits = pf->bits + (pf->offset ?
pf->offset[ch] : ((pf->height + 7) / 8 * pf->maxwidth * ch));
bits = font_get_bits(pf, ch);
lcd_mono_bitmap_part(bits, ofs, 0, width, x, y, width - ofs, pf->height);
@ -1069,7 +1069,7 @@ void lcd_puts_style(int x, int y, const unsigned char *str, int style)
return;
lcd_getstringsize(str, &w, &h);
xpos = xmargin + x*w / strlen((char *)str);
xpos = xmargin + x*w / utf8length((char *)str);
ypos = ymargin + y*h;
lcd_putsxy(xpos, ypos, str);
drawmode = (DRMODE_SOLID|DRMODE_INVERSEVID);
@ -1178,7 +1178,7 @@ void lcd_puts_scroll_style(int x, int y, const unsigned char *string, int style)
end = strchr(s->line, '\0');
strncpy(end, (char *)string, LCD_WIDTH/2);
s->len = strlen((char *)string);
s->len = utf8length((char *)string);
s->offset = 0;
s->startx = x;
s->backward = false;

View file

@ -31,6 +31,7 @@
#include "system.h"
#include "font.h"
#include "lcd-player-charset.h"
#include "rbunicode.h"
/*** definitions ***/
@ -323,9 +324,24 @@ static void lcd_puts_cont_scroll(int x, int y, const unsigned char *string)
}
void lcd_puts(int x, int y, const unsigned char *string)
{
int i=0;
unsigned short ucs;
const unsigned char *utf8 = string;
unsigned char tmp[12];
while (*utf8 && i<11) {
utf8 = utf8decode(utf8, &ucs);
if (ucs < 256)
tmp[i++] = ucs;
else
tmp[i++] = '?';
}
tmp[i] = 0;
DEBUGF("lcd_puts(%d, %d) -> ", x, y);
scroll[y].mode=SCROLL_MODE_OFF;
return lcd_puts_cont_scroll(x, y, string);
return lcd_puts_cont_scroll(x, y, tmp);
}
void lcd_put_cursor(int x, int y, char cursor_char)
@ -627,14 +643,28 @@ void lcd_bidir_scroll(int percent)
void lcd_puts_scroll(int x, int y, const unsigned char* string )
{
struct scrollinfo* s;
int i;
int i=0;
unsigned short ucs;
const unsigned char *utf8 = string;
unsigned char tmp[utf8length(string)+1];
while (*utf8) {
utf8 = utf8decode(utf8, &ucs);
if (ucs < 256)
tmp[i++] = ucs;
else
tmp[i++] = '?';
}
tmp[i] = 0;
DEBUGF("lcd_puts_scroll(%d, %d, %s)\n", x, y, string);
s = &scroll[y];
lcd_puts_cont_scroll(x,y,string);
s->textlen = strlen(string);
lcd_puts_cont_scroll(x,y,tmp);
s->textlen = strlen(tmp);
if ( s->textlen > 11-x ) {
s->mode = SCROLL_MODE_RUN;
@ -649,7 +679,7 @@ void lcd_puts_scroll(int x, int y, const unsigned char* string )
s->jump_scroll_steps=11-x;
s->jump_scroll=jump_scroll;
}
strncpy(s->text,string,sizeof s->text);
strncpy(s->text,tmp,sizeof s->text);
s->turn_offset=-1;
if (bidir_limit && (s->textlen < ((11-x)*(100+bidir_limit))/100)) {
s->turn_offset=s->textlen+x-11;

View file

@ -28,6 +28,7 @@
#include "system.h"
#include "font.h"
#include "hwcompat.h"
#include "rbunicode.h"
#include "bidi.h"
/*** definitions ***/
@ -844,13 +845,13 @@ void lcd_bitmap(const unsigned char *src, int x, int y, int width, int height)
/* put a string at a given pixel position, skipping first ofs pixel columns */
static void lcd_putsxyofs(int x, int y, int ofs, const unsigned char *str)
{
int ch;
unsigned short ch;
unsigned short *ucs;
struct font* pf = font_get(curfont);
if (bidi_support_enabled)
str = bidi_l2v(str, 1);
ucs = bidi_l2v(str, 1);
while ((ch = *str++) != '\0' && x < LCD_WIDTH)
while ((ch = *ucs++) != 0 && x < LCD_WIDTH)
{
int width;
const unsigned char *bits;
@ -861,7 +862,7 @@ static void lcd_putsxyofs(int x, int y, int ofs, const unsigned char *str)
ch -= pf->firstchar;
/* get proportional width and glyph bits */
width = pf->width ? pf->width[ch] : pf->maxwidth;
width = font_get_width(pf,ch);
if (ofs > width)
{
@ -869,8 +870,7 @@ static void lcd_putsxyofs(int x, int y, int ofs, const unsigned char *str)
continue;
}
bits = pf->bits + (pf->offset ?
pf->offset[ch] : ((pf->height + 7) / 8 * pf->maxwidth * ch));
bits = font_get_bits(pf, ch);
lcd_mono_bitmap_part(bits, ofs, 0, width, x, y, width - ofs, pf->height);
@ -898,7 +898,7 @@ void lcd_puts_style(int x, int y, const unsigned char *str, int style)
return;
lcd_getstringsize(str, &w, &h);
xpos = xmargin + x*w / strlen(str);
xpos = xmargin + x*w / utf8length(str);
ypos = ymargin + y*h;
lcd_putsxy(xpos, ypos, str);
drawmode = (DRMODE_SOLID|DRMODE_INVERSEVID);
@ -1007,7 +1007,7 @@ void lcd_puts_scroll_style(int x, int y, const unsigned char *string, int style)
end = strchr(s->line, '\0');
strncpy(end, string, LCD_WIDTH/2);
s->len = strlen(string);
s->len = utf8length(string);
s->offset = 0;
s->startx = x;
s->backward = false;

View file

@ -17,7 +17,5 @@
*
****************************************************************************/
#ifndef BIDI_H
extern unsigned char *bidi_l2v(const unsigned char *str, int orientation);
extern bool bidi_support_enabled;
extern void set_bidi_support(bool setting);
extern unsigned short *bidi_l2v(const unsigned char *str, int orientation);
#endif

View file

@ -31,10 +31,16 @@
#if LCD_HEIGHT > 64
#define MAX_FONT_SIZE 10000
#else
#define MAX_FONT_SIZE 4000
#define MAX_FONT_SIZE 4000
#endif
#endif
#ifndef FONT_HEADER_SIZE
#define FONT_HEADER_SIZE 36
#endif
#define GLYPH_CACHE_FILE "/.rockbox/.glyphcache"
/*
* Fonts are specified by number, and used for display
* of menu information as well as mp3 filename data.
@ -88,6 +94,7 @@ struct font {
const unsigned short *offset; /* offsets into bitmap data*/
const unsigned char *width; /* character widths or NULL if fixed*/
int defaultchar; /* default char (not glyph index)*/
long bits_size; /* # bytes of glyph bits*/
};
/* font routines*/
@ -96,6 +103,10 @@ struct font* font_load(const char *path);
struct font* font_get(int font);
void font_reset(void);
int font_getstringsize(const unsigned char *str, int *w, int *h, int fontnumber);
int font_get_width(struct font* ft, unsigned short ch);
const unsigned char * font_get_bits(struct font* ft, unsigned short ch);
void glyph_cache_save(void);
void glyph_cache_load(void);
#else /* HAVE_LCD_BITMAP */

View file

@ -94,7 +94,7 @@ struct mp3entry {
/* these following two fields are used for local buffering */
char id3v2buf[300];
char id3v1buf[3][32];
char id3v1buf[3][92];
/* resume related */
unsigned long offset; /* bytes played */

View file

@ -33,6 +33,10 @@
#include "file.h"
#include "debug.h"
#include "panic.h"
#include "rbunicode.h"
/* Font cache includes */
#include "font_cache.h"
#include "lru.h"
#ifndef O_BINARY
#define O_BINARY 0
@ -53,6 +57,16 @@ static unsigned char *freeptr = mbuf;
static unsigned char *fileptr;
static unsigned char *eofptr;
/* Font cache structures */
static struct font_cache font_cache_ui;
static int fnt_file = -1; /* >=0 if font is cached */
unsigned long file_width_offset; /* offset to file width data */
unsigned long file_offset_offset; /* offset to file offset data */
static void cache_create(int maxwidth, int height);
static int long_offset = 0;
static int glyph_file;
/* End Font cache structures */
void font_init(void)
{
memset(&font_ui, 0, sizeof(struct font));
@ -94,41 +108,12 @@ void font_reset(void)
memset(&font_ui, 0, sizeof(struct font));
}
/* read and load font into incore font structure*/
struct font* font_load(const char *path)
static struct font* font_load_header(struct font *pf)
{
int fd, filesize;
char version[4+1];
unsigned short maxwidth, height, ascent, pad;
unsigned long firstchar, defaultchar, size;
unsigned long i, nbits, noffset, nwidth;
char version[4+1];
struct font* pf = &font_ui;
/* open and read entire font file*/
fd = open(path, O_RDONLY|O_BINARY);
if (fd < 0) {
DEBUGF("Can't open font: %s\n", path);
return NULL;
}
font_reset();
/* currently, font loading replaces earlier font allocation*/
freeptr = (unsigned char *)(((int)mbuf + 3) & ~3);
fileptr = freeptr;
filesize = read(fd, fileptr, MAX_FONT_SIZE);
eofptr = fileptr + filesize;
/* no need for multiple font loads currently*/
/*freeptr += filesize;*/
/*freeptr = (unsigned char *)(freeptr + 3) & ~3;*/ /* pad freeptr*/
close(fd);
if (filesize == MAX_FONT_SIZE) {
DEBUGF("Font %s too large: %d\n", path, filesize);
return NULL;
}
unsigned long nbits;
/* read magic and version #*/
memset(version, 0, sizeof(version));
@ -163,6 +148,14 @@ struct font* font_load(const char *path)
/* # words of bitmap_t*/
if (!readlong(&nbits))
return NULL;
pf->bits_size = nbits;
return pf;
}
/* Load memory font */
struct font* font_load_in_memory(struct font* pf)
{
long i, noffset, nwidth;
/* # longs of offset*/
if (!readlong(&noffset))
@ -174,19 +167,44 @@ struct font* font_load(const char *path)
/* variable font data*/
pf->bits = (unsigned char *)fileptr;
fileptr += nbits*sizeof(unsigned char);
fileptr += pf->bits_size*sizeof(unsigned char);
/* pad to 16 bit boundary*/
fileptr = (unsigned char *)(((long)fileptr + 1) & ~1);
if ( pf->bits_size < 0xFFDB )
{
/* pad to 16-bit boundary */
fileptr = (unsigned char *)(((int)fileptr + 1) & ~1);
}
else
{
/* pad to 32-bit boundary*/
fileptr = (unsigned char *)(((int)fileptr + 3) & ~3);
}
if (noffset) {
pf->offset = (unsigned short *)fileptr;
for (i=0; i<noffset; ++i)
if (noffset)
{
if ( pf->bits_size < 0xFFDB )
{
unsigned short offset;
if (!readshort(&offset))
return NULL;
((unsigned short*)(pf->offset))[i] = (unsigned short)offset;
long_offset = 0;
pf->offset = (unsigned short *)fileptr;
for (i=0; i<noffset; ++i)
{
unsigned short offset;
if (!readshort(&offset))
return NULL;
((unsigned short*)(pf->offset))[i] = (unsigned short)offset;
}
}
else
{
long_offset = 1;
pf->offset = (unsigned short *)fileptr;
for (i=0; i<noffset; ++i)
{
unsigned long offset;
if (!readlong(&offset))
return NULL;
((unsigned long*)(pf->offset))[i] = (unsigned long)offset;
}
}
}
else
@ -205,6 +223,141 @@ struct font* font_load(const char *path)
return pf; /* success!*/
}
/* Load cached font */
struct font* font_load_cached(struct font* pf)
{
unsigned long noffset, nwidth;
unsigned char* oldfileptr = fileptr;
/* # longs of offset*/
if (!readlong(&noffset))
return NULL;
/* # bytes of width*/
if (!readlong(&nwidth))
return NULL;
/* We are now at the bitmap data, this is fixed at 36.. */
pf->bits = NULL;
/* Calculate offset to offset data */
fileptr += pf->bits_size * sizeof(unsigned char);
if ( pf->bits_size < 0xFFDB )
{
long_offset = 0;
/* pad to 16-bit boundary */
fileptr = (unsigned char *)(((int)fileptr + 1) & ~1);
}
else
{
long_offset = 1;
/* pad to 32-bit boundary*/
fileptr = (unsigned char *)(((int)fileptr + 3) & ~3);
}
if (noffset)
file_offset_offset = (unsigned long)(fileptr - freeptr);
else
file_offset_offset = 0;
/* Calculate offset to widths data */
if ( pf->bits_size < 0xFFDB )
fileptr += noffset * sizeof(unsigned short);
else
fileptr += noffset * sizeof(unsigned long);
if (nwidth)
file_width_offset = (unsigned long)(fileptr - freeptr);
else
file_width_offset = 0;
fileptr = oldfileptr;
/* Create the cache */
cache_create(pf->maxwidth, pf->height);
return pf;
}
/* read and load font into incore font structure*/
struct font* font_load(const char *path)
{
int filesize;
struct font* pf = &font_ui;
/* save loaded glyphs */
glyph_cache_save();
/* Close font file handle */
if (fnt_file >= 0)
close(fnt_file);
/* open and read entire font file*/
fnt_file = open(path, O_RDONLY|O_BINARY);
if (fnt_file < 0) {
DEBUGF("Can't open font: %s\n", path);
return NULL;
}
/* Check file size */
filesize = lseek(fnt_file, 0, SEEK_END);
lseek(fnt_file, 0, SEEK_SET);
font_reset();
/* currently, font loading replaces earlier font allocation*/
freeptr = (unsigned char *)(((int)mbuf + 3) & ~3);
fileptr = freeptr;
if (filesize > MAX_FONT_SIZE)
{
read(fnt_file, fileptr, FONT_HEADER_SIZE);
eofptr = fileptr + FONT_HEADER_SIZE;
if (!font_load_header(pf))
{
DEBUGF("Failed font header load");
return NULL;
}
if (!font_load_cached(pf))
{
DEBUGF("Failed font cache load");
return NULL;
}
glyph_cache_load();
}
else
{
read(fnt_file, fileptr, MAX_FONT_SIZE);
eofptr = fileptr + filesize;
close(fnt_file);
fnt_file = -1;
if (!font_load_header(pf))
{
DEBUGF("Failed font header load");
return NULL;
}
if (!font_load_in_memory(pf))
{
DEBUGF("Failed mem load");
return NULL;
}
}
/* no need for multiple font loads currently*/
/*freeptr += filesize;*/
/*freeptr = (unsigned char *)(freeptr + 3) & ~3;*/ /* pad freeptr*/
return pf; /* success!*/
}
/*
* Return a pointer to an incore font structure.
* If the requested font isn't loaded/compiled-in,
@ -231,17 +384,18 @@ struct font* font_get(int font)
int font_getstringsize(const unsigned char *str, int *w, int *h, int fontnumber)
{
struct font* pf = font_get(fontnumber);
int ch;
unsigned short ch;
int width = 0;
while((ch = *str++)) {
for (str = utf8decode(str, &ch); ch != 0 ; str = utf8decode(str, &ch))
{
/* check input range*/
if (ch < pf->firstchar || ch >= pf->firstchar+pf->size)
ch = pf->defaultchar;
ch -= pf->firstchar;
/* get proportional width and glyph bits*/
width += pf->width? pf->width[ch]: pf->maxwidth;
width += font_get_width(pf,ch);
}
if ( w )
*w = width;
@ -250,6 +404,154 @@ int font_getstringsize(const unsigned char *str, int *w, int *h, int fontnumber)
return width;
}
/*
* Reads an entry into cache entry
*/
static void
load_cache_entry(struct font_cache_entry* p, void* callback_data)
{
struct font* pf = callback_data;
unsigned short char_code = p->_char_code;
unsigned char tmp[2];
if (file_width_offset)
{
int width_offset = file_width_offset + char_code;
lseek(fnt_file, width_offset, SEEK_SET);
read(fnt_file, &(p->width), 1);
}
else
{
p->width = pf->maxwidth;
}
long bitmap_offset = 0;
if (file_offset_offset)
{
long offset = file_offset_offset + char_code * (long_offset ? sizeof(long) : sizeof(short));
lseek(fnt_file, offset, SEEK_SET);
read (fnt_file, tmp, 2);
bitmap_offset = tmp[0] | (tmp[1] << 8);
if (long_offset) {
read (fnt_file, tmp, 2);
bitmap_offset |= (tmp[0] << 16) | (tmp[1] << 24);
}
}
else
{
bitmap_offset = ((pf->height + 7) / 8) * p->width * char_code;
}
long file_offset = FONT_HEADER_SIZE + bitmap_offset;
lseek(fnt_file, file_offset, SEEK_SET);
int src_bytes = p->width * ((pf->height + 7) / 8);
read(fnt_file, p->bitmap, src_bytes);
}
/*
* Converts cbuf into a font cache
*/
static void cache_create(int maxwidth, int height)
{
/* maximum size of rotated bitmap */
int bitmap_size = maxwidth * ((height + 7) / 8);
/* Initialise cache */
font_cache_create(&font_cache_ui, mbuf, MAX_FONT_SIZE, bitmap_size);
}
/*
* Returns width of character
*/
int font_get_width(struct font* pf, unsigned short char_code)
{
return (fnt_file >= 0 && pf != &sysfont)?
font_cache_get(&font_cache_ui,char_code,load_cache_entry,pf)->width:
pf->width? pf->width[char_code]: pf->maxwidth;
}
const unsigned char* font_get_bits(struct font* pf, unsigned short char_code)
{
const unsigned char* bits;
if (fnt_file >= 0 && pf != &sysfont)
{
bits =
(unsigned char*)font_cache_get(&font_cache_ui,char_code,load_cache_entry,pf)->bitmap;
}
else
{
bits = pf->bits + (pf->offset?
pf->offset[char_code]:
(((pf->height + 7) / 8) * pf->maxwidth * char_code));
}
return bits;
}
void glyph_file_write(void* data)
{
struct font_cache_entry* p = data;
unsigned char tmp[2];
if (p->_char_code != 0xffff && glyph_file >= 0) {
tmp[0] = p->_char_code >> 8;
tmp[1] = p->_char_code & 0xff;
if (write(glyph_file, tmp, 2) != 2) {
close(glyph_file);
glyph_file = -1;
}
}
return;
}
/* save the char codes of the loaded glyphs to a file */
void glyph_cache_save(void)
{
if (fnt_file >= 0) {
glyph_file = creat(GLYPH_CACHE_FILE, 0);
if (glyph_file < 0) return;
lru_traverse(&font_cache_ui._lru, glyph_file_write);
if (glyph_file >= 0)
close(glyph_file);
}
return;
}
void glyph_cache_load(void)
{
if (fnt_file >= 0) {
int fd;
unsigned char tmp[2];
unsigned short ch;
struct font* pf = &font_ui;
fd = open(GLYPH_CACHE_FILE, O_RDONLY|O_BINARY);
if (fd >= 0) {
while (read(fd, tmp, 2) == 2) {
ch = (tmp[0] << 8) | tmp[1];
font_get_bits(pf, ch);
}
close(fd);
} else {
/* load latin1 chars into cache */
ch = 255 - pf->firstchar;
while (ch--)
font_get_bits(pf, ch);
}
}
return;
}
#endif /* HAVE_LCD_BITMAP */

224
firmware/font_cache.c Normal file
View file

@ -0,0 +1,224 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2003 Tat Tang
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include <string.h>
#include "font_cache.h"
#include "debug.h"
/*******************************************************************************
* font_cache_lru_init
******************************************************************************/
void font_cache_lru_init(void* data)
{
struct font_cache_entry* p = data;
p->_char_code = 0xffff; /* assume invalid char */
}
/*******************************************************************************
* font_cache_create
******************************************************************************/
void font_cache_create(
struct font_cache* fcache,
void *buf,
int buf_size,
int bitmap_bytes_size)
{
int font_cache_entry_size =
sizeof(struct font_cache_entry) + bitmap_bytes_size;
/* make sure font cache entries are a multiple of 16 bits */
if (font_cache_entry_size % 2 != 0)
font_cache_entry_size++;
int cache_size = buf_size /
(font_cache_entry_size + LRU_SLOT_OVERHEAD + sizeof(short));
fcache->_size = 1;
fcache->_capacity = cache_size;
/* set up index */
fcache->_index = buf;
/* set up lru list */
unsigned char* lru_buf = buf;
lru_buf += sizeof(short) * cache_size;
lru_create(&fcache->_lru, lru_buf, cache_size, font_cache_entry_size);
/* initialise cache */
lru_traverse(&fcache->_lru, font_cache_lru_init);
short i;
for (i = 0; i < cache_size; i++)
fcache->_index[i] = i; /* small cheat here */
}
/*******************************************************************************
* font_cache_index_of
******************************************************************************/
int font_cache_index_of(
struct font_cache* fcache,
unsigned short char_code)
{
struct font_cache_entry* p;
int left, right, mid, c;
left = 0;
right = fcache->_size - 1;
do
{
mid = (left + right) / 2;
p = lru_data(&fcache->_lru, fcache->_index[mid]);
c = p->_char_code - char_code;
if (c == 0)
return mid;
if (c < 0)
left = mid + 1;
else
right = mid - 1;
}
while (left <= right);
return -1;
}
/*******************************************************************************
* font_cache_insertion_point
******************************************************************************/
int font_cache_insertion_point(
struct font_cache* fcache,
unsigned short char_code)
{
struct font_cache_entry* p;
short *index = fcache->_index;
p = lru_data(&fcache->_lru, index[0]);
if (char_code < p->_char_code)
return -1;
p = lru_data(&fcache->_lru, index[fcache->_capacity - 1]);
if (char_code > p->_char_code)
return fcache->_capacity - 1;
int left, right, mid, c;
left = 0;
right = fcache->_capacity - 1;
do
{
mid = (left + right) / 2;
p = lru_data(&fcache->_lru, index[mid]);
c = char_code - p->_char_code;
if (c >= 0)
{
p = lru_data(&fcache->_lru, index[mid+1]);
int z = char_code - p->_char_code;
if (z < 0)
return mid;
if (z == 0)
return mid + 1;
}
if (c > 0)
left = mid + 1;
else
right = mid - 1;
}
while (left <= right);
/* not found */
return -2;
}
/*******************************************************************************
* font_cache_get
******************************************************************************/
struct font_cache_entry* font_cache_get(
struct font_cache* fcache,
unsigned short char_code,
void (*callback) (struct font_cache_entry* p, void *callback_data),
void *callback_data)
{
int insertion_point = font_cache_insertion_point(fcache, char_code);
if (insertion_point >= 0)
{
short lru_handle = fcache->_index[insertion_point];
struct font_cache_entry* p = lru_data(&fcache->_lru, lru_handle);
if (p->_char_code == char_code)
{
lru_touch(&fcache->_lru, lru_handle);
return lru_data(&fcache->_lru, lru_handle);
}
}
/* not found */
short lru_handle_to_replace = fcache->_lru._head;
struct font_cache_entry* p =
lru_data(&fcache->_lru, lru_handle_to_replace);
int index_to_replace = font_cache_index_of(fcache, p->_char_code);
if (insertion_point < index_to_replace)
{
/* shift memory down */
int dest = insertion_point+2;
int src = insertion_point+1;
int len = index_to_replace - insertion_point - 1;
int desti = dest + len - 1;
int srci = src + len - 1;
int i;
for (i = 0; i < len; i++)
fcache->_index[desti--] = fcache->_index[srci--];
/* add to index */
fcache->_index[insertion_point + 1] = lru_handle_to_replace;
}
else if (insertion_point > index_to_replace)
{
/* shift memory up */
int dest = index_to_replace;
int src = index_to_replace + 1;
int len = insertion_point - index_to_replace;
int i;
for (i=0; i < len; i++)
fcache->_index[dest++] = fcache->_index[src++];
/* add to index */
fcache->_index[insertion_point] = lru_handle_to_replace;
}
/* load new entry into cache */
lru_touch(&fcache->_lru, lru_handle_to_replace);
if (fcache->_size < fcache->_capacity)
fcache->_size++;
p->_char_code = char_code;
callback(p, callback_data);
return p;
}

View file

@ -42,6 +42,7 @@
#include "mp3data.h"
#include "system.h"
#include "replaygain.h"
#include "rbunicode.h"
#define UNSYNC(b0,b1,b2,b3) (((long)(b0 & 0x7F) << (3*7)) | \
((long)(b1 & 0x7F) << (2*7)) | \
@ -359,100 +360,83 @@ static const struct tag_resolver taglist[] = {
#define TAGLIST_SIZE ((int)(sizeof(taglist) / sizeof(taglist[0])))
/* Checks to see if the passed in string is a 16-bit wide Unicode v2
string. If it is, we attempt to convert it to a 8-bit ASCII string
(for valid 8-bit ASCII characters). If it's not unicode, we leave
it alone. At some point we should fully support unicode strings */
static int unicode_munge(char* string, int *len) {
long tmp;
bool le = false;
int i;
char *str = string;
char *outstr = string;
bool bom = false;
int outlen;
string. If it is, we convert it to a UTF-8 string. If it's not unicode,
we convert from the default codepage */
static int unicode_munge(char* string, char* utf8buf, int *len) {
long tmp;
bool le = false;
int i = 0;
char *str = string;
int templen = 0;
char* utf8 = utf8buf;
if(str[0] > 0x03) {
/* Plain old string */
return 0;
}
/* Type 0x00 is ordinary ISO 8859-1 */
if(str[0] == 0x00) {
int i = --(*len);
switch (str[0]) {
case 0x00: /* Type 0x00 is ordinary ISO 8859-1 */
str++;
(*len)--;
utf8 = iso_decode(str, utf8, -1, *len);
*utf8 = 0;
*len = strlen(utf8buf);
break;
/* We must move the string to the left */
while (i--) {
string[0] = string[1];
string++;
}
case 0x01: /* Unicode with or without BOM */
case 0x02:
(*len)--;
str++;
return 0;
}
/* Handle frames with more than one string
(needed for TXXX frames).*/
do {
tmp = BYTES2INT(0, 0, str[0], str[1]);
/* Unicode with or without BOM */
if(str[0] == 0x01 || str[0] == 0x02) {
(*len)--;
str++;
i = 0;
/* Handle frames with more than one string (needed for TXXX frames).
*/
do {
tmp = BYTES2INT(0, 0, str[0], str[1]);
/* Now check if there is a BOM (zero-width non-breaking space, 0xfeff)
and if it is in little or big endian format */
if(tmp == 0xfffe) { /* Little endian? */
bom = true;
le = true;
str += 2;
(*len)-=2;
}
if(tmp == 0xfeff) { /* Big endian? */
bom = true;
str += 2;
(*len)-=2;
}
/* If there is no BOM (which is a specification violation),
let's try to guess it. If one of the bytes is 0x00, it is
probably the most significant one. */
if(!bom) {
if(str[1] == 0)
le = true;
}
outlen = *len / 2;
/* Now check if there is a BOM
(zero-width non-breaking space, 0xfeff)
and if it is in little or big endian format */
if(tmp == 0xfffe) { /* Little endian? */
le = true;
str += 2;
(*len)-=2;
} else if(tmp == 0xfeff) { /* Big endian? */
str += 2;
(*len)-=2;
} else
/* If there is no BOM (which is a specification violation),
let's try to guess it. If one of the bytes is 0x00, it is
probably the most significant one. */
if(str[1] == 0)
le = true;
do {
if(le) {
if(str[1])
outstr[i++] = '.';
else
outstr[i++] = str[0];
} else {
if(str[0])
outstr[i++] = '.';
else
outstr[i++] = str[1];
}
str += 2;
} while((str[0] || str[1]) && (i < outlen));
do {
if(le)
utf8 = utf16LEdecode(str, utf8, 1);
else
utf8 = utf16BEdecode(str, utf8, 1);
str += 2;
outstr[i++] = 0; /* Terminate the string */
} while(i < outlen);
str+=2;
i += 2;
} while((str[0] || str[1]) && (i < *len));
*len = i - 1;
*utf8++ = 0; /* Terminate the string */
templen += (strlen(&utf8buf[templen]) + 1);
str += 2;
i+=2;
} while(i < *len);
*len = templen - 1;
break;
return 0;
}
case 0x03: /* UTF-8 encoded string */
for(i=0; i < *len; i++)
utf8[i] = str[i+1];
*len = strlen(utf8buf);
break;
/* If we come here, the string was of an unsupported type */
*len = 1;
outstr[0] = 0;
return -1;
default: /* Plain old string */
utf8 = iso_decode(str, utf8, -1, *len);
*utf8 = 0;
*len = strlen(utf8buf);
break;
}
return 0;
}
/*
@ -468,6 +452,7 @@ static bool setid3v1title(int fd, struct mp3entry *entry)
unsigned char buffer[128];
static const char offsets[] = {3, 33, 63, 93, 125, 127};
int i, j;
unsigned char* utf8;
if (-1 == lseek(fd, -128, SEEK_END))
return false;
@ -482,8 +467,8 @@ static bool setid3v1title(int fd, struct mp3entry *entry)
entry->id3version = ID3_VER_1_0;
for (i=0; i < (int)sizeof offsets; i++) {
char* ptr = (char *)buffer + offsets[i];
unsigned char* ptr = (unsigned char *)buffer + offsets[i];
if (i<3) {
/* kill trailing space in strings */
for (j=29; j && ptr[j]==' '; j--)
@ -492,18 +477,13 @@ static bool setid3v1title(int fd, struct mp3entry *entry)
switch(i) {
case 0:
strncpy(entry->id3v1buf[2], ptr, 30);
entry->title = entry->id3v1buf[2];
break;
case 1:
strncpy(entry->id3v1buf[0], ptr, 30);
entry->artist = entry->id3v1buf[0];
break;
case 2:
strncpy(entry->id3v1buf[1], ptr, 30);
entry->album = entry->id3v1buf[1];
/* convert string to utf8 */
utf8 = entry->id3v1buf[i];
utf8 = iso_decode(ptr, utf8, -1, 30);
/* make sure string is terminated */
*utf8 = 0;
break;
case 3:
@ -527,6 +507,10 @@ static bool setid3v1title(int fd, struct mp3entry *entry)
}
}
entry->title = entry->id3v1buf[0];
entry->artist = entry->id3v1buf[1];
entry->album = entry->id3v1buf[2];
return true;
}
@ -556,7 +540,7 @@ static void setid3v2title(int fd, struct mp3entry *entry)
bool global_unsynch = false;
bool unsynch = false;
int data_length_ind;
int i;
int i, j;
int rc;
global_ff_found = false;
@ -789,7 +773,18 @@ static void setid3v2title(int fd, struct mp3entry *entry)
if(unsynch || (global_unsynch && version >= ID3_VER_2_4))
bytesread = unsynchronize_frame(tag, bytesread);
unicode_munge( tag, &bytesread );
/* UTF-8 could potentially be 3 times larger */
/* so we need to create a new buffer */
char utf8buf[(3 * bytesread) + 1];
unicode_munge( tag, utf8buf, &bytesread );
if(bytesread >= buffersize - bufferpos)
bytesread = buffersize - bufferpos - 1;
for (j = 0; j < bytesread; j++)
tag[j] = utf8buf[j];
if (ptag)
*ptag = tag;
@ -809,7 +804,7 @@ static void setid3v2title(int fd, struct mp3entry *entry)
break;
}
}
if( i == TAGLIST_SIZE ) {
/* no tag in tagList was found, or it was a repeat.
skip it using the total size */
@ -839,7 +834,7 @@ int getid3v2len(int fd)
{
char buf[6];
int offset;
/* Make sure file has a ID3 tag */
if((-1 == lseek(fd, 0, SEEK_SET)) ||
(read(fd, buf, 6) != 6) ||
@ -955,7 +950,7 @@ bool mp3info(struct mp3entry *entry, const char *filename, bool v1first)
#if CONFIG_CODEC != SWCODEC
memset(entry, 0, sizeof(struct mp3entry));
#endif
strncpy(entry->path, filename, sizeof(entry->path));
entry->title = NULL;

View file

@ -0,0 +1,48 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2003 Tat Tang
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "lru.h"
/*******************************************************************************
*
******************************************************************************/
struct font_cache
{
struct lru _lru;
int _size;
int _capacity;
short *_index; /* index of lru handles in char_code order */
};
struct font_cache_entry
{
unsigned short _char_code;
unsigned char width;
unsigned char bitmap[1]; /* place holder */
};
/* void (*f) (void*, struct font_cache_entry*); */
/* Create an auto sized font cache from buf */
void font_cache_create(
struct font_cache* fcache, void* buf, int buf_size, int bitmap_bytes_size);
/* Get font cache entry */
struct font_cache_entry* font_cache_get(
struct font_cache* fcache,
unsigned short char_code,
void (*callback) (struct font_cache_entry* p, void *callback_data),
void *callback_data);

46
firmware/include/lru.h Normal file
View file

@ -0,0 +1,46 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2003 Tat Tang
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#ifndef LRU_H
#define LRU_H
/*******************************************************************************
* LRU manager
******************************************************************************/
struct lru
{
short _head;
short _tail;
short _size;
short _slot_size;
void *_base;
};
#define LRU_SLOT_OVERHEAD (2 * sizeof(short))
/* Create LRU list with specified size from buf. */
void lru_create(struct lru* pl, void *buf, short size, short data_size);
/* Touch an entry. Moves handle to back of LRU list */
void lru_touch(struct lru* pl, short handle);
/* Data */
void *lru_data(struct lru* pl, short handle);
/* Traverse lru-wise */
void lru_traverse(struct lru* pl, void (*callback)(void* data));
#endif /* LRU_H */

View file

@ -0,0 +1,29 @@
/* Some conversion functions for handling UTF-8
*
* copyright Marcoen Hirschberg (2004,2005)
*
* I got all the info from:
* http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
* and
* http://en.wikipedia.org/wiki/Unicode
*/
#define CODEPAGE_DIR "/.rockbox/codepages"
#define MAX_CP_TABLE_SIZE 32768
#define MASK 0xC0 /* 11000000 */
#define COMP 0x80 /* 10x */
extern int codepage;
/* Encode a UCS value as UTF-8 and return a pointer after this UTF-8 char. */
unsigned char* utf8encode(unsigned long ucs, unsigned char *utf8);
unsigned char* iso_decode(const unsigned char *latin1, unsigned char *utf8, int cp, int count);
unsigned char* utf16LEdecode(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* utf16BEdecode(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* utf16decode(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned long utf8length(const unsigned char *utf8);
const unsigned char* utf8decode(const unsigned char *utf8, unsigned short *ucs);
void set_codepage(int cp);
int utf8seek(const unsigned char* utf8, int offset);

119
firmware/lru.c Normal file
View file

@ -0,0 +1,119 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2003 Tat Tang
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "lru.h"
struct lru_node
{
short _next;
short _prev;
unsigned char data[1]; /* place holder */
};
#define lru_node_p(pl, x) \
((struct lru_node*)(pl->_base + pl->_slot_size * x))
/*******************************************************************************
* lru_create
******************************************************************************/
void lru_create(struct lru* pl, void *buf, short size, short data_size)
{
pl->_base = (unsigned char*) buf;
pl->_slot_size = data_size + LRU_SLOT_OVERHEAD;
pl->_size = size;
pl->_head = 0;
pl->_tail = pl->_size - 1;
/* Initialise slots */
int i;
for (i=0; i<pl->_size; i++)
{
lru_node_p(pl, i)->_next = i + 1;
lru_node_p(pl, i)->_prev = i - 1;
}
/* Fix up head and tail to form circular buffer */
lru_node_p(pl, 0)->_prev = pl->_tail;
lru_node_p(pl, pl->_tail)->_next = pl->_head;
}
/*******************************************************************************
* lru_traverse
******************************************************************************/
void lru_traverse(struct lru* pl, void (*callback)(void* data))
{
short i;
struct lru_node* slot;
short loc = pl->_head;
for (i = 0; i < pl->_size; i++)
{
slot = lru_node_p(pl, loc);
callback(slot->data);
loc = slot->_next;
}
}
/*******************************************************************************
* lru_touch
******************************************************************************/
void lru_touch(struct lru* pl, short handle)
{
if (handle == pl->_head)
{
pl->_head = lru_node_p(pl, pl->_head)->_next;
pl->_tail = lru_node_p(pl, pl->_tail)->_next;
return;
}
if (handle == pl->_tail)
{
return;
}
/* Remove current node from linked list */
struct lru_node* curr_node = lru_node_p(pl, handle);
struct lru_node* prev_node = lru_node_p(pl, curr_node->_prev);
struct lru_node* next_node = lru_node_p(pl, curr_node->_next);
prev_node->_next = curr_node->_next;
next_node->_prev = curr_node->_prev;
/* insert current node at tail */
struct lru_node* tail_node = lru_node_p(pl, pl->_tail);
short tail_node_next_handle = tail_node->_next; /* Bug fix */
struct lru_node* tail_node_next = lru_node_p(pl, tail_node_next_handle); /* Bug fix */
curr_node->_next = tail_node->_next;
curr_node->_prev = pl->_tail;
tail_node_next->_prev = handle; /* Bug fix */
tail_node->_next = handle;
pl->_tail = handle;
}
/*******************************************************************************
* lru_data
******************************************************************************/
void *lru_data(struct lru* pl, short handle)
{
return lru_node_p(pl, handle)->data;
}

View file

@ -46,6 +46,9 @@
#include "file.h"
#include "hwcompat.h"
#endif /* !SIMULATOR */
#ifdef HAVE_LCD_BITMAP
#include "lcd.h"
#endif
#ifndef SIMULATOR
extern unsigned long mas_version_code;
@ -916,6 +919,12 @@ static struct trackdata *add_track_to_tag_list(const char *filename)
}
track->mempos = audiobuf_write;
track->id3.elapsed = 0;
#ifdef HAVE_LCD_BITMAP
int w, h;
lcd_getstringsize(track->id3.title, &w, &h);
lcd_getstringsize(track->id3.artist, &w, &h);
lcd_getstringsize(track->id3.album, &w, &h);
#endif
track_write_idx = (track_write_idx+1) & MAX_TRACK_ENTRIES_MASK;
debug_tags();

View file

@ -46,6 +46,9 @@
#elif HAVE_TLV320
#include "tlv320.h"
#endif
#ifdef HAVE_LCD_BITMAP
#include "font.h"
#endif
#include "logf.h"
#include "lcd-remote.h"
@ -378,7 +381,7 @@ static void handle_auto_poweroff(void)
* Inhibit shutdown as long as the charger is plugged in. If it is
* unplugged, wait for a timeout period and then shut down.
*/
if(charger_input_state == CHARGER) {
if(charger_input_state == CHARGER || audio_stat == AUDIO_STATUS_PLAY) {
last_event_tick = current_tick;
}
#endif
@ -899,6 +902,9 @@ void shutdown_hw(void)
}
#endif
audio_stop();
#ifdef HAVE_LCD_BITMAP
glyph_cache_save();
#endif
ata_flush();
ata_spindown(1);
while(ata_disk_is_active())

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -10,7 +10,7 @@ CFLAGS := -O -ansi -g
LDFLAGS := -g
CLEANALL := scramble descramble iaudio sh2d bmp2rb rdf2binary convbdf \
generate_rocklatin mkboot ipod_fw uclpack
generate_rocklatin mkboot ipod_fw codepages uclpack
all:
@echo "Run make in your build directory!"
@ -41,6 +41,9 @@ ipod_fw: ipod_fw.c
convbdf: convbdf.c
$(CC) -g $+ -o $@
codepages: codepages.c
$(CC) -g $+ -o $@
generate_rocklatin: generate_rocklatin.c ../firmware/drivers/lcd-player-charset.c
$(CC) -DHAVE_LCD_CHARCELLS -D__CONFIG_H__ -I../firmware/export $+ -o $@

View file

@ -62,16 +62,26 @@ sub buildzip {
mkdir ".rockbox/langs", 0777;
mkdir ".rockbox/rocks", 0777;
mkdir ".rockbox/codecs", 0777;
mkdir ".rockbox/codepages", 0777;
mkdir ".rockbox/wps", 0777;
mkdir ".rockbox/themes", 0777;
my $c = 'find apps -name "*.codec" ! -empty -exec cp {} .rockbox/codecs/ \;';
print `$c`;
system("$ROOT/tools/codepages");
my $c = 'find . -name "*.cp" ! -empty -exec mv {} .rockbox/codepages/ \; >/dev/null 2>&1';
print `$c`;
my @call = `find .rockbox/codecs -type f`;
if(!$call[0]) {
# no codec was copied, remove directory again
rmdir(".rockbox/codecs");
system("$ROOT/tools/codepages");
my $c = 'find . -name "*.cp" ! -empty -exec mv {} .rockbox/codepages/ \; >/dev/null 2>&1';
print `$c`;
}
@ -139,44 +149,16 @@ sub buildzip {
my @fonts = grep { /\.bdf$/ && -f "$ROOT/fonts/$_" } readdir(DIR);
closedir DIR;
my $maxfont;
open(SIZE, ">ziptemp");
print SIZE <<STOP
\#include "font.h"
Font Size We Want: MAX_FONT_SIZE
STOP
;
close(SIZE);
my $c="cat ziptemp | gcc $cppdef -I. -I$firmdir/export -E -P -";
# print STDERR "C: $c\n";
open(GETSIZE, "$c|");
while(<GETSIZE>) {
if($_ =~ /^Font Size We Want: (\d*)/) {
$maxfont = $1;
last;
}
}
close(GETSIZE);
unlink("ziptemp");
die "no decent max font size" if ($maxfont < 2000);
for(@fonts) {
my $f = $_;
print "FONT: $f\n" if($verbose);
my $o = $f;
$o =~ s/\.bdf/\.fnt/;
my $cmd ="$ROOT/tools/convbdf -s 32 -l 255 -f -o \".rockbox/fonts/$o\" \"$ROOT/fonts/$f\" >/dev/null 2>&1";
my $cmd ="$ROOT/tools/convbdf -f -o \".rockbox/fonts/$o\" \"$ROOT/fonts/$f\" >/dev/null 2>&1";
print "CMD: $cmd\n" if($verbose);
`$cmd`;
# no need to add fonts we cannot load anyway
my $fontsize = filesize(".rockbox/fonts/$o");
if($fontsize > $maxfont) {
unlink(".rockbox/fonts/$o");
}
}
}

231
tools/codepages.c Normal file
View file

@ -0,0 +1,231 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
*
* Copyright (C) 2005 by Frank Dischner
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "codepages.h"
#define MAX_TABLE_SIZE 32768
static unsigned short iso_table[MAX_TABLE_SIZE];
static const unsigned short iso8859_7_to_uni[] = {
0x2018, 0x2019, 0x00A3, 0x20AC, 0x20AF, 0x00A6, 0x00A7, /* A1-A7 */
0x00A8, 0x00A9, 0x037A, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015, /* A8-AF */
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7 /* B0-B7 */
};
static const unsigned short cp1251_to_uni[] = {
0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, /* 80-87 */
0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, /* 88-8F */
0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 90-97 */
0x0098, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, /* 98-9F */
0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, /* A0-A7 */
0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, /* A8-AF */
0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, /* B0-B7 */
0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457 /* B8-BF */
};
static const unsigned short iso8859_2_to_uni[] = {
0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, /* A1-A7 */
0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, /* A8-AF */
0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, /* B0-B7 */
0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, /* B8-BF */
0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, /* C0-C7 */
0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, /* C8-CF */
0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, /* D0-D7 */
0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, /* D8-DF */
0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, /* E0-E7 */
0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, /* E8-EF */
0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, /* F0-F7 */
0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 /* F8-FF */
};
unsigned short iso_decode(unsigned char *latin1, int cp, int count)
{
unsigned short ucs = 0;
/* cp tells us which codepage to convert from */
switch (cp) {
case 0x01: /* Greek (ISO-8859-7) */
while (count--) {
/* first convert to unicode */
if (*latin1 < 0xA1)
ucs = *latin1++;
else if (*latin1 > 0xB7)
ucs = *latin1++ + 0x02D0;
else
ucs = iso8859_7_to_uni[*latin1++ - 0xA1];
}
break;
case 0x02: /* Hebrew (ISO-8859-8) */
while (count--) {
/* first convert to unicode */
if (*latin1 == 0xAA) {
ucs = 0xD7;
latin1++;
} else if (*latin1 == 0xBA) {
ucs = 0xF7;
latin1++;
} else if (*latin1 == 0xDF) {
ucs = 0x2017;
latin1++;
} else if (*latin1 < 0xC0)
ucs = *latin1++;
else
ucs = *latin1++ + 0x04F0;
}
break;
case 0x03: /* Russian (CP1251) */
while (count--) {
/* first convert to unicode */
if (*latin1 < 0x80)
ucs = *latin1++;
else if (*latin1 > 0xBF)
ucs = *latin1++ + 0x0350;
else
ucs = cp1251_to_uni[*latin1++ - 0x80];
}
break;
case 0x04: /* Thai (ISO-8859-11) */
while (count--) {
/* first convert to unicode */
if (*latin1 < 0xA1)
ucs = *latin1++;
else
ucs = *latin1++ + 0x0D60;
}
break;
case 0x05: /* Arabic (ISO-8859-6) */
while (count--) {
/* first convert to unicode */
if (*latin1 < 0xAC || *latin1 == 0xAD)
ucs = *latin1++;
else
ucs = *latin1++ + 0x0560;
}
break;
case 0x06: /* Turkish (ISO-8859-9) */
while (count--) {
/* first convert to unicode */
switch (*latin1) {
case 0xD0:
ucs = 0x011E;
break;
case 0xDD:
ucs = 0x0130;
break;
case 0xDE:
ucs = 0x015E;
break;
case 0xF0:
ucs = 0x011F;
break;
case 0xFD:
ucs = 0x0131;
break;
case 0xFE:
ucs = 0x015F;
break;
default:
ucs = *latin1;
break;
}
latin1++;
}
break;
case 0x07: /* Latin Extended (ISO-8859-2) */
while (count--) {
/* first convert to unicode */
if (*latin1 < 0xA1)
ucs = *latin1++;
else
ucs = iso8859_2_to_uni[*latin1++ - 0xA1];
}
break;
default:
break;
}
return ucs;
}
int writeshort(FILE *f, unsigned short s)
{
putc(s, f);
return putc(s>>8, f) != EOF;
}
int main(void)
{
int i, j;
unsigned char k;
unsigned short uni;
FILE *of;
for (i=0; i < MAX_TABLE_SIZE; i++)
iso_table[i] = 0;
of = fopen("iso.cp", "wb");
if (!of) return 1;
for (i=1; i<8; i++) {
for (j=0; j<128; j++) {
k = (unsigned char)j + 128;
uni = iso_decode(&k, i, 1);
writeshort(of, uni);
}
}
fclose(of);
of = fopen("932.cp", "wb");
if (!of) return 1;
for (i=0; i < MAX_TABLE_SIZE; i++)
writeshort(of, cp932_table[i]);
fclose(of);
of = fopen("936.cp", "wb");
if (!of) return 1;
for (i=0; i < MAX_TABLE_SIZE; i++)
writeshort(of, cp936_table[i]);
fclose(of);
of = fopen("949.cp", "wb");
if (!of) return 1;
for (i=0; i < MAX_TABLE_SIZE; i++)
writeshort(of, cp949_table[i]);
fclose(of);
of = fopen("950.cp", "wb");
if (!of) return 1;
for (i=0; i < MAX_TABLE_SIZE; i++)
writeshort(of, cp950_table[i]);
fclose(of);
return 0;
}

16419
tools/codepages.h Normal file

File diff suppressed because it is too large Load diff

View file

@ -443,6 +443,7 @@ int bdf_read_header(FILE *fp, struct font* pf)
return 0;
}
fprintf(stderr, "Header parsed\n");
return 1;
}
@ -955,6 +956,7 @@ int gen_c_source(struct font* pf, char *path)
" %s /* offset */\n"
" %s\n"
" %d, /* defaultchar */\n"
" %d /* bits_size */\n"
"};\n"
"#endif /* HAVE_LCD_BITMAP */\n",
pf->maxwidth, pf->height,
@ -963,7 +965,8 @@ int gen_c_source(struct font* pf, char *path)
pf->size,
obuf,
buf,
pf->defaultchar);
pf->defaultchar,
pf->bits_size);
return 0;
}
@ -1071,12 +1074,29 @@ int gen_fnt_file(struct font* pf, char *path)
ofr += size;
}
if (ftell(ofp) & 1)
writebyte(ofp, 0); /* pad to 16-bit boundary*/
if ( pf->bits_size < 0xFFDB )
{
/* bitmap offset is small enough, use unsigned short for offset */
if (ftell(ofp) & 1)
writebyte(ofp, 0); /* pad to 16-bit boundary*/
}
else
{
/* bitmap offset is large then 64K, use unsigned long for offset */
while (ftell(ofp) & 3)
writebyte(ofp, 0); /* pad to 32-bit boundary*/
}
if (pf->offset)
{
for (i=0; i<pf->size; ++i)
writeshort(ofp, pf->offrot[i]);
{
if ( pf->bits_size < 0xFFDB )
writeshort(ofp, pf->offrot[i]);
else
writelong(ofp, pf->offrot[i]);
}
}
if (pf->width)
for (i=0; i<pf->size; ++i)