diff --git a/crates/ui-egui/locales/fr.json b/crates/ui-egui/locales/fr.json index dd981f8b6..a978e9831 100644 --- a/crates/ui-egui/locales/fr.json +++ b/crates/ui-egui/locales/fr.json @@ -1734,5 +1734,132 @@ "ONNX model": "Modèle ONNX", "commercial use subject to GPL conditions": "usage commercial soumis aux conditions de la GPL", "Camera local tone mapping": "Mappage local des tons de l’appareil", - "Apply the local tone mapping stored in the raw (Apple ProRAW), as the camera renders it": "Appliquer le mappage local des tons enregistré dans le fichier raw (Apple ProRAW), comme le rend l’appareil" -} \ No newline at end of file + "Apply the local tone mapping stored in the raw (Apple ProRAW), as the camera renders it": "Appliquer le mappage local des tons enregistré dans le fichier raw (Apple ProRAW), comme le rend l’appareil", + "Decrease Rating": "Diminuer la note", + "Increase Rating": "Augmenter la note", + "Click to type a value": "Cliquez pour saisir une valeur", + "Angle": "Angle", + "Video": "Vidéo", + "Copyrighted": "Protégé par copyright", + "Public Domain": "Domaine public", + "Unknown": "Inconnu", + "Landscape (wide)": "Paysage (large)", + "Portrait (tall)": "Portrait (haut)", + "Square": "Carré", + "In Color": "En couleur", + "No Label": "Sans étiquette", + "Choose an album…": "Choisir un album…", + "No albums yet": "Aucun album pour l'instant", + "Fix the marked rules to save this album.": "Corrigez les règles signalées pour enregistrer cet album.", + "Some rules need fixing (Edit Smart Album…):": "Certaines règles sont à corriger (Modifier l'album intelligent…) :", + "isn't a field rules know": "n'est pas un champ connu des règles", + "can't be tested that way": "ne peut pas être testé ainsi", + "is yes or no": "vaut oui ou non", + "needs a number": "demande un nombre", + "needs a time like 1/250 or 2": "demande une durée comme 1/250 ou 2", + "needs a date like 2026, 2026-08 or 2026-08-14": "demande une date comme 2026, 2026-08 ou 2026-08-14", + "has the first date after the second": "a la première date après la seconde", + "needs two values": "demande deux valeurs", + "needs a number more than 0": "demande un nombre supérieur à 0", + "needs hours, days, weeks, months or years": "demande des heures, jours, semaines, mois ou années", + "isn't one of the choices": "ne fait pas partie des choix", + "needs something to look for (or use “is empty”)": "demande quelque chose à chercher (ou utilisez « est vide »)", + "needs something to look for (or use “isn't empty”)": "demande quelque chose à chercher (ou utilisez « n'est pas vide »)", + "needs text": "demande du texte", + "can't match any rating from 0 to 5": "ne peut correspondre à aucune note de 0 à 5", + "needs an album": "demande un album", + "names an album that no longer exists": "désigne un album qui n'existe plus", + "can't test a folder; choose an album in it": "ne peut pas tester un dossier ; choisissez un album qu'il contient", + "This group is empty: add a rule or remove it.": "Ce groupe est vide : ajoutez une règle ou supprimez-le.", + "needs something to look for (or use “are empty”)": "demande quelque chose à chercher (ou utilisez « sont vides »)", + "needs something to look for (or use “aren't empty”)": "demande quelque chose à chercher (ou utilisez « ne sont pas vides »)", + "Mo": "Lu", + "Tu": "Ma", + "We": "Me", + "Th": "Je", + "Fr": "Ve", + "Sa": "Sa", + "Su": "Di", + "Pick a date": "Choisir une date", + "would make this album include itself through other smart albums": "ferait que cet album s'inclue lui-même via d'autres albums intelligents", + "Search albums": "Rechercher des albums", + "No albums match": "Aucun album ne correspond", + "This is the album you're editing": "C'est l'album que vous modifiez", + "It tests this album, so testing it back would loop": "Il teste cet album : le tester en retour créerait une boucle", + "Copy Name": "Nom de la copie", + "In a Stack": "Dans une pile", + "File Extension": "Extension de fichier", + "Video Duration": "Durée de la vidéo", + "Keyword Count": "Nombre de mots-clés", + "People Count": "Nombre de personnes", + "Shutter Speed": "Vitesse d'obturation", + "Cropped": "Recadrée", + "Keywords & People": "Mots-clés et personnes", + "Description": "Description", + "Camera Info": "Infos de l'appareil", + "Develop": "Développement", + "Keyword List": "Liste des mots-clés", + "Filter Keywords": "Filtrer les mots-clés", + "No keywords yet": "Aucun mot-clé pour l'instant", + "No keywords match": "Aucun mot-clé ne correspond", + "Keyword Name": "Nom du mot-clé", + "Synonyms": "Synonymes", + "Separated by commas": "Séparés par des virgules", + "Keyword Tag Options": "Options du mot-clé", + "Include on Export": "Inclure à l'exportation", + "Export Containing Keywords": "Exporter les mots-clés parents", + "Export Synonyms": "Exporter les synonymes", + "Create Keyword Tag": "Créer un mot-clé", + "Edit Keyword Tag": "Modifier le mot-clé", + "Create": "Créer", + "No photo has it; the keywords below it go too.": "Aucune photo ne l'a ; les mots-clés qu'il contient sont aussi supprimés.", + "Edit Keyword Tag…": "Modifier le mot-clé…", + "Put New Keywords Inside This Keyword": "Placer les nouveaux mots-clés dans celui-ci", + "Purge Unused Keywords": "Purger les mots-clés inutilisés", + "Delete Keyword…": "Supprimer le mot-clé…", + "Drop here for the top level": "Déposez ici pour le niveau supérieur", + "Their photos and the keywords below them come together under one keyword.": "Leurs photos et les mots-clés qu'ils contiennent sont réunis sous un seul mot-clé.", + "Select photos to give them keywords.": "Sélectionnez des photos pour leur attribuer des mots-clés.", + "Add to All Selected Photos": "Ajouter à toutes les photos sélectionnées", + "Will Export": "Sera exporté", + "No keywords are exported": "Aucun mot-clé n'est exporté", + "& Containing": "et parents", + "Edit Set…": "Modifier le jeu…", + "Edit Keyword Set": "Modifier le jeu de mots-clés", + "Keywords (⌥1–⌥9)": "Mots-clés (⌥1–⌥9)", + "A keyword set needs a name": "Un jeu de mots-clés doit avoir un nom", + "Save as a new set": "Enregistrer comme nouveau jeu", + "Recent Keywords is built in: choose another name": "Mots-clés récents est intégré : choisissez un autre nom", + "Import Keywords…": "Importer des mots-clés…", + "Export Keywords…": "Exporter les mots-clés…", + "Import Keywords": "Importer des mots-clés", + "Export Keywords": "Exporter les mots-clés", + "Keyword Lists": "Listes de mots-clés", + "Synchronize Folder…": "Synchroniser le dossier…", + "Synchronize Folder": "Synchroniser le dossier", + "Synchronize": "Synchroniser", + "Scanning…": "Analyse…", + "Find photos added to or missing from this folder on disk, and XMP sidecars changed by other apps": "Trouver les photos ajoutées à ce dossier sur le disque ou qui en manquent, et les fichiers annexes XMP modifiés par d'autres applications", + "Bring the library up to date with this folder and the folders inside it:": "Mettre la bibliothèque à jour avec ce dossier et ses sous-dossiers :", + "Import new photos": "Importer les nouvelles photos", + "Remove missing photos from the library": "Retirer les photos manquantes de la bibliothèque", + "Read metadata updates from XMP sidecars": "Lire les métadonnées mises à jour dans les fichiers annexes XMP", + "The library is up to date with this folder.": "La bibliothèque est à jour avec ce dossier.", + "Missing photos move to Recently Deleted and can be restored; no file on disk is touched.": "Les photos manquantes vont dans Supprimées récemment et peuvent être restaurées ; aucun fichier sur le disque n'est touché.", + "Reading a sidecar replaces the photo's rating, labels, metadata and edits with what it says.": "Lire un fichier annexe remplace la note, les étiquettes, les métadonnées et les retouches de la photo par son contenu.", + "Skipped: files already in the library elsewhere": "Ignorés : fichiers déjà ailleurs dans la bibliothèque", + "Skipped: files that can't be read": "Ignorés : fichiers illisibles", + "This folder isn't there: it was moved or renamed, or its disk isn't connected.": "Ce dossier est introuvable : il a été déplacé ou renommé, ou son disque n'est pas connecté.", + "Relink photos whose file was renamed or moved": "Relier les photos dont le fichier a été renommé ou déplacé", + "A folder is already being synchronized": "Un dossier est déjà en cours de synchronisation", + "Synchronizing…": "Synchronisation…", + "Relinked": "Reliées", + "Removed": "Retirées", + "Metadata read": "Métadonnées lues", + "Failed": "Échecs", + "Stopped": "Arrêté", + "Stopped by an error (see the log)": "Arrêté par une erreur (voir le journal)", + "Not saved": "Non enregistré", + "A folder is being synchronized": "Un dossier est en cours de synchronisation", + "Wait for the import to finish": "Attendez la fin de l'importation" +} diff --git a/crates/ui-egui/locales/uk.json b/crates/ui-egui/locales/uk.json index cd3ece7be..52a30fb7c 100644 --- a/crates/ui-egui/locales/uk.json +++ b/crates/ui-egui/locales/uk.json @@ -1928,5 +1928,132 @@ "Choose a model below (Use) to start.": "Виберіть модель нижче («Використовувати»), щоб почати.", "Face detector": "Детектор облич", "Detect Faces (Photo menu) needs it: a small one-time download.": "Для виявлення облич (меню «Фото») потрібне невелике одноразове завантаження.", - "Recognition models": "Моделі розпізнавання" + "Recognition models": "Моделі розпізнавання", + "Decrease Rating": "Зменшити оцінку", + "Increase Rating": "Збільшити оцінку", + "Click to type a value": "Клацніть, щоб ввести значення", + "Angle": "Кут", + "Video": "Відео", + "Copyrighted": "Захищено авторським правом", + "Public Domain": "Суспільне надбання", + "Unknown": "Невідомо", + "Landscape (wide)": "Альбомна (широка)", + "Portrait (tall)": "Портретна (висока)", + "Square": "Квадрат", + "In Color": "Кольорове", + "No Label": "Без мітки", + "Choose an album…": "Виберіть альбом…", + "No albums yet": "Альбомів ще немає", + "Fix the marked rules to save this album.": "Виправте позначені правила, щоб зберегти цей альбом.", + "Some rules need fixing (Edit Smart Album…):": "Деякі правила треба виправити (Редагувати смарт-альбом…):", + "isn't a field rules know": "не є полем, яке знають правила", + "can't be tested that way": "не можна перевірити так", + "is yes or no": "має бути так або ні", + "needs a number": "потребує числа", + "needs a time like 1/250 or 2": "потребує часу, як-от 1/250 або 2", + "needs a date like 2026, 2026-08 or 2026-08-14": "потребує дати, як-от 2026, 2026-08 або 2026-08-14", + "has the first date after the second": "має першу дату після другої", + "needs two values": "потребує двох значень", + "needs a number more than 0": "потребує числа, більшого за 0", + "needs hours, days, weeks, months or years": "потребує годин, днів, тижнів, місяців або років", + "isn't one of the choices": "не є одним із варіантів", + "needs something to look for (or use “is empty”)": "потребує того, що шукати (або використайте «порожнє»)", + "needs something to look for (or use “isn't empty”)": "потребує того, що шукати (або використайте «не порожнє»)", + "needs text": "потребує тексту", + "can't match any rating from 0 to 5": "не може збігтися з жодною оцінкою від 0 до 5", + "needs an album": "потребує альбому", + "names an album that no longer exists": "вказує на альбом, якого вже немає", + "can't test a folder; choose an album in it": "не може перевірити теку; виберіть альбом у ній", + "This group is empty: add a rule or remove it.": "Ця група порожня: додайте правило або видаліть її.", + "needs something to look for (or use “are empty”)": "потребує того, що шукати (або використайте «порожні»)", + "needs something to look for (or use “aren't empty”)": "потребує того, що шукати (або використайте «не порожні»)", + "Mo": "Пн", + "Tu": "Вт", + "We": "Ср", + "Th": "Чт", + "Fr": "Пт", + "Sa": "Сб", + "Su": "Нд", + "Pick a date": "Виберіть дату", + "would make this album include itself through other smart albums": "змусило б цей альбом включати сам себе через інші смарт-альбоми", + "Search albums": "Пошук альбомів", + "No albums match": "Немає відповідних альбомів", + "This is the album you're editing": "Це альбом, який ви редагуєте", + "It tests this album, so testing it back would loop": "Він перевіряє цей альбом, тож зворотна перевірка зациклилася б", + "Copy Name": "Назва копії", + "In a Stack": "У стосі", + "File Extension": "Розширення файлу", + "Video Duration": "Тривалість відео", + "Keyword Count": "Кількість ключових слів", + "People Count": "Кількість людей", + "Shutter Speed": "Витримка", + "Cropped": "Кадровано", + "Keywords & People": "Ключові слова та люди", + "Description": "Опис", + "Camera Info": "Дані камери", + "Develop": "Обробка", + "Keyword List": "Список ключових слів", + "Filter Keywords": "Фільтрувати ключові слова", + "No keywords yet": "Ключових слів ще немає", + "No keywords match": "Немає відповідних ключових слів", + "Keyword Name": "Назва ключового слова", + "Synonyms": "Синоніми", + "Separated by commas": "Через кому", + "Keyword Tag Options": "Параметри ключового слова", + "Include on Export": "Включати під час експорту", + "Export Containing Keywords": "Експортувати батьківські ключові слова", + "Export Synonyms": "Експортувати синоніми", + "Create Keyword Tag": "Створити ключове слово", + "Edit Keyword Tag": "Редагувати ключове слово", + "Create": "Створити", + "No photo has it; the keywords below it go too.": "Його не має жодне фото; вкладені в нього ключові слова теж зникнуть.", + "Edit Keyword Tag…": "Редагувати ключове слово…", + "Put New Keywords Inside This Keyword": "Додавати нові ключові слова в це ключове слово", + "Purge Unused Keywords": "Очистити невикористані ключові слова", + "Delete Keyword…": "Видалити ключове слово…", + "Drop here for the top level": "Перетягніть сюди для верхнього рівня", + "Their photos and the keywords below them come together under one keyword.": "Їхні фото та вкладені ключові слова об’єднуються під одним ключовим словом.", + "Select photos to give them keywords.": "Виберіть фото, щоб додати їм ключові слова.", + "Add to All Selected Photos": "Додати до всіх вибраних фото", + "Will Export": "Буде експортовано", + "No keywords are exported": "Ключові слова не експортуються", + "& Containing": "і батьківські", + "Edit Set…": "Редагувати набір…", + "Edit Keyword Set": "Редагувати набір ключових слів", + "Keywords (⌥1–⌥9)": "Ключові слова (⌥1–⌥9)", + "A keyword set needs a name": "Набір ключових слів потребує назви", + "Save as a new set": "Зберегти як новий набір", + "Recent Keywords is built in: choose another name": "«Останні ключові слова» — вбудований набір: виберіть іншу назву", + "Import Keywords…": "Імпортувати ключові слова…", + "Export Keywords…": "Експортувати ключові слова…", + "Import Keywords": "Імпортувати ключові слова", + "Export Keywords": "Експортувати ключові слова", + "Keyword Lists": "Списки ключових слів", + "Synchronize Folder…": "Синхронізувати теку…", + "Synchronize Folder": "Синхронізувати теку", + "Synchronize": "Синхронізувати", + "Scanning…": "Сканування…", + "Find photos added to or missing from this folder on disk, and XMP sidecars changed by other apps": "Знайти фото, додані до цієї теки на диску або відсутні в ній, і файли XMP, змінені іншими програмами", + "Bring the library up to date with this folder and the folders inside it:": "Оновити бібліотеку відповідно до цієї теки та вкладених тек:", + "Import new photos": "Імпортувати нові фото", + "Remove missing photos from the library": "Прибрати відсутні фото з бібліотеки", + "Read metadata updates from XMP sidecars": "Прочитати оновлені метадані з файлів XMP", + "The library is up to date with this folder.": "Бібліотека відповідає цій теці.", + "Missing photos move to Recently Deleted and can be restored; no file on disk is touched.": "Відсутні фото переходять до «Нещодавно видалених» і їх можна відновити; файли на диску не змінюються.", + "Reading a sidecar replaces the photo's rating, labels, metadata and edits with what it says.": "Читання файлу XMP замінює оцінку, мітки, метадані та обробку фото його вмістом.", + "Skipped: files already in the library elsewhere": "Пропущено: файли, які вже є в бібліотеці в іншому місці", + "Skipped: files that can't be read": "Пропущено: файли, які не вдається прочитати", + "This folder isn't there: it was moved or renamed, or its disk isn't connected.": "Цієї теки немає: її переміщено чи перейменовано, або її диск не під’єднано.", + "Relink photos whose file was renamed or moved": "Перезв’язати фото, файл яких перейменовано чи переміщено", + "A folder is already being synchronized": "Тека вже синхронізується", + "Synchronizing…": "Синхронізація…", + "Relinked": "Перезв’язано", + "Removed": "Прибрано", + "Metadata read": "Метадані прочитано", + "Failed": "Помилки", + "Stopped": "Зупинено", + "Stopped by an error (see the log)": "Зупинено через помилку (див. журнал)", + "Not saved": "Не збережено", + "A folder is being synchronized": "Тека синхронізується", + "Wait for the import to finish": "Дочекайтеся завершення імпорту" } diff --git a/crates/ui-egui/src/panels/keyword_list.rs b/crates/ui-egui/src/panels/keyword_list.rs index b670010ea..f201359db 100644 --- a/crates/ui-egui/src/panels/keyword_list.rs +++ b/crates/ui-egui/src/panels/keyword_list.rs @@ -609,13 +609,13 @@ mod tests { "Export Keywords…", ]; let dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("locales"); - for code in ["de", "es", "pt-br", "ru", "ja", "zh-hans", "zh-hant"] { + for code in ["de", "es", "fr", "pt-br", "ru", "uk", "ja", "zh-hans", "zh-hant"] { let text = std::fs::read_to_string(dir.join(format!("{code}.json"))).unwrap(); let catalog: std::collections::HashMap = serde_json::from_str(&text).unwrap(); for label in labels { assert!(catalog.contains_key(label), "{code}: “{label}”"); } } - assert_eq!(Locale::ALL.len(), 8, "a language added: list its file above"); + assert_eq!(Locale::ALL.len(), 10, "a language added: list its file above"); } }