diff --git a/CHANGELOG.md b/CHANGELOG.md index b63d076f8..8543f355d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added + +- add and remove tags to JPEG/GIF/PNG/TIFF images +- French translation + ## [v1.5.6] - 2021-11-12 ### Added diff --git a/README.md b/README.md index e86f34117..4cfec3aa7 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ At this stage this project does *not* accept PRs, except for translations. ### Translations -If you want to translate this app in your language and share the result, feel free to open a PR or send the translation by [email](mailto:gallery.aves@gmail.com). You can find some localization notes in [pubspec.yaml](https://github.com/deckerst/aves/blob/develop/pubspec.yaml). English, Korean and French (soon™) are already handled. +If you want to translate this app in your language and share the result, feel free to open a PR or send the translation by [email](mailto:gallery.aves@gmail.com). You can find some localization notes in [pubspec.yaml](https://github.com/deckerst/aves/blob/develop/pubspec.yaml). English, Korean and French are already handled. ### Donations diff --git a/android/app/src/main/res/values-fr/strings.xml b/android/app/src/main/res/values-fr/strings.xml new file mode 100644 index 000000000..46f2079d0 --- /dev/null +++ b/android/app/src/main/res/values-fr/strings.xml @@ -0,0 +1,10 @@ + + + Aves + Recherche + Vidéos + Analyse des images + Analyse des images & vidéos + Analyse des images + Annuler + \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index b2470baba..455fd7484 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -421,7 +421,7 @@ "removeEntryMetadataDialogMore": "More", "@removeEntryMetadataDialogMore": {}, - "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "XMP is required to play the video inside a motion photo. Are you sure you want to remove it?", + "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "XMP is required to play the video inside a motion photo.\n\nAre you sure you want to remove it?", "@removeEntryMetadataMotionPhotoXmpWarningDialogMessage": {}, "videoSpeedDialogLabel": "Playback speed", @@ -650,6 +650,8 @@ "@drawerCollectionImages": {}, "drawerCollectionVideos": "Videos", "@drawerCollectionVideos": {}, + "drawerCollectionAnimated": "Animated", + "@drawerCollectionAnimated": {}, "drawerCollectionMotionPhotos": "Motion photos", "@drawerCollectionMotionPhotos": {}, "drawerCollectionPanoramas": "Panoramas", @@ -1036,6 +1038,8 @@ "@tagEditorPageNewTagFieldLabel": {}, "tagEditorPageAddTagTooltip": "Add tag", "@tagEditorPageAddTagTooltip": {}, + "tagEditorSectionRecent": "Recent", + "@tagEditorSectionRecent": {}, "panoramaEnableSensorControl": "Enable sensor control", "@panoramaEnableSensorControl": {}, diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb new file mode 100644 index 000000000..d853aefb4 --- /dev/null +++ b/lib/l10n/app_fr.arb @@ -0,0 +1,512 @@ +{ + "appName": "Aves", + "welcomeMessage": "Bienvenue", + "welcomeOptional": "Option", + "welcomeTermsToggle": "J’accepte les conditions d’utilisation", + "itemCount": "{count, plural, =1{1 élément} other{{count} éléments}}", + + "timeSeconds": "{seconds, plural, =1{1 seconde} other{{seconds} secondes}}", + "timeMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + + "applyButtonLabel": "ENREGISTRER", + "deleteButtonLabel": "SUPPRIMER", + "nextButtonLabel": "SUIVANT", + "showButtonLabel": "AFFICHER", + "hideButtonLabel": "MASQUER", + "continueButtonLabel": "CONTINUER", + + "changeTooltip": "Modifier", + "clearTooltip": "Effacer", + "previousTooltip": "Précédent", + "nextTooltip": "Suivant", + "showTooltip": "Afficher", + "hideTooltip": "Masquer", + "removeTooltip": "Supprimer", + "resetButtonTooltip": "Réinitialiser", + + "doubleBackExitMessage": "Presser «\u00A0retour\u00A0» à nouveau pour quitter.", + + "sourceStateLoading": "Chargement", + "sourceStateCataloguing": "Classification", + "sourceStateLocatingCountries": "Identification des pays", + "sourceStateLocatingPlaces": "Identification des lieux", + + "chipActionDelete": "Supprimer", + "chipActionGoToAlbumPage": "Afficher dans Albums", + "chipActionGoToCountryPage": "Afficher dans Pays", + "chipActionGoToTagPage": "Afficher dans Libellés", + "chipActionHide": "Masquer", + "chipActionPin": "Épingler", + "chipActionUnpin": "Retirer", + "chipActionRename": "Renommer", + "chipActionSetCover": "Modifier la couverture", + "chipActionCreateAlbum": "Créer un album", + + "entryActionCopyToClipboard": "Copier dans presse-papier", + "entryActionDelete": "Supprimer", + "entryActionExport": "Exporter", + "entryActionInfo": "Détails", + "entryActionRename": "Renommer", + "entryActionRotateCCW": "Pivoter à gauche", + "entryActionRotateCW": "Pivoter à droite", + "entryActionFlip": "Retourner horizontalement", + "entryActionPrint": "Imprimer", + "entryActionShare": "Partager", + "entryActionViewSource": "Voir le code", + "entryActionViewMotionPhotoVideo": "Ouvrir le clip vidéo", + "entryActionEdit": "Modifier avec…", + "entryActionOpen": "Ouvrir avec…", + "entryActionSetAs": "Utiliser comme…", + "entryActionOpenMap": "Localiser avec…", + "entryActionRotateScreen": "Pivoter l’écran", + "entryActionAddFavourite": "Ajouter aux favoris", + "entryActionRemoveFavourite": "Retirer des favoris", + + "videoActionCaptureFrame": "Capturer l’image", + "videoActionPause": "Pause", + "videoActionPlay": "Lire", + "videoActionReplay10": "Reculer de 10 secondes", + "videoActionSkip10": "Avancer de 10 secondes", + "videoActionSelectStreams": "Choisir les pistes", + "videoActionSetSpeed": "Vitesse de lecture", + "videoActionSettings": "Préférences", + + "entryInfoActionEditDate": "Modifier la date", + "entryInfoActionEditTags": "Modifier les libellés", + "entryInfoActionRemoveMetadata": "Retirer les métadonnées", + + "filterFavouriteLabel": "Favori", + "filterLocationEmptyLabel": "Sans lieu", + "filterTagEmptyLabel": "Sans libellé", + "filterTypeAnimatedLabel": "Animation", + "filterTypeMotionPhotoLabel": "Photo animée", + "filterTypePanoramaLabel": "Panorama", + "filterTypeRawLabel": "Raw", + "filterTypeSphericalVideoLabel": "Vidéo à 360°", + "filterTypeGeotiffLabel": "GeoTIFF", + "filterMimeImageLabel": "Image", + "filterMimeVideoLabel": "Vidéo", + + "coordinateFormatDms": "DMS", + "coordinateFormatDecimal": "Degrés décimaux", + "coordinateDms": "{coordinate} {direction}", + "coordinateDmsNorth": "N", + "coordinateDmsSouth": "S", + "coordinateDmsEast": "E", + "coordinateDmsWest": "O", + + "unitSystemMetric": "SI", + "unitSystemImperial": "anglo-saxonnes", + + "videoLoopModeNever": "Jamais", + "videoLoopModeShortOnly": "Courtes vidéos seulement", + "videoLoopModeAlways": "Toujours", + + "mapStyleGoogleNormal": "Google Maps", + "mapStyleGoogleHybrid": "Google Maps (Satellite)", + "mapStyleGoogleTerrain": "Google Maps (Relief)", + "mapStyleOsmHot": "OSM Humanitaire", + "mapStyleStamenToner": "Stamen Toner", + "mapStyleStamenWatercolor": "Stamen Watercolor", + + "nameConflictStrategyRename": "Renommer", + "nameConflictStrategyReplace": "Remplacer", + "nameConflictStrategySkip": "Ignorer", + + "keepScreenOnNever": "Jamais", + "keepScreenOnViewerOnly": "Visionneuse seulement", + "keepScreenOnAlways": "Toujours", + + "accessibilityAnimationsRemove": "Empêchez certains effets de l’écran", + "accessibilityAnimationsKeep": "Conserver les effets de l’écran", + + "albumTierNew": "Nouveaux", + "albumTierPinned": "Épinglés", + "albumTierSpecial": "Standards", + "albumTierApps": "Apps", + "albumTierRegular": "Autres", + + "storageVolumeDescriptionFallbackPrimary": "Stockage interne", + "storageVolumeDescriptionFallbackNonPrimary": "Carte SD", + "rootDirectoryDescription": "dossier racine", + "otherDirectoryDescription": "dossier «\u00A0{name}\u00A0»", + "storageAccessDialogTitle": "Accès au dossier", + "storageAccessDialogMessage": "Veuillez sélectionner le {directory} de «\u00A0{volume}\u00A0» à l’écran suivant, pour que l’app puisse modifier son contenu.", + "restrictedAccessDialogTitle": "Accès restreint", + "restrictedAccessDialogMessage": "Cette app ne peut pas modifier les fichiers du {directory} de «\u00A0{volume}\u00A0».\n\nVeuillez utiliser une app pré-installée pour déplacer les fichiers vers un autre dossier.", + "notEnoughSpaceDialogTitle": "Espace insuffisant", + "notEnoughSpaceDialogMessage": "Cette opération nécessite {neededSize} d’espace disponible sur «\u00A0{volume}\u00A0», mais il ne reste que {freeSize}.", + + "unsupportedTypeDialogTitle": "Formats non supportés", + "unsupportedTypeDialogMessage": "{count, plural, =1{Cette opération n’est pas disponible pour les fichiers au format suivant : {types}.} other{Cette opération n’est pas disponible pour les fichiers aux formats suivants : {types}.}}", + + "nameConflictDialogSingleSourceMessage": "Certains fichiers dans le dossier de destination ont le même nom.", + "nameConflictDialogMultipleSourceMessage": "Certains fichiers ont le même nom.", + + "addShortcutDialogLabel": "Nom du raccourci", + "addShortcutButtonLabel": "AJOUTER", + + "noMatchingAppDialogTitle": "App indisponible", + "noMatchingAppDialogMessage": "Aucune app ne peut effectuer cette opération.", + + "deleteEntriesConfirmationDialogMessage": "{count, plural, =1{Voulez-vous vraiment supprimer cet élément ?} other{Voulez-vous vraiment supprimer ces {count} éléments ?}}", + + "videoResumeDialogMessage": "Voulez-vous reprendre la lecture à {time} ?", + "videoStartOverButtonLabel": "RECOMMENCER", + "videoResumeButtonLabel": "REPRENDRE", + + "setCoverDialogTitle": "Modifier la couverture", + "setCoverDialogLatest": "dernier élément", + "setCoverDialogCustom": "personnalisé", + + "hideFilterConfirmationDialogMessage": "Les images et vidéos correspondantes n’apparaîtront plus dans votre collection. Vous pouvez les montrer à nouveau via les réglages de «\u00A0Confidentialité\u00A0».\n\nVoulez-vous vraiment les masquer ?", + + "newAlbumDialogTitle": "Nouvel Album", + "newAlbumDialogNameLabel": "Nom de l’album", + "newAlbumDialogNameLabelAlreadyExistsHelper": "Le dossier existe déjà", + "newAlbumDialogStorageLabel": "Volume de stockage :", + + "renameAlbumDialogLabel": "Nouveau nom", + "renameAlbumDialogLabelAlreadyExistsHelper": "Le dossier existe déjà", + + "deleteSingleAlbumConfirmationDialogMessage": "{count, plural, =1{Voulez-vous vraiment supprimer cet album et son élément ?} other{Voulez-vous vraiment supprimer cet album et ses {count} éléments ?}}", + "deleteMultiAlbumConfirmationDialogMessage": "{count, plural, =1{Voulez-vous vraiment supprimer ces albums et leur élément ?} other{Voulez-vous vraiment supprimer ces albums et leurs {count} éléments ?}}", + + "exportEntryDialogFormat": "Format :", + + "renameEntryDialogLabel": "Nouveau nom", + + "editEntryDateDialogTitle": "Date & Heure", + "editEntryDateDialogSet": "Régler", + "editEntryDateDialogShift": "Décaler", + "editEntryDateDialogExtractFromTitle": "Extraire du titre", + "editEntryDateDialogClear": "Effacer", + "editEntryDateDialogFieldSelection": "Champs affectés", + "editEntryDateDialogHours": "Heures", + "editEntryDateDialogMinutes": "Minutes", + + "removeEntryMetadataDialogTitle": "Retrait de métadonnées", + "removeEntryMetadataDialogMore": "Voir plus", + + "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "Les métadonnées XMP sont nécessaires pour jouer la vidéo d’une photo animée.\n\nVoulez-vous vraiment les supprimer ?", + + "videoSpeedDialogLabel": "Vitesse de lecture", + + "videoStreamSelectionDialogVideo": "Vidéo", + "videoStreamSelectionDialogAudio": "Audio", + "videoStreamSelectionDialogText": "Sous-titres", + "videoStreamSelectionDialogOff": "Désactivé", + "videoStreamSelectionDialogTrack": "Piste", + "videoStreamSelectionDialogNoSelection": "Il n’y a pas d’autre piste.", + + "genericSuccessFeedback": "Succès !", + "genericFailureFeedback": "Échec", + + "menuActionSort": "Trier", + "menuActionGroup": "Grouper", + "menuActionSelect": "Sélectionner", + "menuActionSelectAll": "Tout sélectionner", + "menuActionSelectNone": "Tout désélectionner", + "menuActionMap": "Carte", + "menuActionStats": "Statistiques", + + "aboutPageTitle": "À propos", + "aboutLinkSources": "Sources", + "aboutLinkLicense": "Licence", + "aboutLinkPolicy": "Politique de confidentialité", + + "aboutUpdate": "Nouvelle Version", + "aboutUpdateLinks1": "Une nouvelle version d’Aves est disponible sur", + "aboutUpdateLinks2": "et", + "aboutUpdateLinks3": ".", + "aboutUpdateGitHub": "GitHub", + "aboutUpdateGooglePlay": "Google Play", + + "aboutBug": "Rapports d’erreur", + "aboutBugSaveLogInstruction": "Sauvegarder les logs de l’app vers un fichier", + "aboutBugSaveLogButton": "Sauvegarder", + "aboutBugCopyInfoInstruction": "Copier les informations d’environnement", + "aboutBugCopyInfoButton": "Copier", + "aboutBugReportInstruction": "Créer une «\u00A0issue\u00A0» sur GitHub en attachant les logs et informations d’environnement", + "aboutBugReportButton": "Créer", + + "aboutCredits": "Remerciements", + "aboutCreditsWorldAtlas1": "Cette app utilise un fichier TopoJSON de ", + "aboutCreditsWorldAtlas2": "sous licence ISC.", + "aboutCreditsTranslators": "Traducteurs:", + + "aboutLicenses": "Licences open-source", + "aboutLicensesBanner": "Cette app utilise ces librairies et packages open-source.", + "aboutLicensesAndroidLibraries": "Librairies Android", + "aboutLicensesFlutterPlugins": "Plugins Flutter", + "aboutLicensesFlutterPackages": "Packages Flutter", + "aboutLicensesDartPackages": "Packages Dart", + "aboutLicensesShowAllButtonLabel": "Afficher toutes les licences", + + "policyPageTitle": "Politique de confidentialité", + + "collectionPageTitle": "Collection", + "collectionPickPageTitle": "Sélection", + "collectionSelectionPageTitle": "{count, plural, =0{Sélection} =1{1 élément} other{{count} éléments}}", + + "collectionActionShowTitleSearch": "Filtrer les titres", + "collectionActionHideTitleSearch": "Masquer le filtre", + "collectionActionAddShortcut": "Créer un raccourci", + "collectionActionCopy": "Copier vers l’album", + "collectionActionMove": "Déplacer vers l’album", + "collectionActionRescan": "Réanalyser", + "collectionActionEdit": "Modifier", + + "collectionSearchTitlesHintText": "Recherche de titres", + + "collectionSortTitle": "Trier", + "collectionSortDate": "par date", + "collectionSortSize": "par taille", + "collectionSortName": "alphabétiquement", + + "collectionGroupTitle": "Grouper", + "collectionGroupAlbum": "par album", + "collectionGroupMonth": "par mois", + "collectionGroupDay": "par jour", + "collectionGroupNone": "ne pas grouper", + + "sectionUnknown": "Inconnu", + "dateToday": "Aujourd’hui", + "dateYesterday": "Hier", + "dateThisMonth": "Ce mois-ci", + "collectionDeleteFailureFeedback": "{count, plural, =1{Échec de la suppression d’1 élément} other{Échec de la suppression de {count} éléments}}", + "collectionCopyFailureFeedback": "{count, plural, =1{Échec de la copie d’1 élément} other{Échec de la copie de {count} éléments}}", + "collectionMoveFailureFeedback": "{count, plural, =1{Échec du déplacement d’1 élément} other{Échec du déplacement de {count} éléments}}", + "collectionEditFailureFeedback": "{count, plural, =1{Échec de la modification d’1 élément} other{Échec de la modification de {count} éléments}}", + "collectionExportFailureFeedback": "{count, plural, =1{Échec de l’export d’1 page} other{Échec de l’export de {count} pages}}", + "collectionCopySuccessFeedback": "{count, plural, =1{1 élément copié} other{{count} éléments copiés}}", + "collectionMoveSuccessFeedback": "{count, plural, =1{1 élément déplacé} other{{count} éléments déplacés}}", + "collectionEditSuccessFeedback": "{count, plural, =1{1 élément modifié} other{{count} éléments modifiés}}", + + "collectionEmptyFavourites": "Aucun favori", + "collectionEmptyVideos": "Aucune vidéo", + "collectionEmptyImages": "Aucune image", + + "collectionSelectSectionTooltip": "Sélectionner la section", + "collectionDeselectSectionTooltip": "Désélectionner la section", + + "drawerCollectionAll": "Toute la collection", + "drawerCollectionFavourites": "Favoris", + "drawerCollectionImages": "Images", + "drawerCollectionVideos": "Vidéos", + "drawerCollectionAnimated": "Animations", + "drawerCollectionMotionPhotos": "Photos animées", + "drawerCollectionPanoramas": "Panoramas", + "drawerCollectionRaws": "Photos Raw", + "drawerCollectionSphericalVideos": "Vidéos à 360°", + + "chipSortTitle": "Trier", + "chipSortDate": "par date", + "chipSortName": "par nom", + "chipSortCount": "par nombre d’éléments", + + "albumGroupTitle": "Grouper", + "albumGroupTier": "par importance", + "albumGroupVolume": "par volume de stockage", + "albumGroupNone": "ne pas grouper", + + "albumPickPageTitleCopy": "Copie", + "albumPickPageTitleExport": "Export", + "albumPickPageTitleMove": "Déplacement", + "albumPickPageTitlePick": "Sélection", + + "albumCamera": "Appareil photo", + "albumDownload": "Téléchargements", + "albumScreenshots": "Captures d’écran", + "albumScreenRecordings": "Enregistrements d’écran", + "albumVideoCaptures": "Captures de vidéo", + + "albumPageTitle": "Albums", + "albumEmpty": "Aucun album", + "createAlbumTooltip": "Créer un album", + "createAlbumButtonLabel": "CRÉER", + "newFilterBanner": "nouveau", + + "countryPageTitle": "Pays", + "countryEmpty": "Aucun pays", + + "tagPageTitle": "Libellés", + "tagEmpty": "Aucun libellé", + + "searchCollectionFieldHint": "Recherche", + "searchSectionRecent": "Historique", + "searchSectionAlbums": "Albums", + "searchSectionCountries": "Pays", + "searchSectionPlaces": "Lieux", + "searchSectionTags": "Libellés", + + "settingsPageTitle": "Réglages", + "settingsSystemDefault": "Système", + "settingsDefault": "Par défaut", + + "settingsActionExport": "Exporter", + "settingsActionImport": "Importer", + + "settingsSectionNavigation": "Navigation", + "settingsHome": "Page d’accueil", + "settingsKeepScreenOnTile": "Maintenir l’écran allumé", + "settingsKeepScreenOnTitle": "Allumage de l’écran", + "settingsDoubleBackExit": "Presser «\u00A0retour\u00A0» 2 fois pour quitter", + + "settingsNavigationDrawerTile": "Menu de navigation", + "settingsNavigationDrawerEditorTitle": "Menu de navigation", + "settingsNavigationDrawerBanner": "Maintenez votre doigt appuyé pour déplacer et réorganiser les éléments de menu.", + "settingsNavigationDrawerTabTypes": "Types", + "settingsNavigationDrawerTabAlbums": "Albums", + "settingsNavigationDrawerTabPages": "Pages", + "settingsNavigationDrawerAddAlbum": "Ajouter un album", + + "settingsSectionThumbnails": "Vignettes", + "settingsThumbnailShowLocationIcon": "Afficher l’icône de lieu", + "settingsThumbnailShowMotionPhotoIcon": "Afficher l’icône de photo animée", + "settingsThumbnailShowRawIcon": "Afficher l’icône de photo raw", + "settingsThumbnailShowVideoDuration": "Afficher la durée de la vidéo", + + "settingsCollectionQuickActionsTile": "Actions rapides", + "settingsCollectionQuickActionEditorTitle": "Actions rapides", + "settingsCollectionQuickActionTabBrowsing": "Navigation", + "settingsCollectionQuickActionTabSelecting": "Sélection", + "settingsCollectionBrowsingQuickActionEditorBanner": "Maintenez votre doigt appuyé pour déplacer les boutons et choisir les actions affichées lors de la navigation.", + "settingsCollectionSelectionQuickActionEditorBanner": "Maintenez votre doigt appuyé pour déplacer les boutons et choisir les actions affichées lors de la sélection d’éléments.", + + "settingsSectionViewer": "Visionneuse", + "settingsViewerShowOverlayOnOpening": "Afficher les incrustations à l’ouverture", + "settingsViewerShowMinimap": "Afficher la mini-carte", + "settingsViewerShowInformation": "Afficher les détails", + "settingsViewerShowInformationSubtitle": "Afficher les titre, date, lieu, etc.", + "settingsViewerShowShootingDetails": "Afficher les détails de prise de vue", + "settingsViewerEnableOverlayBlurEffect": "Effets de flou des incrustations", + "settingsViewerUseCutout": "Utiliser la zone d’encoche", + "settingsImageBackground": "Arrière-plan de l’image", + + "settingsViewerQuickActionsTile": "Actions rapides", + "settingsViewerQuickActionEditorTitle": "Actions rapides", + "settingsViewerQuickActionEditorBanner": "Maintenez votre doigt appuyé pour déplacer les boutons et choisir les actions affichées sur la visionneuse.", + "settingsViewerQuickActionEditorDisplayedButtons": "Boutons affichés", + "settingsViewerQuickActionEditorAvailableButtons": "Boutons disponibles", + "settingsViewerQuickActionEmpty": "Aucun bouton", + + "settingsVideoPageTitle": "Réglages vidéo", + "settingsSectionVideo": "Vidéo", + "settingsVideoShowVideos": "Afficher les vidéos", + "settingsVideoEnableHardwareAcceleration": "Accélération matérielle", + "settingsVideoEnableAutoPlay": "Lecture automatique", + "settingsVideoLoopModeTile": "Lecture répétée", + "settingsVideoLoopModeTitle": "Lecture répétée", + "settingsVideoQuickActionsTile": "Actions rapides pour les vidéos", + "settingsVideoQuickActionEditorTitle": "Actions rapides", + + "settingsSubtitleThemeTile": "Sous-titres", + "settingsSubtitleThemeTitle": "Sous-titres", + "settingsSubtitleThemeSample": "Ceci est un exemple.", + "settingsSubtitleThemeTextAlignmentTile": "Alignement du texte", + "settingsSubtitleThemeTextAlignmentTitle": "Alignement du texte", + "settingsSubtitleThemeTextSize": "Taille du texte", + "settingsSubtitleThemeShowOutline": "Afficher les contours et ombres", + "settingsSubtitleThemeTextColor": "Couleur du texte", + "settingsSubtitleThemeTextOpacity": "Transparence du texte", + "settingsSubtitleThemeBackgroundColor": "Couleur d’arrière-plan", + "settingsSubtitleThemeBackgroundOpacity": "Transparence de l’arrière-plan", + "settingsSubtitleThemeTextAlignmentLeft": "gauche", + "settingsSubtitleThemeTextAlignmentCenter": "centré", + "settingsSubtitleThemeTextAlignmentRight": "droite", + + "settingsSectionPrivacy": "Confidentialité", + "settingsAllowInstalledAppAccess": "Autoriser l’accès à l’inventaire des apps", + "settingsAllowInstalledAppAccessSubtitle": "Pour un affichage amélioré des albums", + "settingsAllowErrorReporting": "Autoriser l’envoi de rapports d’erreur", + "settingsSaveSearchHistory": "Maintenir un historique des recherches", + + "settingsHiddenFiltersTile": "Filtres masqués", + "settingsHiddenFiltersTitle": "Filtres masqués", + "settingsHiddenFiltersBanner": "Les images et vidéos correspondantes aux filtres masqués n’apparaîtront pas dans votre collection.", + "settingsHiddenFiltersEmpty": "Aucun filtre masqué", + + "settingsHiddenPathsTile": "Chemins masqués", + "settingsHiddenPathsTitle": "Chemins masqués", + "settingsHiddenPathsBanner": "Les images et vidéos dans ces dossiers, ou leurs sous-dossiers, n’apparaîtront pas dans votre collection.", + "settingsHiddenPathsEmpty": "Aucun chemin masqué", + "addPathTooltip": "Ajouter un chemin", + + "settingsStorageAccessTile": "Accès au stockage", + "settingsStorageAccessTitle": "Accès au stockage", + "settingsStorageAccessBanner": "Une autorisation d’accès au stockage est nécessaire pour modifier le contenu de certains dossiers. Voici la liste des autorisations couramment en vigueur.", + "settingsStorageAccessEmpty": "Aucune autorisation d’accès", + "settingsStorageAccessRevokeTooltip": "Retirer", + + "settingsSectionAccessibility": "Accessibilité", + "settingsRemoveAnimationsTile": "Suppression des animations", + "settingsRemoveAnimationsTitle": "Suppression des animations", + "settingsTimeToTakeActionTile": "Délai pour effectuer une action", + "settingsTimeToTakeActionTitle": "Délai pour effectuer une action", + + "settingsSectionLanguage": "Langue & Formats", + "settingsLanguage": "Langue", + "settingsCoordinateFormatTile": "Format de coordonnées", + "settingsCoordinateFormatTitle": "Format de coordonnées", + "settingsUnitSystemTile": "Unités", + "settingsUnitSystemTitle": "Unités", + + "statsPageTitle": "Statistiques", + "statsWithGps": "{count, plural, =1{1 élément localisé} other{{count} éléments localisés}}", + "statsTopCountries": "Top pays", + "statsTopPlaces": "Top lieux", + "statsTopTags": "Top libellés", + + "viewerOpenPanoramaButtonLabel": "OUVRIR LE PANORAMA", + "viewerErrorUnknown": "Zut !", + "viewerErrorDoesNotExist": "Le fichier n’existe plus.", + + "viewerInfoPageTitle": "Détails", + "viewerInfoBackToViewerTooltip": "Retour à la visionneuse", + + "viewerInfoUnknown": "inconnu", + "viewerInfoLabelTitle": "Titre", + "viewerInfoLabelDate": "Date", + "viewerInfoLabelResolution": "Résolution", + "viewerInfoLabelSize": "Taille", + "viewerInfoLabelUri": "URI", + "viewerInfoLabelPath": "Chemin", + "viewerInfoLabelDuration": "Durée", + "viewerInfoLabelOwner": "Propriétaire", + "viewerInfoLabelCoordinates": "Coordonnées", + "viewerInfoLabelAddress": "Adresse", + + "mapStyleTitle": "Type de carte", + "mapStyleTooltip": "Sélectionner le type de carte", + "mapZoomInTooltip": "Zoomer", + "mapZoomOutTooltip": "Dézoomer", + "mapPointNorthUpTooltip": "Placer le nord en haut", + "mapAttributionOsmHot": "Données © les contributeurs d’[OpenStreetMap](https://www.openstreetmap.org/copyright) • Fond de carte par [HOT](https://www.hotosm.org/) • Hébergé par [OSM France](https://openstreetmap.fr/)", + "mapAttributionStamen": "Données © les contributeurs d’[OpenStreetMap](https://www.openstreetmap.org/copyright) • Fond de carte par [Stamen Design](http://stamen.com), [CC BY 3.0](http://creativecommons.org/licenses/by/3.0)", + "openMapPageTooltip": "Ouvrir la page Carte", + "mapEmptyRegion": "Aucune image dans cette région", + + "viewerInfoOpenEmbeddedFailureFeedback": "Échec de l’extraction des données", + "viewerInfoOpenLinkText": "Ouvrir", + "viewerInfoViewXmlLinkText": "Afficher le XML", + + "viewerInfoSearchFieldLabel": "Recherche de métadonnées", + "viewerInfoSearchEmpty": "Aucune clé correspondante", + "viewerInfoSearchSuggestionDate": "Date & heure", + "viewerInfoSearchSuggestionDescription": "Description", + "viewerInfoSearchSuggestionDimensions": "Dimensions", + "viewerInfoSearchSuggestionResolution": "Résolution", + "viewerInfoSearchSuggestionRights": "Droits", + + "tagEditorPageTitle": "Modifier les libellés", + "tagEditorPageNewTagFieldLabel": "Nouveau libellé", + "tagEditorPageAddTagTooltip": "Ajouter le libellé", + "tagEditorSectionRecent": "Ajouts récents", + + "panoramaEnableSensorControl": "Activer le contrôle par capteurs", + "panoramaDisableSensorControl": "Désactiver le contrôle par capteurs", + + "sourceViewerPageTitle": "Code source", + "@sourceViewerPageTitle": {} +} diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb index 296bdac15..b39d70a9d 100644 --- a/lib/l10n/app_ko.arb +++ b/lib/l10n/app_ko.arb @@ -186,7 +186,7 @@ "removeEntryMetadataDialogTitle": "메타데이터 삭제", "removeEntryMetadataDialogMore": "더 보기", - "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "XMP가 있어야 모션 포토에 포함되는 동영상을 재생할 수 있습니다. 삭제하시겠습니까?", + "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "XMP가 있어야 모션 포토에 포함되는 동영상을 재생할 수 있습니다.\n\n삭제하시겠습니까?", "videoSpeedDialogLabel": "재생 배속", @@ -292,6 +292,7 @@ "drawerCollectionFavourites": "즐겨찾기", "drawerCollectionImages": "사진", "drawerCollectionVideos": "동영상", + "drawerCollectionAnimated": "애니메이션", "drawerCollectionMotionPhotos": "모션 포토", "drawerCollectionPanoramas": "파노라마", "drawerCollectionRaws": "Raw 이미지", @@ -496,6 +497,8 @@ "viewerInfoSearchSuggestionResolution": "해상도", "viewerInfoSearchSuggestionRights": "권리", + "tagEditorSectionRecent": "최근 이용기록", + "panoramaEnableSensorControl": "센서 제어 활성화", "panoramaDisableSensorControl": "센서 제어 비활성화", diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 1dbbe07f0..aee4bd4c0 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -186,7 +186,7 @@ "removeEntryMetadataDialogTitle": "Удаление метаданных", "removeEntryMetadataDialogMore": "Дополнительно", - "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "Для воспроизведения видео внутри этой живой фотографии требуется XMP профиль. Вы уверены, что хотите удалить его?", + "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "Для воспроизведения видео внутри этой живой фотографии требуется XMP профиль.\n\nВы уверены, что хотите удалить его?", "videoSpeedDialogLabel": "Скорость воспроизведения", @@ -292,6 +292,7 @@ "drawerCollectionFavourites": "Избранное", "drawerCollectionImages": "Изображения", "drawerCollectionVideos": "Видео", + "drawerCollectionAnimated": "GIF", "drawerCollectionMotionPhotos": "Живые фото", "drawerCollectionPanoramas": "Панорамы", "drawerCollectionRaws": "RAW", @@ -496,6 +497,8 @@ "viewerInfoSearchSuggestionResolution": "Разрешение", "viewerInfoSearchSuggestionRights": "Права", + "tagEditorSectionRecent": "Недавние", + "panoramaEnableSensorControl": "Включить сенсорное управление", "panoramaDisableSensorControl": "Отключить сенсорное управление", diff --git a/lib/widgets/collection/grid/headers/date.dart b/lib/widgets/collection/grid/headers/date.dart index 2670b1acf..adc11af73 100644 --- a/lib/widgets/collection/grid/headers/date.dart +++ b/lib/widgets/collection/grid/headers/date.dart @@ -65,8 +65,8 @@ class MonthSectionHeader extends StatelessWidget { if (date == null) return l10n.sectionUnknown; if (date.isThisMonth) return l10n.dateThisMonth; final locale = l10n.localeName; - if (date.isThisYear) return DateFormat.MMMM(locale).format(date); - return DateFormat.yMMMM(locale).format(date); + final localized = date.isThisYear? DateFormat.MMMM(locale).format(date) : DateFormat.yMMMM(locale).format(date); + return '${localized.substring(0, 1).toUpperCase()}${localized.substring(1)}'; } @override diff --git a/lib/widgets/dialogs/entry_editors/edit_entry_tags_dialog.dart b/lib/widgets/dialogs/entry_editors/edit_entry_tags_dialog.dart index 9d44106c1..dac59b386 100644 --- a/lib/widgets/dialogs/entry_editors/edit_entry_tags_dialog.dart +++ b/lib/widgets/dialogs/entry_editors/edit_entry_tags_dialog.dart @@ -156,7 +156,7 @@ class _TagEditorPageState extends State { ), const Divider(height: 1), _FilterRow( - title: l10n.searchSectionRecent, + title: l10n.tagEditorSectionRecent, filters: recentFilters, expandedNotifier: _expandedSectionNotifier, onTap: _addTag, diff --git a/lib/widgets/drawer/tile.dart b/lib/widgets/drawer/tile.dart index 54daa7fea..715ddd76b 100644 --- a/lib/widgets/drawer/tile.dart +++ b/lib/widgets/drawer/tile.dart @@ -46,6 +46,7 @@ class DrawerFilterTitle extends StatelessWidget { if (filter == FavouriteFilter.instance) return l10n.drawerCollectionFavourites; if (filter == MimeFilter.image) return l10n.drawerCollectionImages; if (filter == MimeFilter.video) return l10n.drawerCollectionVideos; + if (filter == TypeFilter.animated) return l10n.drawerCollectionAnimated; if (filter == TypeFilter.motionPhoto) return l10n.drawerCollectionMotionPhotos; if (filter == TypeFilter.panorama) return l10n.drawerCollectionPanoramas; if (filter == TypeFilter.raw) return l10n.drawerCollectionRaws; diff --git a/lib/widgets/settings/language/locale.dart b/lib/widgets/settings/language/locale.dart index 18526966e..701956a39 100644 --- a/lib/widgets/settings/language/locale.dart +++ b/lib/widgets/settings/language/locale.dart @@ -44,6 +44,8 @@ class LocaleTile extends StatelessWidget { switch (locale.languageCode) { case 'en': return 'English'; + case 'fr': + return 'Français'; case 'ko': return '한국어'; case 'ru':