Add franch support, thanks ppp.

This commit is contained in:
stonegate 2020-07-22 22:15:06 +08:00
parent d7b6212cac
commit 964c927286
14 changed files with 1059 additions and 26 deletions

BIN
assets/fr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

BIN
assets/no.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

View File

@ -16,11 +16,13 @@ import 'package:intl/message_lookup_by_library.dart';
import 'package:intl/src/intl_helpers.dart';
import 'messages_en.dart' as messages_en;
import 'messages_fr.dart' as messages_fr;
import 'messages_zh-Hans.dart' as messages_zh_hans;
typedef Future<dynamic> LibraryLoader();
Map<String, LibraryLoader> _deferredLibraries = {
'en': () => new Future.value(null),
'fr': () => new Future.value(null),
'zh_Hans': () => new Future.value(null),
};
@ -28,6 +30,8 @@ MessageLookupByLibrary _findExact(String localeName) {
switch (localeName) {
case 'en':
return messages_en.messages;
case 'fr':
return messages_fr.messages;
case 'zh_Hans':
return messages_zh_hans.messages;
default:

View File

@ -197,6 +197,10 @@ class MessageLookup extends MessageLookupByLibrary {
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Play the episode"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("Privacy Policy"),
"published" : m20,
"publishedDaily" : MessageLookupByLibrary.simpleMessage("Published daily"),
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("Published monthly"),
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("Published weekly"),
"publishedYearly" : MessageLookupByLibrary.simpleMessage("Published yearly"),
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("Recover subscribe"),
"refreshArtwork" : MessageLookupByLibrary.simpleMessage("Update artwork"),
"remove" : MessageLookupByLibrary.simpleMessage("Remove"),
@ -293,6 +297,7 @@ class MessageLookup extends MessageLookupByLibrary {
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("Setting saved"),
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("Time is equal to end time"),
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("Time is equal to start time"),
"translators" : MessageLookupByLibrary.simpleMessage("Translators"),
"understood" : MessageLookupByLibrary.simpleMessage("Understood"),
"undo" : MessageLookupByLibrary.simpleMessage("UNDO"),
"unlike" : MessageLookupByLibrary.simpleMessage("Unlike"),

View File

@ -0,0 +1,310 @@
// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
// This is a library that provides messages for a fr locale. All the
// messages from the main program should be duplicated here with the same
// function name.
// Ignore issues from commonly used lints in this file.
// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new
// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering
// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases
// ignore_for_file:unused_import, file_names
import 'package:intl/intl.dart';
import 'package:intl/message_lookup_by_library.dart';
final messages = new MessageLookup();
typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup extends MessageLookupByLibrary {
String get localeName => 'fr';
static m0(groupName, count) => "${Intl.plural(count, zero: '', one: '${count} épisode de ${groupName} ajouté à la playlist.', other: '${count} épisodes de ${groupName} ajoutés à la playlist.')}";
static m1(count) => "${Intl.plural(count, zero: '', one: '${count} épisode ajouté à la playlist.', other: '${count} épisodes ajoutés à la playlist.')}";
static m2(count) => "${Intl.plural(count, zero: 'Aujourd\'hui', one: 'Il y a ${count} jour', other: 'Il y a ${count} jours')}";
static m3(count) => "${Intl.plural(count, zero: 'Jamais', one: '${count} jour', other: '${count} jours')}";
static m4(count) => "${Intl.plural(count, zero: '', one: 'Épisode', other: 'Épisodes ')}";
static m5(time) => "De ${time}";
static m6(count) => "${Intl.plural(count, zero: 'Groupe', one: 'Groupe', other: 'Groupes')}";
static m7(host) => "Hébergé par ${host}";
static m8(count) => "${Intl.plural(count, zero: 'A l\'instant', one: 'Il y a ${count} heure', other: 'Il y a ${count} heures')}";
static m9(count) => "${Intl.plural(count, zero: '0 heure', one: '${count} heure', other: '${count} heures')}";
static m10(count) => "${Intl.plural(count, zero: 'A l\'instant', one: 'Il y a ${count} minute', other: 'Il y a ${count} minutes')}";
static m11(count) => "${Intl.plural(count, zero: '0 min', one: '${count} min', other: '${count} mins')}";
static m12(title) => "Accès aux données ${title} ";
static m13(title) => "Échec de labonnement, erreur réseau ${title} ";
static m14(title) => "S\'abonner";
static m15(title) => "Échec de labonnement, le podcast existe déjà ${title}";
static m16(title) => "Abonnement réussi.";
static m17(title) => "Mise à jour ${title}";
static m18(title) => "Échec de la mise à jour ${title}";
static m19(count) => "${Intl.plural(count, zero: '', one: 'Podcast', other: 'Podcasts')}";
static m20(date) => "Publié le ${date}";
static m21(date) => "Supprimé le ${date}";
static m22(count) => "${Intl.plural(count, zero: 'A l\'instant', one: 'Il y a ${count} seconde', other: 'Il y a ${count} secondes')}";
static m23(time) => "Dernière écoute à ${time}";
static m24(time) => "${time} Restant";
static m25(time) => "Jusqu\'à ${time}";
static m26(count) => "${Intl.plural(count, zero: 'Aucune mise à jour.', one: 'Mise à jour d\'${count} épisode.', other: 'Mise à jour de ${count} épisodes.')}";
static m27(version) => "Version : ${version}";
final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> {
"add" : MessageLookupByLibrary.simpleMessage("Ajouter"),
"addEpisodeGroup" : m0,
"addNewEpisodeAll" : m1,
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("Ajouter de nouveaux épisodes à la playlist."),
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("Ajouter des groupes"),
"all" : MessageLookupByLibrary.simpleMessage("Tout"),
"autoDownload" : MessageLookupByLibrary.simpleMessage("Téléchargement automatique"),
"back" : MessageLookupByLibrary.simpleMessage("Retour"),
"buffering" : MessageLookupByLibrary.simpleMessage("Buffering"),
"cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"),
"changeLayout" : MessageLookupByLibrary.simpleMessage("Modifier l\'interface"),
"changelog" : MessageLookupByLibrary.simpleMessage("Historique des modifications"),
"chooseA" : MessageLookupByLibrary.simpleMessage("Choisir un"),
"clear" : MessageLookupByLibrary.simpleMessage("Effacer"),
"color" : MessageLookupByLibrary.simpleMessage("Couleur"),
"confirm" : MessageLookupByLibrary.simpleMessage("CONFIRMER"),
"darkMode" : MessageLookupByLibrary.simpleMessage("Mode sombre"),
"daysAgo" : m2,
"daysCount" : m3,
"delete" : MessageLookupByLibrary.simpleMessage("Effacer"),
"developer" : MessageLookupByLibrary.simpleMessage("Développeur"),
"dismiss" : MessageLookupByLibrary.simpleMessage("Rejeter"),
"done" : MessageLookupByLibrary.simpleMessage("Fait"),
"download" : MessageLookupByLibrary.simpleMessage("Télécharger"),
"downloaded" : MessageLookupByLibrary.simpleMessage("Téléchargé"),
"editGroupName" : MessageLookupByLibrary.simpleMessage("Modifier le nom du groupe"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("Fin de l\'épisode"),
"episode" : m4,
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("Appuyez pour éditer le groupe"),
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez supprimer ou modifier le nom du groupe, le groupe Home ne peut être modifié ni supprimé."),
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("Vue épisode"),
"featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez effectuer un appui long pour jouer un épisode ou l\'ajouter à la playlist."),
"featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("Effectuez un appui long pour jouer un épisode immédiatement"),
"featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("Appuyez pour ajouter un groupe."),
"featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("Pour les nouveaux podcasts le groupe par défaut est Home. Vous pouvez créer de nouveaux groupes et y déplacer vos podcasts. Un podcast peut être associé à plusieurs groupes."),
"featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("Un appui long pour classer les podcasts"),
"featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("Appuyez pour accéder à plus d\'options, un appui long permet de classer les podcasts du groupe."),
"featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("Appuyez pour importer un fichier OPML"),
"featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez importer un fichier OPML, accéder aux paramètres ou actualiser tous les podcasts."),
"featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("Appuyez pour ouvrir la playlist"),
"featureDiscoveryPlaylistDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez ajouter des épisodes dans la playlist. Ils seront automatiquement retirés l\'écoute finie."),
"featureDiscoveryPodcast" : MessageLookupByLibrary.simpleMessage("Vue podcasts"),
"featureDiscoveryPodcastDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez appuyer sur Tout Voir pour ajouter des groupes ou gérer les podcasts."),
"featureDiscoveryPodcastTitle" : MessageLookupByLibrary.simpleMessage("Effectuez un défilement vertical pour changer de groupe."),
"featureDiscoverySearch" : MessageLookupByLibrary.simpleMessage("Appuyez pour chercher un podcast"),
"featureDiscoverySearchDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez effectuer une recherche par titre, mots clés ou lien RSS pour vous abonner à un nouveau podcast."),
"feedbackEmail" : MessageLookupByLibrary.simpleMessage("Me contacter"),
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("Soumettre un problème"),
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("Noter sur le PlayStore"),
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("Joindre le groupe"),
"fonts" : MessageLookupByLibrary.simpleMessage("Polices"),
"from" : m5,
"goodNight" : MessageLookupByLibrary.simpleMessage("Bonne nuit"),
"groupExisted" : MessageLookupByLibrary.simpleMessage("Ce groupe existe déjà"),
"groupFilter" : MessageLookupByLibrary.simpleMessage("Filtrer par groupe"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir supprimer ce groupe ? Les podcasts seront déplacés vers le groupe Home."),
"groups" : m6,
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("Tout Voir"),
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Classé par"),
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("Favoris"),
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Récent"),
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("À propos"),
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("Importer le fichier OPML"),
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("Tout actualiser"),
"hostedOn" : m7,
"hoursAgo" : m8,
"hoursCount" : m9,
"import" : MessageLookupByLibrary.simpleMessage("Importer"),
"introFourthPage" : MessageLookupByLibrary.simpleMessage("Vous pouvez effectuer un appui long sur un épisode pour accéder aux actions rapides."),
"introSecondPage" : MessageLookupByLibrary.simpleMessage("Souscrivez aux podcasts via la section recherche ou importez un fichier OPML."),
"introThirdPage" : MessageLookupByLibrary.simpleMessage("Vous pouvez créer un nouveau groupe de podcasts."),
"later" : MessageLookupByLibrary.simpleMessage("Plus tard"),
"lightMode" : MessageLookupByLibrary.simpleMessage("Mode clair"),
"like" : MessageLookupByLibrary.simpleMessage("Like"),
"likeDate" : MessageLookupByLibrary.simpleMessage("Date du like"),
"liked" : MessageLookupByLibrary.simpleMessage("Liké"),
"listen" : MessageLookupByLibrary.simpleMessage("Écoutés"),
"listened" : MessageLookupByLibrary.simpleMessage("Écouté "),
"loadMore" : MessageLookupByLibrary.simpleMessage("Voir plus"),
"mark" : MessageLookupByLibrary.simpleMessage("Marqué"),
"markConfirm" : MessageLookupByLibrary.simpleMessage("Marquage effectué"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("Marquer tous les épisodes comme lus ?"),
"markListened" : MessageLookupByLibrary.simpleMessage("Marquer comme lu"),
"menu" : MessageLookupByLibrary.simpleMessage("Menu"),
"menuAllPodcasts" : MessageLookupByLibrary.simpleMessage("Tous les podcasts"),
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("Marquer comme tous lu"),
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("Accéder au flux RSS"),
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("Accéder au site"),
"minsAgo" : m10,
"minsCount" : m11,
"network" : MessageLookupByLibrary.simpleMessage("Réseau"),
"newGroup" : MessageLookupByLibrary.simpleMessage("Créer un nouveau groupe"),
"newestFirst" : MessageLookupByLibrary.simpleMessage("Le plus récent en premier."),
"next" : MessageLookupByLibrary.simpleMessage("Suivant"),
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("Aucun épisode n\'a encore été téléchargé"),
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("Aucun épisode ajouté"),
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("Aucun épisode reçu"),
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("Ce groupe ne contient aucun podcast"),
"noShownote" : MessageLookupByLibrary.simpleMessage("Notes de l\'épisode manquantes."),
"notificaitonFatch" : m12,
"notificationNetworkError" : m13,
"notificationSubscribe" : m14,
"notificationSubscribeExisted" : m15,
"notificationSuccess" : m16,
"notificationUpdate" : m17,
"notificationUpdateError" : m18,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Le plus ancien en premier."),
"play" : MessageLookupByLibrary.simpleMessage("Lecture"),
"playing" : MessageLookupByLibrary.simpleMessage("En cours"),
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
"podcast" : m19,
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("Abonnements"),
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("Télécharger l\'épisode"),
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("Ajouter l\'épisode à la playlist"),
"popupMenuLikeDes" : MessageLookupByLibrary.simpleMessage("Ajouter l\'épisode aux favoris"),
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Marquer l\'épisode comme lu"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Jouer l\'épisode"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("Politique relative aux données personnelles."),
"published" : m20,
"publishedDaily" : MessageLookupByLibrary.simpleMessage("Published daily"),
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("Published monthly"),
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("Published weekly"),
"publishedYearly" : MessageLookupByLibrary.simpleMessage("Published yearly"),
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("Restaurer l\'abonnement"),
"refreshArtwork" : MessageLookupByLibrary.simpleMessage("Update artwork"),
"remove" : MessageLookupByLibrary.simpleMessage("Supprimer"),
"removeConfirm" : MessageLookupByLibrary.simpleMessage("Confirmer la suppression"),
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir vous désabonner ?"),
"removedAt" : m21,
"save" : MessageLookupByLibrary.simpleMessage("Sauvegarder"),
"schedule" : MessageLookupByLibrary.simpleMessage("Programmation"),
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Lien RSS invalide"),
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Chercher un podcast"),
"secondsAgo" : m22,
"settingStorage" : MessageLookupByLibrary.simpleMessage("Espace de stockage"),
"settings" : MessageLookupByLibrary.simpleMessage("Paramètres"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Couleur principale"),
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Inclure la couleur de superposition"),
"settingsAppIntro" : MessageLookupByLibrary.simpleMessage("App intro"),
"settingsAppearance" : MessageLookupByLibrary.simpleMessage("Apparence"),
"settingsAppearanceDes" : MessageLookupByLibrary.simpleMessage("Couleurs et thèmes"),
"settingsAudioCache" : MessageLookupByLibrary.simpleMessage("Cache audio"),
"settingsAudioCacheDes" : MessageLookupByLibrary.simpleMessage("Taille maximum du cache audio"),
"settingsAutoDelete" : MessageLookupByLibrary.simpleMessage("Supprimer automatiquement les téléchargement après"),
"settingsAutoDeleteDes" : MessageLookupByLibrary.simpleMessage("30 jours par défaut"),
"settingsAutoPlayDes" : MessageLookupByLibrary.simpleMessage("Lancer automatiquement l\'épisode suivant"),
"settingsBackup" : MessageLookupByLibrary.simpleMessage("Backup"),
"settingsBackupDes" : MessageLookupByLibrary.simpleMessage("Sauvegarder les données de l\'application"),
"settingsDefaultGrid" : MessageLookupByLibrary.simpleMessage("Vue par défaut"),
"settingsDefaultGridDownload" : MessageLookupByLibrary.simpleMessage("Onglet téléchargement"),
"settingsDefaultGridFavorite" : MessageLookupByLibrary.simpleMessage("Onglet favoris"),
"settingsDefaultGridPodcast" : MessageLookupByLibrary.simpleMessage("Page du podcast"),
"settingsDefaultGridRecent" : MessageLookupByLibrary.simpleMessage("Onglet récents"),
"settingsDiscovery" : MessageLookupByLibrary.simpleMessage("Revoir le tutoriel"),
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("Activer la synchronisation"),
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualisez tous les podcasts en arrière-plan pour toujours afficher les derniers épisodes"),
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("Exporter et importer les paramètres de l\'application"),
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Report de bugs et demande d\'ajout de fonction"),
"settingsHistory" : MessageLookupByLibrary.simpleMessage("Historique"),
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Données d\'écoutes"),
"settingsInfo" : MessageLookupByLibrary.simpleMessage("Infos"),
"settingsInterface" : MessageLookupByLibrary.simpleMessage("Interface"),
"settingsLanguages" : MessageLookupByLibrary.simpleMessage("Langues"),
"settingsLanguagesDes" : MessageLookupByLibrary.simpleMessage("Changer la langue"),
"settingsLayout" : MessageLookupByLibrary.simpleMessage("Style"),
"settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("Style de l\'application"),
"settingsLibraries" : MessageLookupByLibrary.simpleMessage("Librairies"),
"settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("Les librairies open source utilisées"),
"settingsManageDownload" : MessageLookupByLibrary.simpleMessage("Gérer les téléchargements"),
"settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("Gérer les fichiers audio téléchargés"),
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("Jouer automatiquement le suivant."),
"settingsNetworkCellular" : MessageLookupByLibrary.simpleMessage("Demander avant l\'utilisation du réseau mobile"),
"settingsNetworkCellularAuto" : MessageLookupByLibrary.simpleMessage("Téléchargement automatique sur réseau mobile."),
"settingsNetworkCellularAutoDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez utiliser le téléchargement automatique du podcast sur la page de gestion des groupes."),
"settingsNetworkCellularDes" : MessageLookupByLibrary.simpleMessage("Si connecté à un réseau mobile, demander une confirmation avant le téléchargement."),
"settingsPlayDes" : MessageLookupByLibrary.simpleMessage("Playlist et lecteur"),
"settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("Menu popup des épisodes"),
"settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Modifier le menu popup de l\'épisode"),
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("Préférences"),
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("Noir profond"),
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Activez pour un mode sombre accentué"),
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("Activation automatique de la minuterie"),
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("Démarrer la minuterie à l\'horaire programmé"),
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("Temps par défaut"),
"settingsSTDefautTimeDes" : MessageLookupByLibrary.simpleMessage("Temps par défaut de la minuterie"),
"settingsSTMode" : MessageLookupByLibrary.simpleMessage("Mode minuterie automatique"),
"settingsStorageDes" : MessageLookupByLibrary.simpleMessage("Gérer le cache et l\'espace de stockage"),
"settingsSyncing" : MessageLookupByLibrary.simpleMessage("Synchronisation"),
"settingsSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualiser les podcasts en arrière-plan"),
"settingsTapToOpenPopupMenu" : MessageLookupByLibrary.simpleMessage("Appuyer pour ouvrir le menu"),
"settingsTapToOpenPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Vous devez effectuer un appui long pour ouvrir la page de l\'épisode"),
"settingsTheme" : MessageLookupByLibrary.simpleMessage("Thème"),
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("Intervalle de mise à jour"),
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("24 heures par défaut"),
"share" : MessageLookupByLibrary.simpleMessage("Partager"),
"size" : MessageLookupByLibrary.simpleMessage("Taille"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Passer les premières secondes du début"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Minuterie"),
"subscribe" : MessageLookupByLibrary.simpleMessage("Abonnements"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exporter le fichier OPML de tous les podcasts"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("Valeur du système par défaut"),
"timeLastPlayed" : m23,
"timeLeft" : m24,
"to" : m25,
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Ajouté à la playlist."),
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("Tutoriel réinitialisé, veuillez redémarrer l\'application."),
"toastFileError" : MessageLookupByLibrary.simpleMessage("Erreur du fichier, échec de l\'abonnement."),
"toastFileNotValid" : MessageLookupByLibrary.simpleMessage("Fichier invalide."),
"toastHomeGroupNotSupport" : MessageLookupByLibrary.simpleMessage("Le groupe Home n\'est pas pris en charge"),
"toastImportSettingsSuccess" : MessageLookupByLibrary.simpleMessage("Importation des paramètres effectuée"),
"toastOneGroup" : MessageLookupByLibrary.simpleMessage("Sélectionnez au moins un groupe"),
"toastPodcastRecovering" : MessageLookupByLibrary.simpleMessage("Récupération en cours, patientez un instant."),
"toastReadFile" : MessageLookupByLibrary.simpleMessage("Lecture du fichier réussie"),
"toastRecoverFailed" : MessageLookupByLibrary.simpleMessage("Échec de la récupération du podcast"),
"toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("L\'épisode a été supprimé de la playlist."),
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("Paramètres sauvegardés"),
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("Heure de fin"),
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("Heure de démarrage"),
"translators" : MessageLookupByLibrary.simpleMessage("Translators"),
"understood" : MessageLookupByLibrary.simpleMessage("Compris"),
"undo" : MessageLookupByLibrary.simpleMessage("ANNULER"),
"unlike" : MessageLookupByLibrary.simpleMessage("Dislike"),
"unliked" : MessageLookupByLibrary.simpleMessage("L\'épisode a été supprimé des favoris."),
"updateDate" : MessageLookupByLibrary.simpleMessage("Date de mise à jour"),
"updateEpisodesCount" : m26,
"updateFailed" : MessageLookupByLibrary.simpleMessage("Échec de la mise à jour, erreur de réseau"),
"version" : m27
};
}

View File

@ -197,6 +197,10 @@ class MessageLookup extends MessageLookupByLibrary {
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("播放节目"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("隐私条款"),
"published" : m20,
"publishedDaily" : MessageLookupByLibrary.simpleMessage("每日更新"),
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("每月更新"),
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("每周更新"),
"publishedYearly" : MessageLookupByLibrary.simpleMessage("每年更新"),
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("恢复订阅"),
"refreshArtwork" : MessageLookupByLibrary.simpleMessage("更新头像"),
"remove" : MessageLookupByLibrary.simpleMessage("移除"),
@ -293,6 +297,7 @@ class MessageLookup extends MessageLookupByLibrary {
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("设置已保存"),
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("与结束时刻相同"),
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("与起始时刻相同"),
"translators" : MessageLookupByLibrary.simpleMessage("翻译者"),
"understood" : MessageLookupByLibrary.simpleMessage("了解"),
"undo" : MessageLookupByLibrary.simpleMessage("撤销"),
"unlike" : MessageLookupByLibrary.simpleMessage("取消喜欢"),

View File

@ -1266,6 +1266,46 @@ class S {
);
}
/// `Published daily`
String get publishedDaily {
return Intl.message(
'Published daily',
name: 'publishedDaily',
desc: '',
args: [],
);
}
/// `Published monthly`
String get publishedMonthly {
return Intl.message(
'Published monthly',
name: 'publishedMonthly',
desc: '',
args: [],
);
}
/// `Published weekly`
String get publishedWeekly {
return Intl.message(
'Published weekly',
name: 'publishedWeekly',
desc: 'In search podcast detail page.',
args: [],
);
}
/// `Published yearly`
String get publishedYearly {
return Intl.message(
'Published yearly',
name: 'publishedYearly',
desc: '',
args: [],
);
}
/// `Recover subscribe`
String get recoverSubscribe {
return Intl.message(
@ -2229,6 +2269,16 @@ class S {
);
}
/// `Translators`
String get translators {
return Intl.message(
'Translators',
name: 'translators',
desc: '',
args: [],
);
}
/// `Understood`
String get understood {
return Intl.message(
@ -2319,6 +2369,7 @@ class AppLocalizationDelegate extends LocalizationsDelegate<S> {
List<Locale> get supportedLocales {
return const <Locale>[
Locale.fromSubtags(languageCode: 'en'),
Locale.fromSubtags(languageCode: 'fr'),
Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans'),
];
}

View File

@ -1,26 +1,17 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:tsacdop/util/custompaint.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:line_icons/line_icons.dart';
import '../util/extension_helper.dart';
const String version = '0.4.7';
const String version = '0.4.8';
class AboutApp extends StatelessWidget {
_launchUrl(String url) async {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
Widget _listItem(
BuildContext context, String text, IconData icons, String url) =>
InkWell(
onTap: () => _launchUrl(url),
onTap: () => url.launchUrl,
child: Container(
height: 50.0,
padding: EdgeInsets.symmetric(horizontal: 20.0),
@ -112,8 +103,9 @@ class AboutApp extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
FlatButton(
onPressed: () => _launchUrl(
'https://tsacdop.stonegate.me/#/privacy'),
onPressed: () =>
'https://tsacdop.stonegate.me/#/privacy'
.launchUrl,
child: Text(s.privacyPolicy,
style: TextStyle(color: context.accentColor)),
),
@ -126,8 +118,9 @@ class AboutApp extends StatelessWidget {
shape: BoxShape.circle),
),
FlatButton(
onPressed: () => _launchUrl(
'https://tsacdop.stonegate.me/#/changelog'),
onPressed: () =>
'https://tsacdop.stonegate.me/#/changelog'
.launchUrl,
child: Text(s.changelog,
style: TextStyle(color: context.accentColor)),
),
@ -160,8 +153,9 @@ class AboutApp extends StatelessWidget {
),
Spacer(),
InkWell(
onTap: () => _launchUrl(
'https://www.buymeacoffee.com/stonegate'),
onTap: () =>
'https://www.buymeacoffee.com/stonegate'
.launchUrl,
child: Container(
height: 30.0,
padding:
@ -199,6 +193,75 @@ class AboutApp extends StatelessWidget {
],
),
),
Padding(
padding: EdgeInsets.all(10.0),
),
Container(
padding: EdgeInsets.only(top: 20.0, bottom: 10.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(10)),
border:
Border.all(color: context.accentColor, width: 1),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Padding(
padding: EdgeInsets.only(left: 20.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
s.translators,
style: TextStyle(
color: Theme.of(context).accentColor,
fontWeight: FontWeight.bold),
),
SizedBox(width: 2),
Icon(Icons.favorite,
color: Colors.red, size: 20),
],
),
),
Container(
height: 50.0,
padding: EdgeInsets.symmetric(horizontal: 20.0),
alignment: Alignment.centerLeft,
decoration: BoxDecoration(
border: Border(
bottom: Divider.createBorderSide(context),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Icon(LineIcons.user,
color: Theme.of(context).accentColor),
Padding(
padding: EdgeInsets.symmetric(horizontal: 10),
),
Expanded(
child: Text(
'ppp(oza987@protonmail.com)',
maxLines: 1,
overflow: TextOverflow.fade,
)),
ClipRRect(
borderRadius: BorderRadius.circular(4),
child: Image(
image: AssetImage('assets/fr.png'),
height: 20,
fit: BoxFit.fitHeight,
),
),
],
),
),
],
),
),
//Spacer(),
Padding(
padding: EdgeInsets.symmetric(vertical: 50),

View File

@ -296,6 +296,16 @@
"date": {}
}
},
"publishedDaily": "Published daily",
"@publishedDaily": {},
"publishedMonthly": "Published monthly",
"@publishedMonthly": {},
"publishedWeekly": "Published weekly",
"@publishedWeekly": {
"description": "In search podcast detail page."
},
"publishedYearly": "Published yearly",
"@publishedYearly": {},
"recoverSubscribe": "Recover subscribe",
"@recoverSubscribe": {
"description": "User can recover subscribe podcast after remove it in subscribe history page."
@ -524,6 +534,8 @@
"@toastTimeEqualStart": {
"description": "User can't choose the same time as schedule start time."
},
"translators": "Translators",
"@translators": {},
"understood": "Understood",
"@understood": {},
"undo": "UNDO",

559
lib/l10n/intl_fr.arb Normal file
View File

@ -0,0 +1,559 @@
{
"@@locale": "fr",
"add": "Ajouter",
"@add": {
"description": "Subscribe new podcast"
},
"addEpisodeGroup": "{count, plural, zero{} one{{count} épisode de {groupName} ajouté à la playlist.} other{{count} épisodes de {groupName} ajoutés à la playlist.}}",
"@addEpisodeGroup": {
"placeholders": {
"groupName": {}
}
},
"addNewEpisodeAll": "{count, plural, zero{} one{{count} épisode ajouté à la playlist.} other{{count} épisodes ajoutés à la playlist.}}",
"@addNewEpisodeAll": {},
"addNewEpisodeTooltip": "Ajouter de nouveaux épisodes à la playlist.",
"@addNewEpisodeTooltip": {},
"addSomeGroups": "Ajouter des groupes",
"@addSomeGroups": {
"description": "Please add new groups"
},
"all": "Tout",
"@all": {},
"autoDownload": "Téléchargement automatique",
"@autoDownload": {},
"back": "Retour",
"@back": {},
"buffering": "Buffering",
"@buffering": {},
"cancel": "ANNULER",
"@cancel": {},
"changeLayout": "Modifier l'interface",
"@changeLayout": {},
"changelog": "Historique des modifications",
"@changelog": {},
"chooseA": "Choisir un",
"@chooseA": {},
"clear": "Effacer",
"@clear": {},
"color": "Couleur",
"@color": {},
"confirm": "CONFIRMER",
"@confirm": {},
"darkMode": "Mode sombre",
"@darkMode": {},
"daysAgo": "{count, plural, zero{Aujourd'hui} one{Il y a {count} jour} other{Il y a {count} jours}}",
"@daysAgo": {},
"daysCount": "{count, plural, zero{Jamais} one{{count} jour} other{{count} jours}}",
"@daysCount": {},
"delete": "Effacer",
"@delete": {},
"developer": "Développeur",
"@developer": {
"description": "Can also translate to About me"
},
"dismiss": "Rejeter",
"@dismiss": {},
"done": "Fait",
"@done": {},
"download": "Télécharger",
"@download": {},
"downloaded": "Téléchargé",
"@downloaded": {},
"editGroupName": "Modifier le nom du groupe",
"@editGroupName": {},
"endOfEpisode": "Fin de l'épisode",
"@endOfEpisode": {},
"episode": "{count, plural, zero{} one{Épisode} other{Épisodes }}",
"@episode": {},
"featureDiscoveryEditGroup": "Appuyez pour éditer le groupe",
"@featureDiscoveryEditGroup": {},
"featureDiscoveryEditGroupDes": "Vous pouvez supprimer ou modifier le nom du groupe, le groupe Home ne peut être modifié ni supprimé.",
"@featureDiscoveryEditGroupDes": {},
"featureDiscoveryEpisode": "Vue épisode",
"@featureDiscoveryEpisode": {},
"featureDiscoveryEpisodeDes": "Vous pouvez effectuer un appui long pour jouer un épisode ou l'ajouter à la playlist.",
"@featureDiscoveryEpisodeDes": {},
"featureDiscoveryEpisodeTitle": "Effectuez un appui long pour jouer un épisode immédiatement",
"@featureDiscoveryEpisodeTitle": {},
"featureDiscoveryGroup": "Appuyez pour ajouter un groupe.",
"@featureDiscoveryGroup": {},
"featureDiscoveryGroupDes": "Pour les nouveaux podcasts le groupe par défaut est Home. Vous pouvez créer de nouveaux groupes et y déplacer vos podcasts. Un podcast peut être associé à plusieurs groupes.",
"@featureDiscoveryGroupDes": {},
"featureDiscoveryGroupPodcast": "Un appui long pour classer les podcasts",
"@featureDiscoveryGroupPodcast": {},
"featureDiscoveryGroupPodcastDes": "Appuyez pour accéder à plus d'options, un appui long permet de classer les podcasts du groupe.",
"@featureDiscoveryGroupPodcastDes": {},
"featureDiscoveryOMPL": "Appuyez pour importer un fichier OPML",
"@featureDiscoveryOMPL": {},
"featureDiscoveryOMPLDes": "Vous pouvez importer un fichier OPML, accéder aux paramètres ou actualiser tous les podcasts.",
"@featureDiscoveryOMPLDes": {},
"featureDiscoveryPlaylist": "Appuyez pour ouvrir la playlist",
"@featureDiscoveryPlaylist": {},
"featureDiscoveryPlaylistDes": "Vous pouvez ajouter des épisodes dans la playlist. Ils seront automatiquement retirés l'écoute finie.",
"@featureDiscoveryPlaylistDes": {},
"featureDiscoveryPodcast": "Vue podcasts",
"@featureDiscoveryPodcast": {},
"featureDiscoveryPodcastDes": "Vous pouvez appuyer sur Tout Voir pour ajouter des groupes ou gérer les podcasts.",
"@featureDiscoveryPodcastDes": {},
"featureDiscoveryPodcastTitle": "Effectuez un défilement vertical pour changer de groupe.",
"@featureDiscoveryPodcastTitle": {},
"featureDiscoverySearch": "Appuyez pour chercher un podcast",
"@featureDiscoverySearch": {},
"featureDiscoverySearchDes": "Vous pouvez effectuer une recherche par titre, mots clés ou lien RSS pour vous abonner à un nouveau podcast.",
"@featureDiscoverySearchDes": {},
"feedbackEmail": "Me contacter",
"@feedbackEmail": {},
"feedbackGithub": "Soumettre un problème",
"@feedbackGithub": {},
"feedbackPlay": "Noter sur le PlayStore",
"@feedbackPlay": {
"description": "Rate on Google Play Store.\nUser can tap to open play link."
},
"feedbackTelegram": "Joindre le groupe",
"@feedbackTelegram": {},
"fonts": "Polices",
"@fonts": {},
"from": "De {time}",
"@from": {
"placeholders": {
"time": {}
}
},
"goodNight": "Bonne nuit",
"@goodNight": {},
"groupExisted": "Ce groupe existe déjà",
"@groupExisted": {
"description": "Group name validate in add group dialog. User can't add group with same name."
},
"groupFilter": "Filtrer par groupe",
"@groupFilter": {},
"groupRemoveConfirm": "Êtes-vous sûr de vouloir supprimer ce groupe ? Les podcasts seront déplacés vers le groupe Home.",
"@groupRemoveConfirm": {},
"groups": "{count, plural, zero{Groupe} one{Groupe} other{Groupes}}",
"@groups": {},
"homeGroupsSeeAll": "Tout Voir",
"@homeGroupsSeeAll": {},
"homeMenuPlaylist": "Playlist",
"@homeMenuPlaylist": {},
"homeSubMenuSortBy": "Classé par",
"@homeSubMenuSortBy": {},
"homeTabMenuFavotite": "Favoris",
"@homeTabMenuFavotite": {},
"homeTabMenuRecent": "Récent",
"@homeTabMenuRecent": {},
"homeToprightMenuAbout": "À propos",
"@homeToprightMenuAbout": {},
"homeToprightMenuImportOMPL": "Importer le fichier OPML",
"@homeToprightMenuImportOMPL": {},
"homeToprightMenuRefreshAll": "Tout actualiser",
"@homeToprightMenuRefreshAll": {},
"hostedOn": "Hébergé par {host}",
"@hostedOn": {
"placeholders": {
"host": {}
}
},
"hoursAgo": "{count, plural, zero{A l'instant} one{Il y a {count} heure} other{Il y a {count} heures}}",
"@hoursAgo": {},
"hoursCount": "{count, plural, zero{0 heure} one{{count} heure} other{{count} heures}}",
"@hoursCount": {},
"import": "Importer",
"@import": {},
"introFourthPage": "Vous pouvez effectuer un appui long sur un épisode pour accéder aux actions rapides.",
"@introFourthPage": {},
"introSecondPage": "Souscrivez aux podcasts via la section recherche ou importez un fichier OPML.",
"@introSecondPage": {},
"introThirdPage": "Vous pouvez créer un nouveau groupe de podcasts.",
"@introThirdPage": {},
"later": "Plus tard",
"@later": {},
"lightMode": "Mode clair",
"@lightMode": {},
"like": "Like",
"@like": {},
"liked": "Liké",
"@liked": {},
"likeDate": "Date du like",
"@likeDate": {
"description": "Favorite tab, sort by like date."
},
"listen": "Écoutés",
"@listen": {},
"listened": "Écouté ",
"@listened": {},
"loadMore": "Voir plus",
"@loadMore": {},
"mark": "Marqué",
"@mark": {
"description": "In listen history page, if a episode is marked as listened."
},
"markConfirm": "Marquage effectué",
"@markConfirm": {},
"markConfirmContent": "Marquer tous les épisodes comme lus ?",
"@markConfirmContent": {},
"markListened": "Marquer comme lu",
"@markListened": {},
"menu": "Menu",
"@menu": {},
"menuAllPodcasts": "Tous les podcasts",
"@menuAllPodcasts": {},
"menuMarkAllListened": "Marquer comme tous lu",
"@menuMarkAllListened": {},
"menuViewRSS": "Accéder au flux RSS",
"@menuViewRSS": {},
"menuVisitSite": "Accéder au site",
"@menuVisitSite": {},
"minsAgo": "{count, plural, zero{A l'instant} one{Il y a {count} minute} other{Il y a {count} minutes}}",
"@minsAgo": {},
"minsCount": "{count, plural, zero{0 min} one{{count} min} other{{count} mins}}",
"@minsCount": {},
"network": "Réseau",
"@network": {},
"newestFirst": "Le plus récent en premier.",
"@newestFirst": {},
"newGroup": "Créer un nouveau groupe",
"@newGroup": {},
"next": "Suivant",
"@next": {},
"noEpisodeDownload": "Aucun épisode n'a encore été téléchargé",
"@noEpisodeDownload": {},
"noEpisodeFavorite": "Aucun épisode ajouté",
"@noEpisodeFavorite": {},
"noEpisodeRecent": "Aucun épisode reçu",
"@noEpisodeRecent": {},
"noPodcastGroup": "Ce groupe ne contient aucun podcast",
"@noPodcastGroup": {},
"noShownote": "Notes de l'épisode manquantes.",
"@noShownote": {
"description": "Means this episode have no show notes."
},
"notificaitonFatch": "Accès aux données {title} ",
"@notificaitonFatch": {},
"notificationNetworkError": "Échec de labonnement, erreur réseau {title} ",
"@notificationNetworkError": {
"placeholders": {
"title": {}
}
},
"notificationSubscribe": "S'abonner",
"@notificationSubscribe": {
"placeholders": {
"title": {}
}
},
"notificationSubscribeExisted": "Échec de labonnement, le podcast existe déjà {title}",
"@notificationSubscribeExisted": {
"placeholders": {
"title": {}
}
},
"notificationSuccess": "Abonnement réussi.",
"@notificationSuccess": {
"placeholders": {
"title": {}
}
},
"notificationUpdate": "Mise à jour {title}",
"@notificationUpdate": {
"placeholders": {
"title": {}
}
},
"notificationUpdateError": "Échec de la mise à jour {title}",
"@notificationUpdateError": {
"placeholders": {
"title": {}
}
},
"oldestFirst": "Le plus ancien en premier.",
"@oldestFirst": {},
"play": "Lecture",
"@play": {},
"playing": "En cours",
"@playing": {},
"plugins": "Plugins",
"@plugins": {},
"podcast": "{count, plural, zero{} one{Podcast} other{Podcasts}}",
"@podcast": {},
"podcastSubscribed": "Abonnements",
"@podcastSubscribed": {},
"popupMenuDownloadDes": "Télécharger l'épisode",
"@popupMenuDownloadDes": {},
"popupMenuLaterDes": "Ajouter l'épisode à la playlist",
"@popupMenuLaterDes": {},
"popupMenuLikeDes": "Ajouter l'épisode aux favoris",
"@popupMenuLikeDes": {},
"popupMenuMarkDes": "Marquer l'épisode comme lu",
"@popupMenuMarkDes": {},
"popupMenuPlayDes": "Jouer l'épisode",
"@popupMenuPlayDes": {},
"privacyPolicy": "Politique relative aux données personnelles.",
"@privacyPolicy": {},
"published": "Publié le {date}",
"@published": {
"placeholders": {
"date": {}
}
},
"publishedDaily": "Published daily",
"@publishedDaily": {},
"publishedMonthly": "Published monthly",
"@publishedMonthly": {},
"publishedWeekly": "Published weekly",
"@publishedWeekly": {
"description": "In search podcast detail page."
},
"publishedYearly": "Published yearly",
"@publishedYearly": {},
"recoverSubscribe": "Restaurer l'abonnement",
"@recoverSubscribe": {
"description": "User can recover subscribe podcast after remove it in subscribe history page."
},
"refreshArtwork": "Update artwork",
"@refreshArtwork": {},
"remove": "Supprimer",
"@remove": {
"description": "Remove not \"removed\". \nRemove a podcast or a group."
},
"removeConfirm": "Confirmer la suppression",
"@removeConfirm": {
"description": "unsubscribe podcast dialog"
},
"removedAt": "Supprimé le {date}",
"@removedAt": {
"description": "For example Removed at 2020.10.10",
"placeholders": {
"date": {}
}
},
"removePodcastDes": "Êtes-vous sûr de vouloir vous désabonner ?",
"@removePodcastDes": {},
"save": "Sauvegarder",
"@save": {},
"schedule": "Programmation",
"@schedule": {},
"searchInvalidRss": "Lien RSS invalide",
"@searchInvalidRss": {},
"searchPodcast": "Chercher un podcast",
"@searchPodcast": {},
"secondsAgo": "{count, plural, zero{A l'instant} one{Il y a {count} seconde} other{Il y a {count} secondes}}",
"@secondsAgo": {},
"settings": "Paramètres",
"@settings": {},
"settingsAccentColor": "Couleur principale",
"@settingsAccentColor": {},
"settingsAccentColorDes": "Inclure la couleur de superposition",
"@settingsAccentColorDes": {},
"settingsAppearance": "Apparence",
"@settingsAppearance": {},
"settingsAppearanceDes": "Couleurs et thèmes",
"@settingsAppearanceDes": {},
"settingsAppIntro": "App intro",
"@settingsAppIntro": {},
"settingsAudioCache": "Cache audio",
"@settingsAudioCache": {},
"settingsAudioCacheDes": "Taille maximum du cache audio",
"@settingsAudioCacheDes": {},
"settingsAutoDelete": "Supprimer automatiquement les téléchargement après",
"@settingsAutoDelete": {},
"settingsAutoDeleteDes": "30 jours par défaut",
"@settingsAutoDeleteDes": {},
"settingsAutoPlayDes": "Lancer automatiquement l'épisode suivant",
"@settingsAutoPlayDes": {},
"settingsBackup": "Backup",
"@settingsBackup": {},
"settingsBackupDes": "Sauvegarder les données de l'application",
"@settingsBackupDes": {},
"settingsDefaultGrid": "Vue par défaut",
"@settingsDefaultGrid": {},
"settingsDefaultGridDownload": "Onglet téléchargement",
"@settingsDefaultGridDownload": {},
"settingsDefaultGridFavorite": "Onglet favoris",
"@settingsDefaultGridFavorite": {},
"settingsDefaultGridPodcast": "Page du podcast",
"@settingsDefaultGridPodcast": {},
"settingsDefaultGridRecent": "Onglet récents",
"@settingsDefaultGridRecent": {},
"settingsDiscovery": "Revoir le tutoriel",
"@settingsDiscovery": {
"description": "Reset feature discovery state. User tap it and restart app, will see features tutorial again."
},
"settingsEnableSyncing": "Activer la synchronisation",
"@settingsEnableSyncing": {},
"settingsEnableSyncingDes": "Actualisez tous les podcasts en arrière-plan pour toujours afficher les derniers épisodes",
"@settingsEnableSyncingDes": {},
"settingsExportDes": "Exporter et importer les paramètres de l'application",
"@settingsExportDes": {},
"settingsFeedback": "Feedback",
"@settingsFeedback": {},
"settingsFeedbackDes": "Report de bugs et demande d'ajout de fonction",
"@settingsFeedbackDes": {},
"settingsHistory": "Historique",
"@settingsHistory": {},
"settingsHistoryDes": "Données d'écoutes",
"@settingsHistoryDes": {},
"settingsInfo": "Infos",
"@settingsInfo": {},
"settingsInterface": "Interface",
"@settingsInterface": {},
"settingsLanguages": "Langues",
"@settingsLanguages": {},
"settingsLanguagesDes": "Changer la langue",
"@settingsLanguagesDes": {},
"settingsLayout": "Style",
"@settingsLayout": {},
"settingsLayoutDes": "Style de l'application",
"@settingsLayoutDes": {},
"settingsLibraries": "Librairies",
"@settingsLibraries": {},
"settingsLibrariesDes": "Les librairies open source utilisées",
"@settingsLibrariesDes": {},
"settingsManageDownload": "Gérer les téléchargements",
"@settingsManageDownload": {},
"settingsManageDownloadDes": "Gérer les fichiers audio téléchargés",
"@settingsManageDownloadDes": {},
"settingsMenuAutoPlay": "Jouer automatiquement le suivant.",
"@settingsMenuAutoPlay": {},
"settingsNetworkCellular": "Demander avant l'utilisation du réseau mobile",
"@settingsNetworkCellular": {},
"settingsNetworkCellularAuto": "Téléchargement automatique sur réseau mobile.",
"@settingsNetworkCellularAuto": {},
"settingsNetworkCellularAutoDes": "Vous pouvez utiliser le téléchargement automatique du podcast sur la page de gestion des groupes.",
"@settingsNetworkCellularAutoDes": {},
"settingsNetworkCellularDes": "Si connecté à un réseau mobile, demander une confirmation avant le téléchargement.",
"@settingsNetworkCellularDes": {},
"settingsPlayDes": "Playlist et lecteur",
"@settingsPlayDes": {},
"settingsPopupMenu": "Menu popup des épisodes",
"@settingsPopupMenu": {},
"settingsPopupMenuDes": "Modifier le menu popup de l'épisode",
"@settingsPopupMenuDes": {},
"settingsPrefrence": "Préférences",
"@settingsPrefrence": {},
"settingsRealDark": "Noir profond",
"@settingsRealDark": {},
"settingsRealDarkDes": "Activez pour un mode sombre accentué",
"@settingsRealDarkDes": {},
"settingsSTAuto": "Activation automatique de la minuterie",
"@settingsSTAuto": {},
"settingsSTAutoDes": "Démarrer la minuterie à l'horaire programmé",
"@settingsSTAutoDes": {},
"settingsSTDefaultTime": "Temps par défaut",
"@settingsSTDefaultTime": {},
"settingsSTDefautTimeDes": "Temps par défaut de la minuterie",
"@settingsSTDefautTimeDes": {},
"settingsSTMode": "Mode minuterie automatique",
"@settingsSTMode": {},
"settingsStorageDes": "Gérer le cache et l'espace de stockage",
"@settingsStorageDes": {},
"settingsSyncing": "Synchronisation",
"@settingsSyncing": {},
"settingsSyncingDes": "Actualiser les podcasts en arrière-plan",
"@settingsSyncingDes": {},
"settingsTapToOpenPopupMenu": "Appuyer pour ouvrir le menu",
"@settingsTapToOpenPopupMenu": {},
"settingsTapToOpenPopupMenuDes": "Vous devez effectuer un appui long pour ouvrir la page de l'épisode",
"@settingsTapToOpenPopupMenuDes": {},
"settingsTheme": "Thème",
"@settingsTheme": {},
"settingStorage": "Espace de stockage",
"@settingStorage": {},
"settingsUpdateInterval": "Intervalle de mise à jour",
"@settingsUpdateInterval": {},
"settingsUpdateIntervalDes": "24 heures par défaut",
"@settingsUpdateIntervalDes": {},
"share": "Partager",
"@share": {},
"size": "Taille",
"@size": {},
"skipSecondsAtStart": "Passer les premières secondes du début",
"@skipSecondsAtStart": {},
"sleepTimer": "Minuterie",
"@sleepTimer": {},
"subscribe": "Abonnements",
"@subscribe": {},
"subscribeExportDes": "Exporter le fichier OPML de tous les podcasts",
"@subscribeExportDes": {},
"systemDefault": "Valeur du système par défaut",
"@systemDefault": {},
"timeLastPlayed": "Dernière écoute à {time}",
"@timeLastPlayed": {
"description": "Show last time stop position in player when a episode have been played.",
"placeholders": {
"time": {}
}
},
"timeLeft": "{time} Restant",
"@timeLeft": {
"placeholders": {
"time": {}
}
},
"to": "Jusqu'à {time}",
"@to": {
"placeholders": {
"time": {}
}
},
"toastAddPlaylist": "Ajouté à la playlist.",
"@toastAddPlaylist": {},
"toastDiscovery": "Tutoriel réinitialisé, veuillez redémarrer l'application.",
"@toastDiscovery": {
"description": "Toast displayed when user tap Discovery Features Again in settings page."
},
"toastFileError": "Erreur du fichier, échec de l'abonnement.",
"@toastFileError": {},
"toastFileNotValid": "Fichier invalide.",
"@toastFileNotValid": {},
"toastHomeGroupNotSupport": "Le groupe Home n'est pas pris en charge",
"@toastHomeGroupNotSupport": {},
"toastImportSettingsSuccess": "Importation des paramètres effectuée",
"@toastImportSettingsSuccess": {},
"toastOneGroup": "Sélectionnez au moins un groupe",
"@toastOneGroup": {},
"toastPodcastRecovering": "Récupération en cours, patientez un instant.",
"@toastPodcastRecovering": {
"description": "Resubscribe removed podcast"
},
"toastReadFile": "Lecture du fichier réussie",
"@toastReadFile": {},
"toastRecoverFailed": "Échec de la récupération du podcast",
"@toastRecoverFailed": {
"description": "Resubscribe removed podast"
},
"toastRemovePlaylist": "L'épisode a été supprimé de la playlist.",
"@toastRemovePlaylist": {},
"toastSettingSaved": "Paramètres sauvegardés",
"@toastSettingSaved": {},
"toastTimeEqualEnd": "Heure de fin",
"@toastTimeEqualEnd": {
"description": "User can't choose the same time as schedule end time."
},
"toastTimeEqualStart": "Heure de démarrage",
"@toastTimeEqualStart": {
"description": "User can't choose the same time as schedule start time."
},
"translators": "Translators",
"@translators": {},
"understood": "Compris",
"@understood": {},
"undo": "ANNULER",
"@undo": {},
"unlike": "Dislike",
"@unlike": {},
"unliked": "L'épisode a été supprimé des favoris.",
"@unliked": {},
"updateDate": "Date de mise à jour",
"@updateDate": {},
"updateEpisodesCount": "{count, plural, zero{Aucune mise à jour.} one{Mise à jour d'{count} épisode.} other{Mise à jour de {count} épisodes.}}",
"@updateEpisodesCount": {},
"updateFailed": "Échec de la mise à jour, erreur de réseau",
"@updateFailed": {},
"version": "Version : {version}",
"@version": {
"placeholders": {
"version": {}
}
}
}

View File

@ -296,6 +296,16 @@
"date": {}
}
},
"publishedDaily": "每日更新",
"@publishedDaily": {},
"publishedMonthly": "每月更新",
"@publishedMonthly": {},
"publishedWeekly": "每周更新",
"@publishedWeekly": {
"description": "In search podcast detail page."
},
"publishedYearly": "每年更新",
"@publishedYearly": {},
"recoverSubscribe": "恢复订阅",
"@recoverSubscribe": {
"description": "User can recover subscribe podcast after remove it in subscribe history page."
@ -524,6 +534,8 @@
"@toastTimeEqualStart": {
"description": "User can't choose the same time as schedule start time."
},
"translators": "翻译者",
"@translators": {},
"understood": "了解",
"@understood": {},
"undo": "撤销",

View File

@ -91,6 +91,22 @@ class _LanguagesSettingState extends State<LanguagesSetting> {
}),
),
Divider(height: 2),
ListTile(
title: Text('LE françAIS'),
onTap: () async {
await S.load(Locale('fr'));
setState(() {});
},
contentPadding: const EdgeInsets.only(left: 75, right: 20),
trailing: Radio<Locale>(
value: Locale('fr'),
groupValue: Locale(Intl.getCurrentLocale()),
onChanged: (Locale locale) async {
await S.load(locale);
setState(() {});
}),
),
Divider(height: 2),
ListTile(
onTap: () => _launchUrl(
'mailto:<tsacdop.app@gmail.com>?subject=Tsacdop localization project'),
@ -106,10 +122,6 @@ class _LanguagesSettingState extends State<LanguagesSetting> {
),
subtitle: Text(
"If you'd like to contribute to support more languages, please contact me."),
// trailing: IconButton(
// icon: Icon(LineIcons.heart),
// onPressed: () => _launchUrl(
// 'mailto:<tsacdop.app@gmail.com>?subject=Tsacdop localization project')),
),
],
))),

View File

@ -42,13 +42,13 @@ extension IntExtension on int {
final s = context.s;
var interval = Duration(milliseconds: this);
if (interval.inHours <= 48)
return 'Published daily';
return s.publishedDaily;
else if (interval.inDays > 2 && interval.inDays <= 14)
return 'Published weekly';
return s.publishedWeekly;
else if (interval.inDays > 14 && interval.inDays < 60)
return 'Published monthly';
return s.publishedMonthly;
else
return 'Published yearly';
return s.publishedYearly;
}
}

View File

@ -1,7 +1,7 @@
name: tsacdop
description: An easy-use podacasts player.
version: 0.4.7+23
version: 0.4.8+24
environment:
sdk: ">=2.6.0 <3.0.0"