Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'Rockbox:master' into master

authored by

Tsiry Sandratraina and committed by
GitHub
8b388557 13662228

+3387 -1583
+13 -6
apps/gui/skin_engine/skin_tokens.c
··· 556 556 pid3 = state->nid3; 557 557 else 558 558 { 559 - static char filename_buf[MAX_PATH + 1]; 560 - fname = playlist_peek(offset, filename_buf, sizeof(filename_buf)); 559 + static struct mp3entry tempid3; /* Note: path gets passed to outside fns */ 560 + memset(&tempid3, 0, sizeof(struct mp3entry)); 561 + /*static char filename_buf[MAX_PATH + 1];removed g#5926 */ 562 + fname = playlist_peek(offset, tempid3.path, sizeof(tempid3.path)); 561 563 *filename = (char*)fname; 562 - static struct mp3entry tempid3; 564 + 563 565 if ( 564 566 #if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE) 565 - tagcache_fill_tags(&tempid3, fname) || 567 + tagcache_fill_tags(&tempid3, NULL) || 566 568 #endif 567 569 audio_peek_track(&tempid3, offset) 568 570 ) 569 571 { 570 572 pid3 = &tempid3; 571 573 } 574 + else /* failed */ 575 + { 576 + /* ensure *filename gets the path, audio_peek_track() cleared it */ 577 + fname = playlist_peek(offset, tempid3.path, sizeof(tempid3.path)); 578 + *filename = (char*)fname; 579 + } 572 580 } 581 + 573 582 return pid3; 574 583 } 575 584 ··· 710 719 return NULL; 711 720 712 721 id3 = get_mp3entry_from_offset(token->next? 1: offset, &filename); 713 - if (id3) 714 - filename = id3->path; 715 722 716 723 #if CONFIG_RTC 717 724 struct tm* tm = NULL;
+29 -1
apps/lang/chinese-simp.lang
··· 16464 16464 desc: a summary splash screen that appear on the database browser when you try to create a playlist from the database browser that exceeds your system limit 16465 16465 user: core 16466 16466 <source> 16467 - *: "Selection too big, %d random tracks will be picked from it" 16467 + *: "Selection too big, %d random tracks will be selected" 16468 16468 </source> 16469 16469 <dest> 16470 16470 *: "选择了太多,将从中随机选取%d首" ··· 16473 16473 *: "选择了太多,将从中选择更少曲目" 16474 16474 </voice> 16475 16475 </phrase> 16476 + <phrase> 16477 + id: LANG_DISPLAY_TITLEALBUM_FROMTAGS 16478 + desc: track display options 16479 + user: core 16480 + <source> 16481 + *: "Title & Album from ID3 tags" 16482 + </source> 16483 + <dest> 16484 + *: "ID3 标题&专辑信息" 16485 + </dest> 16486 + <voice> 16487 + *: "I D 3 标题与专辑信息" 16488 + </voice> 16489 + </phrase> 16490 + <phrase> 16491 + id: LANG_DISPLAY_TITLE_FROMTAGS 16492 + desc: track display options 16493 + user: core 16494 + <source> 16495 + *: "Title from ID3 tags" 16496 + </source> 16497 + <dest> 16498 + *: "ID3标题信息" 16499 + </dest> 16500 + <voice> 16501 + *: "I D 3 标题信息" 16502 + </voice> 16503 + </phrase>
+31 -3
apps/lang/english-us.lang
··· 16453 16453 desc: a summary splash screen that appear on the database browser when you try to create a playlist from the database browser that exceeds your system limit 16454 16454 user: core 16455 16455 <source> 16456 - *: "Selection too big, %d random tracks will be picked from it" 16456 + *: "Selection too big, %d random tracks will be selected" 16457 16457 </source> 16458 16458 <dest> 16459 - *: "Selection too big, %d random tracks will be picked from it" 16459 + *: "Selection too big, %d random tracks will be selected" 16460 16460 </dest> 16461 16461 <voice> 16462 - *: "Selection too big, fewer random tracks will be picked from it" 16462 + *: "Selection too big, fewer random tracks will be selected" 16463 + </voice> 16464 + </phrase> 16465 + <phrase> 16466 + id: LANG_DISPLAY_TITLEALBUM_FROMTAGS 16467 + desc: track display options 16468 + user: core 16469 + <source> 16470 + *: "Title & Album from ID3 tags" 16471 + </source> 16472 + <dest> 16473 + *: "Title & Album from ID3 tags" 16474 + </dest> 16475 + <voice> 16476 + *: "Title and Album from tags" 16477 + </voice> 16478 + </phrase> 16479 + <phrase> 16480 + id: LANG_DISPLAY_TITLE_FROMTAGS 16481 + desc: track display options 16482 + user: core 16483 + <source> 16484 + *: "Title from ID3 tags" 16485 + </source> 16486 + <dest> 16487 + *: "Title from ID3 tags" 16488 + </dest> 16489 + <voice> 16490 + *: "Title from tags" 16463 16491 </voice> 16464 16492 </phrase>
+28
apps/lang/english.lang
··· 2032 2032 </voice> 2033 2033 </phrase> 2034 2034 <phrase> 2035 + id: LANG_DISPLAY_TITLEALBUM_FROMTAGS 2036 + desc: track display options 2037 + user: core 2038 + <source> 2039 + *: "Title & Album from ID3 tags" 2040 + </source> 2041 + <dest> 2042 + *: "Title & Album from ID3 tags" 2043 + </dest> 2044 + <voice> 2045 + *: "Title and Album from tags" 2046 + </voice> 2047 + </phrase> 2048 + <phrase> 2049 + id: LANG_DISPLAY_TITLE_FROMTAGS 2050 + desc: track display options 2051 + user: core 2052 + <source> 2053 + *: "Title from ID3 tags" 2054 + </source> 2055 + <dest> 2056 + *: "Title from ID3 tags" 2057 + </dest> 2058 + <voice> 2059 + *: "Title from tags" 2060 + </voice> 2061 + </phrase> 2062 + <phrase> 2035 2063 id: LANG_BUILDING_DATABASE 2036 2064 desc: splash database building progress 2037 2065 user: core
+2006 -596
apps/lang/francais.lang
··· 32 32 # - Clément Pit-Claudel 33 33 # - Michaël Burtin 34 34 # - Olivier Kaloudoff 35 + # - Jaussoin Timothée 35 36 # 36 37 # Original comments below: 37 38 # ··· 182 183 *: "Chargement... %d%% fait (%s)" 183 184 </dest> 184 185 <voice> 185 - *: "" 186 + *: "Chargement... %d%% fait (%s)" 186 187 </voice> 187 188 </phrase> 188 189 <phrase> ··· 276 277 <source> 277 278 *: "PLAY = Yes" 278 279 cowond2*: "MENU, or top-right = Yes" 279 - creativezen*: "SELECT = Yes" 280 - gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Yes" 280 + creativezen*,gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Yes" 281 281 iriverh100,iriverh120,iriverh300: "NAVI = Yes" 282 282 mrobe500: "PLAY, POWER, or top-right = Yes" 283 283 vibe500: "OK = Yes" 284 284 </source> 285 285 <dest> 286 286 *: "PLAY = Oui" 287 - archosplayer: "(PLAY/STOP)" 288 287 cowond2*: "MENU ou en haut à gauche = Oui" 289 - creativezen*: "SELECT = Oui" 290 - gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Oui" 288 + creativezen*,gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Oui" 291 289 iriverh100,iriverh120,iriverh300: "NAVI = Oui" 292 290 mrobe500: "PLAY, POWER, ou en haut à gauche = Oui" 293 291 vibe500: "OK = Oui" ··· 305 303 </source> 306 304 <dest> 307 305 *: "Autres = Non" 308 - archosplayer: none 309 306 </dest> 310 307 <voice> 311 308 *: "" 312 - archosplayer: none 313 309 </voice> 314 310 </phrase> 315 311 <phrase> ··· 571 567 </voice> 572 568 </phrase> 573 569 <phrase> 574 - id: LANG_BOOKMARK_CONTEXT_DELETE 575 - desc: bookmark context menu, delete this bookmark 576 - user: core 577 - <source> 578 - *: "Delete" 579 - </source> 580 - <dest> 581 - *: "Supprimer" 582 - </dest> 583 - <voice> 584 - *: "Supprimer" 585 - </voice> 586 - </phrase> 587 - <phrase> 588 570 id: LANG_AUTO_BOOKMARK_QUERY 589 571 desc: prompt for user to decide to create an bookmark 590 572 user: core ··· 726 708 </phrase> 727 709 <phrase> 728 710 id: LANG_CHANNEL_STEREO 729 - desc: in sound_settings 711 + desc: in sound_settings and radio screen 730 712 user: core 731 713 <source> 732 714 *: "Stereo" ··· 740 722 </phrase> 741 723 <phrase> 742 724 id: LANG_CHANNEL_MONO 743 - desc: in sound_settings 725 + desc: in sound_settings and radio screen 744 726 user: core 745 727 <source> 746 728 *: "Mono" ··· 1022 1004 </voice> 1023 1005 </phrase> 1024 1006 <phrase> 1025 - id: LANG_EQUALIZER_EDIT_MODE 1026 - desc: in the equalizer settings menu 1027 - user: core 1028 - <source> 1029 - *: "Edit mode: %s" 1030 - </source> 1031 - <dest> 1032 - *: "Mode édition : %s" 1033 - </dest> 1034 - <voice> 1035 - *: "" 1036 - </voice> 1037 - </phrase> 1038 - <phrase> 1039 1007 id: LANG_EQUALIZER_GAIN_ITEM 1040 1008 desc: in the equalizer settings menu 1041 1009 user: core ··· 1527 1495 *: "ReplayGain" 1528 1496 </dest> 1529 1497 <voice> 1530 - *: "Replaygain" 1498 + *: "ReplayGain" 1531 1499 </voice> 1532 1500 </phrase> 1533 1501 <phrase> ··· 1717 1685 </phrase> 1718 1686 <phrase> 1719 1687 id: LANG_AUDIOSCROBBLER 1720 - desc: "Last.fm Log" in the playback menu 1688 + desc: "Last.fm Logger" in Plugin/apps/scrobbler 1721 1689 user: core 1722 1690 <source> 1723 - *: "Last.fm Log" 1691 + *: "Last.fm Logger" 1724 1692 </source> 1725 1693 <dest> 1726 - *: "Log Last.fm" 1694 + *: "Journaux Last.fm" 1727 1695 </dest> 1728 1696 <voice> 1729 - *: "Log Last.fm" 1697 + *: "Journaux Last.fm" 1730 1698 </voice> 1731 1699 </phrase> 1732 1700 <phrase> ··· 2002 1970 </dest> 2003 1971 <voice> 2004 1972 *: "Chemin complet" 1973 + </voice> 1974 + </phrase> 1975 + <phrase> 1976 + id: LANG_DISPLAY_TITLEALBUM_FROMTAGS 1977 + desc: track display options 1978 + user: core 1979 + <source> 1980 + *: "Title & Album from ID3 tags" 1981 + </source> 1982 + <dest> 1983 + *: "Titre & Album depuis les tags ID3" 1984 + </dest> 1985 + <voice> 1986 + *: "Titre et Album depuis les tags" 1987 + </voice> 1988 + </phrase> 1989 + <phrase> 1990 + id: LANG_DISPLAY_TITLE_FROMTAGS 1991 + desc: track display options 1992 + user: core 1993 + <source> 1994 + *: "Title from ID3 tags" 1995 + </source> 1996 + <dest> 1997 + *: "Titre depuis les tags ID3" 1998 + </dest> 1999 + <voice> 2000 + *: "Titre depuis les tags" 2005 2001 </voice> 2006 2002 </phrase> 2007 2003 <phrase> ··· 2017 2013 </source> 2018 2014 <dest> 2019 2015 *: "Création base de données... %d trouvés (OFF = retour)" 2020 - archosplayer: "Création BD %d trouvés" 2021 2016 gigabeat*,iaudiom5,iaudiox5,mrobe100,samsungyh*: "Création base de données... %d trouvés (LEFT = retour)" 2022 2017 gogearsa9200: "Création base de données... %d trouvés (REW = retour)" 2023 2018 ipod*,iriverh10,iriverh10_5gb,sansac200*,sansae200*,sansafuze*,vibe500: "Création base de données... %d trouvés (PREV = retour)" ··· 2032 2027 desc: a summary splash screen that appear on the database browser when you try to create a playlist from the database browser that exceeds your system limit 2033 2028 user: core 2034 2029 <source> 2035 - *: "Selection too big, %d random tracks will be picked from it" 2030 + *: "Selection too big, %d random tracks will be selected" 2036 2031 </source> 2037 2032 <dest> 2038 - *: "Selection trop grande, %d pistes seront sélectionnées aléatoirement depuis celle-ci" 2033 + *: "Selection trop grande, %d pistes seront sélectionnées aléatoirement" 2039 2034 </dest> 2040 2035 <voice> 2041 - *: "Selection trop grande, donc des pistes seront sélectionnées aléatoirement depuis celle-ci" 2036 + *: "Selection trop grande, donc des pistes seront sélectionnées aléatoirement" 2042 2037 </voice> 2043 2038 </phrase> 2044 2039 <phrase> ··· 2307 2302 desc: in lcd settings 2308 2303 user: core 2309 2304 <source> 2310 - *: none 2305 + *: "Backlight on Lock" 2311 2306 hold_button: "Backlight on Hold" 2312 2307 </source> 2313 2308 <dest> 2314 - *: none 2309 + *: "Backlight on Lock" 2315 2310 hold_button: "Rétro-éclairage quand touches verrouillées" 2316 2311 </dest> 2317 2312 <voice> 2318 - *: none 2313 + *: "Backlight on Lock" 2319 2314 hold_button: "Rétro-éclairage quand touches verrouillées" 2320 2315 </voice> 2321 2316 </phrase> ··· 2984 2979 </source> 2985 2980 <dest> 2986 2981 *: "Indicateur de niveau des pics" 2987 - masd: none 2988 2982 </dest> 2989 2983 <voice> 2990 2984 *: "Indicateur de niveau des pics" 2991 - masd: none 2992 2985 </voice> 2993 2986 </phrase> 2994 2987 <phrase> ··· 3000 2993 </source> 3001 2994 <dest> 3002 2995 *: "Persistance marqueur seuil max." 3003 - masd: none 3004 2996 </dest> 3005 2997 <voice> 3006 2998 *: "Persistance marqueur seuil max." 3007 - masd: none 3008 2999 </voice> 3009 3000 </phrase> 3010 3001 <phrase> ··· 3016 3007 </source> 3017 3008 <dest> 3018 3009 *: "Temps de persistance du pic" 3019 - masd: none 3020 3010 </dest> 3021 3011 <voice> 3022 3012 *: "Temps de persistance du pic" 3023 - masd: none 3024 3013 </voice> 3025 3014 </phrase> 3026 3015 <phrase> ··· 3032 3021 </source> 3033 3022 <dest> 3034 3023 *: "Infini" 3035 - masd: none 3036 3024 </dest> 3037 3025 <voice> 3038 3026 *: "Infini" 3039 - masd: none 3040 3027 </voice> 3041 3028 </phrase> 3042 3029 <phrase> ··· 3048 3035 </source> 3049 3036 <dest> 3050 3037 *: "Taux de baisse de l'indicateur" 3051 - masd: none 3052 3038 </dest> 3053 3039 <voice> 3054 3040 *: "Taux de baisse de l'indicateur" 3055 - masd: none 3056 3041 </voice> 3057 3042 </phrase> 3058 3043 <phrase> ··· 3064 3049 </source> 3065 3050 <dest> 3066 3051 *: "Echelle" 3067 - masd: none 3068 3052 </dest> 3069 3053 <voice> 3070 3054 *: "échelle" 3071 - masd: none 3072 3055 </voice> 3073 3056 </phrase> 3074 3057 <phrase> ··· 3080 3063 </source> 3081 3064 <dest> 3082 3065 *: "Logarithmique (dB)" 3083 - masd: none 3084 3066 </dest> 3085 3067 <voice> 3086 3068 *: "Logarithmique en décibel" 3087 - masd: none 3088 3069 </voice> 3089 3070 </phrase> 3090 3071 <phrase> ··· 3096 3077 </source> 3097 3078 <dest> 3098 3079 *: "Linéaire (%)" 3099 - masd: none 3100 3080 </dest> 3101 3081 <voice> 3102 3082 *: "Linéaire en pourcentage" 3103 - masd: none 3104 3083 </voice> 3105 3084 </phrase> 3106 3085 <phrase> ··· 3112 3091 </source> 3113 3092 <dest> 3114 3093 *: "Minimum de l'intervalle" 3115 - masd: none 3116 3094 </dest> 3117 3095 <voice> 3118 3096 *: "Minimum de l'intervalle" 3119 - masd: none 3120 3097 </voice> 3121 3098 </phrase> 3122 3099 <phrase> ··· 3128 3105 </source> 3129 3106 <dest> 3130 3107 *: "Maximum de l'intervalle" 3131 - masd: none 3132 3108 </dest> 3133 3109 <voice> 3134 3110 *: "Maximum de l'intervalle" 3135 - masd: none 3136 3111 </voice> 3137 3112 </phrase> 3138 3113 <phrase> ··· 3462 3437 <source> 3463 3438 *: none 3464 3439 battery_types: "Alkaline" 3440 + xduoox3: "Newer (2000 mAh)" 3465 3441 </source> 3466 3442 <dest> 3467 3443 *: none 3468 3444 battery_types: "Alcaline" 3445 + xduoox3: "Nouveau (2000 mAh)" 3469 3446 </dest> 3470 3447 <voice> 3471 3448 *: none 3472 3449 battery_types: "Alcaline" 3450 + xduoox3: "Nouveau 2000 milliampère heure" 3473 3451 </voice> 3474 3452 </phrase> 3475 3453 <phrase> ··· 3479 3457 <source> 3480 3458 *: none 3481 3459 battery_types: "NiMH" 3460 + xduoox3: "Older (1500 mAh)" 3482 3461 </source> 3483 3462 <dest> 3484 3463 *: none 3485 3464 battery_types: "NiMH" 3465 + xduoox3: "Nouveau (1500 mAh)" 3486 3466 </dest> 3487 3467 <voice> 3488 3468 *: none 3489 3469 battery_types: "Nickel metal hydride" 3470 + xduoox3: "Nouveau 1500 milliampère heure" 3490 3471 </voice> 3491 3472 </phrase> 3492 3473 <phrase> ··· 3676 3657 </dest> 3677 3658 <voice> 3678 3659 *: none 3679 - gigabeat*,gogearsa9200,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh100,iriverh10_5gb,iriverh120,iriverh300,mrobe100,rtc,sansac200*,sansae200*: "" 3660 + gigabeat*,gogearsa9200,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh100,iriverh10_5gb,iriverh120,iriverh300,mrobe100,rtc,samsungyh*,sansac200*,sansae200*: "" 3680 3661 </voice> 3681 3662 </phrase> 3682 3663 <phrase> ··· 4122 4103 </voice> 4123 4104 </phrase> 4124 4105 <phrase> 4125 - id: LANG_ALARM_MOD_SHUTDOWN 4126 - desc: The text that tells the user that the alarm time is ok and the device shuts off (for the RTC alarm mod). 4127 - user: core 4128 - <source> 4129 - *: none 4130 - alarm: "Alarm Set" 4131 - </source> 4132 - <dest> 4133 - *: none 4134 - alarm: "Réveil activé" 4135 - </dest> 4136 - <voice> 4137 - *: none 4138 - alarm: "Réveil activé" 4139 - </voice> 4140 - </phrase> 4141 - <phrase> 4142 4106 id: LANG_ALARM_MOD_ERROR 4143 4107 desc: The text that tells that the time is incorrect (for the RTC alarm mod). 4144 4108 user: core ··· 4156 4120 </voice> 4157 4121 </phrase> 4158 4122 <phrase> 4159 - id: LANG_ALARM_MOD_KEYS 4160 - desc: Shown key functions in alarm menu (for the RTC alarm mod). 4161 - user: core 4162 - <source> 4163 - *: none 4164 - alarm: "PLAY=Set OFF=Cancel" 4165 - gigabeats: "SELECT=Set POWER=Cancel" 4166 - ipod*: "SELECT=Set MENU=Cancel" 4167 - iriverh10,iriverh10_5gb: "SELECT=Set PREV=Cancel" 4168 - mpiohd300: "ENTER=Set MENU=Cancel" 4169 - sansafuzeplus: "SELECT=Set BACK=Cancel" 4170 - vibe500: "OK=Set C=Cancel" 4171 - </source> 4172 - <dest> 4173 - *: none 4174 - alarm: "PLAY=Valider OFF=Annuler" 4175 - gigabeats: "SELECT=Valider POWER=Annuler" 4176 - ipod*: "SELECT=Valider MENU=Annuler" 4177 - iriverh10,iriverh10_5gb: "SELECT=Valider PREV=Annuler" 4178 - mpiohd300: "ENTER=Valider MENU=Annuler" 4179 - sansafuzeplus: "SELECT=Valider BACK=Annuler" 4180 - vibe500: "OK=Valider C=Annuler" 4181 - </dest> 4182 - <voice> 4183 - *: none 4184 - alarm,ipod*: "" 4185 - </voice> 4186 - </phrase> 4187 - <phrase> 4188 4123 id: LANG_ALARM_MOD_DISABLE 4189 4124 desc: Announce that the RTC alarm has been turned off 4190 4125 user: core ··· 5380 5315 </voice> 5381 5316 </phrase> 5382 5317 <phrase> 5383 - id: LANG_RECORD_DIRECTORY 5384 - desc: in recording settings_menu 5385 - user: core 5386 - <source> 5387 - *: none 5388 - recording: "Directory" 5389 - </source> 5390 - <dest> 5391 - *: none 5392 - recording: "Répertoire" 5393 - </dest> 5394 - <voice> 5395 - *: none 5396 - recording: "Répertoire" 5397 - </voice> 5398 - </phrase> 5399 - <phrase> 5400 - id: LANG_SET_AS_REC_DIR 5401 - desc: used in the onplay menu to set a recording dir 5402 - user: core 5403 - <source> 5404 - *: none 5405 - recording: "Set As Recording Directory" 5406 - </source> 5407 - <dest> 5408 - *: none 5409 - recording: "Choisir comme dossier d'enreg." 5410 - </dest> 5411 - <voice> 5412 - *: none 5413 - recording: "Choisir comme dossier d'enregistrement" 5414 - </voice> 5415 - </phrase> 5416 - <phrase> 5417 5318 id: LANG_CLEAR_REC_DIR 5418 5319 desc: 5419 5320 user: core ··· 6037 5938 </source> 6038 5939 <dest> 6039 5940 *: "Tampon:" 6040 - archosplayer: "Tamp.:" 6041 5941 </dest> 6042 5942 <voice> 6043 5943 *: "Tampon" ··· 6050 5950 <source> 6051 5951 *: "Battery: %d%% %dh %dm" 6052 5952 ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm" 6053 - iriverifp7xx: "%d%% %dh %dm" 6054 5953 </source> 6055 5954 <dest> 6056 5955 *: "Batterie: %d%% %dh %dm" 6057 5956 ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm" 6058 - iriverifp7xx: "%d%% %dh %dm" 6059 5957 </dest> 6060 5958 <voice> 6061 5959 *: "Niveau de la batterie" ··· 6095 5993 user: core 6096 5994 <source> 6097 5995 *: "Int:" 5996 + hibylinux: "mSD:" 6098 5997 xduoox3: "mSD1:" 6099 5998 </source> 6100 5999 <dest> 6101 6000 *: "Int:" 6001 + hibylinux: "mSD:" 6102 6002 xduoox3: "mSD1:" 6103 6003 </dest> 6104 6004 <voice> 6105 6005 *: "Interne" 6006 + hibylinux: "micro S D" 6106 6007 xduoox3: "micro S D 1" 6107 6008 </voice> 6108 6009 </phrase> ··· 6112 6013 user: core 6113 6014 <source> 6114 6015 *: none 6115 - multivolume: "HD1" 6016 + hibylinux: "USB:" 6017 + multivolume: "HD1:" 6116 6018 sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" 6117 6019 xduoox3: "mSD2:" 6118 6020 </source> 6119 6021 <dest> 6120 6022 *: none 6121 - archosondio*: "MMC:" 6023 + hibylinux: "USB:" 6122 6024 multivolume: "DD1" 6123 6025 sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" 6124 6026 xduoox3: "mSD2:" 6125 6027 </dest> 6126 6028 <voice> 6127 6029 *: none 6128 - archosondio*: "M M C" 6030 + hibylinux: "U S B" 6129 6031 multivolume: "D D 1" 6130 6032 sansac200*,sansaclipplus,sansae200*,sansafuze*: "micro S D" 6131 6033 xduoox3: "micro S D 2" ··· 6216 6118 </voice> 6217 6119 </phrase> 6218 6120 <phrase> 6219 - id: LANG_INSERT 6220 - desc: in onplay menu. insert a track/playlist into dynamic playlist. 6221 - user: core 6222 - <source> 6223 - *: "Insert" 6224 - </source> 6225 - <dest> 6226 - *: "Insérer" 6227 - </dest> 6228 - <voice> 6229 - *: "Insérer" 6230 - </voice> 6231 - </phrase> 6232 - <phrase> 6233 - id: LANG_INSERT_FIRST 6234 - desc: in onplay menu. insert a track/playlist into dynamic playlist. 6235 - user: core 6236 - <source> 6237 - *: "Insert Next" 6238 - </source> 6239 - <dest> 6240 - *: "Insérer suivant" 6241 - </dest> 6242 - <voice> 6243 - *: "Insérer suivant" 6244 - </voice> 6245 - </phrase> 6246 - <phrase> 6247 - id: LANG_INSERT_LAST 6248 - desc: in onplay menu. append a track/playlist into dynamic playlist. 6249 - user: core 6250 - <source> 6251 - *: "Insert Last" 6252 - </source> 6253 - <dest> 6254 - *: "Insérer en dernier" 6255 - </dest> 6256 - <voice> 6257 - *: "Insérer en dernier" 6258 - </voice> 6259 - </phrase> 6260 - <phrase> 6261 - id: LANG_INSERT_SHUFFLED 6262 - desc: in onplay menu. insert a track/playlist randomly into dynamic playlist 6263 - user: core 6264 - <source> 6265 - *: "Insert Shuffled" 6266 - </source> 6267 - <dest> 6268 - *: "Insérer mélangé" 6269 - </dest> 6270 - <voice> 6271 - *: "Insérer mélangé" 6272 - </voice> 6273 - </phrase> 6274 - <phrase> 6275 6121 id: LANG_QUEUE 6276 6122 desc: The verb/action Queue 6277 6123 user: core ··· 6328 6174 </voice> 6329 6175 </phrase> 6330 6176 <phrase> 6331 - id: LANG_REPLACE 6332 - desc: in onplay menu. Replace the current playlist with a new one. 6333 - user: core 6334 - <source> 6335 - *: "Play Next" 6336 - </source> 6337 - <dest> 6338 - *: "Lire suivant (remplacer)" 6339 - </dest> 6340 - <voice> 6341 - *: "Lire suivant (remplacer)" 6342 - </voice> 6343 - </phrase> 6344 - <phrase> 6345 6177 id: LANG_PLAYLIST_INSERT_COUNT 6346 6178 desc: splash number of tracks inserted 6347 6179 user: core ··· 6408 6240 *: "Recherche... %d trouvé (%s)" 6409 6241 </dest> 6410 6242 <voice> 6411 - *: "" 6243 + *: "Recherche... %d trouvé (%s)" 6412 6244 </voice> 6413 6245 </phrase> 6414 6246 <phrase> ··· 6423 6255 </dest> 6424 6256 <voice> 6425 6257 *: "Remélanger" 6426 - </voice> 6427 - </phrase> 6428 - <phrase> 6429 - id: LANG_CATALOG_VIEW 6430 - desc: in onplay playlist catalogue submenu 6431 - user: core 6432 - <source> 6433 - *: "View Catalogue" 6434 - </source> 6435 - <dest> 6436 - *: "Afficher le catalogue" 6437 - </dest> 6438 - <voice> 6439 - *: "Afficher le catalogue" 6440 - </voice> 6441 - </phrase> 6442 - <phrase> 6443 - id: LANG_CATALOG_ADD_TO 6444 - desc: in onplay playlist catalogue submenu 6445 - user: core 6446 - <source> 6447 - *: "Add to Playlist" 6448 - </source> 6449 - <dest> 6450 - *: "Ajouter à la liste de lecture" 6451 - </dest> 6452 - <voice> 6453 - *: "Ajouter à la liste de lecture" 6454 6258 </voice> 6455 6259 </phrase> 6456 6260 <phrase> ··· 6804 6608 </voice> 6805 6609 </phrase> 6806 6610 <phrase> 6807 - id: LANG_ID3_ALBUM_GAIN 6808 - desc: in tag viewer 6809 - user: core 6810 - <source> 6811 - *: "Album Gain" 6812 - </source> 6813 - <dest> 6814 - *: "Gain par album" 6815 - </dest> 6816 - <voice> 6817 - *: "Gain par album" 6818 - </voice> 6819 - </phrase> 6820 - <phrase> 6821 6611 id: LANG_ID3_PATH 6822 6612 desc: in tag viewer 6823 6613 user: core ··· 7194 6984 </source> 7195 6985 <dest> 7196 6986 *: "Fin de la liste de lecture" 7197 - archosplayer: "Fin de la liste" 7198 6987 </dest> 7199 6988 <voice> 7200 6989 *: "Fin de la liste de lecture" ··· 7226 7015 </dest> 7227 7016 <voice> 7228 7017 *: "Aucune piste à reprendre" 7229 - </voice> 7230 - </phrase> 7231 - <phrase> 7232 - id: LANG_PLAYLIST_CONTROL_UPDATE_ERROR 7233 - desc: Playlist error 7234 - user: core 7235 - <source> 7236 - *: "Error updating playlist control file" 7237 - </source> 7238 - <dest> 7239 - *: "Erreur mise à jour fichier de contrôle de liste de lecture" 7240 - </dest> 7241 - <voice> 7242 - *: "Erreur mise à jour fichier de contrôle de liste de lecture" 7243 7018 </voice> 7244 7019 </phrase> 7245 7020 <phrase> ··· 7323 7098 *: "Mode:" 7324 7099 </dest> 7325 7100 <voice> 7326 - *: "Mode:" 7101 + *: "Mode" 7327 7102 </voice> 7328 7103 </phrase> 7329 7104 <phrase> ··· 7424 7199 </dest> 7425 7200 <voice> 7426 7201 *: none 7427 - iaudiom5,iaudiox5,iriverh100,iriverh120,iriverh300,recording,sansac200*,sansae200*: "" 7428 - </voice> 7429 - </phrase> 7430 - <phrase> 7431 - id: LANG_DB_INF 7432 - desc: -inf db for values below measurement 7433 - user: core 7434 - <source> 7435 - *: none 7436 - recording: "-inf" 7437 - </source> 7438 - <dest> 7439 - *: none 7440 - recording: "-inf" 7441 - </dest> 7442 - <voice> 7443 - *: none 7444 - recording: "Inifini négatif" 7202 + iaudiom5,iaudiox5,iriverh100,iriverh120,iriverh300,recording,samsungyh*,sansac200*,sansae200*,vibe500: "" 7445 7203 </voice> 7446 7204 </phrase> 7447 7205 <phrase> ··· 7565 7323 *: "Modèle incompatible" 7566 7324 </dest> 7567 7325 <voice> 7568 - *: "" 7326 + *: "Modèle incompatible" 7569 7327 </voice> 7570 7328 </phrase> 7571 7329 <phrase> ··· 7579 7337 *: "Version incompatible" 7580 7338 </dest> 7581 7339 <voice> 7582 - *: "" 7340 + *: "Version incompatible" 7583 7341 </voice> 7584 7342 </phrase> 7585 7343 <phrase> ··· 7590 7348 *: "Plugin returned error" 7591 7349 </source> 7592 7350 <dest> 7593 - *: "Erreur Retournée par le module d'extension" 7351 + *: "Erreur retournée par le module" 7594 7352 </dest> 7595 7353 <voice> 7596 - *: "" 7354 + *: "Erreur retournée par le module" 7597 7355 </voice> 7598 7356 </phrase> 7599 7357 <phrase> ··· 7667 7425 <voice> 7668 7426 *: none 7669 7427 charging: "Batterie: en charge" 7670 - </voice> 7671 - </phrase> 7672 - <phrase> 7673 - id: LANG_BATTERY_TRICKLE_CHARGE 7674 - desc: in info display, shows that trickle charge is running 7675 - user: core 7676 - <source> 7677 - *: none 7678 - charging: "Battery: Trickle Chg" 7679 - </source> 7680 - <dest> 7681 - *: none 7682 - charging: "Batterie: charge persistante" 7683 - </dest> 7684 - <voice> 7685 - *: none 7686 - charging: "Charge persistante de la batterie" 7687 7428 </voice> 7688 7429 </phrase> 7689 7430 <phrase> ··· 10587 10328 </voice> 10588 10329 </phrase> 10589 10330 <phrase> 10590 - id: LANG_SCROLLBAR_POSITION 10591 - desc: in Settings -> General -> Display -> Status-/Scrollbar 10592 - user: core 10593 - <source> 10594 - *: "Scroll Bar Position" 10595 - </source> 10596 - <dest> 10597 - *: "Position barre de défilement" 10598 - </dest> 10599 - <voice> 10600 - *: "Position de la barre de défilement" 10601 - </voice> 10602 - </phrase> 10603 - <phrase> 10604 10331 id: LANG_COMPRESSOR 10605 10332 desc: in sound settings 10606 10333 user: core ··· 10862 10589 </voice> 10863 10590 </phrase> 10864 10591 <phrase> 10865 - id: LANG_STATUSBAR_CUSTOM 10866 - desc: if this translation is compatible with LANG_CHANNEL_CUSTOM, then please use the same translation. it can be combined later then 10867 - user: core 10868 - <source> 10869 - *: "Custom" 10870 - </source> 10871 - <dest> 10872 - *: "Personnalisé" 10873 - </dest> 10874 - <voice> 10875 - *: "Personnalisé" 10876 - </voice> 10877 - </phrase> 10878 - <phrase> 10879 10592 id: VOICE_EXT_SBS 10880 10593 desc: spoken only, for file extension 10881 10594 user: core ··· 10924 10637 </voice> 10925 10638 </phrase> 10926 10639 <phrase> 10927 - id: LANG_INSERT_LAST_SHUFFLED 10928 - desc: in onplay menu. insert a playlist randomly at end of dynamic playlist 10929 - user: core 10930 - <source> 10931 - *: "Insert Last Shuffled" 10932 - </source> 10933 - <dest> 10934 - *: "Insérer mélangé en fin" 10935 - </dest> 10936 - <voice> 10937 - *: "Insérer mélangé en fin" 10938 - </voice> 10939 - </phrase> 10940 - <phrase> 10941 10640 id: LANG_QUEUE_LAST_SHUFFLED 10942 10641 desc: in onplay menu. queue a playlist randomly at end of dynamic playlist 10943 10642 user: core ··· 10996 10695 *: "Titre suivant:" 10997 10696 </dest> 10998 10697 <voice> 10999 - *: "Titre suivant:" 10698 + *: "Titre suivant" 11000 10699 </voice> 11001 10700 </phrase> 11002 10701 <phrase> ··· 11010 10709 *: "Suivant:" 11011 10710 </dest> 11012 10711 <voice> 11013 - *: "Suivant:" 10712 + *: "Suivant" 11014 10713 </voice> 11015 10714 </phrase> 11016 10715 <phrase> ··· 11531 11230 </voice> 11532 11231 </phrase> 11533 11232 <phrase> 11534 - id: LANG_SET_AS_START_DIR 11535 - desc: used in the onplay menu to set a starting browser dir 11536 - user: core 11537 - <source> 11538 - *: "Start File Browser Here" 11539 - </source> 11540 - <dest> 11541 - *: "Démarrer navigation fichiers ici" 11542 - </dest> 11543 - <voice> 11544 - *: "Démarrer navigation des fichiers ici" 11545 - </voice> 11546 - </phrase> 11547 - <phrase> 11548 11233 id: LANG_RESET_START_DIR 11549 11234 desc: reset the browser start directory 11550 11235 user: core ··· 11677 11362 </voice> 11678 11363 </phrase> 11679 11364 <phrase> 11680 - id: LANG_SET_AS_PLAYLISTCAT_DIR 11681 - desc: used in the onplay menu to set a playlist catalogue dir 11682 - user: core 11683 - <source> 11684 - *: "Set As Playlist Catalogue Directory" 11685 - </source> 11686 - <dest> 11687 - *: "Sélectionner comme répertoire des catalogues de listes de lecture" 11688 - </dest> 11689 - <voice> 11690 - *: "Sélectionner comme répertoire des catalogues de listes de lecture" 11691 - </voice> 11692 - </phrase> 11693 - <phrase> 11694 11365 id: LANG_LIST_LINE_PADDING 11695 11366 desc: list padding, in display settings 11696 11367 user: core ··· 11719 11390 </dest> 11720 11391 <voice> 11721 11392 *: "Enregistrer les changements ?" 11722 - </voice> 11723 - </phrase> 11724 - <phrase> 11725 - id: LANG_AUTOMATIC 11726 - desc: generic automatic 11727 - user: core 11728 - <source> 11729 - *: "Automatic" 11730 - </source> 11731 - <dest> 11732 - *: "Automatique" 11733 - </dest> 11734 - <voice> 11735 - *: "Automatique" 11736 11393 </voice> 11737 11394 </phrase> 11738 11395 <phrase> ··· 12310 11967 desc: Selective Actions 12311 11968 user: core 12312 11969 <source> 12313 - *: "Seek" 11970 + *: "Exempt Seek" 12314 11971 </source> 12315 11972 <dest> 12316 11973 *: "Chercher" ··· 12324 11981 desc: Selective Actions 12325 11982 user: core 12326 11983 <source> 12327 - *: "Play" 11984 + *: "Exempt Play" 12328 11985 </source> 12329 11986 <dest> 12330 11987 *: "Jouer" ··· 12366 12023 desc: Softlock behaviour setting 12367 12024 user: core 12368 12025 <source> 12369 - *: "Disable Notify" 12026 + *: "Disable Locked Reminders" 12370 12027 </source> 12371 12028 <dest> 12372 12029 *: "Désactiver les notifications" ··· 12436 12093 desc: Selective Actions 12437 12094 user: core 12438 12095 <source> 12439 - *: "Skip" 12096 + *: "Exempt Skip" 12440 12097 </source> 12441 12098 <dest> 12442 12099 *: "Passer" ··· 12495 12152 desc: playing time screen 12496 12153 user: core 12497 12154 <source> 12498 - *: "Playlist elapsed: %s / %s %ld%%" 12155 + *: "Playlist elapsed:" 12499 12156 </source> 12500 12157 <dest> 12501 - *: "Liste de lecture, temps écoulé: %s / %s %ld%%" 12158 + *: "Liste de lecture, temps écoulé :" 12502 12159 </dest> 12503 12160 <voice> 12504 12161 *: "Liste de lecture, temps écoulé" ··· 12509 12166 desc: playing time screen 12510 12167 user: core 12511 12168 <source> 12512 - *: "Track remaining: %s" 12169 + *: "Track remaining:" 12513 12170 </source> 12514 12171 <dest> 12515 - *: "Durée de piste restante: %s" 12172 + *: "Durée de piste restante :" 12516 12173 </dest> 12517 12174 <voice> 12518 12175 *: "Durée de piste restante" ··· 12523 12180 desc: playing time screen 12524 12181 user: core 12525 12182 <source> 12526 - *: "Track elapsed: %s / %s %ld%%" 12183 + *: "Track elapsed:" 12527 12184 </source> 12528 12185 <dest> 12529 - *: "Temps écoulé de la piste: %s / %s %ld%%" 12186 + *: "Temps écoulé de la piste :" 12530 12187 </dest> 12531 12188 <voice> 12532 12189 *: "Temps écoulé de la piste" ··· 12749 12406 </voice> 12750 12407 </phrase> 12751 12408 <phrase> 12752 - id: LANG_PROPERTIES_TITLE 12753 - desc: in properties plugin 12754 - user: core 12755 - <source> 12756 - *: "[Title]" 12757 - </source> 12758 - <dest> 12759 - *: "[Titre]" 12760 - </dest> 12761 - <voice> 12762 - *: "Titre" 12763 - </voice> 12764 - </phrase> 12765 - <phrase> 12766 12409 id: VOICE_PITCH_TIMESTRETCH_MODE 12767 12410 desc: spoken only 12768 12411 user: core ··· 12911 12554 *: "Réflexion en cours..." 12912 12555 </dest> 12913 12556 <voice> 12914 - *: "" 12557 + *: "Réflexion en cours..." 12915 12558 </voice> 12916 12559 </phrase> 12917 12560 <phrase> ··· 12947 12590 </phrase> 12948 12591 <phrase> 12949 12592 id: LANG_PLAYTIME_REMAINING 12950 - desc: playing time screen 12593 + desc: deprecated 12951 12594 user: core 12952 12595 <source> 12953 - *: "Playlist remaining: %s" 12596 + *: "" 12954 12597 </source> 12955 12598 <dest> 12956 - *: "Playlist remaining: %s" 12599 + *: "" 12957 12600 </dest> 12958 12601 <voice> 12959 - *: "Playlist remaining" 12602 + *: "" 12960 12603 </voice> 12961 12604 </phrase> 12962 12605 <phrase> ··· 13009 12652 *: "Display FPS" 13010 12653 </source> 13011 12654 <dest> 13012 - *: "Display FPS" 12655 + *: "Afficher les FPS" 13013 12656 </dest> 13014 12657 <voice> 13015 - *: "Display FPS" 12658 + *: "Afficher les FPS" 13016 12659 </voice> 13017 12660 </phrase> 13018 12661 <phrase> ··· 13023 12666 *: "Remote Control" 13024 12667 </source> 13025 12668 <dest> 13026 - *: "Remote Control" 12669 + *: "Télécommande" 13027 12670 </dest> 13028 12671 <voice> 13029 - *: "Remote Control" 12672 + *: "Télécommande" 13030 12673 </voice> 13031 12674 </phrase> 13032 12675 <phrase> ··· 13155 12798 *: "[Subdirs]" 13156 12799 </source> 13157 12800 <dest> 13158 - *: "[Subdirs]" 12801 + *: "[Sous-rep]" 13159 12802 </dest> 13160 12803 <voice> 13161 - *: "Subdirs" 12804 + *: "[Sous-rep]" 13162 12805 </voice> 13163 12806 </phrase> 13164 12807 <phrase> ··· 13197 12840 *: "Go to WPS" 13198 12841 </source> 13199 12842 <dest> 13200 - *: "Go to WPS" 12843 + *: "Aller au WPS" 13201 12844 </dest> 13202 12845 <voice> 13203 - *: "Go to WPS" 12846 + *: "Aller au WPS" 13204 12847 </voice> 13205 12848 </phrase> 13206 12849 <phrase> ··· 13211 12854 *: "Not a VBR file" 13212 12855 </source> 13213 12856 <dest> 13214 - *: "Not a VBR file" 13215 - </dest> 13216 - <voice> 13217 - *: "Not a VBR file" 13218 - </voice> 13219 - </phrase> 13220 - <phrase> 13221 - id: LANG_PROPERTIES_ALBUM 13222 - desc: in properties plugin 13223 - user: core 13224 - <source> 13225 - *: "[Album]" 13226 - </source> 13227 - <dest> 13228 - *: "[Album]" 12857 + *: "Ce n'est pas un fichier VBR" 13229 12858 </dest> 13230 12859 <voice> 13231 - *: "Album" 12860 + *: "Ce n'est pas un fichier VBR" 13232 12861 </voice> 13233 12862 </phrase> 13234 12863 <phrase> ··· 13253 12882 *: "Show album title" 13254 12883 </source> 13255 12884 <dest> 13256 - *: "Show album title" 12885 + *: "Afficher le titre de l'album" 13257 12886 </dest> 13258 12887 <voice> 13259 - *: "Show album title" 12888 + *: "Afficher le titre de l'album" 13260 12889 </voice> 13261 12890 </phrase> 13262 12891 <phrase> ··· 13264 12893 desc: playing time screen 13265 12894 user: core 13266 12895 <source> 13267 - *: "Average bitrate: %ld kbps" 12896 + *: "Average bitrate:" 13268 12897 </source> 13269 12898 <dest> 13270 - *: "Average bitrate: %ld kbps" 12899 + *: "Débit binaire moyen :" 13271 12900 </dest> 13272 12901 <voice> 13273 - *: "Average bit rate" 12902 + *: "Débit binaire moyen :" 13274 12903 </voice> 13275 12904 </phrase> 13276 12905 <phrase> ··· 13336 12965 </voice> 13337 12966 </phrase> 13338 12967 <phrase> 13339 - id: LANG_CLEAR_PLAYLIST 13340 - desc: in the pictureflow main menu 13341 - user: core 13342 - <source> 13343 - *: "Clear playlist" 13344 - </source> 13345 - <dest> 13346 - *: "Effacer la liste de lecture" 13347 - </dest> 13348 - <voice> 13349 - *: "Effacer la liste de lecture" 13350 - </voice> 13351 - </phrase> 13352 - <phrase> 13353 12968 id: VOICE_CHESSBOX_QUEENSIDE 13354 12969 desc: spoken only, for announcing chess moves 13355 12970 user: core ··· 13385 13000 *: "Playback Control" 13386 13001 </source> 13387 13002 <dest> 13388 - *: "Playback Control" 13003 + *: "Contrôle de lecture" 13389 13004 </dest> 13390 13005 <voice> 13391 - *: "Playback Control" 13006 + *: "Contrôle de lecture" 13392 13007 </voice> 13393 13008 </phrase> 13394 13009 <phrase> ··· 13489 13104 *: "File properties" 13490 13105 </source> 13491 13106 <dest> 13492 - *: "File properties" 13107 + *: "Propriétés du fichier" 13493 13108 </dest> 13494 13109 <voice> 13495 13110 *: "" ··· 13576 13191 *: "Move Item Down" 13577 13192 </source> 13578 13193 <dest> 13579 - *: "Move Item Down" 13194 + *: "Déplacer vers le bas" 13580 13195 </dest> 13581 13196 <voice> 13582 - *: "Move Item Down" 13197 + *: "Déplacer vers le bas" 13583 13198 </voice> 13584 13199 </phrase> 13585 13200 <phrase> ··· 13656 13271 </voice> 13657 13272 </phrase> 13658 13273 <phrase> 13659 - id: LANG_PLAYLIST_CLEARED 13660 - desc: in the pictureflow splash messages 13661 - user: core 13662 - <source> 13663 - *: "Playlist Cleared" 13664 - </source> 13665 - <dest> 13666 - *: "Playlist Cleared" 13667 - </dest> 13668 - <voice> 13669 - *: "Playlist Cleared" 13670 - </voice> 13671 - </phrase> 13672 - <phrase> 13673 13274 id: LANG_REC_DIR 13674 13275 desc: used in the info screen to show a recording dir 13675 13276 user: core ··· 13694 13295 *: "Shuffle Mode" 13695 13296 </source> 13696 13297 <dest> 13697 - *: "Shuffle Mode" 13298 + *: "Mode mélangé" 13698 13299 </dest> 13699 13300 <voice> 13700 - *: "Shuffle Mode" 13301 + *: "Mode mélangé" 13701 13302 </voice> 13702 13303 </phrase> 13703 13304 <phrase> ··· 13826 13427 *: "" 13827 13428 </dest> 13828 13429 <voice> 13829 - *: "Moving track" 13430 + *: "Déplacement de la piste" 13830 13431 </voice> 13831 13432 </phrase> 13832 13433 <phrase> ··· 13934 13535 </voice> 13935 13536 </phrase> 13936 13537 <phrase> 13937 - id: LANG_ADDED_TO_PLAYLIST 13938 - desc: in the pictureflow splash messages 13939 - user: core 13940 - <source> 13941 - *: "Added to playlist" 13942 - </source> 13943 - <dest> 13944 - *: "Ajouté à la liste de lecture" 13945 - </dest> 13946 - <voice> 13947 - *: "Ajouté à la liste de lecture" 13948 - </voice> 13949 - </phrase> 13950 - <phrase> 13951 13538 id: VOICE_PITCH_ABSOLUTE_MODE 13952 13539 desc: spoken only 13953 13540 user: core ··· 14053 13640 </phrase> 14054 13641 <phrase> 14055 13642 id: LANG_DIRECT 14056 - desc: in the pictureflow settings 13643 + desc: in the pictureflow settings, also a volume adjustment mode 14057 13644 user: core 14058 13645 <source> 14059 13646 *: "Direct" ··· 14087 13674 *: "Change Repeat Mode" 14088 13675 </source> 14089 13676 <dest> 14090 - *: "Change Repeat Mode" 13677 + *: "Changer le mode de répétition" 14091 13678 </dest> 14092 13679 <voice> 14093 - *: "Change Repeat Mode" 13680 + *: "Changer le mode de répétition" 14094 13681 </voice> 14095 13682 </phrase> 14096 13683 <phrase> ··· 14188 13775 *: "Cache will be rebuilt on next restart" 14189 13776 </source> 14190 13777 <dest> 14191 - *: "Cache will be rebuilt on next restart" 13778 + *: "Le cache sera reconstruit au prochain redémarrage" 14192 13779 </dest> 14193 13780 <voice> 14194 - *: "Cache will be rebuilt on next restart" 13781 + *: "Le cache sera reconstruit au prochain redémarrage" 14195 13782 </voice> 14196 13783 </phrase> 14197 13784 <phrase> ··· 14202 13789 *: "Change Volume" 14203 13790 </source> 14204 13791 <dest> 14205 - *: "Change Volume" 13792 + *: "Changer le volume" 14206 13793 </dest> 14207 13794 <voice> 14208 - *: "Change Volume" 13795 + *: "Changer le volume" 14209 13796 </voice> 14210 13797 </phrase> 14211 13798 <phrase> ··· 14282 13869 </voice> 14283 13870 </phrase> 14284 13871 <phrase> 14285 - id: LANG_PROPERTIES_ARTIST 14286 - desc: in properties plugin 14287 - user: core 14288 - <source> 14289 - *: "[Artist]" 14290 - </source> 14291 - <dest> 14292 - *: "[Interprète]" 14293 - </dest> 14294 - <voice> 14295 - *: "Interprète" 14296 - </voice> 14297 - </phrase> 14298 - <phrase> 14299 13872 id: LANG_PROPERTIES_SIZE 14300 13873 desc: in properties plugin 14301 13874 user: core ··· 14317 13890 *: "Via Track list" 14318 13891 </source> 14319 13892 <dest> 14320 - *: "Via Track list" 13893 + *: "Via la liste des pistes" 14321 13894 </dest> 14322 13895 <voice> 14323 - *: "Via Track list" 13896 + *: "Via la liste des pistes" 14324 13897 </voice> 14325 13898 </phrase> 14326 13899 <phrase> ··· 14373 13946 *: "Load Default Configuration" 14374 13947 </source> 14375 13948 <dest> 14376 - *: "Load Default Configuration" 13949 + *: "Charger la configuration par défaut" 14377 13950 </dest> 14378 13951 <voice> 14379 - *: "Load Default Configuration" 13952 + *: "Charger la configuration par défaut" 14380 13953 </voice> 14381 13954 </phrase> 14382 13955 <phrase> ··· 14387 13960 *: "Checkmate!" 14388 13961 </source> 14389 13962 <dest> 14390 - *: "Checkmate!" 13963 + *: "Échec et mat !" 14391 13964 </dest> 14392 13965 <voice> 14393 - *: "Checkmate!" 13966 + *: "Échec et mat !" 14394 13967 </voice> 14395 13968 </phrase> 14396 13969 <phrase> ··· 14468 14041 desc: playing time screen 14469 14042 user: core 14470 14043 <source> 14471 - *: "Storage: %s (done %s, remaining %s)" 14044 + *: "Storage (Done / Remaining):" 14472 14045 </source> 14473 14046 <dest> 14474 - *: "Storage: %s (done %s, remaining %s)" 14047 + *: "Stockage (Terminé / Restant) :" 14475 14048 </dest> 14476 14049 <voice> 14477 - *: "Storage" 14050 + *: "Stockage" 14478 14051 </voice> 14479 14052 </phrase> 14480 14053 <phrase> ··· 14485 14058 *: "Pause / Play" 14486 14059 </source> 14487 14060 <dest> 14488 - *: "Pause / Play" 14061 + *: "Pause / Lecture" 14489 14062 </dest> 14490 14063 <voice> 14491 - *: "Pause / Play" 14064 + *: "Pause / Lecture" 14492 14065 </voice> 14493 14066 </phrase> 14494 14067 <phrase> ··· 14499 14072 *: "Previous Track" 14500 14073 </source> 14501 14074 <dest> 14502 - *: "Previous Track" 14075 + *: "Piste précédente" 14503 14076 </dest> 14504 14077 <voice> 14505 - *: "Previous Track" 14078 + *: "Piste précédente" 14506 14079 </voice> 14507 14080 </phrase> 14508 14081 <phrase> ··· 14534 14107 </voice> 14535 14108 </phrase> 14536 14109 <phrase> 14537 - id: LANG_PROPERTIES_DURATION 14538 - desc: in properties plugin 14539 - user: core 14540 - <source> 14541 - *: "[Duration]" 14542 - </source> 14543 - <dest> 14544 - *: "[Durée]" 14545 - </dest> 14546 - <voice> 14547 - *: "Durée" 14548 - </voice> 14549 - </phrase> 14550 - <phrase> 14551 14110 id: LANG_PROPERTIES_FAIL 14552 14111 desc: in properties plugin 14553 14112 user: core ··· 14555 14114 *: "Failed to gather information" 14556 14115 </source> 14557 14116 <dest> 14558 - *: "Failed to gather information" 14117 + *: "Échec de la collecte d'informations" 14559 14118 </dest> 14560 14119 <voice> 14561 - *: "Failed to gather information" 14120 + *: "Échec de la collecte d'informations" 14562 14121 </voice> 14563 14122 </phrase> 14564 14123 <phrase> ··· 14584 14143 lowmem: none 14585 14144 </source> 14586 14145 <dest> 14587 - *: "Resume automatically" 14146 + *: "Reprendre automatiquement" 14588 14147 lowmem: none 14589 14148 </dest> 14590 14149 <voice> 14591 - *: "Resume automatically" 14150 + *: "Reprendre automatiquement" 14592 14151 lowmem: none 14593 14152 </voice> 14594 14153 </phrase> ··· 14601 14160 lowmem: none 14602 14161 </source> 14603 14162 <dest> 14604 - *: "Reverberation" 14163 + *: "Réverbération" 14605 14164 lowmem: none 14606 14165 </dest> 14607 14166 <voice> 14608 - *: "Reverberation" 14167 + *: "Réverbération" 14609 14168 lowmem: none 14610 14169 </voice> 14611 14170 </phrase> ··· 14656 14215 desc: playing time screen 14657 14216 user: core 14658 14217 <source> 14659 - *: "Average track size: %s" 14218 + *: "Average track size:" 14660 14219 </source> 14661 14220 <dest> 14662 - *: "Taille moyenne des pistes: %s" 14221 + *: "Taille moyenne des pistes :" 14663 14222 </dest> 14664 14223 <voice> 14665 14224 *: "Taille moyenne des pistes" ··· 14670 14229 desc: playing time screen 14671 14230 user: core 14672 14231 <source> 14673 - *: "Track %d / %d %d%%" 14232 + *: "Track:" 14674 14233 </source> 14675 14234 <dest> 14676 - *: "Track %d / %d %d%%" 14235 + *: "Piste :" 14677 14236 </dest> 14678 14237 <voice> 14679 - *: "Track" 14238 + *: "Piste :" 14680 14239 </voice> 14681 14240 </phrase> 14682 14241 <phrase> ··· 14736 14295 <voice> 14737 14296 *: "Menu démarrage si non renseigné" 14738 14297 lowmem: none 14739 - </voice> 14740 - </phrase> 14741 - <phrase> 14742 - id: LANG_NO_VIEWERS 14743 - desc: text for splash to indicate that no viewers are available 14744 - user: core 14745 - <source> 14746 - *: "No viewers found" 14747 - </source> 14748 - <dest> 14749 - *: "Aucune visionneuse trouvée" 14750 - </dest> 14751 - <voice> 14752 - *: "Aucune visionneuse trouvée" 14753 14298 </voice> 14754 14299 </phrase> 14755 14300 <phrase> ··· 14973 14518 *: "Hide album title" 14974 14519 </source> 14975 14520 <dest> 14976 - *: "Hide album title" 14521 + *: "Cacher le titre de l'album" 14977 14522 </dest> 14978 14523 <voice> 14979 - *: "Hide album title" 14524 + *: "Cacher le titre de l'album" 14980 14525 </voice> 14981 14526 </phrase> 14982 14527 <phrase> ··· 14988 14533 lowmem: none 14989 14534 </source> 14990 14535 <dest> 14991 - *: "Set resume time (min)" 14536 + *: "Définir le temps de reprise (min)" 14992 14537 lowmem: none 14993 14538 </dest> 14994 14539 <voice> 14995 - *: "Set resume time" 14540 + *: "Définir le temps de reprise (min)" 14996 14541 lowmem: none 14997 14542 </voice> 14998 14543 </phrase> ··· 15108 14653 *: "Désactiver défilement dans le menu principal" 15109 14654 </voice> 15110 14655 </phrase> 14656 + <phrase> 14657 + id: LANG_SINGLE_MODE 14658 + desc: single mode 14659 + user: core 14660 + <source> 14661 + *: "Single Mode" 14662 + </source> 14663 + <dest> 14664 + *: "Mode lecture seule" 14665 + </dest> 14666 + <voice> 14667 + *: "Mode lecture seule" 14668 + </voice> 14669 + </phrase> 14670 + <phrase> 14671 + id: LANG_TALK_MIXER_LEVEL 14672 + desc: Relative volume of voice prompts 14673 + user: core 14674 + <source> 14675 + *: "Voice prompt volume" 14676 + </source> 14677 + <dest> 14678 + *: "Volume des messages vocaux" 14679 + </dest> 14680 + <voice> 14681 + *: "Volume des messages vocaux" 14682 + </voice> 14683 + </phrase> 14684 + <phrase> 14685 + id: LANG_FILTER_SHORT_SHARP 14686 + desc: in sound settings 14687 + user: core 14688 + <source> 14689 + *: none 14690 + filter_roll_off: "Short Sharp" 14691 + </source> 14692 + <dest> 14693 + *: none 14694 + filter_roll_off: "Short Sharp" 14695 + </dest> 14696 + <voice> 14697 + *: none 14698 + filter_roll_off: "Short Sharp" 14699 + </voice> 14700 + </phrase> 14701 + <phrase> 14702 + id: LANG_FILTER_SHORT_SLOW 14703 + desc: in sound settings 14704 + user: core 14705 + <source> 14706 + *: none 14707 + filter_roll_off: "Short Slow" 14708 + </source> 14709 + <dest> 14710 + *: none 14711 + filter_roll_off: "Short Slow" 14712 + </dest> 14713 + <voice> 14714 + *: none 14715 + filter_roll_off: "Short Slow" 14716 + </voice> 14717 + </phrase> 14718 + <phrase> 14719 + id: LANG_FILTER_SUPER_SLOW 14720 + desc: in sound settings 14721 + user: core 14722 + <source> 14723 + *: none 14724 + filter_roll_off: "Super Slow" 14725 + </source> 14726 + <dest> 14727 + *: none 14728 + filter_roll_off: "Super Slow" 14729 + </dest> 14730 + <voice> 14731 + *: none 14732 + filter_roll_off: "Super Slow" 14733 + </voice> 14734 + </phrase> 14735 + <phrase> 14736 + id: LANG_FILTER_LINEAR_FAST 14737 + desc: in sound settings 14738 + user: core 14739 + <source> 14740 + *: none 14741 + es9218: "Linear Fast" 14742 + </source> 14743 + <dest> 14744 + *: none 14745 + es9218: "Linear Fast" 14746 + </dest> 14747 + <voice> 14748 + *: none 14749 + es9218: "Linear Fast" 14750 + </voice> 14751 + </phrase> 14752 + <phrase> 14753 + id: LANG_FILTER_LINEAR_SLOW 14754 + desc: in sound settings 14755 + user: core 14756 + <source> 14757 + *: none 14758 + es9218: "Linear Slow" 14759 + </source> 14760 + <dest> 14761 + *: none 14762 + es9218: "Linear Slow" 14763 + </dest> 14764 + <voice> 14765 + *: none 14766 + es9218: "Linear Slow" 14767 + </voice> 14768 + </phrase> 14769 + <phrase> 14770 + id: LANG_FILTER_MINIMUM_FAST 14771 + desc: in sound settings 14772 + user: core 14773 + <source> 14774 + *: none 14775 + es9218: "Minimum Fast" 14776 + </source> 14777 + <dest> 14778 + *: none 14779 + es9218: "Minimum Fast" 14780 + </dest> 14781 + <voice> 14782 + *: none 14783 + es9218: "Minimum Fast" 14784 + </voice> 14785 + </phrase> 14786 + <phrase> 14787 + id: LANG_FILTER_MINIMUM_SLOW 14788 + desc: in sound settings 14789 + user: core 14790 + <source> 14791 + *: none 14792 + es9218: "Minimum Slow" 14793 + </source> 14794 + <dest> 14795 + *: none 14796 + es9218: "Minimum Slow" 14797 + </dest> 14798 + <voice> 14799 + *: none 14800 + es9218: "Minimum Slow" 14801 + </voice> 14802 + </phrase> 14803 + <phrase> 14804 + id: LANG_FILTER_APODIZING_1 14805 + desc: in sound settings 14806 + user: core 14807 + <source> 14808 + *: none 14809 + es9218: "Apodizing type 1" 14810 + </source> 14811 + <dest> 14812 + *: none 14813 + es9218: "Apodizing type 1" 14814 + </dest> 14815 + <voice> 14816 + *: none 14817 + es9218: "Apodizing type 1" 14818 + </voice> 14819 + </phrase> 14820 + <phrase> 14821 + id: LANG_FILTER_APODIZING_2 14822 + desc: in sound settings 14823 + user: core 14824 + <source> 14825 + *: none 14826 + es9218: "Apodizing type 2" 14827 + </source> 14828 + <dest> 14829 + *: none 14830 + es9218: "Apodizing type 2" 14831 + </dest> 14832 + <voice> 14833 + *: none 14834 + es9218: "Apodizing type 2" 14835 + </voice> 14836 + </phrase> 14837 + <phrase> 14838 + id: LANG_FILTER_HYBRID_FAST 14839 + desc: in sound settings 14840 + user: core 14841 + <source> 14842 + *: none 14843 + es9218: "Hybrid Fast" 14844 + </source> 14845 + <dest> 14846 + *: none 14847 + es9218: "Hybrid Fast" 14848 + </dest> 14849 + <voice> 14850 + *: none 14851 + es9218: "Hybrid Fast" 14852 + </voice> 14853 + </phrase> 14854 + <phrase> 14855 + id: LANG_FILTER_BRICK_WALL 14856 + desc: in sound settings 14857 + user: core 14858 + <source> 14859 + *: none 14860 + es9218: "Brick Wall" 14861 + </source> 14862 + <dest> 14863 + *: none 14864 + es9218: "Brick Wall" 14865 + </dest> 14866 + <voice> 14867 + *: none 14868 + es9218: "Brick Wall" 14869 + </voice> 14870 + </phrase> 14871 + <phrase> 14872 + id: LANG_DAC_POWER_MODE 14873 + desc: in sound settings 14874 + user: core 14875 + <source> 14876 + *: none 14877 + dac_power_mode: "DAC power mode" 14878 + es9218: "DAC output level" 14879 + </source> 14880 + <dest> 14881 + *: none 14882 + dac_power_mode: "DAC power mode" 14883 + es9218: "DAC output level" 14884 + </dest> 14885 + <voice> 14886 + *: none 14887 + dac_power_mode: "DAC power mode" 14888 + es9218: "DAC output level" 14889 + </voice> 14890 + </phrase> 14891 + <phrase> 14892 + id: LANG_DAC_POWER_HIGH 14893 + desc: in sound settings 14894 + user: core 14895 + <source> 14896 + *: none 14897 + dac_power_mode: "High performance" 14898 + es9218: "High Gain (2 Vrms)" 14899 + </source> 14900 + <dest> 14901 + *: none 14902 + dac_power_mode: "High performance" 14903 + es9218: "High Gain (2 Vrms)" 14904 + </dest> 14905 + <voice> 14906 + *: none 14907 + dac_power_mode: "High performance" 14908 + es9218: "High Gain (2 Vrms)" 14909 + </voice> 14910 + </phrase> 14911 + <phrase> 14912 + id: LANG_DAC_POWER_LOW 14913 + desc: in sound settings 14914 + user: core 14915 + <source> 14916 + *: none 14917 + dac_power_mode: "Save battery" 14918 + es9218: "Low Gain (1 Vrms)" 14919 + </source> 14920 + <dest> 14921 + *: none 14922 + dac_power_mode: "Save battery" 14923 + es9218: "Low Gain (1 Vrms)" 14924 + </dest> 14925 + <voice> 14926 + *: none 14927 + dac_power_mode: "Save battery" 14928 + es9218: "Low Gain (1 Vrms)" 14929 + </voice> 14930 + </phrase> 14931 + <phrase> 14932 + id: LANG_MIKMOD_HQMIXER 14933 + desc: in mikmod settings menu 14934 + user: core 14935 + <source> 14936 + *: "HQ Mixer" 14937 + lowmem: none 14938 + </source> 14939 + <dest> 14940 + *: "HQ Mixer" 14941 + lowmem: none 14942 + </dest> 14943 + <voice> 14944 + *: "High Quality Mixer" 14945 + lowmem: none 14946 + </voice> 14947 + </phrase> 14948 + <phrase> 14949 + id: LANG_MIKMOD_SAMPLERATE 14950 + desc: in mikmod settings menu 14951 + user: core 14952 + <source> 14953 + *: "Sample Rate" 14954 + lowmem: none 14955 + </source> 14956 + <dest> 14957 + *: "Sample Rate" 14958 + lowmem: none 14959 + </dest> 14960 + <voice> 14961 + *: "Sample Rate" 14962 + lowmem: none 14963 + </voice> 14964 + </phrase> 14965 + <phrase> 14966 + id: LANG_ACTION_STD_CANCEL 14967 + desc: standard press x to cancel string 14968 + user: core 14969 + <source> 14970 + *: "Press LEFT to cancel." 14971 + android,hifietma*,zenvision: "Press BACK to cancel." 14972 + cowond2,creativezenxfi2,ibassodx50,ibassodx90,mrobe500,ondavx747: "Press POWER to cancel." 14973 + ihifi760,ihifi960: "Double tap RETURN to cancel." 14974 + ihifi770,ihifi770c,ihifi800: "Press HOME to cancel." 14975 + iriverh10,samsungyh*: "Double tap LEFT to cancel." 14976 + mpiohd200: "Double tap REC to cancel." 14977 + mpiohd300: "Double tap MENU to cancel." 14978 + rx27generic: "Press VOLUME to cancel." 14979 + sonynwza860: "Keymaps incomplete." 14980 + touchscreen: "Press Middle Left to cancel." 14981 + vibe500: "Press PREV to cancel." 14982 + xduoox20,xduoox3,xduoox3ii: "Double tap HOME to cancel." 14983 + </source> 14984 + <dest> 14985 + *: "Press LEFT to cancel." 14986 + android,hifietma*,zenvision: "Press BACK to cancel." 14987 + cowond2,creativezenxfi2,ibassodx50,ibassodx90,mrobe500,ondavx747: "Press POWER to cancel." 14988 + ihifi760,ihifi960: "Double tap RETURN to cancel." 14989 + ihifi770,ihifi770c,ihifi800: "Press HOME to cancel." 14990 + iriverh10,samsungyh*: "Double tap LEFT to cancel." 14991 + mpiohd200: "Double tap REC to cancel." 14992 + mpiohd300: "Double tap MENU to cancel." 14993 + rx27generic: "Press VOLUME to cancel." 14994 + sonynwza860: "Keymaps incomplete." 14995 + touchscreen: "Press Middle Left to cancel." 14996 + vibe500: "Press PREV to cancel." 14997 + xduoox20,xduoox3,xduoox3ii: "Double tap HOME to cancel." 14998 + </dest> 14999 + <voice> 15000 + *: "Press LEFT to cancel." 15001 + android,hifietma*,zenvision: "Press BACK to cancel." 15002 + cowond2,creativezenxfi2,ibassodx50,ibassodx90,mrobe500,ondavx747: "Press POWER to cancel." 15003 + ihifi760,ihifi960: "Double tap RETURN to cancel." 15004 + ihifi770,ihifi770c,ihifi800: "Press HOME to cancel." 15005 + iriverh10,samsungyh*: "Double tap LEFT to cancel." 15006 + mpiohd200: "Double tap REC to cancel." 15007 + mpiohd300: "Double tap MENU to cancel." 15008 + rx27generic: "Press VOLUME to cancel." 15009 + touchscreen: "Press Middle Left to cancel." 15010 + vibe500: "Press PREV to cancel." 15011 + xduoox20,xduoox3,xduoox3ii: "Double tap HOME to cancel." 15012 + </voice> 15013 + </phrase> 15014 + <phrase> 15015 + id: LANG_DATE 15016 + desc: for constructing time and date announcements 15017 + user: core 15018 + <source> 15019 + *: "Date" 15020 + </source> 15021 + <dest> 15022 + *: "Tout effacer" 15023 + </dest> 15024 + <voice> 15025 + *: "Tout effacer" 15026 + </voice> 15027 + </phrase> 15028 + <phrase> 15029 + id: LANG_CLEAR_ALL 15030 + desc: 15031 + user: core 15032 + <source> 15033 + *: "Clear all" 15034 + </source> 15035 + <dest> 15036 + *: "Clear all" 15037 + </dest> 15038 + <voice> 15039 + *: "Clear all" 15040 + </voice> 15041 + </phrase> 15042 + <phrase> 15043 + id: LANG_CANCEL_0 15044 + desc: CANCEL. 15045 + user: core 15046 + <source> 15047 + *: "Cancel" 15048 + </source> 15049 + <dest> 15050 + *: "Annuler" 15051 + </dest> 15052 + <voice> 15053 + *: "Annuler" 15054 + </voice> 15055 + </phrase> 15056 + <phrase> 15057 + id: LANG_SAVE 15058 + desc: 15059 + user: core 15060 + <source> 15061 + *: "Save" 15062 + </source> 15063 + <dest> 15064 + *: "Sauvegarder" 15065 + </dest> 15066 + <voice> 15067 + *: "Sauvegarder" 15068 + </voice> 15069 + </phrase> 15070 + <phrase> 15071 + id: LANG_TIMEOUT 15072 + desc: 15073 + user: core 15074 + <source> 15075 + *: "Timeout" 15076 + </source> 15077 + <dest> 15078 + *: "Temps expiré" 15079 + </dest> 15080 + <voice> 15081 + *: "Temps expiré" 15082 + </voice> 15083 + </phrase> 15084 + <phrase> 15085 + id: LANG_TRACK 15086 + desc: used in track x of y constructs 15087 + user: core 15088 + <source> 15089 + *: "Track" 15090 + </source> 15091 + <dest> 15092 + *: "Piste" 15093 + </dest> 15094 + <voice> 15095 + *: "Piste" 15096 + </voice> 15097 + </phrase> 15098 + <phrase> 15099 + id: LANG_ELAPSED 15100 + desc: prefix for elapsed playtime announcement 15101 + user: core 15102 + <source> 15103 + *: "Elapsed" 15104 + </source> 15105 + <dest> 15106 + *: "Écoulé" 15107 + </dest> 15108 + <voice> 15109 + *: "Écoulé" 15110 + </voice> 15111 + </phrase> 15112 + <phrase> 15113 + id: LANG_ANNOUNCEMENT_FMT 15114 + desc: format for wps hotkey announcement 15115 + user: core 15116 + <source> 15117 + *: none 15118 + hotkey: "Announcement format" 15119 + </source> 15120 + <dest> 15121 + *: none 15122 + hotkey: "Format des annonces" 15123 + </dest> 15124 + <voice> 15125 + *: none 15126 + hotkey: "Format des annonces" 15127 + </voice> 15128 + </phrase> 15129 + <phrase> 15130 + id: LANG_REMAIN 15131 + desc: for constructs such as number of tracks remaining etc 15132 + user: core 15133 + <source> 15134 + *: none 15135 + hotkey: "Remain" 15136 + </source> 15137 + <dest> 15138 + *: none 15139 + hotkey: "Restant" 15140 + </dest> 15141 + <voice> 15142 + *: none 15143 + hotkey: "Restant" 15144 + </voice> 15145 + </phrase> 15146 + <phrase> 15147 + id: LANG_GROUPING 15148 + desc: 15149 + user: core 15150 + <source> 15151 + *: none 15152 + hotkey: "Grouping" 15153 + </source> 15154 + <dest> 15155 + *: none 15156 + hotkey: "Regroupement" 15157 + </dest> 15158 + <voice> 15159 + *: none 15160 + hotkey: "Regroupement" 15161 + </voice> 15162 + </phrase> 15163 + <phrase> 15164 + id: LANG_ANNOUNCE_ON 15165 + desc: 15166 + user: core 15167 + <source> 15168 + *: none 15169 + hotkey: "Announce on" 15170 + </source> 15171 + <dest> 15172 + *: none 15173 + hotkey: "Annoncer sur" 15174 + </dest> 15175 + <voice> 15176 + *: none 15177 + hotkey: "Annoncer sur" 15178 + </voice> 15179 + </phrase> 15180 + <phrase> 15181 + id: LANG_TRACK_CHANGE 15182 + desc: 15183 + user: core 15184 + <source> 15185 + *: none 15186 + hotkey: "Track change" 15187 + </source> 15188 + <dest> 15189 + *: none 15190 + hotkey: "Changement de piste" 15191 + </dest> 15192 + <voice> 15193 + *: none 15194 + hotkey: "Changement de piste" 15195 + </voice> 15196 + </phrase> 15197 + <phrase> 15198 + id: LANG_HOLD_FOR_SETTINGS 15199 + desc: 15200 + user: core 15201 + <source> 15202 + *: none 15203 + hotkey: "Hold for settings" 15204 + </source> 15205 + <dest> 15206 + *: none 15207 + hotkey: "Maintenir pour accéder aux paramètres" 15208 + </dest> 15209 + <voice> 15210 + *: none 15211 + hotkey: "Maintenir pour accéder aux paramètres" 15212 + </voice> 15213 + </phrase> 15214 + <phrase> 15215 + id: LANG_OPEN_PLUGIN 15216 + desc: onplay open plugin 15217 + user: core 15218 + <source> 15219 + *: "Open Plugin" 15220 + </source> 15221 + <dest> 15222 + *: "Lancer le module" 15223 + </dest> 15224 + <voice> 15225 + *: "Lancer le module" 15226 + </voice> 15227 + </phrase> 15228 + <phrase> 15229 + id: LANG_OPEN_PLUGIN_NOT_A_PLUGIN 15230 + desc: open plugin module 15231 + user: core 15232 + <source> 15233 + *: "Not a plugin: %s" 15234 + </source> 15235 + <dest> 15236 + *: "N'est pas un module: %s" 15237 + </dest> 15238 + <voice> 15239 + *: "N'est pas un module: %s" 15240 + </voice> 15241 + </phrase> 15242 + <phrase> 15243 + id: LANG_OPEN_PLUGIN_SET_WPS_CONTEXT_PLUGIN 15244 + desc: open plugin module 15245 + user: core 15246 + <source> 15247 + *: "Set Wps Context Plugin" 15248 + </source> 15249 + <dest> 15250 + *: "Set Wps Context Plugin" 15251 + </dest> 15252 + <voice> 15253 + *: "Set WPS Context Plugin" 15254 + </voice> 15255 + </phrase> 15256 + <phrase> 15257 + id: LANG_PARAMETER 15258 + desc: 15259 + user: core 15260 + <source> 15261 + *: "Parameter" 15262 + </source> 15263 + <dest> 15264 + *: "Paramètre" 15265 + </dest> 15266 + <voice> 15267 + *: "Paramètre" 15268 + </voice> 15269 + </phrase> 15270 + <phrase> 15271 + id: LANG_NAME 15272 + desc: 15273 + user: core 15274 + <source> 15275 + *: "Name" 15276 + </source> 15277 + <dest> 15278 + *: "Nom" 15279 + </dest> 15280 + <voice> 15281 + *: "Nom" 15282 + </voice> 15283 + </phrase> 15284 + <phrase> 15285 + id: LANG_ADD 15286 + desc: 15287 + user: core 15288 + <source> 15289 + *: "Add" 15290 + </source> 15291 + <dest> 15292 + *: "Ajouter" 15293 + </dest> 15294 + <voice> 15295 + *: "Ajouter" 15296 + </voice> 15297 + </phrase> 15298 + <phrase> 15299 + id: LANG_BACK 15300 + desc: 15301 + user: core 15302 + <source> 15303 + *: "Back" 15304 + </source> 15305 + <dest> 15306 + *: "Revenir" 15307 + </dest> 15308 + <voice> 15309 + *: "Éditer" 15310 + </voice> 15311 + </phrase> 15312 + <phrase> 15313 + id: LANG_EDIT 15314 + desc: 15315 + user: core 15316 + <source> 15317 + *: "Edit" 15318 + </source> 15319 + <dest> 15320 + *: "Éditer" 15321 + </dest> 15322 + <voice> 15323 + *: "Éditer" 15324 + </voice> 15325 + </phrase> 15326 + <phrase> 15327 + id: LANG_RUN 15328 + desc: 15329 + user: core 15330 + <source> 15331 + *: "Run" 15332 + </source> 15333 + <dest> 15334 + *: "Exécuter" 15335 + </dest> 15336 + <voice> 15337 + *: "Exécuter" 15338 + </voice> 15339 + </phrase> 15340 + <phrase> 15341 + id: LANG_EXPORT 15342 + desc: 15343 + user: core 15344 + <source> 15345 + *: "Export" 15346 + </source> 15347 + <dest> 15348 + *: "Exporter" 15349 + </dest> 15350 + <voice> 15351 + *: "Exporter" 15352 + </voice> 15353 + </phrase> 15354 + <phrase> 15355 + id: LANG_BROWSE 15356 + desc: 15357 + user: core 15358 + <source> 15359 + *: "Browse" 15360 + </source> 15361 + <dest> 15362 + *: "Parcourir" 15363 + </dest> 15364 + <voice> 15365 + *: "Parcourir" 15366 + </voice> 15367 + </phrase> 15368 + <phrase> 15369 + id: LANG_ENTER_USB_STORAGE_MODE_QUERY 15370 + desc: upon plugging in USB 15371 + user: core 15372 + <source> 15373 + *: "Enter USB mass storage mode?" 15374 + </source> 15375 + <dest> 15376 + *: "Passer en mode stockage de masse USB ?" 15377 + </dest> 15378 + <voice> 15379 + *: "Passer en mode stockage de masse USB ?" 15380 + </voice> 15381 + </phrase> 15382 + <phrase> 15383 + id: LANG_QUEUE_MENU 15384 + desc: in onplay menu 15385 + user: core 15386 + <source> 15387 + *: "Queue..." 15388 + </source> 15389 + <dest> 15390 + *: "File d'attente" 15391 + </dest> 15392 + <voice> 15393 + *: "File d'attente" 15394 + </voice> 15395 + </phrase> 15396 + <phrase> 15397 + id: LANG_SHOW_QUEUE_OPTIONS 15398 + desc: in Current Playlist settings 15399 + user: core 15400 + <source> 15401 + *: "Show Queue Options" 15402 + </source> 15403 + <dest> 15404 + *: "Afficher les options de la file d'attente" 15405 + </dest> 15406 + <voice> 15407 + *: "Afficher les options de la file d'attente" 15408 + </voice> 15409 + </phrase> 15410 + <phrase> 15411 + id: LANG_SHOW_SHUFFLED_ADDING_OPTIONS 15412 + desc: in Current Playlist settings 15413 + user: core 15414 + <source> 15415 + *: "Show Shuffled Adding Options" 15416 + </source> 15417 + <dest> 15418 + *: "Afficher les options d'ajout aléatoire" 15419 + </dest> 15420 + <voice> 15421 + *: "Afficher les options d'ajout aléatoire" 15422 + </voice> 15423 + </phrase> 15424 + <phrase> 15425 + id: LANG_IN_SUBMENU 15426 + desc: in Settings 15427 + user: core 15428 + <source> 15429 + *: "In Submenu" 15430 + </source> 15431 + <dest> 15432 + *: "En sous-menu" 15433 + </dest> 15434 + <voice> 15435 + *: "En sous-menu" 15436 + </voice> 15437 + </phrase> 15438 + <phrase> 15439 + id: LANG_SOFTLOCK_DISABLE_ALL_NOTIFY 15440 + desc: disable all softlock notifications 15441 + user: core 15442 + <source> 15443 + *: "Disable All Lock Notifications" 15444 + </source> 15445 + <dest> 15446 + *: "Désactiver toutes les notifications de verrouillage" 15447 + </dest> 15448 + <voice> 15449 + *: "Désactiver toutes les notifications de verrouillage" 15450 + </voice> 15451 + </phrase> 15452 + <phrase> 15453 + id: LANG_ACTION_VOLUME 15454 + desc: exempt volume from softlock 15455 + user: core 15456 + <source> 15457 + *: "Exempt Volume" 15458 + </source> 15459 + <dest> 15460 + *: "À l'exception du volume" 15461 + </dest> 15462 + <voice> 15463 + *: "À l'exception du volume" 15464 + </voice> 15465 + </phrase> 15466 + <phrase> 15467 + id: LANG_ACTION_ALWAYSAUTOLOCK 15468 + desc: always prime autolock 15469 + user: core 15470 + <source> 15471 + *: "Always Autolock" 15472 + </source> 15473 + <dest> 15474 + *: "Always Autolock" 15475 + </dest> 15476 + <voice> 15477 + *: "Always Autolock" 15478 + </voice> 15479 + </phrase> 15480 + <phrase> 15481 + id: VOICE_NUMERIC_TENS_SWAP_SEPARATOR 15482 + desc: voice only, for speaking numbers in languages that swap the tens and ones fields. Leave blank for languages that do not need it, such as English ("231" => "two hundred thirty one") but other languages may speak it as "two hundred one [AND] thirty" 15483 + user: core 15484 + <source> 15485 + *: "" 15486 + </source> 15487 + <dest> 15488 + *: "" 15489 + </dest> 15490 + <voice> 15491 + *: "" 15492 + </voice> 15493 + </phrase> 15494 + <phrase> 15495 + id: LANG_VOICED_DATE_FORMAT 15496 + desc: format string for how dates will be read back. Y == 4-digit year, A == month name, m == numeric month, d == numeric day. For example, "AdY" will read "January 21 2021" 15497 + user: core 15498 + <source> 15499 + *: "dAY" 15500 + </source> 15501 + <dest> 15502 + *: "dAY" 15503 + </dest> 15504 + <voice> 15505 + *: "" 15506 + </voice> 15507 + </phrase> 15508 + <phrase> 15509 + id: LANG_LIST_WRAPAROUND 15510 + desc: in Settings 15511 + user: core 15512 + <source> 15513 + *: "List Wraparound" 15514 + </source> 15515 + <dest> 15516 + *: "List Wraparound" 15517 + </dest> 15518 + <voice> 15519 + *: "List Wraparound" 15520 + </voice> 15521 + </phrase> 15522 + <phrase> 15523 + id: LANG_SHOW_SHUTDOWN_MESSAGE 15524 + desc: in Settings 15525 + user: core 15526 + <source> 15527 + *: "Show Shutdown Message" 15528 + </source> 15529 + <dest> 15530 + *: "Afficher le message d'arrêt" 15531 + </dest> 15532 + <voice> 15533 + *: "Afficher le message d'arrêt" 15534 + </voice> 15535 + </phrase> 15536 + <phrase> 15537 + id: LANG_LIST_ORDER 15538 + desc: in Settings 15539 + user: core 15540 + <source> 15541 + *: "List Order" 15542 + </source> 15543 + <dest> 15544 + *: "Ordre de la liste" 15545 + </dest> 15546 + <voice> 15547 + *: "Ordre de la liste" 15548 + </voice> 15549 + </phrase> 15550 + <phrase> 15551 + id: LANG_ASCENDING 15552 + desc: in Settings 15553 + user: core 15554 + <source> 15555 + *: "Ascending" 15556 + </source> 15557 + <dest> 15558 + *: "Croissante" 15559 + </dest> 15560 + <voice> 15561 + *: "Croissante" 15562 + </voice> 15563 + </phrase> 15564 + <phrase> 15565 + id: LANG_DESCENDING 15566 + desc: in Settings 15567 + user: core 15568 + <source> 15569 + *: "Descending" 15570 + </source> 15571 + <dest> 15572 + *: "Décroissante" 15573 + </dest> 15574 + <voice> 15575 + *: "Décroissante" 15576 + </voice> 15577 + </phrase> 15578 + <phrase> 15579 + id: LANG_ALBUM_ART 15580 + desc: in Settings 15581 + user: core 15582 + <source> 15583 + *: "Album Art" 15584 + </source> 15585 + <dest> 15586 + *: "Pochette d'album" 15587 + </dest> 15588 + <voice> 15589 + *: "Pochette d'album" 15590 + </voice> 15591 + </phrase> 15592 + <phrase> 15593 + id: LANG_PREFER_EMBEDDED 15594 + desc: in Settings 15595 + user: core 15596 + <source> 15597 + *: "Prefer Embedded" 15598 + </source> 15599 + <dest> 15600 + *: "Privilégier les images intégrées" 15601 + </dest> 15602 + <voice> 15603 + *: "Privilégier les images intégrées" 15604 + </voice> 15605 + </phrase> 15606 + <phrase> 15607 + id: LANG_PREFER_IMAGE_FILE 15608 + desc: in Settings 15609 + user: core 15610 + <source> 15611 + *: "Prefer Image File" 15612 + </source> 15613 + <dest> 15614 + *: "Privilégier les images en fichier" 15615 + </dest> 15616 + <voice> 15617 + *: "Privilégier les images en fichier" 15618 + </voice> 15619 + </phrase> 15620 + <phrase> 15621 + id: LANG_FM_SYNC_RDS_TIME 15622 + desc: in radio screen and Settings 15623 + user: core 15624 + <source> 15625 + *: none 15626 + rds: "Sync RDS Time" 15627 + </source> 15628 + <dest> 15629 + *: none 15630 + rds: "Sync RDS Time" 15631 + </dest> 15632 + <voice> 15633 + *: none 15634 + rds: "Sync RDS Time" 15635 + </voice> 15636 + </phrase> 15637 + <phrase> 15638 + id: LANG_SORT_ALBUMS_BY 15639 + desc: in Settings 15640 + user: core 15641 + <source> 15642 + *: "Sort albums by" 15643 + </source> 15644 + <dest> 15645 + *: "Trier les albums par" 15646 + </dest> 15647 + <voice> 15648 + *: "Trier les albums par" 15649 + </voice> 15650 + </phrase> 15651 + <phrase> 15652 + id: LANG_ARTIST_PLUS_NAME 15653 + desc: in Settings 15654 + user: core 15655 + <source> 15656 + *: "Artist + Name" 15657 + </source> 15658 + <dest> 15659 + *: "Artiste + nom" 15660 + </dest> 15661 + <voice> 15662 + *: "Artiste + nom" 15663 + </voice> 15664 + </phrase> 15665 + <phrase> 15666 + id: LANG_ARTIST_PLUS_YEAR 15667 + desc: in Settings 15668 + user: core 15669 + <source> 15670 + *: "Artist + Year" 15671 + </source> 15672 + <dest> 15673 + *: "Artiste + année" 15674 + </dest> 15675 + <voice> 15676 + *: "Artiste + année" 15677 + </voice> 15678 + </phrase> 15679 + <phrase> 15680 + id: LANG_YEAR_SORT_ORDER 15681 + desc: in Settings 15682 + user: core 15683 + <source> 15684 + *: "Year sort order" 15685 + </source> 15686 + <dest> 15687 + *: "Order du tri par années" 15688 + </dest> 15689 + <voice> 15690 + *: "Order du tri par années" 15691 + </voice> 15692 + </phrase> 15693 + <phrase> 15694 + id: LANG_SHOW_YEAR_IN_ALBUM_TITLE 15695 + desc: in Settings 15696 + user: core 15697 + <source> 15698 + *: "Show year in album title" 15699 + </source> 15700 + <dest> 15701 + *: "Afficher l'année avec le titre de l'album" 15702 + </dest> 15703 + <voice> 15704 + *: "Afficher l'année avec le titre de l'album" 15705 + </voice> 15706 + </phrase> 15707 + <phrase> 15708 + id: LANG_WAIT_FOR_CACHE 15709 + desc: in Settings 15710 + user: core 15711 + <source> 15712 + *: "Cache needs to finish updating first!" 15713 + </source> 15714 + <dest> 15715 + *: "La mise à jour du cache doit finir au préalable !" 15716 + </dest> 15717 + <voice> 15718 + *: "La mise à jour du cache doit finir au préalable !" 15719 + </voice> 15720 + </phrase> 15721 + <phrase> 15722 + id: LANG_TRACK_INFO 15723 + desc: Track Info Title 15724 + user: core 15725 + <source> 15726 + *: "Track Info" 15727 + </source> 15728 + <dest> 15729 + *: "Informations sur la piste" 15730 + </dest> 15731 + <voice> 15732 + *: "Informations sur la piste" 15733 + </voice> 15734 + </phrase> 15735 + <phrase> 15736 + id: LANG_PLAY 15737 + desc: play selected file/directory, in playlist context menu 15738 + user: core 15739 + <source> 15740 + *: "Play" 15741 + </source> 15742 + <dest> 15743 + *: "Lire" 15744 + </dest> 15745 + <voice> 15746 + *: "Lire" 15747 + </voice> 15748 + </phrase> 15749 + <phrase> 15750 + id: LANG_PLAY_SHUFFLED 15751 + desc: play selected files in shuffled order, in playlist context menu 15752 + user: core 15753 + <source> 15754 + *: "Play Shuffled" 15755 + </source> 15756 + <dest> 15757 + *: "Lire mélangé" 15758 + </dest> 15759 + <voice> 15760 + *: "Lire mélangé" 15761 + </voice> 15762 + </phrase> 15763 + <phrase> 15764 + id: LANG_KEEP_CURRENT_TRACK_ON_REPLACE 15765 + desc: used in the playlist settings menu 15766 + user: core 15767 + <source> 15768 + *: "Keep Current Track When Replacing Playlist" 15769 + </source> 15770 + <dest> 15771 + *: "Garder la piste courante lors du remplacement de la liste de lecture" 15772 + </dest> 15773 + <voice> 15774 + *: "Garder la piste courante lors du remplacement de la liste de lecture" 15775 + </voice> 15776 + </phrase> 15777 + <phrase> 15778 + id: LANG_CLEAR_SETTINGS_ON_HOLD 15779 + desc: in the system sub menu 15780 + user: core 15781 + <source> 15782 + *: none 15783 + clear_settings_on_hold,iriverh10: "Clear settings when reset button is held during startup" 15784 + ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Clear settings when hold switch is on during startup" 15785 + </source> 15786 + <dest> 15787 + *: none 15788 + clear_settings_on_hold,iriverh10,ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Effacer les paramètres lorsque le bouton de réinitialisation est maintenu enfoncé pendant le démarrage" 15789 + </dest> 15790 + <voice> 15791 + *: none 15792 + clear_settings_on_hold,iriverh10,ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Effacer les paramètres lorsque le bouton de réinitialisation est maintenu enfoncé pendant le démarrage" 15793 + </voice> 15794 + </phrase> 15795 + <phrase> 15796 + id: LANG_REWIND_ACROSS_TRACKS 15797 + desc: in playback settings menu 15798 + user: core 15799 + <source> 15800 + *: "Rewind Across Tracks" 15801 + </source> 15802 + <dest> 15803 + *: "Rembobiner entre les pistes" 15804 + </dest> 15805 + <voice> 15806 + *: "Rembobiner entre les pistes" 15807 + </voice> 15808 + </phrase> 15809 + <phrase> 15810 + id: LANG_SET_AS 15811 + desc: used in the onplay menu 15812 + user: core 15813 + <source> 15814 + *: "Set As..." 15815 + </source> 15816 + <dest> 15817 + *: "Définir comme..." 15818 + </dest> 15819 + <voice> 15820 + *: "Définir comme" 15821 + </voice> 15822 + </phrase> 15823 + <phrase> 15824 + id: LANG_PLAYLIST_DIR 15825 + desc: used in the onplay menu 15826 + user: core 15827 + <source> 15828 + *: "Playlist Directory" 15829 + </source> 15830 + <dest> 15831 + *: "Répertoire des listes de lecture" 15832 + </dest> 15833 + <voice> 15834 + *: "Répertoire des listes de lecture" 15835 + </voice> 15836 + </phrase> 15837 + <phrase> 15838 + id: LANG_START_DIR 15839 + desc: used in the onplay menu 15840 + user: core 15841 + <source> 15842 + *: "Start Directory" 15843 + </source> 15844 + <dest> 15845 + *: "Répertoire de démarrage" 15846 + </dest> 15847 + <voice> 15848 + *: "Répertoire de démarrage" 15849 + </voice> 15850 + </phrase> 15851 + <phrase> 15852 + id: LANG_RECORDING_DIR 15853 + desc: used in the onplay menu 15854 + user: core 15855 + <source> 15856 + *: none 15857 + recording: "Recording Directory" 15858 + </source> 15859 + <dest> 15860 + *: none 15861 + recording: "Répertoire des enregistrements" 15862 + </dest> 15863 + <voice> 15864 + *: none 15865 + recording: "Répertoire des enregistrements" 15866 + </voice> 15867 + </phrase> 15868 + <phrase> 15869 + id: LANG_ADD_TO_PL 15870 + desc: used in the onplay menu 15871 + user: core 15872 + <source> 15873 + *: "Add to Playlist..." 15874 + </source> 15875 + <dest> 15876 + *: "Ajouter à la liste de lecture" 15877 + </dest> 15878 + <voice> 15879 + *: "Ajouter à la liste de lecture" 15880 + </voice> 15881 + </phrase> 15882 + <phrase> 15883 + id: LANG_ADD_TO_EXISTING_PL 15884 + desc: used in the onplay menu 15885 + user: core 15886 + <source> 15887 + *: "Add to Existing Playlist" 15888 + </source> 15889 + <dest> 15890 + *: "Ajouter à la liste de lecture existante" 15891 + </dest> 15892 + <voice> 15893 + *: "Ajouter à la liste de lecture existante" 15894 + </voice> 15895 + </phrase> 15896 + <phrase> 15897 + id: LANG_PLAYING_NEXT 15898 + desc: used in the onplay menu 15899 + user: core 15900 + <source> 15901 + *: "Playing Next..." 15902 + </source> 15903 + <dest> 15904 + *: "Ajouter à la suite..." 15905 + </dest> 15906 + <voice> 15907 + *: "Ajouter à la suite" 15908 + </voice> 15909 + </phrase> 15910 + <phrase> 15911 + id: LANG_PLAY_NEXT 15912 + desc: used in the onplay menu 15913 + user: core 15914 + <source> 15915 + *: "Play Next" 15916 + </source> 15917 + <dest> 15918 + *: "Ajouter à la suite" 15919 + </dest> 15920 + <voice> 15921 + *: "Ajouter à la suite" 15922 + </voice> 15923 + </phrase> 15924 + <phrase> 15925 + id: LANG_ADD_SHUFFLED 15926 + desc: used in the onplay menu 15927 + user: core 15928 + <source> 15929 + *: "Add Shuffled" 15930 + </source> 15931 + <dest> 15932 + *: "Ajouter mélangé" 15933 + </dest> 15934 + <voice> 15935 + *: "Ajouter mélangé" 15936 + </voice> 15937 + </phrase> 15938 + <phrase> 15939 + id: LANG_PLAY_LAST 15940 + desc: used in the onplay menu 15941 + user: core 15942 + <source> 15943 + *: "Play Last" 15944 + </source> 15945 + <dest> 15946 + *: "Lire en dernier" 15947 + </dest> 15948 + <voice> 15949 + *: "Lire en dernier" 15950 + </voice> 15951 + </phrase> 15952 + <phrase> 15953 + id: LANG_PLAY_LAST_SHUFFLED 15954 + desc: used in the onplay menu 15955 + user: core 15956 + <source> 15957 + *: "Play Last Shuffled" 15958 + </source> 15959 + <dest> 15960 + *: "Lire en dernier mélangé" 15961 + </dest> 15962 + <voice> 15963 + *: "Lire en dernier mélangé" 15964 + </voice> 15965 + </phrase> 15966 + <phrase> 15967 + id: LANG_VOLUME_ADJUST_MODE 15968 + desc: in system settings 15969 + user: core 15970 + <source> 15971 + *: none 15972 + perceptual_volume: "Volume Adjustment Mode" 15973 + </source> 15974 + <dest> 15975 + *: none 15976 + perceptual_volume: "Méthode d'ajustement du volume" 15977 + </dest> 15978 + <voice> 15979 + *: none 15980 + perceptual_volume: "Méthode d'ajustement du volume" 15981 + </voice> 15982 + </phrase> 15983 + <phrase> 15984 + id: LANG_VOLUME_ADJUST_NORM_STEPS 15985 + desc: in system settings 15986 + user: core 15987 + <source> 15988 + *: none 15989 + perceptual_volume: "Number of Volume Steps" 15990 + </source> 15991 + <dest> 15992 + *: none 15993 + perceptual_volume: "Nombre de niveaux de volume" 15994 + </dest> 15995 + <voice> 15996 + *: none 15997 + perceptual_volume: "Nombre de niveaux de volume" 15998 + </voice> 15999 + </phrase> 16000 + <phrase> 16001 + id: LANG_PERCEPTUAL 16002 + desc: in system settings -> volume adjustment mode 16003 + user: core 16004 + <source> 16005 + *: none 16006 + perceptual_volume: "Perceptual" 16007 + </source> 16008 + <dest> 16009 + *: none 16010 + perceptual_volume: "Perceptual" 16011 + </dest> 16012 + <voice> 16013 + *: none 16014 + perceptual_volume: "Perceptual" 16015 + </voice> 16016 + </phrase> 16017 + <phrase> 16018 + id: LANG_SHOW_TRACKS_WHILE_BROWSING 16019 + desc: in PictureFlow Main Menu 16020 + user: core 16021 + <source> 16022 + *: "Show Tracks While Browsing" 16023 + </source> 16024 + <dest> 16025 + *: "Afficher les pistes lors de la navigation" 16026 + </dest> 16027 + <voice> 16028 + *: "Afficher les pistes lors de la navigation" 16029 + </voice> 16030 + </phrase> 16031 + <phrase> 16032 + id: LANG_GOTO_LAST_ALBUM 16033 + desc: in PictureFlow Main Menu 16034 + user: core 16035 + <source> 16036 + *: "Go to Last Album" 16037 + </source> 16038 + <dest> 16039 + *: "Aller au dernier album" 16040 + </dest> 16041 + <voice> 16042 + *: "Aller au dernier album" 16043 + </voice> 16044 + </phrase> 16045 + <phrase> 16046 + id: LANG_DATABASE_DIR 16047 + desc: in database settings menu 16048 + user: core 16049 + <source> 16050 + *: "Database Directory" 16051 + </source> 16052 + <dest> 16053 + *: "Répertoire de la base de données" 16054 + </dest> 16055 + <voice> 16056 + *: "Répertoire de la base de données" 16057 + </voice> 16058 + </phrase> 16059 + <phrase> 16060 + id: LANG_REMOVE_QUEUED_TRACKS 16061 + desc: Confirmation dialog 16062 + user: core 16063 + <source> 16064 + *: "Remove Queued Tracks?" 16065 + </source> 16066 + <dest> 16067 + *: "Retirer les pistes en file attente ?" 16068 + </dest> 16069 + <voice> 16070 + *: "Retirer les pistes en file attente ?" 16071 + </voice> 16072 + </phrase> 16073 + <phrase> 16074 + id: LANG_QUICK_IGNORE_DIRACHE 16075 + desc: in Settings 16076 + user: core 16077 + <source> 16078 + *: "Quick (Ignore Directory Cache)" 16079 + </source> 16080 + <dest> 16081 + *: "Rapide (Ignorer le cache des répertoires)" 16082 + </dest> 16083 + <voice> 16084 + *: "Rapide (Ignorer le cache des répertoires)" 16085 + </voice> 16086 + </phrase> 16087 + <phrase> 16088 + id: LANG_WPS 16089 + desc: in Settings 16090 + user: core 16091 + <source> 16092 + *: "What's Playing Screen" 16093 + </source> 16094 + <dest> 16095 + *: "Écran En Lecture" 16096 + </dest> 16097 + <voice> 16098 + *: "Écran En Lecture" 16099 + </voice> 16100 + </phrase> 16101 + <phrase> 16102 + id: LANG_DEFAULT_BROWSER 16103 + desc: in Settings 16104 + user: core 16105 + <source> 16106 + *: "Default Browser" 16107 + </source> 16108 + <dest> 16109 + *: "Navigateur par défaut" 16110 + </dest> 16111 + <voice> 16112 + *: "Navigateur par défaut" 16113 + </voice> 16114 + </phrase> 16115 + <phrase> 16116 + id: LANG_AMAZE_MENU 16117 + desc: Amaze game 16118 + user: core 16119 + <source> 16120 + *: "Amaze Main Menu" 16121 + </source> 16122 + <dest> 16123 + *: "Amaze Main Menu" 16124 + </dest> 16125 + <voice> 16126 + *: "Amaze Main Menu" 16127 + </voice> 16128 + </phrase> 16129 + <phrase> 16130 + id: LANG_SET_MAZE_SIZE 16131 + desc: Maze size in Amaze game 16132 + user: core 16133 + <source> 16134 + *: "Set Maze Size" 16135 + </source> 16136 + <dest> 16137 + *: "Set Maze Size" 16138 + </dest> 16139 + <voice> 16140 + *: "Set Maze Size" 16141 + </voice> 16142 + </phrase> 16143 + <phrase> 16144 + id: LANG_VIEW_MAP 16145 + desc: Map in Amaze game 16146 + user: core 16147 + <source> 16148 + *: "View Map" 16149 + </source> 16150 + <dest> 16151 + *: "View Map" 16152 + </dest> 16153 + <voice> 16154 + *: "View Map" 16155 + </voice> 16156 + </phrase> 16157 + <phrase> 16158 + id: LANG_SHOW_COMPASS 16159 + desc: Compass in Amaze game 16160 + user: core 16161 + <source> 16162 + *: "Show Compass" 16163 + </source> 16164 + <dest> 16165 + *: "Show Compass" 16166 + </dest> 16167 + <voice> 16168 + *: "Show Compass" 16169 + </voice> 16170 + </phrase> 16171 + <phrase> 16172 + id: LANG_SHOW_MAP 16173 + desc: Map in Amaze game 16174 + user: core 16175 + <source> 16176 + *: "Show Map" 16177 + </source> 16178 + <dest> 16179 + *: "Show Map" 16180 + </dest> 16181 + <voice> 16182 + *: "Show Map" 16183 + </voice> 16184 + </phrase> 16185 + <phrase> 16186 + id: LANG_REMEMBER_PATH 16187 + desc: Map in Amaze game 16188 + user: core 16189 + <source> 16190 + *: "Remember Path" 16191 + </source> 16192 + <dest> 16193 + *: "Remember Path" 16194 + </dest> 16195 + <voice> 16196 + *: "Remember Path" 16197 + </voice> 16198 + </phrase> 16199 + <phrase> 16200 + id: LANG_USE_LARGE_TILES 16201 + desc: Map in Amaze game 16202 + user: core 16203 + <source> 16204 + *: "Use Large Tiles" 16205 + </source> 16206 + <dest> 16207 + *: "Use Large Tiles" 16208 + </dest> 16209 + <voice> 16210 + *: "Use Large Tiles" 16211 + </voice> 16212 + </phrase> 16213 + <phrase> 16214 + id: LANG_SHOW_SOLUTION 16215 + desc: Map in Amaze game 16216 + user: core 16217 + <source> 16218 + *: "Show Solution" 16219 + </source> 16220 + <dest> 16221 + *: "Show Solution" 16222 + </dest> 16223 + <voice> 16224 + *: "Show Solution" 16225 + </voice> 16226 + </phrase> 16227 + <phrase> 16228 + id: LANG_QUIT_WITHOUT_SAVING 16229 + desc: 16230 + user: core 16231 + <source> 16232 + *: "Quit without saving" 16233 + </source> 16234 + <dest> 16235 + *: "Quit without saving" 16236 + </dest> 16237 + <voice> 16238 + *: "Quit without saving" 16239 + </voice> 16240 + </phrase> 16241 + <phrase> 16242 + id: LANG_GENERATING_MAZE 16243 + desc: Amaze game 16244 + user: core 16245 + <source> 16246 + *: "Generating maze..." 16247 + </source> 16248 + <dest> 16249 + *: "Generating maze..." 16250 + </dest> 16251 + <voice> 16252 + *: "Generating maze" 16253 + </voice> 16254 + </phrase> 16255 + <phrase> 16256 + id: LANG_YOU_WIN 16257 + desc: Success in game 16258 + user: core 16259 + <source> 16260 + *: "You win!" 16261 + </source> 16262 + <dest> 16263 + *: "You win!" 16264 + </dest> 16265 + <voice> 16266 + *: "You win!" 16267 + </voice> 16268 + </phrase> 16269 + <phrase> 16270 + id: LANG_YOU_CHEATED 16271 + desc: Cheated in game 16272 + user: core 16273 + <source> 16274 + *: "You cheated!" 16275 + </source> 16276 + <dest> 16277 + *: "You cheated!" 16278 + </dest> 16279 + <voice> 16280 + *: "You cheated!" 16281 + </voice> 16282 + </phrase> 16283 + <phrase> 16284 + id: LANG_DIFFICULTY_EASY 16285 + desc: Game difficulty 16286 + user: core 16287 + <source> 16288 + *: "Easy" 16289 + </source> 16290 + <dest> 16291 + *: "Easy" 16292 + </dest> 16293 + <voice> 16294 + *: "Easy" 16295 + </voice> 16296 + </phrase> 16297 + <phrase> 16298 + id: LANG_DIFFICULTY_MEDIUM 16299 + desc: Game difficulty 16300 + user: core 16301 + <source> 16302 + *: "Medium" 16303 + </source> 16304 + <dest> 16305 + *: "Medium" 16306 + </dest> 16307 + <voice> 16308 + *: "Medium" 16309 + </voice> 16310 + </phrase> 16311 + <phrase> 16312 + id: LANG_DIFFICULTY_HARD 16313 + desc: Game difficulty 16314 + user: core 16315 + <source> 16316 + *: "Hard" 16317 + </source> 16318 + <dest> 16319 + *: "Hard" 16320 + </dest> 16321 + <voice> 16322 + *: "Hard" 16323 + </voice> 16324 + </phrase> 16325 + <phrase> 16326 + id: LANG_DIFFICULTY_EXPERT 16327 + desc: Game difficulty 16328 + user: core 16329 + <source> 16330 + *: "Expert" 16331 + </source> 16332 + <dest> 16333 + *: "Expert" 16334 + </dest> 16335 + <voice> 16336 + *: "Expert" 16337 + </voice> 16338 + </phrase> 16339 + <phrase> 16340 + id: LANG_STEREOSW_MODE 16341 + desc: Stereo Switch Mode 16342 + user: core 16343 + <source> 16344 + *: "Stereo Switch Mode" 16345 + </source> 16346 + <dest> 16347 + *: "Stereo Switch Mode" 16348 + </dest> 16349 + <voice> 16350 + *: "Stereo Switch Mode" 16351 + </voice> 16352 + </phrase> 16353 + <phrase> 16354 + id: LANG_REVERSE 16355 + desc: in settings_menu 16356 + user: core 16357 + <source> 16358 + *: "Reverse" 16359 + </source> 16360 + <dest> 16361 + *: "Inversé" 16362 + </dest> 16363 + <voice> 16364 + *: "Inversé" 16365 + </voice> 16366 + </phrase> 16367 + <phrase> 16368 + id: LANG_ALWAYS_ZERO 16369 + desc: in settings_menu 16370 + user: core 16371 + <source> 16372 + *: "Always 0" 16373 + </source> 16374 + <dest> 16375 + *: "Toujours 0" 16376 + </dest> 16377 + <voice> 16378 + *: "Toujours 0" 16379 + </voice> 16380 + </phrase> 16381 + <phrase> 16382 + id: LANG_ALWAYS_ONE 16383 + desc: in settings_menu 16384 + user: core 16385 + <source> 16386 + *: "Always 1" 16387 + </source> 16388 + <dest> 16389 + *: "Toujours 1" 16390 + </dest> 16391 + <voice> 16392 + *: "Toujours 1" 16393 + </voice> 16394 + </phrase> 16395 + <phrase> 16396 + id: LANG_LEGAL_NOTICES 16397 + desc: in system menu 16398 + user: core 16399 + <source> 16400 + *: "Legal Notices" 16401 + </source> 16402 + <dest> 16403 + *: "Mentions Légales" 16404 + </dest> 16405 + <voice> 16406 + *: "Mentions Légales" 16407 + </voice> 16408 + </phrase> 16409 + <phrase> 16410 + id: LANG_ERROR_FORMATSTR 16411 + desc: for general use 16412 + user: core 16413 + <source> 16414 + *: "Error: %s" 16415 + </source> 16416 + <dest> 16417 + *: "Erreur: %s" 16418 + </dest> 16419 + <voice> 16420 + *: "Erreur" 16421 + </voice> 16422 + </phrase> 16423 + <phrase> 16424 + id: LANG_MIKMOD_SETTINGS 16425 + desc: mikmod plugin 16426 + user: core 16427 + <source> 16428 + *: "Mikmod Settings" 16429 + </source> 16430 + <dest> 16431 + *: "Mikmod Settings" 16432 + </dest> 16433 + <voice> 16434 + *: "Mik mod Settings" 16435 + </voice> 16436 + </phrase> 16437 + <phrase> 16438 + id: LANG_MIKMOD_MENU 16439 + desc: mikmod plugin 16440 + user: core 16441 + <source> 16442 + *: "Mikmod Menu" 16443 + </source> 16444 + <dest> 16445 + *: "Mikmod Menu" 16446 + </dest> 16447 + <voice> 16448 + *: "Mik mod Menu" 16449 + </voice> 16450 + </phrase> 16451 + <phrase> 16452 + id: LANG_CHESSBOX_MENU 16453 + desc: chessbox plugin 16454 + user: core 16455 + <source> 16456 + *: "Chessbox Menu" 16457 + </source> 16458 + <dest> 16459 + *: "Chessbox Menu" 16460 + </dest> 16461 + <voice> 16462 + *: "Chess box Menu" 16463 + </voice> 16464 + </phrase> 16465 + <phrase> 16466 + id: VOICE_INVALID_VOICE_FILE 16467 + desc: played if the voice file fails to load 16468 + user: core 16469 + <source> 16470 + *: "" 16471 + </source> 16472 + <dest> 16473 + *: "" 16474 + </dest> 16475 + <voice> 16476 + *: "Fichier Voix non valide" 16477 + </voice> 16478 + </phrase> 16479 + <phrase> 16480 + id: LANG_PERCENT_FORMAT 16481 + desc: percent formatting ( `10%` is default , for `10 %` use '%ld %%' , for `%10` use '%%%ld' and so on) 16482 + user: core 16483 + <source> 16484 + *: "%ld%%" 16485 + </source> 16486 + <dest> 16487 + *: "%ld%%" 16488 + </dest> 16489 + <voice> 16490 + *: none 16491 + </voice> 16492 + </phrase> 16493 + <phrase> 16494 + id: LANG_CHOOSE_FILE 16495 + desc: file_picker plugin ask user to select a file 16496 + user: core 16497 + <source> 16498 + *: "Choose File" 16499 + </source> 16500 + <dest> 16501 + *: "Choisir un fichier" 16502 + </dest> 16503 + <voice> 16504 + *: "Choisir un fichier" 16505 + </voice> 16506 + </phrase> 16507 + <phrase> 16508 + id: LANG_REMAINING 16509 + desc: Playing Time 16510 + user: core 16511 + <source> 16512 + *: "Remaining" 16513 + </source> 16514 + <dest> 16515 + *: "Restant" 16516 + </dest> 16517 + <voice> 16518 + *: "Restant" 16519 + </voice> 16520 + </phrase>
+2 -2
apps/lang/italiano.lang
··· 16443 16443 desc: a summary splash screen that appear on the database browser when you try to create a playlist from the database browser that exceeds your system limit 16444 16444 user: core 16445 16445 <source> 16446 - *: "Selection too big, %d random tracks will be picked from it" 16446 + *: "Selection too big, %d random tracks will be selected" 16447 16447 </source> 16448 16448 <dest> 16449 16449 *: "Selezione troppo grande, verranno prese solamente %d tracce casuali dalla selezione" 16450 16450 </dest> 16451 16451 <voice> 16452 - *: "Selezione troppo grande, verranno prese solamente %d tracce casuali dalla selezione" 16452 + *: "Selezione troppo grande, verranno prese solamente alcune tracce casuali dalla selezione" 16453 16453 </voice> 16454 16454 </phrase> 16455 16455 <phrase>
+31 -3
apps/lang/korean.lang
··· 16470 16470 desc: a summary splash screen that appear on the database browser when you try to create a playlist from the database browser that exceeds your system limit 16471 16471 user: core 16472 16472 <source> 16473 - *: "Selection too big, %d random tracks will be picked from it" 16473 + *: "Selection too big, %d random tracks will be selected" 16474 16474 </source> 16475 16475 <dest> 16476 - *: "선택 항목이 너무 커서, %d개의 무작위 트랙 선택" 16476 + *: "선택이 너무 커서, %d 개의 무작위 트랙이 선택됨" 16477 16477 </dest> 16478 16478 <voice> 16479 - *: "선택 항목이 너무 커서, %d개의 무작위 트랙 선택" 16479 + *: "선택이 너무 커서 무작위로 선택되는 트랙이 줄어듬" 16480 + </voice> 16481 + </phrase> 16482 + <phrase> 16483 + id: LANG_DISPLAY_TITLEALBUM_FROMTAGS 16484 + desc: track display options 16485 + user: core 16486 + <source> 16487 + *: "Title & Album from ID3 tags" 16488 + </source> 16489 + <dest> 16490 + *: "ID3 태그 제목 & 앨범" 16491 + </dest> 16492 + <voice> 16493 + *: "태그의 제목 및 앨범" 16494 + </voice> 16495 + </phrase> 16496 + <phrase> 16497 + id: LANG_DISPLAY_TITLE_FROMTAGS 16498 + desc: track display options 16499 + user: core 16500 + <source> 16501 + *: "Title from ID3 tags" 16502 + </source> 16503 + <dest> 16504 + *: "ID3 태그 제목" 16505 + </dest> 16506 + <voice> 16507 + *: "태그 제목" 16480 16508 </voice> 16481 16509 </phrase>
+29 -1
apps/lang/polski.lang
··· 16463 16463 desc: a summary splash screen that appear on the database browser when you try to create a playlist from the database browser that exceeds your system limit 16464 16464 user: core 16465 16465 <source> 16466 - *: "Selection too big, %d random tracks will be picked from it" 16466 + *: "Selection too big, %d random tracks will be selected" 16467 16467 </source> 16468 16468 <dest> 16469 16469 *: "Wybór jest zbyt duży, zostanie z niego wybranych %d losowych utworów" ··· 16472 16472 *: "Wybór jest zbyt duży, zostanie z niego wybrana mniejsza liczba losowych utworów" 16473 16473 </voice> 16474 16474 </phrase> 16475 + <phrase> 16476 + id: LANG_DISPLAY_TITLEALBUM_FROMTAGS 16477 + desc: track display options 16478 + user: core 16479 + <source> 16480 + *: "Title & Album from ID3 tags" 16481 + </source> 16482 + <dest> 16483 + *: "Tytuł i album ze znaczników ID3" 16484 + </dest> 16485 + <voice> 16486 + *: "Tytuł i album ze znaczników i de trzy" 16487 + </voice> 16488 + </phrase> 16489 + <phrase> 16490 + id: LANG_DISPLAY_TITLE_FROMTAGS 16491 + desc: track display options 16492 + user: core 16493 + <source> 16494 + *: "Title from ID3 tags" 16495 + </source> 16496 + <dest> 16497 + *: "Tytuł ze znaczników ID3" 16498 + </dest> 16499 + <voice> 16500 + *: "Tytuł ze znaczników i de trzy" 16501 + </voice> 16502 + </phrase>
+637 -790
apps/lang/russian.lang
··· 317 317 </phrase> 318 318 <phrase> 319 319 id: LANG_CHANNEL_STEREO 320 - desc: in sound_settings 320 + desc: in sound_settings and radio screen 321 321 user: core 322 322 <source> 323 323 *: "Stereo" ··· 331 331 </phrase> 332 332 <phrase> 333 333 id: LANG_CHANNEL_MONO 334 - desc: in sound_settings 334 + desc: in sound_settings and radio screen 335 335 user: core 336 336 <source> 337 337 *: "Mono" ··· 697 697 </voice> 698 698 </phrase> 699 699 <phrase> 700 - id: LANG_EQUALIZER_EDIT_MODE 701 - desc: in the equalizer settings menu 702 - user: core 703 - <source> 704 - *: "Edit mode: %s" 705 - </source> 706 - <dest> 707 - *: "Режим редактирования: %s" 708 - </dest> 709 - <voice> 710 - *: "" 711 - </voice> 712 - </phrase> 713 - <phrase> 714 700 id: LANG_EQUALIZER_GAIN_ITEM 715 701 desc: in the equalizer settings menu 716 702 user: core ··· 1431 1417 user: core 1432 1418 <source> 1433 1419 *: "Peak Meter" 1434 - masd: none 1435 1420 </source> 1436 1421 <dest> 1437 1422 *: "Уровень сигнала" 1438 - masd: none 1439 1423 </dest> 1440 1424 <voice> 1441 1425 *: "Уровень сигнала" 1442 - masd: none 1443 1426 </voice> 1444 1427 </phrase> 1445 1428 <phrase> ··· 2036 2019 </voice> 2037 2020 </phrase> 2038 2021 <phrase> 2039 - id: LANG_RECORD_DIRECTORY 2040 - desc: in recording settings_menu 2041 - user: core 2042 - <source> 2043 - *: none 2044 - recording: "Directory" 2045 - </source> 2046 - <dest> 2047 - *: none 2048 - recording: "Папка" 2049 - </dest> 2050 - <voice> 2051 - *: none 2052 - recording: "Папка" 2053 - </voice> 2054 - </phrase> 2055 - <phrase> 2056 2022 id: LANG_RECORD_TRIGGER 2057 2023 desc: in recording settings_menu 2058 2024 user: core ··· 2818 2784 user: core 2819 2785 <source> 2820 2786 *: "Peak Release" 2821 - masd: none 2822 2787 </source> 2823 2788 <dest> 2824 2789 *: "Сброс пиков" 2825 - masd: none 2826 2790 </dest> 2827 2791 <voice> 2828 2792 *: "Сброс пиков" 2829 - masd: none 2830 2793 </voice> 2831 2794 </phrase> 2832 2795 <phrase> ··· 2835 2798 user: core 2836 2799 <source> 2837 2800 *: "Peak Hold Time" 2838 - masd: none 2839 2801 </source> 2840 2802 <dest> 2841 2803 *: "Время удержания пиков" 2842 - masd: none 2843 2804 </dest> 2844 2805 <voice> 2845 2806 *: "Время удержания пиков" 2846 - masd: none 2847 2807 </voice> 2848 2808 </phrase> 2849 2809 <phrase> ··· 2852 2812 user: core 2853 2813 <source> 2854 2814 *: "Clip Hold Time" 2855 - masd: none 2856 2815 </source> 2857 2816 <dest> 2858 2817 *: "Время удержания индикатора" 2859 - masd: none 2860 2818 </dest> 2861 2819 <voice> 2862 2820 *: "Время удержания индикатора" 2863 - masd: none 2864 2821 </voice> 2865 2822 </phrase> 2866 2823 <phrase> ··· 2869 2826 user: core 2870 2827 <source> 2871 2828 *: "Eternal" 2872 - masd: none 2873 2829 </source> 2874 2830 <dest> 2875 2831 *: "Постоянно" 2876 - masd: none 2877 2832 </dest> 2878 2833 <voice> 2879 2834 *: "Постоянно" 2880 - masd: none 2881 2835 </voice> 2882 2836 </phrase> 2883 2837 <phrase> ··· 2886 2840 user: core 2887 2841 <source> 2888 2842 *: "Scale" 2889 - masd: none 2890 2843 </source> 2891 2844 <dest> 2892 2845 *: "Шкала" 2893 - masd: none 2894 2846 </dest> 2895 2847 <voice> 2896 2848 *: "Шкала" 2897 - masd: none 2898 2849 </voice> 2899 2850 </phrase> 2900 2851 <phrase> ··· 2903 2854 user: core 2904 2855 <source> 2905 2856 *: "Logarithmic (dB)" 2906 - masd: none 2907 2857 </source> 2908 2858 <dest> 2909 2859 *: "Логарифмическая (дБ)" 2910 - masd: none 2911 2860 </dest> 2912 2861 <voice> 2913 2862 *: "Логарифмическая в децибелах" 2914 - masd: none 2915 2863 </voice> 2916 2864 </phrase> 2917 2865 <phrase> ··· 2920 2868 user: core 2921 2869 <source> 2922 2870 *: "Linear (%)" 2923 - masd: none 2924 2871 </source> 2925 2872 <dest> 2926 2873 *: "Линейная (%)" 2927 - masd: none 2928 2874 </dest> 2929 2875 <voice> 2930 2876 *: "Линейная в процентах" 2931 - masd: none 2932 2877 </voice> 2933 2878 </phrase> 2934 2879 <phrase> ··· 2937 2882 user: core 2938 2883 <source> 2939 2884 *: "Minimum Of Range" 2940 - masd: none 2941 2885 </source> 2942 2886 <dest> 2943 2887 *: "Нижняя граница диапазона" 2944 - masd: none 2945 2888 </dest> 2946 2889 <voice> 2947 2890 *: "Нижняя граница диапазона" 2948 - masd: none 2949 2891 </voice> 2950 2892 </phrase> 2951 2893 <phrase> ··· 2954 2896 user: core 2955 2897 <source> 2956 2898 *: "Maximum Of Range" 2957 - masd: none 2958 2899 </source> 2959 2900 <dest> 2960 2901 *: "Верхняя граница диапазона" 2961 - masd: none 2962 2902 </dest> 2963 2903 <voice> 2964 2904 *: "Верхняя граница диапазона" 2965 - masd: none 2966 2905 </voice> 2967 2906 </phrase> 2968 2907 <phrase> ··· 3354 3293 </voice> 3355 3294 </phrase> 3356 3295 <phrase> 3357 - id: LANG_INSERT 3358 - desc: in onplay menu. insert a track/playlist into dynamic playlist. 3359 - user: core 3360 - <source> 3361 - *: "Insert" 3362 - </source> 3363 - <dest> 3364 - *: "Вставить" 3365 - </dest> 3366 - <voice> 3367 - *: "Вставить" 3368 - </voice> 3369 - </phrase> 3370 - <phrase> 3371 - id: LANG_INSERT_FIRST 3372 - desc: in onplay menu. insert a track/playlist into dynamic playlist. 3373 - user: core 3374 - <source> 3375 - *: "Insert Next" 3376 - </source> 3377 - <dest> 3378 - *: "Вставить следующим" 3379 - </dest> 3380 - <voice> 3381 - *: "Вставить следующим" 3382 - </voice> 3383 - </phrase> 3384 - <phrase> 3385 - id: LANG_INSERT_LAST 3386 - desc: in onplay menu. append a track/playlist into dynamic playlist. 3387 - user: core 3388 - <source> 3389 - *: "Insert Last" 3390 - </source> 3391 - <dest> 3392 - *: "Вставить в конец" 3393 - </dest> 3394 - <voice> 3395 - *: "Вставить в конец" 3396 - </voice> 3397 - </phrase> 3398 - <phrase> 3399 - id: LANG_INSERT_SHUFFLED 3400 - desc: in onplay menu. insert a track/playlist randomly into dynamic playlist 3401 - user: core 3402 - <source> 3403 - *: "Insert Shuffled" 3404 - </source> 3405 - <dest> 3406 - *: "Вставить в случайное место" 3407 - </dest> 3408 - <voice> 3409 - *: "Вставить в случайное место" 3410 - </voice> 3411 - </phrase> 3412 - <phrase> 3413 3296 id: LANG_QUEUE 3414 3297 desc: The verb/action Queue 3415 3298 user: core ··· 3525 3408 </voice> 3526 3409 </phrase> 3527 3410 <phrase> 3528 - id: LANG_BATTERY_TRICKLE_CHARGE 3529 - desc: in info display, shows that trickle charge is running 3530 - user: core 3531 - <source> 3532 - *: none 3533 - charging: "Battery: Trickle Chg" 3534 - </source> 3535 - <dest> 3536 - *: none 3537 - charging: "Аккумулятор: Импульсн. заряд" 3538 - </dest> 3539 - <voice> 3540 - *: none 3541 - charging: "Аккумулятор: Импульсн. заряд" 3542 - </voice> 3543 - </phrase> 3544 - <phrase> 3545 3411 id: LANG_BATTERY_TIME 3546 3412 desc: battery level in % and estimated time remaining 3547 3413 user: core 3548 3414 <source> 3549 3415 *: "Battery: %d%% %dh %dm" 3550 3416 ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm" 3551 - iriverifp7xx: "%d%% %dh %dm" 3552 3417 </source> 3553 3418 <dest> 3554 3419 *: "%d%% %dч %dм" 3555 - ipodmini1g,ipodmini2g,iriverh10,iriverifp7xx: "%d%% %dч %dм" 3420 + ipodmini1g,ipodmini2g,iriverh10: "%d%% %dч %dм" 3556 3421 </dest> 3557 3422 <voice> 3558 3423 *: "Заряд аккумулятора" ··· 3592 3457 user: core 3593 3458 <source> 3594 3459 *: "Int:" 3595 - xduoox3: "mSD1:" 3596 3460 hibylinux: "mSD:" 3461 + xduoox3: "mSD1:" 3597 3462 </source> 3598 3463 <dest> 3599 3464 *: "Внутр:" 3465 + hibylinux: "mSD:" 3600 3466 xduoox3: "mSD1:" 3601 - hibylinux: "mSD:" 3602 3467 </dest> 3603 3468 <voice> 3604 3469 *: "Внутр" 3605 - xduoox3: "микро Эс Ди 1" 3606 3470 hibylinux: "микро Эс Ди" 3471 + xduoox3: "микро Эс Ди 1" 3607 3472 </voice> 3608 3473 </phrase> 3609 3474 <phrase> 3610 3475 id: LANG_DISK_NAME_MMC 3611 - desc: in info menu; name for external disk with multivolume (Ondio; keep short!) 3476 + desc: in info menu; name for external disk with multivolume (keep short!) 3612 3477 user: core 3613 3478 <source> 3614 3479 *: none 3615 - multivolume: "HD1" 3480 + hibylinux: "USB:" 3481 + multivolume: "HD1:" 3616 3482 sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" 3617 3483 xduoox3: "mSD2:" 3618 3484 </source> 3619 3485 <dest> 3620 3486 *: none 3487 + hibylinux: "USB:" 3621 3488 multivolume: "HD1" 3622 3489 sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" 3623 3490 xduoox3: "mSD2:" 3624 3491 </dest> 3625 3492 <voice> 3626 3493 *: none 3494 + hibylinux: "U S B" 3627 3495 multivolume: "Эйч Ди 1" 3628 3496 sansac200*,sansaclipplus,sansae200*,sansafuze*: "микро Эс Ди" 3629 3497 xduoox3: "микро Эс Ди 2" ··· 3772 3640 *: none 3773 3641 gigabeatfx,mrobe500,rtc: "ВЫКЛ. = Отмена" 3774 3642 gigabeats: "НАЗАД = Отмена" 3643 + sansafuzeplus: "BACK = Revert" 3775 3644 gogearsa9200: "ЛЕВО = Отмена" 3776 3645 iaudiom5,iaudiox5: "ЗАПИСЬ = Отмена" 3777 3646 ipod*,mpiohd300,sansac200*: "МЕНЮ = Отмена" ··· 3783 3652 </dest> 3784 3653 <voice> 3785 3654 *: none 3655 + gogearsa9200,iaudiom5,iaudiox5,ipod*,sansac200*,iriverh10,iriverh10_5gb,sansae200*,iriverh100,iriverh120,iriverh300,mrobe100,rtc,samsungyh*: "" 3786 3656 </voice> 3787 3657 </phrase> 3788 3658 <phrase> ··· 3840 3710 </dest> 3841 3711 <voice> 3842 3712 *: none 3713 + iaudiom5,iaudiox5,iriverh100,iriverh120,iriverh300,recording,samsungyh*,sansac200*,sansae200*,vibe500: "" 3843 3714 </voice> 3844 3715 </phrase> 3845 3716 <phrase> ··· 3911 3782 </voice> 3912 3783 </phrase> 3913 3784 <phrase> 3914 - id: LANG_DB_INF 3915 - desc: -inf db for values below measurement 3916 - user: core 3917 - <source> 3918 - *: none 3919 - recording: "-inf" 3920 - </source> 3921 - <dest> 3922 - *: none 3923 - recording: "-inf" 3924 - </dest> 3925 - <voice> 3926 - *: none 3927 - recording: "-inf" 3928 - </voice> 3929 - </phrase> 3930 - <phrase> 3931 3785 id: LANG_ALARM_MOD_TIME 3932 3786 desc: The current alarm time shown in the alarm menu for the RTC alarm mod. 3933 3787 user: core ··· 3962 3816 </voice> 3963 3817 </phrase> 3964 3818 <phrase> 3965 - id: LANG_ALARM_MOD_SHUTDOWN 3966 - desc: The text that tells the user that the alarm time is ok and the device shuts off (for the RTC alarm mod). 3967 - user: core 3968 - <source> 3969 - *: none 3970 - alarm: "Alarm Set" 3971 - </source> 3972 - <dest> 3973 - *: none 3974 - alarm: "Установить будильник" 3975 - </dest> 3976 - <voice> 3977 - *: none 3978 - alarm: "Установить будильник" 3979 - </voice> 3980 - </phrase> 3981 - <phrase> 3982 3819 id: LANG_ALARM_MOD_ERROR 3983 3820 desc: The text that tells that the time is incorrect (for the RTC alarm mod). 3984 3821 user: core ··· 3993 3830 <voice> 3994 3831 *: none 3995 3832 alarm: "Будильник слишком скоро!" 3996 - </voice> 3997 - </phrase> 3998 - <phrase> 3999 - id: LANG_ALARM_MOD_KEYS 4000 - desc: Shown key functions in alarm menu (for the RTC alarm mod). 4001 - user: core 4002 - <source> 4003 - *: none 4004 - alarm: "PLAY=Set OFF=Cancel" 4005 - gigabeats: "SELECT=Set POWER=Cancel" 4006 - ipod*: "SELECT=Set MENU=Cancel" 4007 - iriverh10,iriverh10_5gb: "SELECT=Set PREV=Cancel" 4008 - mpiohd300: "ENTER=Set MENU=Cancel" 4009 - sansafuzeplus: "SELECT=Set BACK=Cancel" 4010 - vibe500: "OK=Set C=Cancel" 4011 - </source> 4012 - <dest> 4013 - *: none 4014 - alarm: "ВОСПР.=Уст., ВЫКЛ.=Отм." 4015 - gigabeats: "ВЫБОР=Уст., ВЫКЛ.=Отм." 4016 - ipod*: "ВЫБОР=Уст., МЕНЮ=Отм." 4017 - iriverh10,iriverh10_5gb: "ВЫБОР=Уст., ПРЕД.=Отм." 4018 - mpiohd300: "ENTER=Уст., MENU=Отм." 4019 - sansafuzeplus: "SELECT=Уст., BACK=Отм." 4020 - vibe500: "OK=Уст., C=Отм." 4021 - </dest> 4022 - <voice> 4023 - *: none 4024 - alarm,gigabeats,ipod*,iriverh10,iriverh10_5gb: "" 4025 3833 </voice> 4026 3834 </phrase> 4027 3835 <phrase> ··· 4193 4001 </dest> 4194 4002 <voice> 4195 4003 *: "Усиление трэка" 4196 - </voice> 4197 - </phrase> 4198 - <phrase> 4199 - id: LANG_ID3_ALBUM_GAIN 4200 - desc: in tag viewer 4201 - user: core 4202 - <source> 4203 - *: "Album Gain" 4204 - </source> 4205 - <dest> 4206 - *: "Усиление альбома" 4207 - </dest> 4208 - <voice> 4209 - *: "Усиление альбома" 4210 4004 </voice> 4211 4005 </phrase> 4212 4006 <phrase> ··· 5823 5617 *: "Saved %d tracks (%s)" 5824 5618 </source> 5825 5619 <dest> 5826 - *: "Сохранено %d треков (%d)" 5620 + *: "Saved %d tracks (%s)" 5827 5621 </dest> 5828 5622 <voice> 5829 5623 *: "Трэков сохранено" ··· 5869 5663 </dest> 5870 5664 <voice> 5871 5665 *: "Нечего продолжать" 5872 - </voice> 5873 - </phrase> 5874 - <phrase> 5875 - id: LANG_PLAYLIST_CONTROL_UPDATE_ERROR 5876 - desc: Playlist error 5877 - user: core 5878 - <source> 5879 - *: "Error updating playlist control file" 5880 - </source> 5881 - <dest> 5882 - *: "Ошибка при обновлении файла списка воспроизведения" 5883 - </dest> 5884 - <voice> 5885 - *: "Ошибка при обновлении файла списка воспроизведения" 5886 5666 </voice> 5887 5667 </phrase> 5888 5668 <phrase> ··· 6044 5824 </voice> 6045 5825 </phrase> 6046 5826 <phrase> 6047 - id: LANG_BUTTONBAR_MENU 6048 - desc: in button bar 6049 - user: core 6050 - <source> 6051 - *: none 6052 - radio_screen_button_bar: "Menu" 6053 - </source> 6054 - <dest> 6055 - *: none 6056 - radio_screen_button_bar: "Меню" 6057 - </dest> 6058 - <voice> 6059 - *: none 6060 - radio_screen_button_bar: "" 6061 - </voice> 6062 - </phrase> 6063 - <phrase> 6064 - id: LANG_FM_BUTTONBAR_EXIT 6065 - desc: in radio screen 6066 - user: core 6067 - <source> 6068 - *: none 6069 - radio_screen_button_bar: "Exit" 6070 - </source> 6071 - <dest> 6072 - *: none 6073 - radio_screen_button_bar: "Выход" 6074 - </dest> 6075 - <voice> 6076 - *: none 6077 - radio_screen_button_bar: "" 6078 - </voice> 6079 - </phrase> 6080 - <phrase> 6081 - id: LANG_FM_BUTTONBAR_ACTION 6082 - desc: in radio screen 6083 - user: core 6084 - <source> 6085 - *: none 6086 - radio_screen_button_bar: "Action" 6087 - </source> 6088 - <dest> 6089 - *: none 6090 - radio_screen_button_bar: "Действие" 6091 - </dest> 6092 - <voice> 6093 - *: none 6094 - radio_screen_button_bar: "" 6095 - </voice> 6096 - </phrase> 6097 - <phrase> 6098 - id: LANG_FM_BUTTONBAR_ADD 6099 - desc: in radio screen 6100 - user: core 6101 - <source> 6102 - *: none 6103 - radio_screen_button_bar: "Add" 6104 - </source> 6105 - <dest> 6106 - *: none 6107 - radio_screen_button_bar: "Добавить" 6108 - </dest> 6109 - <voice> 6110 - *: none 6111 - radio_screen_button_bar: "" 6112 - </voice> 6113 - </phrase> 6114 - <phrase> 6115 - id: LANG_FM_BUTTONBAR_RECORD 6116 - desc: in radio screen 6117 - user: core 6118 - <source> 6119 - *: none 6120 - radio_screen_button_bar: "Record" 6121 - </source> 6122 - <dest> 6123 - *: none 6124 - radio_screen_button_bar: "Запись" 6125 - </dest> 6126 - <voice> 6127 - *: none 6128 - radio_screen_button_bar: "" 6129 - </voice> 6130 - </phrase> 6131 - <phrase> 6132 5827 id: LANG_FM_MONO_MODE 6133 5828 desc: in radio screen 6134 5829 user: core ··· 6333 6028 </phrase> 6334 6029 <phrase> 6335 6030 id: LANG_OFF_ABORT 6336 - desc: Used on archosrecorder models 6031 + desc: Used on many models 6337 6032 user: core 6338 6033 <source> 6339 6034 *: "OFF to abort" ··· 6348 6043 *: "ВЫКЛ. для отмены" 6349 6044 gigabeatfx: "ВЫКЛ. для отмены" 6350 6045 gigabeats: "НАЗАД для отмены" 6046 + sansafuzeplus: "BACK to abort" 6351 6047 iaudiom5,iaudiox5: "ВОСПР. для отмены" 6352 6048 ipod*: "ПАУЗА для отмены" 6353 6049 iriverh10,iriverh10_5gb,sansac200*,sansae200*,vibe500: "ПРЕД. для отмены" ··· 6485 6181 </phrase> 6486 6182 <phrase> 6487 6183 id: LANG_PLUGIN_WRONG_MODEL 6488 - desc: The plugin is not compatible with the archos model trying to run it 6184 + desc: The plugin is not compatible with the player model trying to run it 6489 6185 user: core 6490 6186 <source> 6491 6187 *: "Incompatible model" ··· 6697 6393 user: core 6698 6394 <source> 6699 6395 *: "Building database... %d found (OFF to return)" 6700 - archosplayer: "Building DB %d found" 6701 6396 gigabeat*,iaudiom5,iaudiox5,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)" 6702 6397 gogearsa9200: "Building database... %d found (REW to return)" 6703 6398 ipod*,iriverh10,iriverh10_5gb,sansac200*,sansae200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" ··· 6705 6400 </source> 6706 6401 <dest> 6707 6402 *: "Построение базы... %d найдено (ВЫКЛ. для отмены)" 6708 - archosplayer: "Построение БД... %d найдено" 6709 6403 gigabeat*,iaudiom5,iaudiox5,mrobe100,samsungyh*: "Построение базы... %d найдено (ВЛЕВО для отмены)" 6710 6404 gogearsa9200: "Построение базы... %d найдено (РЕВЕРС. для отмены)" 6711 6405 ipod*,iriverh10,iriverh10_5gb,sansac200*,sansae200*,sansafuze*,vibe500: "Построение базы... %d найдено (ПРЕД. для отмены)" ··· 7318 7012 user: core 7319 7013 <source> 7320 7014 *: "Buffer:" 7321 - archosplayer: "Buf:" 7322 7015 </source> 7323 7016 <dest> 7324 7017 *: "Буфер:" 7325 - archosplayer: "Буф:" 7326 7018 </dest> 7327 7019 <voice> 7328 7020 *: "Буфер:" ··· 7396 7088 user: core 7397 7089 <source> 7398 7090 *: "PLAY = Yes" 7399 - archosplayer: "(PLAY/STOP)" 7400 7091 cowond2*: "MENU, or top-right = Yes" 7401 - creativezen*: "SELECT = Yes" 7402 - gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Yes" 7092 + creativezen*,gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Yes" 7403 7093 iriverh100,iriverh120,iriverh300: "NAVI = Yes" 7404 7094 mrobe500: "PLAY, POWER, or top-right = Yes" 7405 7095 vibe500: "OK = Yes" 7406 7096 </source> 7407 7097 <dest> 7408 7098 *: "ВОСПР. = Да" 7409 - archosplayer: "(ВОСПР./СТОП)" 7410 7099 cowond2*: "МЕНЮ или прав. верх. = Да" 7411 7100 creativezen*: "Выбрать = Да" 7412 7101 gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "ВЫБРАТЬ = Да" ··· 7434 7123 </source> 7435 7124 <dest> 7436 7125 *: none 7437 - gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansae200*,sansafuze*: "ВЫБОР = Установить" 7126 + gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "ВЫБОР = Установить" 7438 7127 gogearsa9200,samsungyh*: "ВОСПР. = Установить" 7439 7128 iriverh100,iriverh120,iriverh300: "НАВИГ. = Установить" 7440 7129 mpiohd300: "ENTER = Установить" ··· 7444 7133 </dest> 7445 7134 <voice> 7446 7135 *: none 7447 - gigabeat*,gogearsa9200,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh100,iriverh10_5gb,iriverh120,iriverh300,mrobe100,rtc,sansac200*,sansae200*: "" 7136 + gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansae200*,gogearsa9200,samsungyh*,iriverh100,iriverh120,iriverh300,rtc: "" 7448 7137 </voice> 7449 7138 </phrase> 7450 7139 <phrase> ··· 7453 7142 user: core 7454 7143 <source> 7455 7144 *: "Any Other = No" 7456 - archosplayer: none 7457 7145 </source> 7458 7146 <dest> 7459 7147 *: "Любая другая = Нет" 7460 - archosplayer: none 7461 7148 </dest> 7462 7149 <voice> 7463 7150 *: "" 7464 - archosplayer: none 7465 7151 </voice> 7466 7152 </phrase> 7467 7153 <phrase> ··· 7768 7454 user: core 7769 7455 <source> 7770 7456 *: "End of Song List" 7771 - archosplayer: "End of List" 7772 7457 </source> 7773 7458 <dest> 7774 7459 *: "Конец списка" 7775 - archosplayer: "Конец списка" 7776 7460 </dest> 7777 7461 <voice> 7778 7462 *: "Конец списка" ··· 8199 7883 <voice> 8200 7884 *: none 8201 7885 headphone_detection: "Пауза при отключении наушников" 8202 - </voice> 8203 - </phrase> 8204 - <phrase> 8205 - id: LANG_REPLACE 8206 - desc: in onplay menu. Replace the current playlist with a new one. 8207 - user: core 8208 - <source> 8209 - *: "Play Next" 8210 - </source> 8211 - <dest> 8212 - *: "Играть следующий" 8213 - </dest> 8214 - <voice> 8215 - *: "Играть следующий" 8216 7886 </voice> 8217 7887 </phrase> 8218 7888 <phrase> ··· 8720 8390 </voice> 8721 8391 </phrase> 8722 8392 <phrase> 8723 - id: LANG_CATALOG_ADD_TO 8724 - desc: in onplay playlist catalogue submenu 8725 - user: core 8726 - <source> 8727 - *: "Add to Playlist" 8728 - </source> 8729 - <dest> 8730 - *: "Добавить в список" 8731 - </dest> 8732 - <voice> 8733 - *: "Добавить в список" 8734 - </voice> 8735 - </phrase> 8736 - <phrase> 8737 8393 id: LANG_BUTTONLIGHT_BRIGHTNESS 8738 8394 desc: in settings_menu 8739 8395 user: core ··· 8914 8570 </dest> 8915 8571 <voice> 8916 8572 *: "Не продолжать" 8917 - </voice> 8918 - </phrase> 8919 - <phrase> 8920 - id: LANG_BOOKMARK_CONTEXT_DELETE 8921 - desc: bookmark context menu, delete this bookmark 8922 - user: core 8923 - <source> 8924 - *: "Delete" 8925 - </source> 8926 - <dest> 8927 - *: "Удалить" 8928 - </dest> 8929 - <voice> 8930 - *: "Удалить" 8931 8573 </voice> 8932 8574 </phrase> 8933 8575 <phrase> ··· 9139 8781 </voice> 9140 8782 </phrase> 9141 8783 <phrase> 9142 - id: LANG_CATALOG_VIEW 9143 - desc: in onplay playlist catalogue submenu 9144 - user: core 9145 - <source> 9146 - *: "View Catalogue" 9147 - </source> 9148 - <dest> 9149 - *: "Каталог" 9150 - </dest> 9151 - <voice> 9152 - *: "Каталог" 9153 - </voice> 9154 - </phrase> 9155 - <phrase> 9156 8784 id: VOICE_EXT_CUESHEET 9157 8785 desc: 9158 8786 user: core ··· 9410 9038 </phrase> 9411 9039 <phrase> 9412 9040 id: LANG_AUDIOSCROBBLER 9413 - desc: "Last.fm Log" in the playback menu 9041 + desc: "Last.fm Logger" in Plugin/apps/scrobbler 9414 9042 user: core 9415 9043 <source> 9416 - *: "Last.fm Log" 9044 + *: "Last.fm Logger" 9417 9045 </source> 9418 9046 <dest> 9419 9047 *: "Отчёт для Last.fm" ··· 9534 9162 *: "%s не существует" 9535 9163 </dest> 9536 9164 <voice> 9537 - *: "" 9165 + *: "%s не существует" 9538 9166 </voice> 9539 9167 </phrase> 9540 9168 <phrase> ··· 9580 9208 <voice> 9581 9209 *: none 9582 9210 recording: "Тип триггера" 9583 - </voice> 9584 - </phrase> 9585 - <phrase> 9586 - id: LANG_SET_AS_REC_DIR 9587 - desc: used in the onplay menu to set a recording dir 9588 - user: core 9589 - <source> 9590 - *: none 9591 - recording: "Set As Recording Directory" 9592 - </source> 9593 - <dest> 9594 - *: none 9595 - recording: "Установить как папку записи" 9596 - </dest> 9597 - <voice> 9598 - *: none 9599 - recording: "Установить как папку записи" 9600 9211 </voice> 9601 9212 </phrase> 9602 9213 <phrase> ··· 10604 10215 </voice> 10605 10216 </phrase> 10606 10217 <phrase> 10607 - id: LANG_SCROLLBAR_POSITION 10608 - desc: in Settings -> General -> Display -> Status-/Scrollbar 10609 - user: core 10610 - <source> 10611 - *: "Scroll Bar Position" 10612 - </source> 10613 - <dest> 10614 - *: "Позиция полосы прокрутки" 10615 - </dest> 10616 - <voice> 10617 - *: "Позиция полосы прокрутки" 10618 - </voice> 10619 - </phrase> 10620 - <phrase> 10621 10218 id: LANG_REMOTE_STATUSBAR 10622 10219 desc: in Settings -> General -> Display -> statusbar 10623 10220 user: core ··· 10691 10288 </dest> 10692 10289 <voice> 10693 10290 *: "Обновление при остановке" 10694 - </voice> 10695 - </phrase> 10696 - <phrase> 10697 - id: LANG_INSERT_LAST_SHUFFLED 10698 - desc: in onplay menu. insert a playlist randomly at end of dynamic playlist 10699 - user: core 10700 - <source> 10701 - *: "Insert Last Shuffled" 10702 - </source> 10703 - <dest> 10704 - *: "Добавить случайный к концу" 10705 - </dest> 10706 - <voice> 10707 - *: "Добавить случайный к концу" 10708 10291 </voice> 10709 10292 </phrase> 10710 10293 <phrase> ··· 11270 10853 </voice> 11271 10854 </phrase> 11272 10855 <phrase> 11273 - id: LANG_STATUSBAR_CUSTOM 11274 - desc: if this translation is compatible with LANG_CHANNEL_CUSTOM, then please use the same translation. it can be combined later then 11275 - user: core 11276 - <source> 11277 - *: "Custom" 11278 - </source> 11279 - <dest> 11280 - *: "Пользовательские" 11281 - </dest> 11282 - <voice> 11283 - *: "Пользовательские" 11284 - </voice> 11285 - </phrase> 11286 - <phrase> 11287 10856 id: LANG_SCROLLBAR_WIDTH 11288 10857 desc: in Settings -> General -> Display -> Status-/Scrollbar 11289 10858 user: core ··· 11619 11188 </voice> 11620 11189 </phrase> 11621 11190 <phrase> 11622 - id: LANG_SET_AS_START_DIR 11623 - desc: used in the onplay menu to set a starting browser dir 11624 - user: core 11625 - <source> 11626 - *: "Start File Browser Here" 11627 - </source> 11628 - <dest> 11629 - *: "Начинать показ файлов здесь" 11630 - </dest> 11631 - <voice> 11632 - *: "Начинать показ файлов здесь" 11633 - </voice> 11634 - </phrase> 11635 - <phrase> 11636 11191 id: LANG_FM_RSSI 11637 11192 desc: Signal strength of a received FM station 11638 11193 user: core ··· 11737 11292 </voice> 11738 11293 </phrase> 11739 11294 <phrase> 11740 - id: LANG_SET_AS_PLAYLISTCAT_DIR 11741 - desc: used in the onplay menu to set a playlist catalogue dir 11742 - user: core 11743 - <source> 11744 - *: "Set As Playlist Catalogue Directory" 11745 - </source> 11746 - <dest> 11747 - *: "Установить как папку каталога списков" 11748 - </dest> 11749 - <voice> 11750 - *: "Установить как папку каталога списков" 11751 - </voice> 11752 - </phrase> 11753 - <phrase> 11754 11295 id: LANG_LIST_LINE_PADDING 11755 11296 desc: list padding, in display settings 11756 11297 user: core ··· 11793 11334 </dest> 11794 11335 <voice> 11795 11336 *: "Перемотка назад на паузе" 11796 - </voice> 11797 - </phrase> 11798 - <phrase> 11799 - id: LANG_AUTOMATIC 11800 - desc: generic automatic 11801 - user: core 11802 - <source> 11803 - *: "Automatic" 11804 - </source> 11805 - <dest> 11806 - *: "Автоматич." 11807 - </dest> 11808 - <voice> 11809 - *: "Автоматически" 11810 11337 </voice> 11811 11338 </phrase> 11812 11339 <phrase> ··· 12342 11869 desc: Selective Actions 12343 11870 user: core 12344 11871 <source> 12345 - *: "Seek" 11872 + *: "Exempt Seek" 12346 11873 </source> 12347 11874 <dest> 12348 11875 *: "Перемотка" ··· 12401 11928 desc: Softlock behaviour setting 12402 11929 user: core 12403 11930 <source> 12404 - *: "Disable Notify" 11931 + *: "Disable Locked Reminders" 12405 11932 </source> 12406 11933 <dest> 12407 11934 *: "Запрет оповещения" ··· 12516 12043 desc: Selective Actions 12517 12044 user: core 12518 12045 <source> 12519 - *: "Skip" 12046 + *: "Exempt Skip" 12520 12047 </source> 12521 12048 <dest> 12522 12049 *: "Смена трека" ··· 12596 12123 </voice> 12597 12124 </phrase> 12598 12125 <phrase> 12599 - id: LANG_NO_VIEWERS 12600 - desc: text for splash to indicate that no viewers are available 12601 - user: core 12602 - <source> 12603 - *: "No viewers found" 12604 - </source> 12605 - <dest> 12606 - *: "Просмотрщиков не найдено" 12607 - </dest> 12608 - <voice> 12609 - *: "Просмотрщиков не найдено" 12610 - </voice> 12611 - </phrase> 12612 - <phrase> 12613 12126 id: LANG_PBE 12614 12127 desc: in sound settings 12615 12128 user: core ··· 12712 12225 desc: Selective Actions 12713 12226 user: core 12714 12227 <source> 12715 - *: "Play" 12228 + *: "Exempt Play" 12716 12229 </source> 12717 12230 <dest> 12718 12231 *: "Воспроизведение или пауза" ··· 13034 12547 </voice> 13035 12548 </phrase> 13036 12549 <phrase> 13037 - id: LANG_CLEAR_PLAYLIST 13038 - desc: in the pictureflow main menu 13039 - user: core 13040 - <source> 13041 - *: "Clear playlist" 13042 - </source> 13043 - <dest> 13044 - *: "Очистить список воспроизведения" 13045 - </dest> 13046 - <voice> 13047 - *: "Очистить список воспроизведения" 13048 - </voice> 13049 - </phrase> 13050 - <phrase> 13051 12550 id: LANG_HIDE_ALBUM_TITLE 13052 12551 desc: in the pictureflow settings 13053 12552 user: core ··· 13091 12590 </phrase> 13092 12591 <phrase> 13093 12592 id: LANG_DIRECT 13094 - desc: in the pictureflow settings 12593 + desc: in the pictureflow settings, also a volume adjustment mode 13095 12594 user: core 13096 12595 <source> 13097 12596 *: "Direct" ··· 13160 12659 </voice> 13161 12660 </phrase> 13162 12661 <phrase> 13163 - id: LANG_PLAYLIST_CLEARED 13164 - desc: in the pictureflow splash messages 13165 - user: core 13166 - <source> 13167 - *: "Playlist Cleared" 13168 - </source> 13169 - <dest> 13170 - *: "Список воспроизведения очищен" 13171 - </dest> 13172 - <voice> 13173 - *: "Список воспроизведения очищен" 13174 - </voice> 13175 - </phrase> 13176 - <phrase> 13177 - id: LANG_ADDED_TO_PLAYLIST 13178 - desc: in the pictureflow splash messages 13179 - user: core 13180 - <source> 13181 - *: "Added to playlist" 13182 - </source> 13183 - <dest> 13184 - *: "Добавлено к списку воспроизведения" 13185 - </dest> 13186 - <voice> 13187 - *: "Добавлено к списку воспроизведения" 13188 - </voice> 13189 - </phrase> 13190 - <phrase> 13191 12662 id: LANG_ERROR_WRITING_CONFIG 13192 12663 desc: in the pictureflow splash messages 13193 12664 user: core ··· 13573 13044 </phrase> 13574 13045 <phrase> 13575 13046 id: LANG_PLAYTIME_REMAINING 13576 - desc: playing time screen 13047 + desc: deprecated 13577 13048 user: core 13578 13049 <source> 13579 - *: "Playlist remaining:" 13050 + *: "" 13580 13051 </source> 13581 13052 <dest> 13582 - *: "В списке осталось:" 13053 + *: "" 13583 13054 </dest> 13584 13055 <voice> 13585 - *: "В списке осталось" 13056 + *: "" 13586 13057 </voice> 13587 13058 </phrase> 13588 13059 <phrase> ··· 13784 13255 *: "Думаю..." 13785 13256 </dest> 13786 13257 <voice> 13787 - *: "" 13258 + *: "Думаю..." 13788 13259 </voice> 13789 13260 </phrase> 13790 13261 <phrase> ··· 14945 14416 </voice> 14946 14417 </phrase> 14947 14418 <phrase> 14948 - id: LANG_PROPERTIES_ARTIST 14949 - desc: in properties plugin 14950 - user: core 14951 - <source> 14952 - *: "[Artist]" 14953 - </source> 14954 - <dest> 14955 - *: "[Исполнитель]" 14956 - </dest> 14957 - <voice> 14958 - *: "Исполнитель" 14959 - </voice> 14960 - </phrase> 14961 - <phrase> 14962 - id: LANG_PROPERTIES_TITLE 14963 - desc: in properties plugin 14964 - user: core 14965 - <source> 14966 - *: "[Title]" 14967 - </source> 14968 - <dest> 14969 - *: "[Название]" 14970 - </dest> 14971 - <voice> 14972 - *: "Название" 14973 - </voice> 14974 - </phrase> 14975 - <phrase> 14976 - id: LANG_PROPERTIES_ALBUM 14977 - desc: in properties plugin 14978 - user: core 14979 - <source> 14980 - *: "[Album]" 14981 - </source> 14982 - <dest> 14983 - *: "[Альбом]" 14984 - </dest> 14985 - <voice> 14986 - *: "Альбом" 14987 - </voice> 14988 - </phrase> 14989 - <phrase> 14990 - id: LANG_PROPERTIES_DURATION 14991 - desc: in properties plugin 14992 - user: core 14993 - <source> 14994 - *: "[Duration]" 14995 - </source> 14996 - <dest> 14997 - *: "[Продолжительность]" 14998 - </dest> 14999 - <voice> 15000 - *: "Продолжительность" 15001 - </voice> 15002 - </phrase> 15003 - <phrase> 15004 14419 id: LANG_PROPERTIES_SUBDIRS 15005 14420 desc: in properties plugin 15006 14421 user: core ··· 15646 15061 </voice> 15647 15062 </phrase> 15648 15063 <phrase> 15649 - id: LANG_CLEAR_LIST_AND_PLAY_NEXT 15650 - desc: in onplay menu. Replace current playlist with selected tracks 15651 - user: core 15652 - <source> 15653 - *: "Clear List & Play Next" 15654 - </source> 15655 - <dest> 15656 - *: "Очистить список и играть следующий" 15657 - </dest> 15658 - <voice> 15659 - *: "Очистить список и играть следующий" 15660 - </voice> 15661 - </phrase> 15662 - <phrase> 15663 15064 id: LANG_QUEUE_MENU 15664 15065 desc: in onplay menu 15665 15066 user: core ··· 15716 15117 </voice> 15717 15118 </phrase> 15718 15119 <phrase> 15719 - id: LANG_CLEAR_LIST_AND_PLAY_SHUFFLED 15720 - desc: in onplay menu. Replace current playlist with selected tracks in random order. 15721 - user: core 15722 - <source> 15723 - *: "Clear List & Play Shuffled" 15724 - </source> 15725 - <dest> 15726 - *: "Очистить список и играть в случайном порядке" 15727 - </dest> 15728 - <voice> 15729 - *: "Очистить список и играть в случайном порядке" 15730 - </voice> 15731 - </phrase> 15732 - <phrase> 15733 15120 id: LANG_SOFTLOCK_DISABLE_ALL_NOTIFY 15734 15121 desc: disable all softlock notifications 15735 15122 user: core ··· 15769 15156 </dest> 15770 15157 <voice> 15771 15158 *: "Автоблокировка всегда" 15772 - </voice> 15773 - </phrase> 15774 - <phrase> 15775 - id: LANG_PLAYLIST_RELOAD_AFTER_SAVE 15776 - desc: reload playlist after saving 15777 - user: core 15778 - <source> 15779 - *: "Reload After Saving" 15780 - </source> 15781 - <dest> 15782 - *: "Перезагрузить после сохранения" 15783 - </dest> 15784 - <voice> 15785 - *: "Перезагрузить после сохранения" 15786 15159 </voice> 15787 15160 </phrase> 15788 15161 <phrase> ··· 15939 15312 </voice> 15940 15313 </phrase> 15941 15314 <phrase> 15942 - id: LANG_PROPERTIES_ALBUMARTIST 15943 - desc: in properties plugin 15944 - user: core 15945 - <source> 15946 - *: "[Album Artist]" 15947 - </source> 15948 - <dest> 15949 - *: "[Исполнитель альбома]" 15950 - </dest> 15951 - <voice> 15952 - *: "Исполнитель альбома" 15953 - </voice> 15954 - </phrase> 15955 - <phrase> 15956 - id: LANG_PROPERTIES_GENRE 15957 - desc: in properties plugin 15958 - user: core 15959 - <source> 15960 - *: "[Genre]" 15961 - </source> 15962 - <dest> 15963 - *: "[Жанр]" 15964 - </dest> 15965 - <voice> 15966 - *: "Жанр" 15967 - </voice> 15968 - </phrase> 15969 - <phrase> 15970 - id: LANG_PROPERTIES_COMMENT 15971 - desc: in properties plugin 15972 - user: core 15973 - <source> 15974 - *: "[Comment]" 15975 - </source> 15976 - <dest> 15977 - *: "[Комментарий]" 15978 - </dest> 15979 - <voice> 15980 - *: "Комментарий" 15981 - </voice> 15982 - </phrase> 15983 - <phrase> 15984 - id: LANG_PROPERTIES_COMPOSER 15985 - desc: in properties plugin 15986 - user: core 15987 - <source> 15988 - *: "[Composer]" 15989 - </source> 15990 - <dest> 15991 - *: "[Композитор]" 15992 - </dest> 15993 - <voice> 15994 - *: "Композитор" 15995 - </voice> 15996 - </phrase> 15997 - <phrase> 15998 - id: LANG_PROPERTIES_YEAR 15999 - desc: in properties plugin 16000 - user: core 16001 - <source> 16002 - *: "[Year]" 16003 - </source> 16004 - <dest> 16005 - *: "[Год]" 16006 - </dest> 16007 - <voice> 16008 - *: "Год" 16009 - </voice> 16010 - </phrase> 16011 - <phrase> 16012 - id: LANG_PROPERTIES_TRACKNUM 16013 - desc: in properties plugin 16014 - user: core 16015 - <source> 16016 - *: "[Tracknum]" 16017 - </source> 16018 - <dest> 16019 - *: "[Номер трека]" 16020 - </dest> 16021 - <voice> 16022 - *: "Номер трека" 16023 - </voice> 16024 - </phrase> 16025 - <phrase> 16026 - id: LANG_PROPERTIES_DISCNUM 16027 - desc: in properties plugin 16028 - user: core 16029 - <source> 16030 - *: "[Discnum]" 16031 - </source> 16032 - <dest> 16033 - *: "[Номер диска]" 16034 - </dest> 16035 - <voice> 16036 - *: "Номер диска" 16037 - </voice> 16038 - </phrase> 16039 - <phrase> 16040 - id: LANG_PROPERTIES_FREQUENCY 16041 - desc: in properties plugin 16042 - user: core 16043 - <source> 16044 - *: "[Frequency]" 16045 - </source> 16046 - <dest> 16047 - *: "[Частота]" 16048 - </dest> 16049 - <voice> 16050 - *: "Частота" 16051 - </voice> 16052 - </phrase> 16053 - <phrase> 16054 - id: LANG_PROPERTIES_BITRATE 16055 - desc: in properties plugin 16056 - user: core 16057 - <source> 16058 - *: "[Bitrate]" 16059 - </source> 16060 - <dest> 16061 - *: "[Битрейт]" 16062 - </dest> 16063 - <voice> 16064 - *: "Битрейт" 16065 - </voice> 16066 - </phrase> 16067 - <phrase> 16068 15315 id: LANG_SINGLE_MODE 16069 15316 desc: single mode 16070 15317 user: core ··· 16353 15600 user: core 16354 15601 <source> 16355 15602 *: none 16356 - ipodcolor,ipodnano1g,ipodvideo,ipod4g,ipodmini1g,ipodmini2g: "Clear settings when hold switch is on during startup" 16357 15603 clear_settings_on_hold, iriverh10: "Clear settings when reset button is held during startup" 15604 + ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Clear settings when hold switch is on during startup" 16358 15605 </source> 16359 15606 <dest> 16360 15607 *: none 16361 - ipodcolor,ipodnano1g,ipodvideo,ipod4g,ipodmini1g,ipodmini2g: "Сбросить настройки при включенной блокировке во время загрузки" 16362 15608 clear_settings_on_hold, iriverh10: "Сбросит настройки при нажатой кнопке сброса во время загрузки" 15609 + ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Сбросить настройки при включенной блокировке во время загрузки" 16363 15610 </dest> 16364 15611 <voice> 16365 15612 *: none 16366 - ipodcolor,ipodnano1g,ipodvideo,ipod4g,ipodmini1g,ipodmini2g: "Сбросить настройки при включенной блокировке во время загрузки" 16367 15613 clear_settings_on_hold, iriverh10: "Сбросит настройки при нажатой кнопке сброса во время загрузки" 15614 + ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Сбросить настройки при включенной блокировке во время загрузки" 16368 15615 </voice> 16369 15616 </phrase> 16370 15617 <phrase> ··· 16631 15878 *: "Русский" 16632 15879 </voice> 16633 15880 </phrase> 15881 + <phrase> 15882 + id: LANG_RANDOM_SHUFFLE_RANDOM_SELECTIVE_SONGS_SUMMARY 15883 + desc: a summary splash screen that appear on the database browser when you try to create a playlist from the database browser that exceeds your system limit 15884 + user: core 15885 + <source> 15886 + *: "Selection too big, %d random tracks will be picked from it" 15887 + </source> 15888 + <dest> 15889 + *: "Выбор слишком велик, из него будут выбраны %d случайных треков" 15890 + </dest> 15891 + <voice> 15892 + *: "Выбор слишком велик, из него будет выбрано меньше случайных треков" 15893 + </voice> 15894 + </phrase> 15895 + <phrase> 15896 + id: LANG_FILTER_SHORT_SHARP 15897 + desc: in sound settings 15898 + user: core 15899 + <source> 15900 + *: none 15901 + filter_roll_off: "Short Sharp" 15902 + </source> 15903 + <dest> 15904 + *: none 15905 + filter_roll_off: "Короткий Острый" 15906 + </dest> 15907 + <voice> 15908 + *: none 15909 + filter_roll_off: "Короткий Острый" 15910 + </voice> 15911 + </phrase> 15912 + <phrase> 15913 + id: LANG_FILTER_SHORT_SLOW 15914 + desc: in sound settings 15915 + user: core 15916 + <source> 15917 + *: none 15918 + filter_roll_off: "Short Slow" 15919 + </source> 15920 + <dest> 15921 + *: none 15922 + filter_roll_off: "Короткий Медленный" 15923 + </dest> 15924 + <voice> 15925 + *: none 15926 + filter_roll_off: "Короткий Медленный" 15927 + </voice> 15928 + </phrase> 15929 + <phrase> 15930 + id: LANG_MIKMOD_HQMIXER 15931 + desc: in mikmod settings menu 15932 + user: core 15933 + <source> 15934 + *: "HQ Mixer" 15935 + lowmem: none 15936 + </source> 15937 + <dest> 15938 + *: "HQ Микшер" 15939 + lowmem: none 15940 + </dest> 15941 + <voice> 15942 + *: "High Quality Микшер" 15943 + lowmem: none 15944 + </voice> 15945 + </phrase> 15946 + <phrase> 15947 + id: LANG_MIKMOD_SAMPLERATE 15948 + desc: in mikmod settings menu 15949 + user: core 15950 + <source> 15951 + *: "Sample Rate" 15952 + lowmem: none 15953 + </source> 15954 + <dest> 15955 + *: "Частота дискретизации" 15956 + lowmem: none 15957 + </dest> 15958 + <voice> 15959 + *: "Частота дискретизации" 15960 + lowmem: none 15961 + </voice> 15962 + </phrase> 15963 + <phrase> 15964 + id: VOICE_NUMERIC_TENS_SWAP_SEPARATOR 15965 + desc: voice only, for speaking numbers in languages that swap the tens and ones fields. Leave blank for languages that do not need it, such as English ("231" => "two hundred thirty one") but other languages may speak it as "two hundred one [AND] thirty" 15966 + user: core 15967 + <source> 15968 + *: "" 15969 + </source> 15970 + <dest> 15971 + *: "" 15972 + </dest> 15973 + <voice> 15974 + *: "" 15975 + </voice> 15976 + </phrase> 15977 + <phrase> 15978 + id: LANG_VOICED_DATE_FORMAT 15979 + desc: format string for how dates will be read back. Y == 4-digit year, A == month name, m == numeric month, d == numeric day. For example, "AdY" will read "January 21 2021" 15980 + user: core 15981 + <source> 15982 + *: "dAY" 15983 + </source> 15984 + <dest> 15985 + *: "День" 15986 + </dest> 15987 + <voice> 15988 + *: "" 15989 + </voice> 15990 + </phrase> 15991 + <phrase> 15992 + id: LANG_DATABASE_DIR 15993 + desc: in database settings menu 15994 + user: core 15995 + <source> 15996 + *: "Database Directory" 15997 + </source> 15998 + <dest> 15999 + *: "Каталог базы данных" 16000 + </dest> 16001 + <voice> 16002 + *: "Каталог базы данных" 16003 + </voice> 16004 + </phrase> 16005 + <phrase> 16006 + id: LANG_REMOVE_QUEUED_TRACKS 16007 + desc: Confirmation dialog 16008 + user: core 16009 + <source> 16010 + *: "Remove Queued Tracks?" 16011 + </source> 16012 + <dest> 16013 + *: "Удалять треки, поставленные в очередь?" 16014 + </dest> 16015 + <voice> 16016 + *: "Удалять треки, поставленные в очередь?" 16017 + </voice> 16018 + </phrase> 16019 + <phrase> 16020 + id: LANG_QUICK_IGNORE_DIRACHE 16021 + desc: in Settings 16022 + user: core 16023 + <source> 16024 + *: "Quick (Ignore Directory Cache)" 16025 + </source> 16026 + <dest> 16027 + *: "Quick (игнорировать кэш каталогов)" 16028 + </dest> 16029 + <voice> 16030 + *: "Quick (игнорировать кэш каталогов)" 16031 + </voice> 16032 + </phrase> 16033 + <phrase> 16034 + id: LANG_WPS 16035 + desc: in Settings 16036 + user: core 16037 + <source> 16038 + *: "What's Playing Screen" 16039 + </source> 16040 + <dest> 16041 + *: "Что происходит на экране воспроизведения" 16042 + </dest> 16043 + <voice> 16044 + *: "Что происходит на экране воспроизведения" 16045 + </voice> 16046 + </phrase> 16047 + <phrase> 16048 + id: LANG_DEFAULT_BROWSER 16049 + desc: in Settings 16050 + user: core 16051 + <source> 16052 + *: "Default Browser" 16053 + </source> 16054 + <dest> 16055 + *: "Браузер по умолчанию" 16056 + </dest> 16057 + <voice> 16058 + *: "Браузер по умолчанию" 16059 + </voice> 16060 + </phrase> 16061 + <phrase> 16062 + id: LANG_AMAZE_MENU 16063 + desc: Amaze game 16064 + user: core 16065 + <source> 16066 + *: "Amaze Main Menu" 16067 + </source> 16068 + <dest> 16069 + *: "Главное меню Amaze" 16070 + </dest> 16071 + <voice> 16072 + *: "Главное меню Amaze" 16073 + </voice> 16074 + </phrase> 16075 + <phrase> 16076 + id: LANG_SET_MAZE_SIZE 16077 + desc: Maze size in Amaze game 16078 + user: core 16079 + <source> 16080 + *: "Set Maze Size" 16081 + </source> 16082 + <dest> 16083 + *: "Установить размер Maze " 16084 + </dest> 16085 + <voice> 16086 + *: "Установить размер Maze " 16087 + </voice> 16088 + </phrase> 16089 + <phrase> 16090 + id: LANG_VIEW_MAP 16091 + desc: Map in Amaze game 16092 + user: core 16093 + <source> 16094 + *: "View Map" 16095 + </source> 16096 + <dest> 16097 + *: "Посмотреть карту" 16098 + </dest> 16099 + <voice> 16100 + *: "Посмотреть карту" 16101 + </voice> 16102 + </phrase> 16103 + <phrase> 16104 + id: LANG_SHOW_COMPASS 16105 + desc: Compass in Amaze game 16106 + user: core 16107 + <source> 16108 + *: "Show Compass" 16109 + </source> 16110 + <dest> 16111 + *: "Показать компас" 16112 + </dest> 16113 + <voice> 16114 + *: "Показать компас" 16115 + </voice> 16116 + </phrase> 16117 + <phrase> 16118 + id: LANG_SHOW_MAP 16119 + desc: Map in Amaze game 16120 + user: core 16121 + <source> 16122 + *: "Show Map" 16123 + </source> 16124 + <dest> 16125 + *: "Показать карту" 16126 + </dest> 16127 + <voice> 16128 + *: "Показать карту" 16129 + </voice> 16130 + </phrase> 16131 + <phrase> 16132 + id: LANG_REMEMBER_PATH 16133 + desc: Map in Amaze game 16134 + user: core 16135 + <source> 16136 + *: "Remember Path" 16137 + </source> 16138 + <dest> 16139 + *: "Запомнить путь" 16140 + </dest> 16141 + <voice> 16142 + *: "Запомнить путь" 16143 + </voice> 16144 + </phrase> 16145 + <phrase> 16146 + id: LANG_USE_LARGE_TILES 16147 + desc: Map in Amaze game 16148 + user: core 16149 + <source> 16150 + *: "Use Large Tiles" 16151 + </source> 16152 + <dest> 16153 + *: "Используйте большие Tiles" 16154 + </dest> 16155 + <voice> 16156 + *: "Используйте большие Tiles" 16157 + </voice> 16158 + </phrase> 16159 + <phrase> 16160 + id: LANG_SHOW_SOLUTION 16161 + desc: Map in Amaze game 16162 + user: core 16163 + <source> 16164 + *: "Show Solution" 16165 + </source> 16166 + <dest> 16167 + *: "Показать решение" 16168 + </dest> 16169 + <voice> 16170 + *: "Показать решение" 16171 + </voice> 16172 + </phrase> 16173 + <phrase> 16174 + id: LANG_QUIT_WITHOUT_SAVING 16175 + desc: 16176 + user: core 16177 + <source> 16178 + *: "Quit without saving" 16179 + </source> 16180 + <dest> 16181 + *: "Выйти без сохранения" 16182 + </dest> 16183 + <voice> 16184 + *: "Выйти без сохранения" 16185 + </voice> 16186 + </phrase> 16187 + <phrase> 16188 + id: LANG_GENERATING_MAZE 16189 + desc: Amaze game 16190 + user: core 16191 + <source> 16192 + *: "Generating maze..." 16193 + </source> 16194 + <dest> 16195 + *: "Создать лабиринт" 16196 + </dest> 16197 + <voice> 16198 + *: "Создать лабиринт" 16199 + </voice> 16200 + </phrase> 16201 + <phrase> 16202 + id: LANG_YOU_WIN 16203 + desc: Success in game 16204 + user: core 16205 + <source> 16206 + *: "You win!" 16207 + </source> 16208 + <dest> 16209 + *: "Ты победил" 16210 + </dest> 16211 + <voice> 16212 + *: "Ты победил" 16213 + </voice> 16214 + </phrase> 16215 + <phrase> 16216 + id: LANG_YOU_CHEATED 16217 + desc: Cheated in game 16218 + user: core 16219 + <source> 16220 + *: "You cheated!" 16221 + </source> 16222 + <dest> 16223 + *: "Ты обманул" 16224 + </dest> 16225 + <voice> 16226 + *: "Ты обманул" 16227 + </voice> 16228 + </phrase> 16229 + <phrase> 16230 + id: LANG_DIFFICULTY_EASY 16231 + desc: Game difficulty 16232 + user: core 16233 + <source> 16234 + *: "Easy" 16235 + </source> 16236 + <dest> 16237 + *: "Легкий" 16238 + </dest> 16239 + <voice> 16240 + *: "Легкий" 16241 + </voice> 16242 + </phrase> 16243 + <phrase> 16244 + id: LANG_DIFFICULTY_MEDIUM 16245 + desc: Game difficulty 16246 + user: core 16247 + <source> 16248 + *: "Medium" 16249 + </source> 16250 + <dest> 16251 + *: "Средний" 16252 + </dest> 16253 + <voice> 16254 + *: "Средний" 16255 + </voice> 16256 + </phrase> 16257 + <phrase> 16258 + id: LANG_DIFFICULTY_HARD 16259 + desc: Game difficulty 16260 + user: core 16261 + <source> 16262 + *: "Hard" 16263 + </source> 16264 + <dest> 16265 + *: "Сложный" 16266 + </dest> 16267 + <voice> 16268 + *: "Сложный" 16269 + </voice> 16270 + </phrase> 16271 + <phrase> 16272 + id: LANG_DIFFICULTY_EXPERT 16273 + desc: Game difficulty 16274 + user: core 16275 + <source> 16276 + *: "Expert" 16277 + </source> 16278 + <dest> 16279 + *: "Эксперт" 16280 + </dest> 16281 + <voice> 16282 + *: "Эксперт" 16283 + </voice> 16284 + </phrase> 16285 + <phrase> 16286 + id: LANG_STEREOSW_MODE 16287 + desc: Stereo Switch Mode 16288 + user: core 16289 + <source> 16290 + *: "Stereo Switch Mode" 16291 + </source> 16292 + <dest> 16293 + *: "Режим переключения стерео" 16294 + </dest> 16295 + <voice> 16296 + *: "Режим переключения стерео" 16297 + </voice> 16298 + </phrase> 16299 + <phrase> 16300 + id: LANG_REVERSE 16301 + desc: in settings_menu 16302 + user: core 16303 + <source> 16304 + *: "Reverse" 16305 + </source> 16306 + <dest> 16307 + *: "Обратный / Обратная сторона" 16308 + </dest> 16309 + <voice> 16310 + *: "Обратный / Обратная сторона" 16311 + </voice> 16312 + </phrase> 16313 + <phrase> 16314 + id: LANG_ALWAYS_ZERO 16315 + desc: in settings_menu 16316 + user: core 16317 + <source> 16318 + *: "Always 0" 16319 + </source> 16320 + <dest> 16321 + *: "Всегда 0" 16322 + </dest> 16323 + <voice> 16324 + *: "Всегда 0" 16325 + </voice> 16326 + </phrase> 16327 + <phrase> 16328 + id: LANG_ALWAYS_ONE 16329 + desc: in settings_menu 16330 + user: core 16331 + <source> 16332 + *: "Always 1" 16333 + </source> 16334 + <dest> 16335 + *: "Всегда 1" 16336 + </dest> 16337 + <voice> 16338 + *: "Всегда 1" 16339 + </voice> 16340 + </phrase> 16341 + <phrase> 16342 + id: LANG_LEGAL_NOTICES 16343 + desc: in system menu 16344 + user: core 16345 + <source> 16346 + *: "Legal Notices" 16347 + </source> 16348 + <dest> 16349 + *: "официальное уведомление" 16350 + </dest> 16351 + <voice> 16352 + *: "официальное уведомление" 16353 + </voice> 16354 + </phrase> 16355 + <phrase> 16356 + id: LANG_ERROR_FORMATSTR 16357 + desc: for general use 16358 + user: core 16359 + <source> 16360 + *: "Error: %s" 16361 + </source> 16362 + <dest> 16363 + *: "Ошибка: %s" 16364 + </dest> 16365 + <voice> 16366 + *: "Ошибка" 16367 + </voice> 16368 + </phrase> 16369 + <phrase> 16370 + id: LANG_MIKMOD_SETTINGS 16371 + desc: mikmod plugin 16372 + user: core 16373 + <source> 16374 + *: "Mikmod Settings" 16375 + </source> 16376 + <dest> 16377 + *: "Mikmod Настройки" 16378 + </dest> 16379 + <voice> 16380 + *: "Mik mod Настройки" 16381 + </voice> 16382 + </phrase> 16383 + <phrase> 16384 + id: LANG_MIKMOD_MENU 16385 + desc: mikmod plugin 16386 + user: core 16387 + <source> 16388 + *: "Mikmod Menu" 16389 + </source> 16390 + <dest> 16391 + *: "Mikmod Меню" 16392 + </dest> 16393 + <voice> 16394 + *: "Mik mod Меню" 16395 + </voice> 16396 + </phrase> 16397 + <phrase> 16398 + id: LANG_CHESSBOX_MENU 16399 + desc: chessbox plugin 16400 + user: core 16401 + <source> 16402 + *: "Chessbox Menu" 16403 + </source> 16404 + <dest> 16405 + *: "Шахматы меню" 16406 + </dest> 16407 + <voice> 16408 + *: "Шахматы меню" 16409 + </voice> 16410 + </phrase> 16411 + <phrase> 16412 + id: VOICE_INVALID_VOICE_FILE 16413 + desc: played if the voice file fails to load 16414 + user: core 16415 + <source> 16416 + *: "" 16417 + </source> 16418 + <dest> 16419 + *: "" 16420 + </dest> 16421 + <voice> 16422 + *: "Недопустимый голосовой файл" 16423 + </voice> 16424 + </phrase> 16425 + <phrase> 16426 + id: LANG_PERCENT_FORMAT 16427 + desc: percent formatting ( `10%` is default , for `10 %` use '%ld %%' , for `%10` use '%%%ld' and so on) 16428 + user: core 16429 + <source> 16430 + *: "%ld%%" 16431 + </source> 16432 + <dest> 16433 + *: "%ld%%" 16434 + </dest> 16435 + <voice> 16436 + *: none 16437 + </voice> 16438 + </phrase> 16439 + <phrase> 16440 + id: LANG_CHOOSE_FILE 16441 + desc: file_picker plugin ask user to select a file 16442 + user: core 16443 + <source> 16444 + *: "Choose File" 16445 + </source> 16446 + <dest> 16447 + *: "Выберите файл" 16448 + </dest> 16449 + <voice> 16450 + *: "Выберите файл" 16451 + </voice> 16452 + </phrase> 16453 + <phrase> 16454 + id: LANG_DISABLE_MAINMENU_SCROLLING 16455 + desc: Disable main menu scrolling 16456 + user: core 16457 + <source> 16458 + *: "Disable main menu scrolling" 16459 + </source> 16460 + <dest> 16461 + *: "Отключить прокрутку главного меню" 16462 + </dest> 16463 + <voice> 16464 + *: "Отключить прокрутку главного меню" 16465 + </voice> 16466 + </phrase> 16467 + <phrase> 16468 + id: LANG_REMAINING 16469 + desc: Playing Time 16470 + user: core 16471 + <source> 16472 + *: "Remaining" 16473 + </source> 16474 + <dest> 16475 + *: "Оставшийся" 16476 + </dest> 16477 + <voice> 16478 + *: "Оставшийся" 16479 + </voice> 16480 + </phrase>
+2
apps/playlist.h
··· 33 33 #define PLAYLIST_ATTR_QUEUED 0x01 34 34 #define PLAYLIST_ATTR_INSERTED 0x02 35 35 #define PLAYLIST_ATTR_SKIPPED 0x04 36 + #define PLAYLIST_ATTR_RETRIEVE_ID3_ATTEMPTED 0x08 37 + #define PLAYLIST_ATTR_RETRIEVE_ID3_SUCCEEDED 0x10 36 38 37 39 #define PLAYLIST_DISPLAY_COUNT 10 38 40
+153 -52
apps/playlist_viewer.c
··· 50 50 #include "playlist_menu.h" 51 51 #include "menus/exported_menus.h" 52 52 #include "yesno.h" 53 + #include "playback.h" 53 54 54 55 /* Maximum number of tracks we can have loaded at one time */ 55 56 #define MAX_PLAYLIST_ENTRIES 200 ··· 142 143 const char* filename, bool reload, 143 144 int *most_recent_selection); 144 145 145 - static void format_line(const struct playlist_entry* track, char* str, 146 + static void format_line(struct playlist_entry* track, char* str, 146 147 int len); 147 148 148 149 static bool update_playlist(bool force); ··· 159 160 pb->num_loaded = 0; 160 161 } 161 162 163 + static int playlist_buffer_get_index(struct playlist_buffer *pb, int index) 164 + { 165 + int buffer_index; 166 + if (pb->direction == FORWARD) 167 + { 168 + if (index >= pb->first_index) 169 + buffer_index = index-pb->first_index; 170 + else /* rotation : track0 in buffer + requested track */ 171 + buffer_index = viewer.num_tracks-pb->first_index+index; 172 + } 173 + else 174 + { 175 + if (index <= pb->first_index) 176 + buffer_index = pb->first_index-index; 177 + else /* rotation : track0 in buffer + dist from the last track 178 + to the requested track (num_tracks-requested track) */ 179 + buffer_index = pb->first_index+viewer.num_tracks-index; 180 + } 181 + return buffer_index; 182 + } 183 + 162 184 /* 163 185 * Loads the entries following 'index' in the playlist buffer 164 186 */ ··· 227 249 playlist_buffer_load_entries(pb, start, direction); 228 250 } 229 251 252 + static bool retrieve_id3_tags(const int index, const char* name, struct mp3entry *id3, int flags) 253 + { 254 + bool id3_retrieval_successful = false; 255 + 256 + if (!viewer.playlist && 257 + (audio_status() & AUDIO_STATUS_PLAY) && 258 + (playlist_get_resume_info(&viewer.current_playing_track) == index)) 259 + { 260 + copy_mp3entry(id3, audio_current_track()); /* retrieve id3 from RAM */ 261 + id3_retrieval_successful = true; 262 + } 263 + else 264 + { 265 + /* Read from disk, the database, doesn't store frequency, file size or codec (g4470) ChrisS*/ 266 + id3_retrieval_successful = get_metadata_ex(id3, -1, name, flags); 267 + } 268 + return id3_retrieval_successful; 269 + } 270 + 230 271 static int playlist_entry_load(struct playlist_entry *entry, int index, 231 272 char* name_buffer, int remaining_size) 232 273 { ··· 242 283 243 284 len = strlcpy(name_buffer, info.filename, remaining_size) + 1; 244 285 286 + if (global_settings.playlist_viewer_track_display > 287 + PLAYLIST_VIEWER_ENTRY_SHOW_FULL_PATH && len <= remaining_size) 288 + { 289 + /* Allocate space for the id3viewc if the option is enabled */ 290 + len += MAX_PATH + 1; 291 + } 292 + 245 293 if (len <= remaining_size) 246 294 { 247 295 entry->name = name_buffer; ··· 253 301 return -1; 254 302 } 255 303 256 - static int playlist_buffer_get_index(struct playlist_buffer *pb, int index) 257 - { 258 - int buffer_index; 259 - if (pb->direction == FORWARD) 260 - { 261 - if (index >= pb->first_index) 262 - buffer_index = index-pb->first_index; 263 - else /* rotation : track0 in buffer + requested track */ 264 - buffer_index = viewer.num_tracks-pb->first_index+index; 265 - } 266 - else 267 - { 268 - if (index <= pb->first_index) 269 - buffer_index = pb->first_index-index; 270 - else /* rotation : track0 in buffer + dist from the last track 271 - to the requested track (num_tracks-requested track) */ 272 - buffer_index = pb->first_index+viewer.num_tracks-index; 273 - } 274 - return buffer_index; 275 - } 276 - 277 304 #define distance(a, b) \ 278 305 a>b? (a) - (b) : (b) - (a) 279 306 static bool playlist_buffer_needs_reload(struct playlist_buffer* pb, ··· 440 467 { 441 468 switch (global_settings.playlist_viewer_track_display) 442 469 { 443 - case 0: 470 + case PLAYLIST_VIEWER_ENTRY_SHOW_FILE_NAME: 471 + case PLAYLIST_VIEWER_ENTRY_SHOW_ID3_TITLE_AND_ALBUM: /* If loading from tags failed, only display the file name */ 472 + case PLAYLIST_VIEWER_ENTRY_SHOW_ID3_TITLE: /* If loading from tags failed, only display the file name */ 444 473 default: 445 474 { 446 475 /* Only display the filename */ ··· 450 479 strrsplt(dest, '.'); 451 480 break; 452 481 } 453 - case 1: 482 + case PLAYLIST_VIEWER_ENTRY_SHOW_FULL_PATH: 454 483 /* Full path */ 455 484 strlcpy(dest, src, bufsz); 456 485 break; ··· 458 487 } 459 488 460 489 /* Format display line */ 461 - static void format_line(const struct playlist_entry* track, char* str, 490 + static void format_line(struct playlist_entry* track, char* str, 462 491 int len) 463 492 { 464 - char name[MAX_PATH]; 493 + char *id3viewc = NULL; 465 494 char *skipped = ""; 466 - format_name(name, track->name, sizeof(name)); 467 - 468 495 if (track->attr & PLAYLIST_ATTR_SKIPPED) 469 496 skipped = "(ERR) "; 470 - 471 - if (global_settings.playlist_viewer_indices) 472 - /* Display playlist index */ 473 - snprintf(str, len, "%d. %s%s", track->display_index, skipped, name); 497 + if (!(track->attr & PLAYLIST_ATTR_RETRIEVE_ID3_ATTEMPTED) && 498 + (global_settings.playlist_viewer_track_display == 499 + PLAYLIST_VIEWER_ENTRY_SHOW_ID3_TITLE_AND_ALBUM || 500 + global_settings.playlist_viewer_track_display == 501 + PLAYLIST_VIEWER_ENTRY_SHOW_ID3_TITLE 502 + )) 503 + { 504 + track->attr |= PLAYLIST_ATTR_RETRIEVE_ID3_ATTEMPTED; 505 + struct mp3entry id3; 506 + bool retrieve_success = retrieve_id3_tags(track->index, track->name, 507 + &id3, METADATA_EXCLUDE_ID3_PATH); 508 + if (retrieve_success) 509 + { 510 + if (!id3viewc) 511 + { 512 + id3viewc = track->name + strlen(track->name) + 1; 513 + } 514 + struct mp3entry * pid3 = &id3; 515 + id3viewc[0] = '\0'; 516 + if (global_settings.playlist_viewer_track_display == 517 + PLAYLIST_VIEWER_ENTRY_SHOW_ID3_TITLE_AND_ALBUM) 518 + { 519 + /* Title & Album */ 520 + if (pid3->title && pid3->title[0] != '\0') 521 + { 522 + char* cur_str = id3viewc; 523 + int title_len = strlen(pid3->title); 524 + int rem_space = MAX_PATH; 525 + for (int i = 0; i < title_len && rem_space > 0; i++) 526 + { 527 + cur_str[0] = pid3->title[i]; 528 + cur_str++; 529 + rem_space--; 530 + } 531 + if (rem_space > 10) 532 + { 533 + cur_str[0] = (char) ' '; 534 + cur_str[1] = (char) '-'; 535 + cur_str[2] = (char) ' '; 536 + cur_str += 3; 537 + rem_space -= 3; 538 + cur_str = strmemccpy(cur_str, pid3->album && pid3->album[0] != '\0' ? 539 + pid3->album : (char*) str(LANG_TAGNAVI_UNTAGGED), rem_space); 540 + if (cur_str) 541 + track->attr |= PLAYLIST_ATTR_RETRIEVE_ID3_SUCCEEDED; 542 + } 543 + } 544 + } 545 + else if (global_settings.playlist_viewer_track_display == 546 + PLAYLIST_VIEWER_ENTRY_SHOW_ID3_TITLE) 547 + { 548 + /* Just the title */ 549 + if (pid3->title && pid3->title[0] != '\0' && 550 + strmemccpy(id3viewc, pid3->title, MAX_PATH) 551 + ) 552 + track->attr |= PLAYLIST_ATTR_RETRIEVE_ID3_SUCCEEDED; 553 + } 554 + /* Yield to reduce as much as possible the perceived UI lag, 555 + because retrieving id3 tags is an expensive operation */ 556 + yield(); 557 + } 558 + } 559 + 560 + if (!(track->attr & PLAYLIST_ATTR_RETRIEVE_ID3_SUCCEEDED)) 561 + { 562 + /* Simply use a formatted file name */ 563 + char name[MAX_PATH]; 564 + format_name(name, track->name, sizeof(name)); 565 + if (global_settings.playlist_viewer_indices) 566 + /* Display playlist index */ 567 + snprintf(str, len, "%d. %s%s", track->display_index, skipped, name); 568 + else 569 + snprintf(str, len, "%s%s", skipped, name); 570 + } 474 571 else 475 - snprintf(str, len, "%s%s", skipped, name); 476 - 572 + { 573 + if (!id3viewc) 574 + { 575 + id3viewc = track->name + strlen(track->name) + 1; 576 + } 577 + if (global_settings.playlist_viewer_indices) 578 + /* Display playlist index */ 579 + snprintf(str, len, "%d. %s%s", track->display_index, skipped, id3viewc); 580 + else 581 + snprintf(str, len, "%s%s", skipped, id3viewc); 582 + } 477 583 } 478 584 479 585 /* Update playlist in case something has changed or forced */ ··· 512 618 static enum pv_onplay_result show_track_info(const struct playlist_entry *current_track) 513 619 { 514 620 struct mp3entry id3; 515 - bool id3_retrieval_successful = false; 516 - 517 - if (!viewer.playlist && 518 - (audio_status() & AUDIO_STATUS_PLAY) && 519 - (playlist_get_resume_info(&viewer.current_playing_track) == current_track->index)) 520 - { 521 - copy_mp3entry(&id3, audio_current_track()); /* retrieve id3 from RAM */ 522 - id3_retrieval_successful = true; 523 - } 524 - else 525 - { 526 - /* Read from disk, the database, doesn't store frequency, file size or codec (g4470) ChrisS*/ 527 - id3_retrieval_successful = get_metadata(&id3, -1, current_track->name); 528 - } 621 + bool id3_retrieval_successful = retrieve_id3_tags(current_track->index, current_track->name, &id3, 0); 529 622 530 623 return id3_retrieval_successful && 531 624 browse_id3_ex(&id3, viewer.playlist, current_track->display_index, ··· 790 883 791 884 switch(global_settings.playlist_viewer_track_display) 792 885 { 793 - case 1: /*full path*/ 886 + case PLAYLIST_VIEWER_ENTRY_SHOW_FULL_PATH: 887 + /*full path*/ 794 888 talk_fullpath(track->name, true); 795 889 break; 796 890 default: 797 - case 0: /*filename only*/ 891 + case PLAYLIST_VIEWER_ENTRY_SHOW_FILE_NAME: 892 + /*filename only*/ 893 + case PLAYLIST_VIEWER_ENTRY_SHOW_ID3_TITLE_AND_ALBUM: 894 + /* If loading from tags failed, only talk the file name */ 895 + case PLAYLIST_VIEWER_ENTRY_SHOW_ID3_TITLE: 896 + /* If loading from tags failed, only talk the file name */ 798 897 talk_file_or_spell(NULL, track->name, NULL, true); 799 898 break; 800 899 } ··· 1154 1253 { 1155 1254 struct playlist_search_data *s_data = data; 1156 1255 playlist_get_track_info(viewer.playlist, s_data->found_indicies[selected_item], s_data->track); 1157 - if(global_settings.playlist_viewer_track_display == 1) /* full path*/ 1256 + if(global_settings.playlist_viewer_track_display == PLAYLIST_VIEWER_ENTRY_SHOW_FULL_PATH) 1257 + /* full path*/ 1158 1258 talk_fullpath(s_data->track->filename, false); 1159 1259 else talk_file_or_spell(NULL, s_data->track->filename, NULL, false); 1160 1260 return 0; ··· 1197 1297 1198 1298 playlist_get_track_info(viewer.playlist, i, &track); 1199 1299 const char *trackname = track.filename; 1200 - if (track_display == 0) /* if we only display filename only search filename */ 1300 + if (track_display != PLAYLIST_VIEWER_ENTRY_SHOW_FULL_PATH) 1301 + /* if we only display filename only search filename */ 1201 1302 trackname = strrchr(track.filename, '/'); 1202 1303 1203 1304 if (trackname && strcasestr(trackname, search_str))
+1 -1
apps/plugins/lua/lua.make
··· 40 40 41 41 HOST_INCLUDES := $(filter-out %/libc/include,$(INCLUDES)) 42 42 $(LUA_BUILDDIR)/buttons.lua: $(LUA_OBJ) $(LUA_SRCDIR)/button_helper.pl 43 - $(SILENT)$(CC) $(INCLUDES) $(TARGET) $(CFLAGS) -dM -E -P -include button-target.h - < /dev/null | $(LUA_SRCDIR)/button_helper.pl | $(HOSTCC) $(TARGET) -fno-builtin $(HOST_INCLUDES) -x c -o $(LUA_BUILDDIR)/button_helper - 43 + $(SILENT)$(CC) $(INCLUDES) $(TARGET) $(CFLAGS) -dM -E -P -include button-target.h - < /dev/null | $(LUA_SRCDIR)/button_helper.pl | $(HOSTCC) $(TARGET) -fno-builtin $(HOST_INCLUDES) $(EXTRA_DEFINES) -x c -o $(LUA_BUILDDIR)/button_helper - 44 44 $(call PRINTS,GEN $(@F))$(LUA_BUILDDIR)/button_helper > $(LUA_BUILDDIR)/buttons.lua 45 45 46 46 $(LUA_BUILDDIR)/rb_defines.lua: $(LUA_OBJ) $(LUA_SRCDIR)/rbdefines_helper.pl
+7
apps/settings.h
··· 78 78 TRIG_TYPE_NEW_FILE 79 79 }; 80 80 81 + enum { 82 + PLAYLIST_VIEWER_ENTRY_SHOW_FILE_NAME = 0, 83 + PLAYLIST_VIEWER_ENTRY_SHOW_FULL_PATH = 1, 84 + PLAYLIST_VIEWER_ENTRY_SHOW_ID3_TITLE_AND_ALBUM = 2, 85 + PLAYLIST_VIEWER_ENTRY_SHOW_ID3_TITLE = 3 86 + }; 87 + 81 88 #ifdef HAVE_CROSSFADE 82 89 enum { 83 90 CROSSFADE_ENABLE_OFF = 0,
+5 -3
apps/settings_list.c
··· 1421 1421 OFFON_SETTING(0,playlist_viewer_indices,LANG_SHOW_INDICES,true, 1422 1422 "playlist viewer indices",NULL), 1423 1423 CHOICE_SETTING(0, playlist_viewer_track_display, LANG_TRACK_DISPLAY, 0, 1424 - "playlist viewer track display","track name,full path", 1425 - NULL, 2, ID2P(LANG_DISPLAY_TRACK_NAME_ONLY), 1426 - ID2P(LANG_DISPLAY_FULL_PATH)), 1424 + "playlist viewer track display", 1425 + "track name,full path,title and album from tags,title from tags", 1426 + NULL, 4, ID2P(LANG_DISPLAY_TRACK_NAME_ONLY), 1427 + ID2P(LANG_DISPLAY_FULL_PATH),ID2P(LANG_DISPLAY_TITLEALBUM_FROMTAGS), 1428 + ID2P(LANG_DISPLAY_TITLE_FROMTAGS)), 1427 1429 CHOICE_SETTING(0, recursive_dir_insert, LANG_RECURSE_DIRECTORY , RECURSE_ON, 1428 1430 "recursive directory insert", off_on_ask, NULL , 3 , 1429 1431 ID2P(LANG_OFF), ID2P(LANG_ON), ID2P(LANG_ASK)),
+10 -7
apps/shortcuts.c
··· 482 482 { 483 483 case SHORTCUT_BROWSER: 484 484 { 485 - static char path[MAX_PATH]; 486 485 DIR* dir; 487 486 struct dirent* entry; 488 - char* filename = strrchr(sc->u.path, PATH_SEPCH) + 1; 489 - if (*filename != '\0') 487 + char* slash = strrchr(sc->u.path, PATH_SEPCH); 488 + char* filename = slash + 1; 489 + if (slash && *filename != '\0') 490 490 { 491 - int dirlen = (filename - sc->u.path); 492 - strmemccpy(path, sc->u.path, dirlen + 1); 493 - dir = opendir(path); 491 + *slash = '\0'; /* terminate the path to open the directory */ 492 + dir = opendir(sc->u.path); 493 + *slash = PATH_SEPCH; /* restore fullpath */ 494 494 if (dir) 495 495 { 496 496 while (0 != (entry = readdir(dir))) ··· 498 498 if (!strcmp(entry->d_name, filename)) 499 499 { 500 500 struct dirinfo info = dir_get_info(dir, entry); 501 + 501 502 if (info.attribute & ATTR_DIRECTORY) 502 503 talk_dir_or_spell(sc->u.path, NULL, false); 503 - else talk_file_or_spell(path, filename, NULL, false); 504 + else 505 + talk_file_or_spell(NULL, sc->u.path, NULL, false); 506 + 504 507 closedir(dir); 505 508 return 0; 506 509 }
+7 -2
apps/tagcache.c
··· 2085 2085 return false; 2086 2086 2087 2087 /* Find the corresponding entry in tagcache. */ 2088 + 2089 + if (filename != NULL) 2090 + memset(id3, 0, sizeof(struct mp3entry)); 2091 + else /* Note: caller clears id3 prior to call */ 2092 + filename = id3->path; 2093 + 2088 2094 idx_id = find_entry_ram(filename); 2089 2095 if (idx_id < 0) 2090 2096 return false; 2091 2097 2092 2098 entry = &tcramcache.hdr->indices[idx_id]; 2093 - 2094 - memset(id3, 0, sizeof(struct mp3entry)); 2099 + 2095 2100 char* buf = id3->id3v2buf; 2096 2101 ssize_t remaining = sizeof(id3->id3v2buf); 2097 2102
+132 -103
apps/tagtree.c
··· 57 57 #include "strnatcmp.h" 58 58 #include "panic.h" 59 59 #include "onplay.h" 60 + #include "plugin.h" 60 61 61 62 #define str_or_empty(x) (x ? x : "(NULL)") 62 63 ··· 64 65 #define TAGNAVI_USER_CONFIG ROCKBOX_DIR "/tagnavi_user.config" 65 66 66 67 static int tagtree_play_folder(struct tree_context* c); 68 + 69 + /* reuse of tagtree data after tagtree_play_folder() */ 70 + static uint32_t loaded_entries_crc = 0; 71 + 67 72 68 73 /* this needs to be same size as struct entry (tree.h) and name needs to be 69 74 * the first; so that they're compatible enough to walk arrays of both ··· 116 121 /* Capacity 10 000 entries (for example 10k different artists) */ 117 122 #define UNIQBUF_SIZE (64*1024) 118 123 static uint32_t uniqbuf[UNIQBUF_SIZE / sizeof(uint32_t)]; 119 - 120 - #if MEMORYSIZE > 2 121 - #define INSERT_ALL_PLAYLIST_MAX_SEGMENT_SIZE (1024) 122 - #else 123 - /* Lower quality randomness for low-ram devices using smaller segments */ 124 - #define INSERT_ALL_PLAYLIST_MAX_SEGMENT_SIZE (128) 125 - #endif 126 - static bool selective_random_playlist_indexes[INSERT_ALL_PLAYLIST_MAX_SEGMENT_SIZE]; 127 124 128 125 #define MAX_TAGS 5 129 126 #define MAX_MENU_ID_SIZE 32 ··· 286 283 .move_callback = move_callback, 287 284 .shrink_callback = NULL, 288 285 }; 286 + 287 + static uint32_t tagtree_data_crc(struct tree_context* c) 288 + { 289 + char* buf; 290 + uint32_t crc; 291 + buf = core_get_data(tagtree_handle); /* data for the search clauses etc */ 292 + crc = crc_32(buf, tagtree_buf_used, c->dirlength); 293 + buf = core_get_data(c->cache.name_buffer_handle); /* names */ 294 + crc = crc_32(buf, c->cache.name_buffer_size, crc); 295 + buf = core_get_data(c->cache.entries_handle); /* tagentries */ 296 + crc = crc_32(buf, c->cache.max_entries * sizeof(struct tagentry), crc); 297 + logf("%s 0x%x", __func__, crc); 298 + return crc; 299 + } 289 300 290 301 static void* tagtree_alloc(size_t size) 291 302 { ··· 1820 1831 1821 1832 int tagtree_load(struct tree_context* c) 1822 1833 { 1834 + logf( "%s", __func__); 1835 + 1823 1836 int count; 1824 1837 int table = c->currtable; 1825 1838 ··· 1836 1849 switch (table) 1837 1850 { 1838 1851 case TABLE_ROOT: 1852 + logf( "root..."); 1839 1853 count = load_root(c); 1840 1854 break; 1841 1855 1842 1856 case TABLE_ALLSUBENTRIES: 1843 1857 case TABLE_NAVIBROWSE: 1844 1858 logf("navibrowse..."); 1859 + 1860 + if (loaded_entries_crc != 0) 1861 + { 1862 + if (loaded_entries_crc == tagtree_data_crc(c)) 1863 + { 1864 + count = c->dirlength; 1865 + logf("Reusing %d entries", count); 1866 + break; 1867 + } 1868 + } 1869 + 1845 1870 cpu_boost(true); 1846 1871 count = retrieve_entries(c, 0, true); 1847 1872 cpu_boost(false); ··· 1851 1876 logf("Unsupported table %d\n", table); 1852 1877 return -1; 1853 1878 } 1879 + 1880 + loaded_entries_crc = 0; 1854 1881 1855 1882 if (count < 0) 1856 1883 { ··· 1884 1911 */ 1885 1912 int tagtree_enter(struct tree_context* c, bool is_visible) 1886 1913 { 1914 + logf( "%s", __func__); 1915 + 1887 1916 int rc = 0; 1888 1917 struct tagentry *dptr; 1889 1918 struct mp3entry *id3; ··· 2083 2112 /* Exits current database menu or table */ 2084 2113 void tagtree_exit(struct tree_context* c, bool is_visible) 2085 2114 { 2115 + logf( "%s", __func__); 2086 2116 if (is_visible) /* update selection history only for user-selected items */ 2087 2117 { 2088 2118 if (c->selected_item != selected_item_history[c->dirlevel]) ··· 2141 2171 /** 2142 2172 * Randomly shuffle an array using the Fisher-Yates algorithm : 2143 2173 * https://en.wikipedia.org/wiki/Random_permutation 2144 - * This algorithm has a linear complexity. Don't forget to srand 2145 - * before call to use it with a relevant seed. 2174 + * This algorithm has a linear complexity. 2175 + * Don't forget to srand before call to use it with a relevant seed. 2146 2176 */ 2147 - static void shuffle_bool_array(bool array[], int size) 2177 + static bool* fill_random_playlist_indexes(bool *bool_array, size_t arr_sz, 2178 + size_t track_count, size_t max_slots) 2148 2179 { 2149 - for (int i = size - 1; i > 0; i--) 2180 + size_t i; 2181 + if (track_count * sizeof(bool) > arr_sz || max_slots > track_count) 2182 + return NULL; 2183 + 2184 + for (i = 0; i < arr_sz; i++) /* fill max_slots with TRUE */ 2185 + bool_array[i] = i < max_slots; 2186 + 2187 + /* shuffle bool array */ 2188 + for (i = track_count - 1; i > 0; i--) 2150 2189 { 2151 2190 int j = rand() % (i + 1); 2152 - swap_array_bool(&array[i], &array[j]); 2191 + swap_array_bool(&bool_array[i], &bool_array[j]); 2153 2192 } 2154 - } 2155 - 2156 - static bool fill_random_playlist_indexes(int current_segment_n, 2157 - int current_segment_max_space) 2158 - { 2159 - if (current_segment_n == 0 || current_segment_max_space == 0) 2160 - return false; 2161 - if (current_segment_max_space > current_segment_n) 2162 - current_segment_max_space = current_segment_n; 2163 - for (int i = 0; i < current_segment_n; i++) 2164 - selective_random_playlist_indexes[i] = i < current_segment_max_space; 2165 - srand(current_tick); 2166 - shuffle_bool_array(selective_random_playlist_indexes, current_segment_n); 2167 - return true; 2193 + return bool_array; 2168 2194 } 2169 2195 2170 2196 static bool insert_all_playlist(struct tree_context *c, ··· 2175 2201 int n; 2176 2202 int fd = -1; 2177 2203 unsigned long last_tick; 2204 + int slots_remaining = 0; 2205 + bool fill_randomly = false; 2206 + bool *rand_bool_array = NULL; 2178 2207 char buf[MAX_PATH]; 2179 2208 2180 2209 cpu_boost(true); ··· 2213 2242 splash_progress_set_delay(HZ / 2); /* wait 1/2 sec before progress */ 2214 2243 n = c->filesindir; 2215 2244 2216 - int max_playlist_size = playlist_get_current()->max_playlist_size; 2217 - int playlist_amount = playlist_get_current()->amount; 2218 - int segment_size = INSERT_ALL_PLAYLIST_MAX_SEGMENT_SIZE; 2219 - int segments_count = n / segment_size; 2220 - int leftovers_segment_size = n - (segments_count * segment_size); 2221 - bool fill_randomly = false; 2222 - 2223 2245 if (playlist == NULL) 2224 2246 { 2225 - bool will_exceed = n > max_playlist_size; 2226 - fill_randomly = will_exceed; 2227 - } 2228 - if (leftovers_segment_size > 0 && fill_randomly) 2229 - { 2230 - /* We need to re-balance the segments so the randomness will be 2231 - * coherent and balanced the same through all segments */ 2232 - while (leftovers_segment_size + segments_count < segment_size) 2247 + int max_playlist_size = playlist_get_current()->max_playlist_size; 2248 + slots_remaining = max_playlist_size - playlist_get_current()->amount; 2249 + if (slots_remaining <= 0) 2233 2250 { 2234 - segment_size--; // -1 to all other segments 2235 - leftovers_segment_size += segments_count; 2251 + logf("Playlist has no space remaining"); 2252 + cpu_boost(false); 2253 + return false; 2236 2254 } 2237 - } 2238 - if (leftovers_segment_size > 0) 2239 - segments_count += 1; 2240 2255 2241 - int max_available_space = max_playlist_size - playlist_amount; 2242 - int max_space_per_segment = max_available_space / segments_count; 2243 - 2244 - int remaining_space = 2245 - max_available_space - (max_space_per_segment * segments_count); 2256 + fill_randomly = n > slots_remaining; 2257 + 2258 + if (fill_randomly) 2259 + { 2260 + srand(current_tick); 2261 + size_t bufsize = 0; 2262 + bool *buffer = (bool *) plugin_get_buffer(&bufsize); 2263 + rand_bool_array = fill_random_playlist_indexes(buffer, bufsize, 2264 + n, slots_remaining); 2246 2265 2247 - if (fill_randomly) 2248 - { 2249 - talk_id(LANG_RANDOM_SHUFFLE_RANDOM_SELECTIVE_SONGS_SUMMARY, true); 2250 - splashf(HZ * 3, str(LANG_RANDOM_SHUFFLE_RANDOM_SELECTIVE_SONGS_SUMMARY), 2251 - max_space_per_segment * segments_count + remaining_space); 2252 - /* logf("sz=%d lsz=%d sc=%d rcps=%d", segment_size, leftovers_segment_size, 2253 - segments_count, max_available_space_per_segment); */ 2266 + talk_id(LANG_RANDOM_SHUFFLE_RANDOM_SELECTIVE_SONGS_SUMMARY, true); 2267 + splashf(HZ * 2, str(LANG_RANDOM_SHUFFLE_RANDOM_SELECTIVE_SONGS_SUMMARY), 2268 + slots_remaining); 2269 + } 2254 2270 } 2255 2271 2256 2272 bool exit_loop_now = false; 2257 - for (int i = 0; i < segments_count; i++) 2273 + for (int i = 0; i < n; i++) 2258 2274 { 2259 - int cur_segment_size = segment_size; 2260 - int cur_segment_start = i * segment_size; 2261 - int cur_segment_end; 2262 - int space_per_segment = max_space_per_segment; 2263 - 2264 - if (i + 1 >= segments_count && leftovers_segment_size > 0) 2265 - { 2266 - /* add any remaining tracks to the last segment */ 2267 - space_per_segment += remaining_space; 2268 - cur_segment_size = leftovers_segment_size; 2269 - } 2270 - else if (fill_randomly) 2275 + if (TIME_AFTER(current_tick, last_tick + HZ/4)) 2271 2276 { 2272 - /* add an extra track to some of the segments */ 2273 - if (remaining_space > 0 && (i & 7) != 7) 2277 + splash_progress(i, n, "%s (%s)", str(LANG_WAIT), str(LANG_OFF_ABORT)); 2278 + if (action_userabort(TIMEOUT_NOBLOCK)) 2274 2279 { 2275 - space_per_segment++; 2276 - remaining_space--; 2280 + exit_loop_now = true; 2281 + break; 2277 2282 } 2278 - } 2279 - if (fill_randomly) 2280 - { 2281 - fill_randomly = fill_random_playlist_indexes(cur_segment_size, 2282 - space_per_segment); 2283 + last_tick = current_tick; 2283 2284 } 2284 2285 2285 - cur_segment_end = cur_segment_start + cur_segment_size; 2286 - 2287 - for (int j = cur_segment_start; j < cur_segment_end && !exit_loop_now; j++) 2286 + if (playlist == NULL) 2288 2287 { 2289 - if (TIME_AFTER(current_tick, last_tick + HZ/4)) 2288 + if (fill_randomly) 2290 2289 { 2291 - splash_progress(j, n, "%s (%s)", str(LANG_WAIT), str(LANG_OFF_ABORT)); 2292 - if (action_userabort(TIMEOUT_NOBLOCK)) 2290 + int remaining_tracks = n - i; 2291 + if (remaining_tracks > slots_remaining) 2293 2292 { 2294 - exit_loop_now = true; 2295 - break; 2293 + if (rand_bool_array) 2294 + { 2295 + /* Skip the track if rand_bool_array[i] is FALSE */ 2296 + if (!rand_bool_array[i]) 2297 + continue; 2298 + } 2299 + else 2300 + { 2301 + /* Generate random value between 0 and remaining_tracks - 1 */ 2302 + int selrange = RAND_MAX / remaining_tracks; /* Improve distribution */ 2303 + int random; 2304 + 2305 + for (int r = 0; r < 0x0FFF; r++) /* limit loops */ 2306 + { 2307 + random = rand() / selrange; 2308 + if (random < remaining_tracks) 2309 + break; 2310 + else 2311 + random = 0; 2312 + } 2313 + /* Skip the track if random >= slots_remaining */ 2314 + if (random >= slots_remaining) 2315 + continue; 2316 + } 2296 2317 } 2297 - last_tick = current_tick; 2298 2318 } 2319 + } 2299 2320 2300 - if (fill_randomly && !selective_random_playlist_indexes[j % segment_size]) 2301 - continue; 2321 + if (!tagcache_retrieve(&tcs, tagtree_get_entry(c, i)->extraseek, tcs.type, buf, sizeof buf)) 2322 + continue; 2302 2323 2303 - if (!tagcache_retrieve(&tcs, tagtree_get_entry(c, j)->extraseek, tcs.type, buf, sizeof buf)) 2304 - continue; 2305 - 2306 - if (playlist == NULL) 2324 + if (playlist == NULL) 2325 + { 2326 + if (fill_randomly) 2307 2327 { 2308 - if (playlist_insert_track(NULL, buf, position, queue, false) < 0) { 2309 - logf("playlist_insert_track failed"); 2328 + if (--slots_remaining <= 0) 2329 + { 2310 2330 exit_loop_now = true; 2311 2331 break; 2312 2332 } 2313 2333 } 2314 - else if (fdprintf(fd, "%s\n", buf) <= 0) 2315 - { 2334 + 2335 + if (playlist_insert_track(NULL, buf, position, queue, false) < 0) { 2336 + logf("playlist_insert_track failed"); 2316 2337 exit_loop_now = true; 2317 2338 break; 2318 2339 } 2319 - yield(); 2320 - if (playlist == NULL && position == PLAYLIST_INSERT_FIRST) 2321 - position = PLAYLIST_INSERT; 2322 2340 } 2341 + else if (fdprintf(fd, "%s\n", buf) <= 0) 2342 + { 2343 + exit_loop_now = true; 2344 + break; 2345 + } 2346 + yield(); 2347 + if (playlist == NULL && position == PLAYLIST_INSERT_FIRST) 2348 + position = PLAYLIST_INSERT; 2349 + 2323 2350 if (exit_loop_now) 2324 2351 break; 2325 2352 } ··· 2482 2509 2483 2510 static int tagtree_play_folder(struct tree_context* c) 2484 2511 { 2512 + logf( "%s", __func__); 2485 2513 int start_index = c->selected_item; 2486 2514 2487 2515 if (playlist_create(NULL, NULL) < 0) ··· 2512 2540 } 2513 2541 2514 2542 playlist_start(start_index, 0, 0); 2543 + loaded_entries_crc = tagtree_data_crc(c); /* save crc in case we return */ 2515 2544 return 0; 2516 2545 } 2517 2546
+1 -1
docs/CREDITS
··· 726 726 Medu Hedan 727 727 Uwe Schächterle 728 728 Hoseok Seo 729 - Paul Sauro (OlsroFR) 729 + Paul Sauro 730 730 731 731 The libmad team 732 732 The wavpack team
+7 -5
firmware/export/config/erosqnative.h
··· 9 9 #define BOOTFILE "rockbox." BOOTFILE_EXT 10 10 #define BOOTDIR "/.rockbox" 11 11 12 - /* Define EROSQN_VER as a GCC option if desired - 12 + /* Define EROSQN_VER as an "extradefine" in the configure script - 13 13 * v1, v2 players: "1" 14 14 * v3 players: "3" 15 - * Only bootloader will be affected 15 + * Only bootloader will be affected. 16 + * 17 + * This allows us to fix the LCD init issues with v3 players. 16 18 */ 17 19 #ifdef BOOTLOADER 18 - # ifndef EROSQN_VER /* this should probably go in config/erosqnative.h*/ 19 - # define EROSQN_VER 1 20 - # endif 20 + #ifndef EROSQN_VER 21 + #error "Must define EROSQN_VER" 22 + #endif 21 23 #endif 22 24 23 25 /* CPU defines */
+1 -1
firmware/target/mips/ingenic_x1000/x1000boot.make
··· 12 12 INCLUDES += -I$(APPSDIR) 13 13 SRC += $(call preprocess, $(APPSDIR)/SOURCES) 14 14 15 - LDSDEP := $(FIRMDIR)/export/cpu.h $(FIRMDIR)/export/config/$(MODELNAME).h 15 + LDSDEP := $(FIRMDIR)/export/cpu.h $(FIRMDIR)/export/config.h 16 16 17 17 BOOTLDS := $(FIRMDIR)/target/$(CPU)/$(MANUFACTURER)/boot.lds 18 18 BOOTLINK := $(BUILDDIR)/boot.link
+1 -1
lib/rbcodec/codecs/cRSID/host/file.c
··· 39 39 for (i=1; i < (int)(sizeof(MagicStringPSID)-1); ++i) { if (SIDheader->MagicString[i] != MagicStringPSID[i]) return NULL; } 40 40 C64->RealSIDmode = ( SIDheader->MagicString[0] == 'R' ); 41 41 42 - if (SIDheader->LoadAddressH==0 && SIDheader->LoadAddressH==0) { //load-address taken from first 2 bytes of the C64 PRG 42 + if (SIDheader->LoadAddressH==0 && SIDheader->LoadAddressL==0) { //load-address taken from first 2 bytes of the C64 PRG 43 43 C64->LoadAddress = (filedata[SIDheader->HeaderSize+1]<<8) + (filedata[SIDheader->HeaderSize+0]); 44 44 SIDdataOffset = SIDheader->HeaderSize+2; 45 45 }
+1 -1
manual/appendix/config_file_options.tex
··· 58 58 playlist viewer indices 59 59 & on, off & N/A\\ 60 60 playlist viewer track display 61 - & track name,full path 61 + & track name,full path,title and album from tags,title from tags 62 62 & N/A\\ 63 63 recursive directory insert 64 64 & on, off, ask & N/A\\
+1
tools/builds.pm
··· 484 484 'erosqnative' => { 485 485 name => 'AIGO EROS Q / K (Native)', 486 486 status => 2, 487 + manualok => 1, # Remove once status moves to 3 487 488 }, 488 489 'ihifi770' => { 489 490 name => 'Xuelin iHIFI 770',
+4 -4
tools/configure
··· 4194 4194 t_model="erosqnative" 4195 4195 # player version, for bootloader usage 4196 4196 # versions 1 and 2 both use 1 4197 - GCCOPTS="$GCCOPTS -DEROSQN_VER=1" 4197 + extradefines="$extradefines -DEROSQN_VER=1" 4198 4198 ;; 4199 4199 4200 4200 248|erosqnative_v3) 4201 - target_id=116 4202 - modelname="erosqnative" 4201 + target_id=117 4202 + modelname="erosqnative_v3" 4203 4203 target="EROS_QN" 4204 4204 memory=32 4205 4205 mipsr2elcc ··· 4221 4221 t_model="erosqnative" 4222 4222 # player version, for bootloader usage 4223 4223 # version 3 4224 - GCCOPTS="$GCCOPTS -DEROSQN_VER=3" 4224 + extradefines="$extradefines -DEROSQN_VER=3" 4225 4225 ;; 4226 4226 4227 4227
+221
tools/hibyos_nativepatcher/hibyos_nativepatcher.sh
··· 1 + #!/bin/bash 2 + # hibyos_nativepatcher.sh 3 + # 4 + # NOTE: THIS SCRIPT IS NOT TOLERANT OF WHITESPACE IN FILENAMES OR PATHS 5 + 6 + usage="hibyos_nativepatcher.sh 7 + 8 + USAGE: 9 + 10 + hibyos_nativepatcher.sh <mkrbinstall/mkstockuboot> [arguments depend on mode, see below] 11 + 12 + hibyos_nativepatcher.sh mkrbinstall <OFVERNAME (erosq or eros_h2)> 13 + <path/to/output> <path/to/bootloader.erosq> <HWVER (hw1hw2 or hw3)> 14 + Output file will be path/to/output/erosqnative_RBVER-HWVER-OFVERNAME.upt. 15 + Only the Hifiwalker H2 v1.3 uses "eros_h2", everything else uses "erosq". 16 + 17 + hibyos_nativepatcher.sh mkstockuboot <path/to/OFupdatefile.upt> 18 + Output file will be path/to/OFupdatefile-rbuninstall.upt. 19 + 20 + NOTE: THIS SCRIPT IS NOT TOLERANT OF WHITESPACE IN FILENAMES OR PATHS!" 21 + 22 + # check OS type and for any needed tools 23 + if [[ "$OSTYPE" == "darwin"* ]]; then 24 + echo "$OSTYPE DETECTED" 25 + elif [[ "$OSTYPE" == "linux-gnu"* ]]; then 26 + echo "$OSTYPE DETECTED" 27 + if !(which 7z > /dev/null); then 28 + echo "PLEASE INSTALL 7z (usually part of p7zip-full package)" 29 + exit 1 30 + fi 31 + if !(which genisoimage > /dev/null); then 32 + echo "PLEASE INSTALL genisoimage" 33 + exit 1 34 + fi 35 + else 36 + echo "SCRIPT NOT IMPLEMENTED ON $OSTYPE YET!" 37 + exit 1 38 + fi 39 + 40 + # make sure we can find patch_manifest 41 + SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 42 + if !(which $SCRIPT_DIR/patch_manifest.pl > /dev/null); then 43 + echo "couldn't find patch_manifest.pl!" 44 + exit 1 45 + fi 46 + 47 + ########################################################################### 48 + # MKRBINSTALL 49 + ########################################################################### 50 + if [[ "$1" == "mkrbinstall" ]]; then 51 + echo "Creating installation image from bootloader file..." 52 + 53 + # make sure all arguments are accounted for... 54 + if [[ -z "$5" ]]; then 55 + echo "not all parameters included, please see usage:" 56 + echo "$usage" 57 + exit 1 58 + fi 59 + 60 + # validate arguments 61 + outputdir=$(realpath --relative-base=$(pwd) $3) 62 + if !(ls $outputdir >& /dev/null); then 63 + echo "directory $outputdir doesn't seem to exist. Please make sure it exists, then re-run hibyos_nativepatcher.sh." 64 + exit 1 65 + fi 66 + 67 + # note, bootloaderfile might still be a valid path, but not a valid bootloader file... check to make sure tar can extract it okay. 68 + bootloaderfile=$(realpath --relative-base=$(pwd) $4) 69 + if !(ls $bootloaderfile >& /dev/null); then 70 + echo "bootloader file $bootloaderfile doesn't seem to exist. Please make sure it exists, then re-run hibyos_nativepatcher.sh." 71 + exit 1 72 + fi 73 + 74 + # make working directory... 75 + mkdir $outputdir/working_dir 76 + workingdir=$(realpath $outputdir/working_dir) 77 + mkdir $workingdir/bootloader 78 + 79 + # extract bootloader file 80 + if [[ "$OSTYPE" == "darwin"* ]]; then 81 + # macos 82 + tar -xvf $bootloaderfile --cd $workingdir/bootloader 83 + elif [[ "$OSTYPE" == "linux-gnu"* ]]; then 84 + # linux-gnu 85 + tar -xvf $bootloaderfile -C $workingdir/bootloader 86 + fi 87 + 88 + # make sure we got what we wanted 89 + if !(ls $workingdir/bootloader/bootloader.ucl >& /dev/null); then 90 + echo "can't find bootloader.ucl! help!" 91 + rm -rf $workingdir 92 + exit 1 93 + elif !(ls $workingdir/bootloader/spl.erosq >& /dev/null); then 94 + echo "can't find spl.erosq! help!" 95 + rm -rf $workingdir 96 + exit 1 97 + fi 98 + 99 + bootver=$(cat $workingdir/bootloader/bootloader-info.txt) 100 + if [ -z "$bootver" ]; then 101 + echo "COULDN'T FIND BOOTLOADER-INFO!" 102 + rm -rf $workingdir 103 + exit 1 104 + fi 105 + 106 + # if uboot.bin already exists, something is weird. 107 + if (ls $workingdir/image_contents/uboot.bin >& /dev/null); then 108 + echo "$workingdir/image_contents/uboot.bin already exists, something went weird." 109 + rm -rf $workingdir 110 + exit 1 111 + fi 112 + 113 + # everything exists, make the bin 114 + mkdir $workingdir/image_contents/ 115 + touch $workingdir/image_contents/uboot.bin 116 + echo "PATCHING!" 117 + dd if=$workingdir/bootloader/spl.erosq of=$workingdir/image_contents/uboot.bin obs=1 seek=0 conv=notrunc 118 + dd if=$workingdir/bootloader/bootloader.ucl of=$workingdir/image_contents/uboot.bin obs=1 seek=26624 conv=notrunc 119 + 120 + # create update.txt 121 + md5=($(md5sum $workingdir/image_contents/uboot.bin)) 122 + if [ -z "$md5" ]; then 123 + echo "COULDN'T MD5SUM UBOOT.BIN!" 124 + rm -rf $workingdir 125 + exit 1 126 + fi 127 + echo "Create update manifest with md5sum $md5" 128 + echo "" > $workingdir/image_contents/update.txt 129 + $SCRIPT_DIR/patch_manifest.pl $md5 $workingdir/image_contents/update.txt 130 + 131 + # create version.txt 132 + echo "version={ 133 + name=$2 134 + ver=2024-09-10T14:42:18+08:00 135 + }" > $workingdir/image_contents/version.txt 136 + 137 + outputfilename="erosqnative_$bootver-$5-$2" 138 + 139 + 140 + ########################################################################### 141 + # MKSTOCKUBOOT 142 + ########################################################################### 143 + elif [[ "$1" == "mkstockuboot" ]]; then 144 + echo "Creating uninstallation image from stock update image..." 145 + 146 + # make sure all arguments are accounted for... 147 + if [[ -z "$2" ]]; then 148 + echo "not all parameters included, please see usage:" 149 + echo "$usage" 150 + exit 1 151 + fi 152 + 153 + updatefile=$(realpath --relative-base=$(pwd) $2) 154 + updatefile_path=$(echo "$updatefile" | perl -ne "s/\/[\w\.\_\-]*$// && print") 155 + updatefile_name=$(basename $updatefile) 156 + updatefile_name_noext=$(echo "$updatefile_name" | perl -ne "s/\.\w*$// && print") 157 + outputdir=$updatefile_path 158 + outputfilename="$updatefile_name_noext-rbuninstall" 159 + 160 + mkdir $updatefile_path/working_dir 161 + workingdir=$(realpath $updatefile_path/working_dir) 162 + 163 + # copy update.upt to update.iso 164 + cp $updatefile $workingdir/$updatefile_name_noext-cpy.iso 165 + 166 + mkdir $workingdir/image_contents 167 + 168 + # extract iso 169 + if [[ "$OSTYPE" == "darwin"* ]]; then 170 + # macos 171 + hdiutil attach $workingdir/$updatefile_name_noext-cpy.iso -mountpoint $workingdir/contentsiso 172 + 173 + # copy out iso contents 174 + cp $workingdir/contentsiso/* $workingdir/image_contents 175 + 176 + # unmount iso 177 + hdiutil detach $workingdir/contentsiso 178 + elif [[ "$OSTYPE" == "linux-gnu"* ]]; then 179 + # linux-gnu 180 + 7z -o$workingdir/image_contents x $workingdir/$updatefile_name_noext-cpy.iso 181 + fi 182 + 183 + chmod 777 $workingdir/image_contents/* 184 + 185 + # modify update.txt 186 + md5=($(md5sum $workingdir/image_contents/uboot.bin)) 187 + if [ -z "$md5" ]; then 188 + echo "COULDN'T MD5SUM UBOOT.BIN!" 189 + rm -rf $working_dir 190 + exit 1 191 + fi 192 + echo "add to update manifest with md5sum $md5" 193 + $SCRIPT_DIR/patch_manifest.pl $md5 $workingdir/image_contents/update.txt 194 + 195 + ###################################################################### 196 + # PRINT USAGE 197 + ###################################################################### 198 + else 199 + echo "$usage" 200 + exit 1 201 + fi 202 + 203 + ###################################################################### 204 + # Common: make the image 205 + ###################################################################### 206 + # make the image 207 + if [[ "$OSTYPE" == "darwin"* ]]; then 208 + # macos 209 + hdiutil makehybrid -iso -joliet -o $outputdir/output.iso $workingdir/image_contents/ 210 + elif [[ "$OSTYPE" == "linux-gnu"* ]]; then 211 + # linux-gnu 212 + genisoimage -o $outputdir/output.iso $workingdir/image_contents/ 213 + fi 214 + 215 + # rename 216 + mv $outputdir/output.iso $outputdir/$outputfilename.upt 217 + 218 + # cleaning up 219 + rm -rf $workingdir 220 + 221 + exit 0
+27
tools/hibyos_nativepatcher/patch_manifest.pl
··· 1 + #!/usr/bin/perl 2 + # add bootloader info to update manifest 3 + # usage: ./patch_manifest.pl <md5sum> <path/to/update.txt> 4 + 5 + my $md5 = $ARGV[0]; 6 + my $updatefile = $ARGV[1]; 7 + my $bootloader_manif = 8 + "bootloader={ 9 + name=uboot 10 + file_path=autoupdate/uboot.bin 11 + md5=$md5 12 + }\n"; 13 + 14 + # read in existing manifest 15 + open(FH, '<', "$updatefile"); 16 + read(FH, my $manifest, -s FH); 17 + close(FH); 18 + 19 + # delete existing bootloader entry if exists 20 + $manifest =~ s/bootloader\s*=\s*{[^}]*}//; 21 + 22 + # add our own bootloader entry 23 + $manifest = "$bootloader_manif$manifest"; 24 + 25 + open(FH, '>', "$updatefile"); 26 + print FH $manifest; 27 + close(FH);