mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 10:07:38 -04:00
Database view is fully translatable and entries can be voiced.
* All tagnavi.config entries pulled into language files * Database viewer looks up LANG_IDs from the entries * If we find a match, we can translate and voice these entries * Add (disabled) mechanism to allow voicing database metadata Original patch by Paul Sauro Modifications by William Wingus Further modifications by Solomon Peachy Todo/Problems: * Current Tagnavi headers are rather awkward in English * Can't voice the "By first letter" alphabetic entries * No mechanism for generating talk clips for DB metadata Change-Id: Ic276ccda1bd8aae550d38be852bae4c6f697cd47
This commit is contained in:
parent
3b850e0c6f
commit
fa5d2f3edf
5 changed files with 996 additions and 42 deletions
|
@ -16509,6 +16509,440 @@
|
|||
*: "Remaining"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHOW_FIRST_LETTER
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "First Letter"
|
||||
</source>
|
||||
<dest>
|
||||
*: "First Letter"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "First Letter"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHOW_BY_FIRST_LETTER
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "By First Letter..."
|
||||
</source>
|
||||
<dest>
|
||||
*: "By First Letter..."
|
||||
</dest>
|
||||
<voice>
|
||||
*: "By First Letter"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHOW_ARTISTS_BY_FIRST_LETTER
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Artists by First Letter"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Artists by First Letter"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Artists by First Letter"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHOW_ALBUMS_BY_FIRST_LETTER
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Albums by First Letter"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Albums by First Letter"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Albums by First Letter"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHOW_TRACKS_BY_FIRST_LETTER
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Tracks by First Letter"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Tracks by First Letter"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Tracks by First Letter"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_ARTISTS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Artists"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Artists"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Artists"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_ALBUMS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Albums"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Albums"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Albums"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_TRACKS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Tracks"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Tracks"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Tracks"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHUFFLE_SONGS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Shuffle Songs"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Shuffle Songs"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Shuffle Songs"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_FILENAME
|
||||
desc: Database and recording menus
|
||||
user: core
|
||||
<source>
|
||||
*: "Filename"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Filename"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Filename"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_TITLE_WITH_DURATION
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Title (with track duration)"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Title (with track duration)"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Title with track duration"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_USER_RATING
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "User Rating"
|
||||
</source>
|
||||
<dest>
|
||||
*: "User Rating"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "User Rating"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SEARCH
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Search"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Search"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Search"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SEARCH_BY
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Search by..."
|
||||
</source>
|
||||
<dest>
|
||||
*: "Search by..."
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Search by"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_RECENTLY_ADDED
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Recently Added"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Recently Added"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Recently Added"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PLAYBACK_HISTORY
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Playback History"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Playback History"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Playback History"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_CUSTOM_MENU
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Custom menu"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Custom menu"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Custom menu"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SAME_AS_CURRENT
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Same as currently played track"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Same as currently played track"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Same as currently played track"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_DIRECTORY
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Directory"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Directory"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Directory"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_ALBUMS_BY_YEAR
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Albums by Year"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Albums by Year"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Albums by Year"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_ALBUMS_BETWEEN_YEARS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Albums between Years"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Albums between Years"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Albums between Years"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_ARTISTS_BETWEEN_YEARS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Artists between Years"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Artists between Years"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Artists between Years"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_MOST_PLAYED
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Most played (Plays|Score)"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Most played (Plays|Score)"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Most played by Plays then by Score"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_RECENTLY_PLAYED_TRACKS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Recently played tracks"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Recently played tracks"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Recently played tracks"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_NEVER_PLAYED_TRACKS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Never played tracks"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Never played tracks"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Never played tracks"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_FAVOURITE_ARTISTS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Favourite artists"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Favourite artists"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Favourite artists"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_FAVOURITE_ALBUMS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Favourite albums"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Favourite albums"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Favourite albums"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_RECENT_FAVOURITES
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Recent favourites"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Recent favourites"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Recent favourites"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_NEW_FAVOURITES
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "New favourites"
|
||||
</source>
|
||||
<dest>
|
||||
*: "New favourites"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "New favourites"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_FORGOTTEN_FAVOURITES
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Forgotten favourites"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Forgotten favourites"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Forgotten favourites"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_TRACKS_BY
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Tracks by"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Tracks by"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Tracks by"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_VIEW_ALBUMART
|
||||
desc: WPS context menu
|
||||
|
|
|
@ -373,10 +373,10 @@
|
|||
*: "Now Playing"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Lecture en cours"
|
||||
*: "En lecture"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Lecture en cours"
|
||||
*: "En lecture"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
@ -16417,6 +16417,439 @@
|
|||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHOW_FIRST_LETTER
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "First Letter"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Première Lettre"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Première Lettre"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHOW_BY_FIRST_LETTER
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "By First Letter..."
|
||||
</source>
|
||||
<dest>
|
||||
*: "Par Première Lettre..."
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Par Première Lettre"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHOW_ARTISTS_BY_FIRST_LETTER
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Artists by First Letter"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Artistes par Première Lettre"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Artistes par Première Lettre"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHOW_ALBUMS_BY_FIRST_LETTER
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Albums by First Letter"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Albums par Première Lettre"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Albums par Première Lettre"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHOW_TRACKS_BY_FIRST_LETTER
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Tracks by First Letter"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Pistes par Première Lettre"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Pistes par Première Lettre"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_ARTISTS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Artists"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Artistes"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Artistes"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_ALBUMS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Albums"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Albums"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Albums"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_TRACKS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Tracks"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Pistes"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Pistes"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SHUFFLE_SONGS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Shuffle Songs"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Mix de morceaux"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Mix de morceaux"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_FILENAME
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Filename"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Nom du fichier"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Nom du fichier"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_TITLE_WITH_DURATION
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Title (with track duration)"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Titre (avec durée de la piste)"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Titre avec durée de la piste"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_USER_RATING
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "User Rating"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Note Utilisateur"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Note Utilisateur"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SEARCH
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Search"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Rechercher"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Rechercher"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SEARCH_BY
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Search by..."
|
||||
</source>
|
||||
<dest>
|
||||
*: "Rechercher par..."
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Rechercher par"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_RECENTLY_ADDED
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Recently Added"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Récemment Ajoutées"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Récemment Ajoutées"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PLAYBACK_HISTORY
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Playback History"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Historique des lectures"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Historique des lectures"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_CUSTOM_MENU
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Custom menu"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Menu personnalisé"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Menu personnalisé"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_SAME_AS_CURRENT
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Same as currently played track"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Semblable à la piste en cours de lecture"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Semblable à la piste en cours de lecture"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_DIRECTORY
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Directory"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Répertoire"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Répertoire"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_ALBUMS_BY_YEAR
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Albums by Year"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Albums par Année"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Albums par Année"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_ALBUMS_BETWEEN_YEARS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Albums between Years"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Albums entre des Années"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Albums entre des Années"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_ARTISTS_BETWEEN_YEARS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Artists between Years"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Artistes entre des Années"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Artistes entre des Années"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_MOST_PLAYED
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Most played (Plays|Score)"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Les plus jouées (Nombre|Score)"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Les plus jouées par Nombre puis par Score"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_RECENTLY_PLAYED_TRACKS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Recently played tracks"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Pistes récemment jouées"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Pistes récemment jouées"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_NEVER_PLAYED_TRACKS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Never played tracks"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Pistes jamais jouées"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Pistes jamais jouées"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_FAVOURITE_ARTISTS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Favourite artists"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Artistes favoris"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Artistes favoris"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_FAVOURITE_ALBUMS
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Favourite albums"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Albums favoris"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Albums favoris"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_RECENT_FAVOURITES
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Recent favourites"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Favoris récents"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Favoris récents"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_NEW_FAVOURITES
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "New favourites"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Nouveaux favoris"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Nouveaux favoris"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTORY_FORGOTTEN_FAVOURITES
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Forgotten favourites"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Favoris oubliés"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Favoris oubliés"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_TRACKS_BY
|
||||
desc: Database menu
|
||||
user: core
|
||||
<source>
|
||||
*: "Tracks by"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Pistes par"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Pistes par"
|
||||
</voice>
|
||||
</phrase>
|
||||
id: LANG_RESET_EQUALIZER
|
||||
desc: in the equalizer settings menu
|
||||
user: core
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
# If you only want to add menus and don't need to modify the default
|
||||
# ones, you can edit "/.rockbox/tagnavi_custom.config" instead, which
|
||||
# is included by this file and will not be overwritten automatically.
|
||||
#
|
||||
# Please note that modifying any menu labels/titles may result in them
|
||||
# not being translated or voiced.
|
||||
|
||||
# Basic format declarations
|
||||
%format "fmt_title" "%s - %02d:%02d (%s)" basename Lm Ls filename ? title == "[Untagged]"
|
||||
|
@ -26,20 +29,20 @@
|
|||
%include "/.rockbox/tagnavi_custom.config"
|
||||
|
||||
#
|
||||
# === Begin of "A to Z" sub menus
|
||||
# === Begin of "First Letter" sub menus
|
||||
#
|
||||
|
||||
# Define the A to Z Artist sub menu
|
||||
%byfirstletter "custom_artist" "Artist A to Z" "canonicalartist"
|
||||
# Define the A to Z album sub menu
|
||||
%byfirstletter "custom_album" "Album A to Z" "album"
|
||||
# Define the A to Z track sub menu
|
||||
%byfirstletter "custom_track" "Track A to Z" "title"
|
||||
# Define the First Letter Artist sub menu
|
||||
%byfirstletter "custom_artist" "Artists by First Letter" "canonicalartist"
|
||||
# Define the First Letter album sub menu
|
||||
%byfirstletter "custom_album" "Albums by First Letter" "album"
|
||||
# Define the First Letter track sub menu
|
||||
%byfirstletter "custom_track" "Tracks by First Letter" "title"
|
||||
|
||||
# ^ An empy line ends the menu
|
||||
|
||||
# Define the A to Z sub menu
|
||||
%menu_start "a2z" "A to Z..."
|
||||
# Define the First Letter sub menu
|
||||
%menu_start "a2z" "By First Letter..."
|
||||
"Artists" ==> "custom_artist"
|
||||
"Albums" ==> "custom_album"
|
||||
"Tracks" ==> "custom_track"
|
||||
|
@ -54,24 +57,24 @@
|
|||
"Album Artist" -> albumartist ? albumartist ~ "" -> album -> title = "fmt_title"
|
||||
"Album" -> album ? album ~ "" -> title = "fmt_title"
|
||||
"Title" -> title = "fmt_title" ? title ~ ""
|
||||
"Album by year" -> album ? year = "" -> title = "fmt_title"
|
||||
"Artist between years" -> canonicalartist ? year >= "" & year <= "" -> album -> title = "fmt_title"
|
||||
"Album between years" -> album ? year >= "" & year <= "" -> title = "fmt_title"
|
||||
"Albums by Year" -> album ? year = "" -> title = "fmt_title"
|
||||
"Albums between Years" -> album ? year >= "" & year <= "" -> title = "fmt_title"
|
||||
"Artists between Years" -> canonicalartist ? year >= "" & year <= "" -> album -> title = "fmt_title"
|
||||
"Filename" -> filename ? filename ~ ""
|
||||
"Score" -> title = "fmt_score" ? autoscore > ""
|
||||
"User Rating" -> title = "fmt_rating" ? rating > ""
|
||||
"Comment" -> album ? comment ~ "" -> title = "fmt_title"
|
||||
|
||||
# Define the "same as current" sub menu
|
||||
%menu_start "same" "Same as current"
|
||||
# Define the "Same as currently played track" sub menu
|
||||
%menu_start "same" "Same as currently played track"
|
||||
"Directory" -> title ? filename ^ "#directory#"
|
||||
"Title" -> title = "fmt_title" ? title = "#title#"
|
||||
"Artist" -> album ? artist = "#artist#" | artist = "#albumartist#" | albumartist = "#artist#" | albumartist = "#albumartist#" -> title = "fmt_title"
|
||||
"Artist" -> album ? artist = "#artist#" | artist = "#albumartist#" | albumartist = "#artist#" | albumartist = "#albumartist#" -> title = "fmt_title"
|
||||
"Album" -> title = "fmt_title" ? album = "#album#"
|
||||
"Composer" -> title = "fmt_title" ? composer = "#composer#"
|
||||
|
||||
# Define the runtime sub menu
|
||||
%menu_start "runtime" "Play history"
|
||||
%menu_start "runtime" "Playback History"
|
||||
"Most played (Plays|Score)" -> title = "fmt_mostplayed" ? playcount > "0"
|
||||
"Recently played tracks" -> title = "fmt_lastplayed" ? playcount > "0"
|
||||
"Never played tracks" -> canonicalartist ? playcount == "0" -> album -> title = "fmt_title"
|
||||
|
@ -85,7 +88,7 @@
|
|||
%menu_start "track" "Tracks by"
|
||||
"Filename" -> basename
|
||||
"Title" -> title
|
||||
"Title mm:ss" -> title = "fmt_alphanum_title"
|
||||
"Title (with track duration)" -> title = "fmt_alphanum_title"
|
||||
|
||||
#
|
||||
# === Begin of main menu
|
||||
|
@ -99,15 +102,15 @@
|
|||
"Genre" -> genre -> canonicalartist -> album -> title = "fmt_title"
|
||||
"Year" -> year ? year > "0" -> canonicalartist -> album -> title = "fmt_title"
|
||||
"Composer" -> composer -> album -> title = "fmt_title"
|
||||
"A to Z" ==> "a2z"
|
||||
"Track" ==> "track"
|
||||
"First Letter" ==> "a2z"
|
||||
"Tracks by" ==> "track"
|
||||
"Shuffle Songs" ~> title = "fmt_title"
|
||||
"Search" ==> "search"
|
||||
"User Rating" -> rating -> title = "fmt_title"
|
||||
"Recently Added" -> album ? entryage < "4" & commitid > "0" -> title = "fmt_title"
|
||||
"History" ==> "runtime"
|
||||
"Same as current" ==> "same"
|
||||
"Custom view" ==> "custom"
|
||||
"Playback History" ==> "runtime"
|
||||
"Same as currently played track" ==> "same"
|
||||
"Custom menu" ==> "custom"
|
||||
|
||||
# And finally set main menu as our root menu
|
||||
%root_menu "main"
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
* support the tag cache interface.
|
||||
*/
|
||||
|
||||
/*#define LOGF_ENABLE*/
|
||||
//#define LOGF_ENABLE
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -58,6 +58,7 @@
|
|||
#include "panic.h"
|
||||
#include "onplay.h"
|
||||
#include "plugin.h"
|
||||
#include "language.h"
|
||||
|
||||
#define str_or_empty(x) (x ? x : "(NULL)")
|
||||
|
||||
|
@ -176,7 +177,8 @@ static int format_count;
|
|||
|
||||
#define MENUENTRY_MAX_NAME 64
|
||||
struct menu_entry {
|
||||
char name[MENUENTRY_MAX_NAME];
|
||||
char _name[MENUENTRY_MAX_NAME];
|
||||
const unsigned char *name;
|
||||
int type;
|
||||
struct search_instruction {
|
||||
char name[MENUENTRY_MAX_NAME];
|
||||
|
@ -191,7 +193,8 @@ struct menu_entry {
|
|||
};
|
||||
|
||||
struct menu_root {
|
||||
char title[MENUENTRY_MAX_NAME];
|
||||
char _title[MENUENTRY_MAX_NAME];
|
||||
const unsigned char *title;
|
||||
char id[MAX_MENU_ID_SIZE];
|
||||
int itemcount;
|
||||
struct menu_entry *items[TAGMENU_MAX_ITEMS];
|
||||
|
@ -228,7 +231,11 @@ static int move_callback(int handle, void* current, void* new)
|
|||
ptrdiff_t diff = new - current;
|
||||
|
||||
if (menu)
|
||||
{
|
||||
if ((char *) menu->title == (char *) menu->_title)
|
||||
UPDATE(menu->title, diff);
|
||||
UPDATE(menu, diff);
|
||||
}
|
||||
|
||||
if (csi)
|
||||
UPDATE(csi, diff);
|
||||
|
@ -251,8 +258,12 @@ static int move_callback(int handle, void* current, void* new)
|
|||
UPDATE(mentry->si.clause[k][l], diff);
|
||||
}
|
||||
}
|
||||
if ((char *) menuroot->items[j]->name == (char *) menuroot->items[j]->_name)
|
||||
UPDATE(menuroot->items[j]->name, diff);
|
||||
UPDATE(menuroot->items[j], diff);
|
||||
}
|
||||
if ((char *) menus[i]->title == (char *) menus[i]->_title)
|
||||
UPDATE(menus[i]->title, diff);
|
||||
UPDATE(menus[i], diff);
|
||||
}
|
||||
|
||||
|
@ -796,12 +807,26 @@ static bool parse_search(struct menu_entry *entry, const char *str)
|
|||
strp = str;
|
||||
|
||||
/* Parse entry name */
|
||||
if (get_token_str(entry->name, sizeof entry->name) < 0)
|
||||
if (get_token_str(entry->_name, sizeof entry->_name) < 0)
|
||||
{
|
||||
logf("No name found.");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Attempt to entry name to lang_id for voicing/translation
|
||||
(excepted for single character entries like those in the 'First Letter' menus)
|
||||
*/
|
||||
if (entry->_name[0] != '\0' && entry->_name[1] != '\0')
|
||||
{
|
||||
int lang_id = lang_english_to_id(entry->_name);
|
||||
if (lang_id >= 0)
|
||||
entry->name = ID2P(lang_id);
|
||||
else
|
||||
entry->name = entry->_name;
|
||||
}
|
||||
else
|
||||
entry->name = entry->_name;
|
||||
|
||||
/* Parse entry type */
|
||||
if (get_tag(&entry->type) <= 0)
|
||||
return false;
|
||||
|
@ -1223,12 +1248,20 @@ static int parse_line(int n, char *buf, void *parameters)
|
|||
strmemccpy(menu->id, data, MAX_MENU_ID_SIZE);
|
||||
}
|
||||
|
||||
if (get_token_str(menu->title, sizeof(menu->title)) < 0)
|
||||
if (get_token_str(menu->_title, sizeof(menu->_title)) < 0)
|
||||
{
|
||||
logf("%%menu_start title empty");
|
||||
return 0;
|
||||
}
|
||||
logf("menu: %s", menu->title);
|
||||
|
||||
/* Attempt to match title to lang_id for voicing/translation */
|
||||
int lang_id = lang_english_to_id(menu->_title);
|
||||
if (lang_id >= 0)
|
||||
menu->title = ID2P(lang_id);
|
||||
else
|
||||
menu->title = menu->_title;
|
||||
|
||||
logf("menu: %s id: %ld", P2STR(menu->title), P2ID(menu->title));
|
||||
|
||||
if (variable == menu_byfirstletter)
|
||||
{
|
||||
|
@ -1355,7 +1388,7 @@ static void tagtree_unload(struct tree_context *c)
|
|||
tree_unlock_cache(c);
|
||||
}
|
||||
|
||||
static bool initialize_tagtree(void) /* also used when user selects 'Reload' in 'custom view'*/
|
||||
static bool initialize_tagtree(void) /* also used when user selects 'Reload' in 'custom menu'*/
|
||||
{
|
||||
max_history_level = 0;
|
||||
format_count = 0;
|
||||
|
@ -1635,7 +1668,7 @@ static int retrieve_entries(struct tree_context *c, int offset, bool init)
|
|||
if (offset == 0)
|
||||
{
|
||||
dptr->newtable = TABLE_ALLSUBENTRIES;
|
||||
dptr->name = str(LANG_TAGNAVI_ALL_TRACKS);
|
||||
dptr->name = ID2P(LANG_TAGNAVI_ALL_TRACKS);
|
||||
dptr->customaction = ONPLAY_NO_CUSTOMACTION;
|
||||
dptr++;
|
||||
current_entry_count++;
|
||||
|
@ -1644,7 +1677,7 @@ static int retrieve_entries(struct tree_context *c, int offset, bool init)
|
|||
if (offset <= 1)
|
||||
{
|
||||
dptr->newtable = TABLE_NAVIBROWSE;
|
||||
dptr->name = str(LANG_TAGNAVI_RANDOM);
|
||||
dptr->name = ID2P(LANG_TAGNAVI_RANDOM);
|
||||
dptr->extraseek = -1;
|
||||
dptr->customaction = ONPLAY_NO_CUSTOMACTION;
|
||||
dptr++;
|
||||
|
@ -1864,7 +1897,12 @@ static int load_root(struct tree_context *c)
|
|||
|
||||
for (i = 0; i < menu->itemcount; i++)
|
||||
{
|
||||
dptr->name = menu->items[i]->name;
|
||||
|
||||
dptr->name = (char*)menu->items[i]->name;
|
||||
|
||||
logf( "%s loading menu %d name: %s, lang_id %ld", __func__, i,
|
||||
P2STR((unsigned char*)dptr->name),P2ID((unsigned char*)dptr->name));
|
||||
|
||||
switch (menu->items[i]->type)
|
||||
{
|
||||
case menu_next:
|
||||
|
@ -2062,9 +2100,13 @@ int tagtree_enter(struct tree_context* c, bool is_visible)
|
|||
csi = &menu->items[seek]->si;
|
||||
c->currextra = 0;
|
||||
|
||||
strmemccpy(current_title[c->currextra], dptr->name,
|
||||
unsigned char *name = dptr->name;
|
||||
|
||||
strmemccpy(current_title[c->currextra], P2STR(name),
|
||||
sizeof(current_title[0]));
|
||||
|
||||
logf("%s (ROOT) current title %s", __func__, P2STR(name));
|
||||
|
||||
/* Read input as necessary. */
|
||||
for (i = 0; i < csi->tagorder_count; i++)
|
||||
{
|
||||
|
@ -2157,9 +2199,11 @@ int tagtree_enter(struct tree_context* c, bool is_visible)
|
|||
else
|
||||
c->dirlevel--;
|
||||
|
||||
unsigned char *name = dptr->name;
|
||||
name = P2STR(name);
|
||||
logf("%s (NAVI/ALLSUB) current title %s", __func__, name);
|
||||
/* Update the statusbar title */
|
||||
strmemccpy(current_title[c->currextra], dptr->name,
|
||||
sizeof(current_title[0]));
|
||||
strmemccpy(current_title[c->currextra], name, sizeof(current_title[0]));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -2328,7 +2372,7 @@ static bool insert_all_playlist(struct tree_context *c,
|
|||
}
|
||||
|
||||
fill_randomly = n > slots_remaining;
|
||||
|
||||
|
||||
if (fill_randomly)
|
||||
{
|
||||
srand(current_tick);
|
||||
|
@ -2648,6 +2692,18 @@ char* tagtree_get_entry_name(struct tree_context *c, int id,
|
|||
struct tagentry *entry = tagtree_get_entry(c, id);
|
||||
if (!entry)
|
||||
return NULL;
|
||||
|
||||
unsigned char *name = entry->name;
|
||||
|
||||
int lang_id = P2ID(name);
|
||||
logf("%s: '%s' id: %d\n", __func__,
|
||||
P2STR(name), lang_id);
|
||||
if (lang_id >= 0)
|
||||
{
|
||||
strmemccpy(buf,P2STR(name), bufsize);
|
||||
return entry->name;
|
||||
}
|
||||
|
||||
strmemccpy(buf, entry->name, bufsize);
|
||||
return buf;
|
||||
}
|
||||
|
@ -2658,10 +2714,13 @@ char *tagtree_get_title(struct tree_context* c)
|
|||
switch (c->currtable)
|
||||
{
|
||||
case TABLE_ROOT:
|
||||
return menu->title;
|
||||
logf("%s (ROOT) %s", __func__, P2STR(menu->title));
|
||||
return P2STR(menu->title);
|
||||
|
||||
case TABLE_NAVIBROWSE:
|
||||
case TABLE_ALLSUBENTRIES:
|
||||
logf("%s (NAVI/ALLSUB) idx: %d %s", __func__,
|
||||
c->currextra, current_title[c->currextra]);
|
||||
return current_title[c->currextra];
|
||||
}
|
||||
|
||||
|
|
31
apps/tree.c
31
apps/tree.c
|
@ -210,7 +210,7 @@ static enum themable_icons tree_get_fileicon(int selected_item, void * data)
|
|||
static int tree_voice_cb(int selected_item, void * data)
|
||||
{
|
||||
struct tree_context * local_tc=(struct tree_context *)data;
|
||||
char *name;
|
||||
unsigned char *name;
|
||||
int attr=0;
|
||||
int customaction = ONPLAY_NO_CUSTOMACTION;
|
||||
#ifdef HAVE_TAGCACHE
|
||||
|
@ -222,6 +222,31 @@ static int tree_voice_cb(int selected_item, void * data)
|
|||
attr = tagtree_get_attr(local_tc);
|
||||
name = tagtree_get_entry_name(local_tc, selected_item, buf, sizeof(buf));
|
||||
customaction = tagtree_get_custom_action(local_tc);
|
||||
|
||||
/* See if name is an encoded ID, if it is, then speak it normally */
|
||||
int lang_id = P2ID(name);
|
||||
/*debugf("%s Found name %s id %d\n", __func__, P2STR(name), lang_id);*/
|
||||
if (lang_id >= 0)
|
||||
{
|
||||
talk_id(lang_id, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Otherwise, it is either a custom "header" or a database entry,
|
||||
so try to look up a talk clip for it. */
|
||||
|
||||
// XXX this needs further work, so disable it for now
|
||||
// -- need to distinguish between "headers" and entries
|
||||
// each entry type ("artist", "album", etc) should be delineated
|
||||
// so we can split the clips into subdirs.
|
||||
#if 0
|
||||
if (talk_file(LANG_DIR"/database/", NULL,
|
||||
P2STR(name), file_thumbnail_ext, NULL, true) > 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
// XXX fall back to spelling it out?
|
||||
#endif
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
@ -479,7 +504,7 @@ static int update_dir(void)
|
|||
if (*title == '\0')
|
||||
{
|
||||
/* Display "Files" for the root dir */
|
||||
title = str(LANG_DIR_BROWSER);
|
||||
title = ID2P(LANG_DIR_BROWSER);
|
||||
}
|
||||
icon = filetype_get_icon(ATTR_DIRECTORY);
|
||||
}
|
||||
|
@ -489,7 +514,7 @@ static int update_dir(void)
|
|||
|
||||
/* set title and icon, if nothing is set, clear the title
|
||||
* with NULL and icon as NOICON as the list is reused */
|
||||
gui_synclist_set_title(list, title, icon);
|
||||
gui_synclist_set_title(list, P2STR((unsigned char*)title), icon);
|
||||
|
||||
gui_synclist_set_nb_items(list, tc.filesindir);
|
||||
gui_synclist_set_icon_callback(list,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue