diff --git a/Cargo.lock b/Cargo.lock index 60b4098..ce8ead6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -555,7 +555,7 @@ dependencies = [ [[package]] name = "czkawka_cli" -version = "3.3.1" +version = "4.0.0" dependencies = [ "czkawka_core", "img_hash", @@ -564,7 +564,7 @@ dependencies = [ [[package]] name = "czkawka_core" -version = "3.3.1" +version = "4.0.0" dependencies = [ "audiotags", "bincode", @@ -598,7 +598,7 @@ dependencies = [ [[package]] name = "czkawka_gui" -version = "3.3.1" +version = "4.0.0" dependencies = [ "chrono", "crossbeam-channel", diff --git a/Changelog.md b/Changelog.md index 841e9ef..23e6ae1 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,4 +1,4 @@ -## Version 4.0.0 - ? +## Version 4.0.0 - 20.01.2022r - Multithreading support for collecting files to check(2/3x speedup on 4 thread processor and SSD) - [#502](https://github.com/qarmin/czkawka/pull/502), [#504](https://github.com/qarmin/czkawka/pull/504) - Add multiple translations - Polish, Italian, French, German, Russian ... - [#469](https://github.com/qarmin/czkawka/pull/469), [#508](https://github.com/qarmin/czkawka/pull/508), [5be](https://github.com/qarmin/czkawka/commit/5be801e76395855f07ab1da43cdbb8bd0b843834) - Add support for finding similar videos - [#460](https://github.com/qarmin/czkawka/pull/460) diff --git a/czkawka_cli/Cargo.toml b/czkawka_cli/Cargo.toml index fb4983c..1dfc767 100644 --- a/czkawka_cli/Cargo.toml +++ b/czkawka_cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "czkawka_cli" -version = "3.3.1" +version = "4.0.0" authors = ["Rafał Mikrut "] edition = "2018" description = "CLI frontend of Czkawka" @@ -9,7 +9,7 @@ homepage = "https://github.com/qarmin/czkawka" repository = "https://github.com/qarmin/czkawka" [dependencies] -czkawka_core = { path = "../czkawka_core", version = "3.3.1" } +czkawka_core = { path = "../czkawka_core", version = "4.0.0" } structopt = "0.3.25" # For enum types diff --git a/czkawka_core/Cargo.toml b/czkawka_core/Cargo.toml index fb90d72..9770bff 100644 --- a/czkawka_core/Cargo.toml +++ b/czkawka_core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "czkawka_core" -version = "3.3.1" +version = "4.0.0" authors = ["Rafał Mikrut "] edition = "2018" description = "Core of Czkawka app" diff --git a/czkawka_core/i18n.toml b/czkawka_core/i18n.toml index 111a110..f2456c8 100644 --- a/czkawka_core/i18n.toml +++ b/czkawka_core/i18n.toml @@ -9,5 +9,5 @@ fallback_language = "en" # (Required) The path to the assets directory. # The paths inside the assets directory should be structured like so: # `assets_dir/{language}/{domain}.ftl` -assets_dir = "../i18n" +assets_dir = "i18n" diff --git a/czkawka_core/i18n/cs/czkawka_core.ftl b/czkawka_core/i18n/cs/czkawka_core.ftl new file mode 100644 index 0000000..580884a --- /dev/null +++ b/czkawka_core/i18n/cs/czkawka_core.ftl @@ -0,0 +1,25 @@ +# Core +core_similarity_very_high = Velmi vysoká +core_similarity_high = Vysoká +core_similarity_medium = Střední +core_similarity_small = Malá +core_similarity_very_small = Velmi malá +core_similarity_minimal = Minimální +core_cannot_open_dir = Nelze otevřít dir { $dir }, důvod { $reason } +core_cannot_read_entry_dir = Nelze číst záznam v adresáři { $dir }, důvod { $reason } +core_cannot_read_metadata_dir = Metadata nelze číst v adresáři { $dir }, důvod { $reason } +core_file_not_utf8_name = Soubor { $name } nemá platný název UTF-8 (některé znaky nemusí být zobrazeny) +core_file_modified_before_epoch = Soubor { $name } se zdá být před Unix Epoch upraven +core_folder_modified_before_epoch = Složka { $name } se zdá být upravena před Unixem Epoch +core_file_no_modification_date = Nelze získat datum úpravy ze souboru { $name }, důvod { $reason } +core_folder_no_modification_date = Nelze získat datum úpravy ze složky { $name }, důvod { $reason } +core_missing_no_chosen_included_directory = Musí být uveden alespoň jeden adresář +core_directory_wildcard_no_supported = Adresáře: Zástupné znaky v cestě nejsou podporovány, ignoruji { $path } +core_directory_relative_path = Adresáře: Zástupné znaky v cestě nejsou podporovány, ignoruji { $path } +core_directory_must_exists = Adresáře: Poskytnutá cesta ke složce musí skončit, ignoruji { $path } +core_directory_must_be_directory = Adresáře: Poskytnutá cesta musí směřovat do adresáře, ignoruje { $path } +core_included_directory_zero_valid_directories = CHYBA zahrnutí adresáře: Nenalezena ani jedna správná cesta k zahrnutí, která je vyžadována +core_excluded_directory_pointless_slash = Adresáře: Vyloučení / je bezúčelné, protože to znamená, že žádné soubory nebudou naskenovány +core_directory_overlap = Adresáře: Všechny adresáře pro vyhledávání se překrývají s vyloučením adresářů +core_ffmpeg_not_found = Nelze najít správnou instalaci FFmpeg +core_ffmpeg_missing_in_snap = Podobná videa v současné době nefungují se snapem, pokud chcete nápovědu sledovat - { $url } diff --git a/czkawka_core/i18n/de/czkawka_core.ftl b/czkawka_core/i18n/de/czkawka_core.ftl new file mode 100644 index 0000000..3c0aded --- /dev/null +++ b/czkawka_core/i18n/de/czkawka_core.ftl @@ -0,0 +1,25 @@ +# Core +core_similarity_very_high = Sehr Hoch +core_similarity_high = Hoch +core_similarity_medium = Mittel +core_similarity_small = Klein +core_similarity_very_small = Sehr klein +core_similarity_minimal = Minimale +core_cannot_open_dir = Verzeichnis { $dir } kann nicht geöffnet werden, Grund { $reason } +core_cannot_read_entry_dir = Kann Eintrag in Verzeichnis { $dir } nicht lesen, Grund { $reason } +core_cannot_read_metadata_dir = Metadaten können in Verzeichnis { $dir } nicht gelesen werden, Grund { $reason } +core_file_not_utf8_name = Datei { $name } hat keinen gültigen UTF-8-Namen (einige Zeichen dürfen nicht angezeigt werden) +core_file_modified_before_epoch = Datei { $name } scheint vor der Unix-Epoche geändert zu werden +core_folder_modified_before_epoch = Ordner { $name } scheint vor der Unix-Epoche geändert zu werden +core_file_no_modification_date = Konnte das Änderungsdatum von Datei { $name } nicht abrufen, Grund { $reason } +core_folder_no_modification_date = Konnte das Änderungsdatum aus dem Ordner { $name } nicht abrufen, Grund { $reason } +core_missing_no_chosen_included_directory = Mindestens ein Verzeichnis muss angegeben werden +core_directory_wildcard_no_supported = Verzeichnisse: Wildcards im Pfad werden nicht unterstützt, { $path } wird ignoriert +core_directory_relative_path = Verzeichnisse: Relativer Pfad wird nicht unterstützt, { $path } wird ignoriert +core_directory_must_exists = Verzeichnisse: Der angegebene Ordnerpfad muss beendet werden, { $path } wird ignoriert +core_directory_must_be_directory = Verzeichnisse: Der angegebene Pfad muss auf das Verzeichnis zeigen und { $path } ignorieren +core_included_directory_zero_valid_directories = Inklusive Verzeichnis-FEHLER: Nicht einmal einen korrekten Pfad zu inkludiert, der erforderlich ist +core_excluded_directory_pointless_slash = Verzeichnisse: Ausschließen / ist sinnlos, weil es bedeutet, dass keine Dateien gescannt werden +core_directory_overlap = Verzeichnisse: Alle Verzeichnisse zum Suchen von Überlappungen mit ausgeschlossenen Verzeichnissen +core_ffmpeg_not_found = Keine richtige Installation von FFmpeg gefunden +core_ffmpeg_missing_in_snap = Ähnliche Videos funktionieren derzeit nicht mit Snap, wenn du Hilfe möchtest - { $url } diff --git a/czkawka_core/i18n/en/czkawka_core.ftl b/czkawka_core/i18n/en/czkawka_core.ftl new file mode 100644 index 0000000..c15e04b --- /dev/null +++ b/czkawka_core/i18n/en/czkawka_core.ftl @@ -0,0 +1,31 @@ +# Core +core_similarity_very_high = Very High +core_similarity_high = High +core_similarity_medium = Medium +core_similarity_small = Small +core_similarity_very_small = Very Small +core_similarity_minimal = Minimal + +core_cannot_open_dir = Cannot open dir {$dir}, reason {$reason} +core_cannot_read_entry_dir = Cannot read entry in dir {$dir}, reason {$reason} +core_cannot_read_metadata_dir = Cannot read metadata in dir {$dir}, reason {$reason} +core_file_not_utf8_name = File {$name} does not have a valid UTF-8 name (some characters may not be shown) +core_file_modified_before_epoch = File {$name} seems to be modified before Unix Epoch +core_folder_modified_before_epoch = Folder {$name} seems to be modified before Unix Epoch +core_file_no_modification_date = Unable to get modification date from file {$name}, reason {$reason} +core_folder_no_modification_date = Unable to get modification date from folder {$name}, reason {$reason} + +core_missing_no_chosen_included_directory = At least one directory must be provided +core_directory_wildcard_no_supported = Directories: Wildcards in path are not supported, ignoring { $path } +core_directory_relative_path = Directories: Relative path are not supported, ignoring { $path } +core_directory_must_exists = Directories: Provided folder path must exist, ignoring { $path } +core_directory_must_be_directory = Directories: Provided path must point at the directory, ignoring { $path } +core_included_directory_zero_valid_directories = Included Directory ERROR: Not found even one correct path to included which is required +core_excluded_directory_pointless_slash = Directories: Excluding / is pointless, because it means that no files will be scanned +core_directory_overlap = Directories: All directories to search overlaps with excluded directories + +core_ffmpeg_not_found = Cannot find proper installation of FFmpeg +core_ffmpeg_missing_in_snap = Similar Videos don't work currently with snap, if you want help look at - { $url } + +core_saving_to_cache = Saved to file { $number } cache entries +core_loading_from_cache = Loaded from cache { $number } entries \ No newline at end of file diff --git a/czkawka_core/i18n/es/czkawka_core.ftl b/czkawka_core/i18n/es/czkawka_core.ftl new file mode 100644 index 0000000..476eab4 --- /dev/null +++ b/czkawka_core/i18n/es/czkawka_core.ftl @@ -0,0 +1,25 @@ +# Core +core_similarity_very_high = Muy alta +core_similarity_high = Alta +core_similarity_medium = Medio +core_similarity_small = Pequeño +core_similarity_very_small = Muy pequeño +core_similarity_minimal = Mínimo +core_cannot_open_dir = No se puede abrir el directorio { $dir }, razón { $reason } +core_cannot_read_entry_dir = No se puede leer la entrada en directorio { $dir }, razón { $reason } +core_cannot_read_metadata_dir = No se pueden leer metadatos en el directorio { $dir }, razón { $reason } +core_file_not_utf8_name = El archivo { $name } no tiene un nombre UTF-8 válido (algunos caracteres pueden no mostrarse) +core_file_modified_before_epoch = El archivo { $name } parece ser modificado antes de Unix Epoch +core_folder_modified_before_epoch = La carpeta { $name } parece ser modificada antes del Epoch Unix +core_file_no_modification_date = No se puede obtener la fecha de modificación del archivo { $name }, razón { $reason } +core_folder_no_modification_date = No se puede obtener la fecha de modificación de la carpeta { $name }, razón { $reason } +core_missing_no_chosen_included_directory = Debe proporcionarse al menos un directorio +core_directory_wildcard_no_supported = Directorios: Los comodines en la ruta no son compatibles, ignorando { $path } +core_directory_relative_path = Directorios: No se admite la ruta relativa, ignorando { $path } +core_directory_must_exists = Directorios: La ruta de la carpeta debe salir, ignorando { $path } +core_directory_must_be_directory = Directorios: La ruta proporcionada debe apuntar al directorio, ignorando { $path } +core_included_directory_zero_valid_directories = ERROR del directorio incluido: No se ha encontrado ni una ruta correcta a incluida que es necesaria +core_excluded_directory_pointless_slash = Directorios: Excluyendo / es inútil, ya que no se analizarán archivos +core_directory_overlap = Directorios: Todos los directorios para buscar superposiciones con directorios excluidos +core_ffmpeg_not_found = No se puede encontrar la instalación correcta de FFmpeg +core_ffmpeg_missing_in_snap = Los Videos Similares no funcionan actualmente con el snap, si quieres ayuda mira - { $url } diff --git a/czkawka_core/i18n/fr/czkawka_core.ftl b/czkawka_core/i18n/fr/czkawka_core.ftl new file mode 100644 index 0000000..78d23be --- /dev/null +++ b/czkawka_core/i18n/fr/czkawka_core.ftl @@ -0,0 +1,25 @@ +# Core +core_similarity_very_high = Très haute +core_similarity_high = Haute +core_similarity_medium = Moyenne +core_similarity_small = Basse +core_similarity_very_small = Très basse +core_similarity_minimal = Minimale +core_cannot_open_dir = Impossible d’ouvrir le répertoire { $dir }, raison : { $reason } +core_cannot_read_entry_dir = Impossible de lire l'entrée dans le répertoire { $dir }, raison : { $reason } +core_cannot_read_metadata_dir = Impossible de lire les métadonnées dans le répertoire { $dir }, raison : { $reason } +core_file_not_utf8_name = Le fichier { $name } n'a pas de nom UTF-8 valide (certains caractères ne peuvent pas être affichés) +core_file_modified_before_epoch = Le fichier { $name } semble avoir été modifié avant l'époque Unix +core_folder_modified_before_epoch = Le dossier { $name } semble avoir été modifié avant l'époque Unix +core_file_no_modification_date = Impossible d'obtenir la date de modification du fichier { $name }, raison : { $reason } +core_folder_no_modification_date = Impossible d'obtenir la date de modification du dossier { $name }, raison : { $reason } +core_missing_no_chosen_included_directory = Au moins un répertoire doit être fourni +core_directory_wildcard_no_supported = Répertoires : Les jokers dans le chemin ne sont pas pris en charge, ignorant { $path } +core_directory_relative_path = Répertoires : Le chemin relatif n'est pas pris en charge, ignorant { $path } +core_directory_must_exists = Répertoires : Le chemin du dossier fourni doit se terminer, ignorant { $path } +core_directory_must_be_directory = Répertoires : Le chemin fourni doit pointer dans le répertoire, { $path } +core_included_directory_zero_valid_directories = ERREUR de répertoire inclus : Aucun chemin n'a été trouvé, même un chemin correct à inclure qui est requis +core_excluded_directory_pointless_slash = Répertoires: Exclure / est inutile, car cela signifie qu'aucun fichier ne sera scanné +core_directory_overlap = Répertoires : Tous les répertoires pour rechercher des chevauchements avec des répertoires exclus +core_ffmpeg_not_found = Impossible de trouver une installation correcte de FFmpeg +core_ffmpeg_missing_in_snap = Les vidéos similaires ne fonctionnent pas actuellement avec un instantané, si vous voulez de l'aide - { $url } diff --git a/czkawka_core/i18n/it/czkawka_core.ftl b/czkawka_core/i18n/it/czkawka_core.ftl new file mode 100644 index 0000000..2c81409 --- /dev/null +++ b/czkawka_core/i18n/it/czkawka_core.ftl @@ -0,0 +1,25 @@ +# Core +core_similarity_very_high = Altissima +core_similarity_high = Alta +core_similarity_medium = Media +core_similarity_small = Piccola +core_similarity_very_small = Piccolissima +core_similarity_minimal = Minima +core_cannot_open_dir = Impossibile aprire cartella { $dir }, motivo { $reason } +core_cannot_read_entry_dir = Impossibile leggere elemento nella cartella { $dir }, ragione { $reason } +core_cannot_read_metadata_dir = Impossibile leggere metadati nella cartella { $dir }, ragione { $reason } +core_file_not_utf8_name = Il file { $name } non ha un nome UTF-8 valido (alcuni caratteri potrebbero non essere mostrati) +core_file_modified_before_epoch = Il file { $name } sembra essere stato modificato prima dell'Epoca Unix +core_folder_modified_before_epoch = La cartella { $name } sembra essere stato modificata prima dell'Epoca Unix +core_file_no_modification_date = Impossibile recuperare data di modifica dal file { $name }, ragione { $reason } +core_folder_no_modification_date = Impossibile recuperare data di modifica dalla cartella { $name }, ragione { $reason } +core_missing_no_chosen_included_directory = Almeno una directory deve essere fornita +core_directory_wildcard_no_supported = Cartelle: i caratteri jolly nel percorso non sono supportati, ignorando { $path } +core_directory_relative_path = Directories: Il percorso relativo non è supportato, ignorando { $path } +core_directory_must_exists = Directories: Il percorso della cartella fornito deve uscire, ignorando { $path } +core_directory_must_be_directory = Directories: Il percorso fornito deve puntare alla directory, ignorando { $path } +core_included_directory_zero_valid_directories = ERRORE Directory incluso: Non trovato nemmeno un percorso corretto incluso che è richiesto +core_excluded_directory_pointless_slash = Cartelle: Escludere / è inutile, perché significa che nessun file verrà scansionato +core_directory_overlap = Directories: Tutte le directory per cercare sovrapposizioni con directory escluse +core_ffmpeg_not_found = Impossibile trovare la corretta installazione di FFmpeg +core_ffmpeg_missing_in_snap = Video simili non funzionano attualmente con snap, se si desidera aiutare a guardare - { $url } diff --git a/czkawka_core/i18n/ja/czkawka_core.ftl b/czkawka_core/i18n/ja/czkawka_core.ftl new file mode 100644 index 0000000..78a722a --- /dev/null +++ b/czkawka_core/i18n/ja/czkawka_core.ftl @@ -0,0 +1,25 @@ +# Core +core_similarity_very_high = 非常に高い +core_similarity_high = 高い +core_similarity_medium = ミディアム +core_similarity_small = 小 +core_similarity_very_small = 非常に小さい +core_similarity_minimal = 最小 +core_cannot_open_dir = ディレクトリを開くことができません { $dir }、理由 { $reason } +core_cannot_read_entry_dir = Dir { $dir } でエントリを読み込めません、理由 { $reason } +core_cannot_read_metadata_dir = Dir { $dir } でメタデータを読み込めません、理由 { $reason } +core_file_not_utf8_name = ファイル { $name } に有効な UTF-8 名がありません (一部の文字は表示されない可能性があります) +core_file_modified_before_epoch = ファイル { $name } は Unix Epoch より前に変更されているようです +core_folder_modified_before_epoch = フォルダ { $name } は、Unix Epoch の前に変更されているようです +core_file_no_modification_date = ファイル { $name } から変更日を取得できません、理由 { $reason } +core_folder_no_modification_date = フォルダ { $name } から変更日を取得できません、理由 { $reason } +core_missing_no_chosen_included_directory = 少なくとも 1 つのディレクトリを指定する必要があります。 +core_directory_wildcard_no_supported = ディレクトリ: パス内のワイルドカードはサポートされていません。 { $path } を無視してください +core_directory_relative_path = ディレクトリ: 相対パスはサポートされていません。 { $path } を無視してください +core_directory_must_exists = ディレクトリ: 指定されたフォルダパスは、 { $path } を無視して終了する必要があります +core_directory_must_be_directory = ディレクトリ: 指定されたパスはディレクトリを指す必要があります。 { $path } を無視します +core_included_directory_zero_valid_directories = 含まれるディレクトリエラー: 必須の正しいパスが1つも見つかりません +core_excluded_directory_pointless_slash = ディレクトリ: ファイルがスキャンされないことを意味するため、除外/無意味です +core_directory_overlap = ディレクトリ: 除外されたディレクトリとオーバーラップを検索するすべてのディレクトリ +core_ffmpeg_not_found = 適切なFFmpegのインストールが見つかりません +core_ffmpeg_missing_in_snap = ヘルプを見たい場合は、現在同様のビデオはスナップでは動作しません - { $url } diff --git a/czkawka_core/i18n/pl/czkawka_core.ftl b/czkawka_core/i18n/pl/czkawka_core.ftl new file mode 100644 index 0000000..0295477 --- /dev/null +++ b/czkawka_core/i18n/pl/czkawka_core.ftl @@ -0,0 +1,28 @@ +# Core +core_similarity_very_high = Bardzo Duże +core_similarity_high = Duże +core_similarity_medium = Średnie +core_similarity_small = Małe +core_similarity_very_small = Bardzo Małe +core_similarity_minimal = Minimalne +core_cannot_open_dir = Nie można otworzyć folderu { $dir }, powód { $reason } +core_cannot_read_entry_dir = Nie można odczytać danych z folderu { $dir }, powód { $reason } +core_cannot_read_metadata_dir = Nie można odczytać metadanych folderu { $dir }, powód { $reason } +core_file_not_utf8_name = Plik { $name } nie posiada nazwy zakodowanej za pomocą UTF-8(niektóre znaki mogą się nie wyświetlać) +core_file_modified_before_epoch = Plik { $name } ma datę modyfikacji sprzed epoki unixa +core_folder_modified_before_epoch = Folder { $name } ma datę modyfikacji sprzed epoki unixa +core_file_no_modification_date = Nie udało się pobrać daty modyfikacji z pliku { $name }, powód { $reason } +core_folder_no_modification_date = Nie udało się pobrać daty modyfikacji z folderu { $name }, powód { $reason } +core_missing_no_chosen_included_directory = Należy podać co najmniej jeden katalog +core_directory_wildcard_no_supported = Katalogi: Wildcard na ścieżce nie są obsługiwane, ignorowanie { $path } +core_directory_relative_path = Katalogi: Ścieżka względna nie jest wspierana, ignorowanie { $path } +core_directory_must_exists = Katalogi: Podana ścieżka do folderu musi istnieć, ignorowanie { $path } +core_directory_must_be_directory = Katalogi: Podana ścieżka musi wskazywać na katalog, ignorowanie { $path } +core_included_directory_zero_valid_directories = Błąd katalogów do przeszukiwania: Nie znaleziono nawet jednej poprawnej ścieżki do przeszukania +core_excluded_directory_pointless_slash = Katalogi: Wykluczanie folderu / jest bezcelowe, ponieważ oznacza to, że żadne pliki nie zostaną sprawdzone +core_directory_overlap = Katalogi: Wszystkie katalogi do wyszukiwania pokrywają się z wykluczonymi +core_ffmpeg_not_found = Nie można odnaleźć poprawnej instalacji FFmpeg +core_ffmpeg_missing_in_snap = Wyszukiwanie podobnych filmów nie działa obecnie w snapach, jeśli chcesz pomóc spójrz na - { $url } + +core_saving_to_cache = Saved to file { $number } cache entries +core_loading_from_cache = Loaded from cache { $number } entries \ No newline at end of file diff --git a/czkawka_core/i18n/pt/czkawka_core.ftl b/czkawka_core/i18n/pt/czkawka_core.ftl new file mode 100644 index 0000000..58a17c0 --- /dev/null +++ b/czkawka_core/i18n/pt/czkawka_core.ftl @@ -0,0 +1,25 @@ +# Core +core_similarity_very_high = Muito alto +core_similarity_high = Alto +core_similarity_medium = Média +core_similarity_small = Pequeno +core_similarity_very_small = Muito Pequeno +core_similarity_minimal = Mínimo +core_cannot_open_dir = Não é possível abrir o diretório { $dir }, razão { $reason } +core_cannot_read_entry_dir = Não é possível ler a entrada no diretório { $dir }, razão { $reason } +core_cannot_read_metadata_dir = Não é possível ler os metadados no diretório { $dir }, razão { $reason } +core_file_not_utf8_name = Arquivo { $name } não tem nome UTF-8 válido (alguns caracteres não podem ser exibidos) +core_file_modified_before_epoch = Arquivo { $name } parece ser modificado antes do Epoch Unix +core_folder_modified_before_epoch = A pasta { $name } parece ser modificada antes do Epoch Unix +core_file_no_modification_date = Não foi possível obter a data de modificação do arquivo { $name }, motivo { $reason } +core_folder_no_modification_date = Não foi possível obter a data de modificação da pasta { $name }, motivo { $reason } +core_missing_no_chosen_included_directory = Pelo menos um diretório deve ser fornecido +core_directory_wildcard_no_supported = Directorias: Caracteres curinga no caminho não são suportados, ignorando { $path } +core_directory_relative_path = Directorias: Caminho relativo não são suportados, ignorando { $path } +core_directory_must_exists = Directórios: Caminho da pasta fornecida deve sair, ignorando { $path } +core_directory_must_be_directory = Diretórios: Caminho fornecido deve apontar para o diretório, ignorando { $path } +core_included_directory_zero_valid_directories = ERRO do Diretório incluído: Não foi encontrado nenhum caminho correto que é necessário incluir +core_excluded_directory_pointless_slash = Directorias: Excluir / não faz sentido, porque significa que nenhum arquivo será escaneado +core_directory_overlap = Diretórios: Todos os diretórios para pesquisar sobreposições com diretórios excluídos +core_ffmpeg_not_found = Instalação adequada do FFmpeg não encontrada +core_ffmpeg_missing_in_snap = Vídeos similares não funcionam atualmente com o snap, se você quiser ajudar a olhar - { $url } diff --git a/czkawka_core/i18n/ru/czkawka_core.ftl b/czkawka_core/i18n/ru/czkawka_core.ftl new file mode 100644 index 0000000..fca3d18 --- /dev/null +++ b/czkawka_core/i18n/ru/czkawka_core.ftl @@ -0,0 +1,25 @@ +# Core +core_similarity_very_high = Очень высокий +core_similarity_high = Высокий +core_similarity_medium = Средний +core_similarity_small = Маленький +core_similarity_very_small = Очень маленький +core_similarity_minimal = Минимальный +core_cannot_open_dir = Невозможно открыть каталог { $dir }, причина { $reason } +core_cannot_read_entry_dir = Невозможно прочитать запись в директории { $dir }, причина { $reason } +core_cannot_read_metadata_dir = Невозможно прочитать метаданные в директории { $dir }, причина { $reason } +core_file_not_utf8_name = У файла { $name } неверное имя UTF-8 (некоторые символы не могут быть показаны) +core_file_modified_before_epoch = Файл { $name } может быть изменен до начала эпохи Unix +core_folder_modified_before_epoch = Папка { $name } изменяется до начала эпохи Unix +core_file_no_modification_date = Не удается получить дату изменения из файла { $name }, причина { $reason } +core_folder_no_modification_date = Не удается получить дату изменения из папки { $name }, причина { $reason } +core_missing_no_chosen_included_directory = Должен быть указан хотя бы один каталог +core_directory_wildcard_no_supported = Директории: Не поддерживаются шаблоны в директории, игнорируется { $path } +core_directory_relative_path = Директории: Относительный путь не поддерживается, игнорируется { $path } +core_directory_must_exists = Директории: Указанный путь к папке должен быть закрыт, игнорируется { $path } +core_directory_must_be_directory = Директории: Указанный путь должен указывать на директорию, игнорируя { $path } +core_included_directory_zero_valid_directories = Включенный каталог ОШИБКА: Не найден даже один правильный путь к включённому которому требуется +core_excluded_directory_pointless_slash = Директории: Исключение / бессмысленно, потому что ни один файл не будет просканирован +core_directory_overlap = Каталоги: Все директории для поиска совпадают с исключенными каталогами +core_ffmpeg_not_found = Не удается найти надлежащую установку FFmpeg +core_ffmpeg_missing_in_snap = Похожие видео не работают в данный момент, если вы хотите помочь посмотреть - { $url } diff --git a/czkawka_core/i18n/uk/czkawka_core.ftl b/czkawka_core/i18n/uk/czkawka_core.ftl new file mode 100644 index 0000000..6c0c8a6 --- /dev/null +++ b/czkawka_core/i18n/uk/czkawka_core.ftl @@ -0,0 +1,25 @@ +# Core +core_similarity_very_high = Дуже високий +core_similarity_high = Високий +core_similarity_medium = Медіум +core_similarity_small = Маленький +core_similarity_very_small = Дуже малий +core_similarity_minimal = Мінімальні +core_cannot_open_dir = Не вдалося відкрити папку { $dir }, причина { $reason } +core_cannot_read_entry_dir = Не вдалося прочитати запис в папці { $dir }, причина { $reason } +core_cannot_read_metadata_dir = Не вдалося прочитати метадані в папці { $dir }, причина { $reason } +core_file_not_utf8_name = Файл { $name } не має припустимого імені UTF-8 (деякі символи не можуть бути показані) +core_file_modified_before_epoch = Файл { $name } Схоже, змінено перед Unix Epoch +core_folder_modified_before_epoch = Папка { $name } здається змінена до Unix Epoch +core_file_no_modification_date = Не вдалося отримати дату модифікації з файлу { $name }, причина { $reason } +core_folder_no_modification_date = Не вдалося отримати дату модифікації з папки { $name }, причина { $reason } +core_missing_no_chosen_included_directory = Необхідно вказати принаймні один каталог +core_directory_wildcard_no_supported = Директорія: Шаблони в шляху не підтримуються, ігноруючи { $path } +core_directory_relative_path = Каталог: Відносний шлях не підтримується, ігноруючи { $path } +core_directory_must_exists = Каталог: Наданий шлях до папки повинен вийти, ігноруючи { $path } +core_directory_must_be_directory = Каталог: Наданий шлях повинен вказувати на каталог, ігноруючи { $path } +core_included_directory_zero_valid_directories = Включена помилка в каталозі: не знайдено навіть один правильний шлях до включеного, який є обов'язковим +core_excluded_directory_pointless_slash = Теки: виключення / без урахування безточних, тому що це означає, що файли не будуть скановані +core_directory_overlap = Каталоги: Усі каталоги для пошуку перетинаються з виключеними каталогами +core_ffmpeg_not_found = Не вдалося знайти правильне встановлення FFmpeg +core_ffmpeg_missing_in_snap = Подібні відео в даний час не працюють з знімком, якщо ви хочете, щоб допомогти вам переглянути - { $url } diff --git a/czkawka_core/i18n/zh/czkawka_core.ftl b/czkawka_core/i18n/zh/czkawka_core.ftl new file mode 100644 index 0000000..6b40cee --- /dev/null +++ b/czkawka_core/i18n/zh/czkawka_core.ftl @@ -0,0 +1,25 @@ +# Core +core_similarity_very_high = 非常高 +core_similarity_high = 高 +core_similarity_medium = 中 +core_similarity_small = 小的 +core_similarity_very_small = 非常小 +core_similarity_minimal = 最小化 +core_cannot_open_dir = 无法打开目录 { $dir },因为 { $reason } +core_cannot_read_entry_dir = 无法在目录 { $dir } 中读取条目,因为 { $reason } +core_cannot_read_metadata_dir = 无法读取目录 { $dir } 中的元数据,因为 { $reason } +core_file_not_utf8_name = 文件 { $name } 无效的 UTF-8 名称 (可能无法显示一些字符) +core_file_modified_before_epoch = 文件 { $name } 似乎在 Unix Epoch前被修改 +core_folder_modified_before_epoch = 文件夹 { $name } 似乎在Unix Epoch前被修改 +core_file_no_modification_date = 无法从文件 { $name } 获取修改日期,因为 { $reason } +core_folder_no_modification_date = 无法从文件夹 { $name } 获取修改日期,因为 { $reason } +core_missing_no_chosen_included_directory = 必须至少提供一个目录 +core_directory_wildcard_no_supported = 目录:不支持路径中的通配符,忽略 { $path } +core_directory_relative_path = 目录:不支持相对路径,忽略 { $path } +core_directory_must_exists = 目录:提供的文件夹路径必须退出,忽略 { $path } +core_directory_must_be_directory = 目录:提供的路径必须指向目录,忽略 { $path } +core_included_directory_zero_valid_directories = 包括目录错误:即使找不到一个需要包含的正确路径 +core_excluded_directory_pointless_slash = 目录:不包括 / 无意义,因为它意味着没有文件将被扫描 +core_directory_overlap = 目录:所有要搜索与排除目录重叠的目录 +core_ffmpeg_not_found = 找不到正确安装FFmpeg +core_ffmpeg_missing_in_snap = 类似的视频目前不适用于快照,如果您想要帮助查看- { $url } diff --git a/czkawka_core/src/big_file.rs b/czkawka_core/src/big_file.rs index 24ea81d..6523f89 100644 --- a/czkawka_core/src/big_file.rs +++ b/czkawka_core/src/big_file.rs @@ -20,8 +20,8 @@ use crate::common_extensions::Extensions; use crate::common_items::ExcludedItems; use crate::common_messages::Messages; use crate::common_traits::{DebugPrint, PrintResults, SaveResults}; -use crate::fl; -use crate::localizer::generate_translation_hashmap; +use crate::flc; +use crate::localizer_core::generate_translation_hashmap; #[derive(Debug)] pub struct ProgressData { @@ -173,7 +173,7 @@ impl BigFile { let read_dir = match fs::read_dir(¤t_folder) { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_open_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -186,7 +186,7 @@ impl BigFile { let entry_data = match entry { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_entry_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -196,7 +196,7 @@ impl BigFile { let metadata: Metadata = match entry_data.metadata() { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_metadata_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -224,7 +224,7 @@ impl BigFile { let file_name_lowercase: String = match entry_data.file_name().into_string() { Ok(t) => t, Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_not_utf8_name", generate_translation_hashmap(vec![("name", entry_data.path().display().to_string())]) )); @@ -249,7 +249,7 @@ impl BigFile { Ok(t) => match t.duration_since(UNIX_EPOCH) { Ok(d) => d.as_secs(), Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_modified_before_epoch", generate_translation_hashmap(vec![("name", current_file_name.display().to_string())]) )); @@ -257,7 +257,7 @@ impl BigFile { } }, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_no_modification_date", generate_translation_hashmap(vec![("name", current_file_name.display().to_string()), ("reason", e.to_string())]) )); diff --git a/czkawka_core/src/broken_files.rs b/czkawka_core/src/broken_files.rs index 562c104..57bc528 100644 --- a/czkawka_core/src/broken_files.rs +++ b/czkawka_core/src/broken_files.rs @@ -19,8 +19,8 @@ use crate::common_extensions::Extensions; use crate::common_items::ExcludedItems; use crate::common_messages::Messages; use crate::common_traits::*; -use crate::fl; -use crate::localizer::generate_translation_hashmap; +use crate::flc; +use crate::localizer_core::generate_translation_hashmap; use crate::similar_images::{AUDIO_FILES_EXTENSIONS, IMAGE_RS_BROKEN_FILES_EXTENSIONS, ZIP_FILES_EXTENSIONS}; #[derive(Debug)] @@ -218,7 +218,7 @@ impl BrokenFiles { let read_dir = match fs::read_dir(¤t_folder) { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_open_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -231,7 +231,7 @@ impl BrokenFiles { let entry_data = match entry { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_entry_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -241,7 +241,7 @@ impl BrokenFiles { let metadata: Metadata = match entry_data.metadata() { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_metadata_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -269,7 +269,7 @@ impl BrokenFiles { let file_name_lowercase: String = match entry_data.file_name().into_string() { Ok(t) => t, Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_not_utf8_name", generate_translation_hashmap(vec![("name", entry_data.path().display().to_string())]) )); @@ -298,7 +298,7 @@ impl BrokenFiles { Ok(t) => match t.duration_since(UNIX_EPOCH) { Ok(d) => d.as_secs(), Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_modified_before_epoch", generate_translation_hashmap(vec![("name", current_file_name.display().to_string())]) )); @@ -306,7 +306,7 @@ impl BrokenFiles { } }, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_no_modification_date", generate_translation_hashmap(vec![("name", current_file_name.display().to_string()), ("reason", e.to_string())]) )); diff --git a/czkawka_core/src/common_dir_traversal.rs b/czkawka_core/src/common_dir_traversal.rs index 9f4b2aa..d573098 100644 --- a/czkawka_core/src/common_dir_traversal.rs +++ b/czkawka_core/src/common_dir_traversal.rs @@ -14,8 +14,8 @@ use rayon::prelude::*; use crate::common_directory::Directories; use crate::common_extensions::Extensions; use crate::common_items::ExcludedItems; -use crate::fl; -use crate::localizer::generate_translation_hashmap; +use crate::flc; +use crate::localizer_core::generate_translation_hashmap; #[derive(Debug)] pub struct ProgressData { @@ -372,7 +372,7 @@ where let read_dir = match fs::read_dir(¤t_folder) { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_open_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -385,7 +385,7 @@ where let entry_data = match entry { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_entry_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -395,7 +395,7 @@ where let metadata: Metadata = match entry_data.metadata() { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_metadata_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -436,7 +436,7 @@ where Ok(t) => match t.duration_since(UNIX_EPOCH) { Ok(d) => d.as_secs(), Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_folder_modified_before_epoch", generate_translation_hashmap(vec![("name", current_folder.display().to_string())]) )); @@ -444,7 +444,7 @@ where } }, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_folder_no_modification_date", generate_translation_hashmap(vec![("name", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -460,7 +460,7 @@ where let file_name_lowercase: String = match entry_data.file_name().into_string() { Ok(t) => t, Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_not_utf8_name", generate_translation_hashmap(vec![("name", entry_data.path().display().to_string())]) )); @@ -487,7 +487,7 @@ where Ok(t) => match t.duration_since(UNIX_EPOCH) { Ok(d) => d.as_secs(), Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_modified_before_epoch", generate_translation_hashmap(vec![("name", current_file_name.display().to_string())]) )); @@ -495,7 +495,7 @@ where } }, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_no_modification_date", generate_translation_hashmap(vec![("name", current_file_name.display().to_string()), ("reason", e.to_string())]) )); @@ -521,7 +521,7 @@ where let file_name_lowercase: String = match entry_data.file_name().into_string() { Ok(t) => t, Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_not_utf8_name", generate_translation_hashmap(vec![("name", entry_data.path().display().to_string())]) )); @@ -581,7 +581,7 @@ where Ok(t) => match t.duration_since(UNIX_EPOCH) { Ok(d) => d.as_secs(), Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_modified_before_epoch", generate_translation_hashmap(vec![("name", current_file_name.display().to_string())]) )); @@ -589,7 +589,7 @@ where } }, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_no_modification_date", generate_translation_hashmap(vec![("name", current_file_name.display().to_string()), ("reason", e.to_string())]) )); diff --git a/czkawka_core/src/common_directory.rs b/czkawka_core/src/common_directory.rs index 4e7af6e..8f3f51f 100644 --- a/czkawka_core/src/common_directory.rs +++ b/czkawka_core/src/common_directory.rs @@ -3,8 +3,8 @@ use std::time::SystemTime; use crate::common::Common; use crate::common_messages::Messages; -use crate::fl; -use crate::localizer::generate_translation_hashmap; +use crate::flc; +use crate::localizer_core::generate_translation_hashmap; #[derive(Clone, Default)] pub struct Directories { @@ -27,7 +27,7 @@ impl Directories { let start_time: SystemTime = SystemTime::now(); if included_directory.is_empty() { - text_messages.errors.push(fl!("core_missing_no_chosen_included_directory")); + text_messages.errors.push(flc!("core_missing_no_chosen_included_directory")); return false; } @@ -36,7 +36,7 @@ impl Directories { let mut checked_directories: Vec = Vec::new(); for directory in directories { if directory.to_string_lossy().contains('*') { - text_messages.warnings.push(fl!( + text_messages.warnings.push(flc!( "core_directory_wildcard_no_supported", generate_translation_hashmap(vec![("path", directory.display().to_string())]) )); @@ -45,7 +45,7 @@ impl Directories { #[cfg(not(target_family = "windows"))] if directory.is_relative() { - text_messages.warnings.push(fl!( + text_messages.warnings.push(flc!( "core_directory_relative_path", generate_translation_hashmap(vec![("path", directory.display().to_string())]) )); @@ -53,7 +53,7 @@ impl Directories { } #[cfg(target_family = "windows")] if directory.is_relative() && !directory.starts_with("\\") { - text_messages.warnings.push(fl!( + text_messages.warnings.push(flc!( "core_directory_relative_path", generate_translation_hashmap(vec![("path", directory.display().to_string())]) )); @@ -61,14 +61,14 @@ impl Directories { } if !directory.exists() { - text_messages.warnings.push(fl!( + text_messages.warnings.push(flc!( "core_directory_must_exists", generate_translation_hashmap(vec![("path", directory.display().to_string())]) )); continue; } if !directory.is_dir() { - text_messages.warnings.push(fl!( + text_messages.warnings.push(flc!( "core_directory_must_be_directory", generate_translation_hashmap(vec![("path", directory.display().to_string())]) )); @@ -78,7 +78,7 @@ impl Directories { } if checked_directories.is_empty() { - text_messages.warnings.push(fl!("core_included_directory_zero_valid_directories")); + text_messages.warnings.push(flc!("core_included_directory_zero_valid_directories")); return false; } @@ -101,11 +101,11 @@ impl Directories { for directory in directories { let directory_as_string = directory.to_string_lossy(); if directory_as_string == "/" { - text_messages.errors.push(fl!("core_excluded_directory_pointless_slash")); + text_messages.errors.push(flc!("core_excluded_directory_pointless_slash")); break; } if directory_as_string.contains('*') { - text_messages.warnings.push(fl!( + text_messages.warnings.push(flc!( "core_directory_wildcard_no_supported", generate_translation_hashmap(vec![("path", directory.display().to_string())]) )); @@ -113,7 +113,7 @@ impl Directories { } #[cfg(not(target_family = "windows"))] if directory.is_relative() { - text_messages.warnings.push(fl!( + text_messages.warnings.push(flc!( "core_directory_relative_path", generate_translation_hashmap(vec![("path", directory.display().to_string())]) )); @@ -121,7 +121,7 @@ impl Directories { } #[cfg(target_family = "windows")] if directory.is_relative() && !directory.starts_with("\\") { - text_messages.warnings.push(fl!( + text_messages.warnings.push(flc!( "core_directory_relative_path", generate_translation_hashmap(vec![("path", directory.display().to_string())]) )); @@ -133,7 +133,7 @@ impl Directories { continue; } if !directory.is_dir() { - text_messages.warnings.push(fl!( + text_messages.warnings.push(flc!( "core_directory_must_be_directory", generate_translation_hashmap(vec![("path", directory.display().to_string())]) )); @@ -276,7 +276,7 @@ impl Directories { } if self.included_directories.is_empty() { - text_messages.errors.push(fl!("core_directory_overlap")); + text_messages.errors.push(flc!("core_directory_overlap")); return false; } diff --git a/czkawka_core/src/duplicate.rs b/czkawka_core/src/duplicate.rs index 2803463..0bbccbf 100644 --- a/czkawka_core/src/duplicate.rs +++ b/czkawka_core/src/duplicate.rs @@ -26,6 +26,8 @@ use crate::common_extensions::Extensions; use crate::common_items::ExcludedItems; use crate::common_messages::Messages; use crate::common_traits::*; +use crate::flc; +use crate::localizer_core::generate_translation_hashmap; #[derive(PartialEq, Eq, Clone, Debug, Copy)] pub enum HashType { @@ -1277,7 +1279,9 @@ pub fn save_hashes_to_file(hashmap: &BTreeMap, text_messages: } } - text_messages.messages.push(format!("Properly saved to file {} cache entries.", how_much)); + text_messages + .messages + .push(flc!("core_saving_to_cache", generate_translation_hashmap(vec![("number", how_much.to_string())]))); } } pub fn load_hashes_from_file(text_messages: &mut Messages, delete_outdated_cache: bool, type_of_hash: &HashType, is_prehash: bool) -> Option>> { @@ -1352,9 +1356,9 @@ pub fn load_hashes_from_file(text_messages: &mut Messages, delete_outdated_cache } } - text_messages.messages.push(format!( - "Properly loaded {} cache entries.", - hashmap_loaded_entries.values().map(|e| e.len()).sum::() + text_messages.messages.push(flc!( + "core_loading_from_cache", + generate_translation_hashmap(vec![("number", hashmap_loaded_entries.values().map(|e| e.len()).sum::().to_string())]) )); return Some(hashmap_loaded_entries); diff --git a/czkawka_core/src/lib.rs b/czkawka_core/src/lib.rs index f1eb1e3..e3be126 100644 --- a/czkawka_core/src/lib.rs +++ b/czkawka_core/src/lib.rs @@ -22,6 +22,6 @@ pub mod common_extensions; pub mod common_items; pub mod common_messages; pub mod common_traits; -pub mod localizer; +pub mod localizer_core; pub const CZKAWKA_VERSION: &str = env!("CARGO_PKG_VERSION"); diff --git a/czkawka_core/src/localizer.rs b/czkawka_core/src/localizer_core.rs similarity index 59% rename from czkawka_core/src/localizer.rs rename to czkawka_core/src/localizer_core.rs index b3a22ce..86964bc 100644 --- a/czkawka_core/src/localizer.rs +++ b/czkawka_core/src/localizer_core.rs @@ -8,10 +8,10 @@ use once_cell::sync::Lazy; use rust_embed::RustEmbed; #[derive(RustEmbed)] -#[folder = "../i18n/"] +#[folder = "i18n/"] struct Localizations; -pub static LANGUAGE_LOADER: Lazy = Lazy::new(|| { +pub static LANGUAGE_LOADER_CORE: Lazy = Lazy::new(|| { let loader: FluentLanguageLoader = fluent_language_loader!(); loader.load_fallback_language(&Localizations).expect("Error while loading fallback language"); @@ -20,19 +20,19 @@ pub static LANGUAGE_LOADER: Lazy = Lazy::new(|| { }); #[macro_export] -macro_rules! fl { +macro_rules! flc { ($message_id:literal) => {{ - i18n_embed_fl::fl!($crate::localizer::LANGUAGE_LOADER, $message_id) + i18n_embed_fl::fl!($crate::localizer_core::LANGUAGE_LOADER_CORE, $message_id) }}; ($message_id:literal, $($args:expr),*) => {{ - i18n_embed_fl::fl!($crate::localizer::LANGUAGE_LOADER, $message_id, $($args), *) + i18n_embed_fl::fl!($crate::localizer_core::LANGUAGE_LOADER_CORE, $message_id, $($args), *) }}; } // Get the `Localizer` to be used for localizing this library. -pub fn localizer() -> Box { - Box::from(DefaultLocalizer::new(&*LANGUAGE_LOADER, &Localizations)) +pub fn localizer_core() -> Box { + Box::from(DefaultLocalizer::new(&*LANGUAGE_LOADER_CORE, &Localizations)) } pub fn generate_translation_hashmap(vec: Vec<(&'static str, String)>) -> HashMap<&'static str, String> { @@ -42,3 +42,10 @@ pub fn generate_translation_hashmap(vec: Vec<(&'static str, String)>) -> HashMap } hashmap } + +pub fn fnc_get_similarity_very_high() -> String { + flc!("core_similarity_very_high") +} +pub fn fnc_get_similarity_minimal() -> String { + flc!("core_similarity_minimal") +} diff --git a/czkawka_core/src/similar_images.rs b/czkawka_core/src/similar_images.rs index 208f90d..eaf6aa1 100644 --- a/czkawka_core/src/similar_images.rs +++ b/czkawka_core/src/similar_images.rs @@ -24,8 +24,8 @@ use crate::common_extensions::Extensions; use crate::common_items::ExcludedItems; use crate::common_messages::Messages; use crate::common_traits::{DebugPrint, PrintResults, SaveResults}; -use crate::fl; -use crate::localizer::generate_translation_hashmap; +use crate::flc; +use crate::localizer_core::generate_translation_hashmap; pub const RAW_IMAGE_EXTENSIONS: [&str; 24] = [ ".mrw", ".arw", ".srf", ".sr2", ".mef", ".orf", ".srw", ".erf", ".kdc", ".kdc", ".dcs", ".rw2", ".raf", ".dcr", ".dng", ".pef", ".crw", ".iiq", ".3fr", ".nrw", ".nef", ".mos", @@ -346,7 +346,7 @@ impl SimilarImages { let read_dir = match fs::read_dir(¤t_folder) { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_open_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -359,7 +359,7 @@ impl SimilarImages { let entry_data = match entry { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_entry_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -369,7 +369,7 @@ impl SimilarImages { let metadata: Metadata = match entry_data.metadata() { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_metadata_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -397,7 +397,7 @@ impl SimilarImages { let file_name_lowercase: String = match entry_data.file_name().into_string() { Ok(t) => t, Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_not_utf8_name", generate_translation_hashmap(vec![("name", entry_data.path().display().to_string())]) )); @@ -425,7 +425,7 @@ impl SimilarImages { Ok(t) => match t.duration_since(UNIX_EPOCH) { Ok(d) => d.as_secs(), Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_modified_before_epoch", generate_translation_hashmap(vec![("name", current_file_name.display().to_string())]) )); @@ -433,7 +433,7 @@ impl SimilarImages { } }, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_no_modification_date", generate_translation_hashmap(vec![("name", current_file_name.display().to_string()), ("reason", e.to_string())]) )); @@ -1149,17 +1149,17 @@ pub fn get_string_from_similarity(similarity: &Similarity, hash_size: u8) -> Str // #[cfg(debug_assertions)] // { // if *h <= SIMILAR_VALUES[index_preset][0] { - // format!("{} {}", fl!("core_similarity_very_high"), *h) + // format!("{} {}", flc!("core_similarity_very_high"), *h) // } else if *h <= SIMILAR_VALUES[index_preset][1] { - // format!("{} {}", fl!("core_similarity_high"), *h) + // format!("{} {}", flc!("core_similarity_high"), *h) // } else if *h <= SIMILAR_VALUES[index_preset][2] { - // format!("{} {}", fl!("core_similarity_medium"), *h) + // format!("{} {}", flc!("core_similarity_medium"), *h) // } else if *h <= SIMILAR_VALUES[index_preset][3] { - // format!("{} {}", fl!("core_similarity_small"), *h) + // format!("{} {}", flc!("core_similarity_small"), *h) // } else if *h <= SIMILAR_VALUES[index_preset][4] { - // format!("{} {}", fl!("core_similarity_very_small"), *h) + // format!("{} {}", flc!("core_similarity_very_small"), *h) // } else if *h <= SIMILAR_VALUES[index_preset][5] { - // format!("{} {}", fl!("core_similarity_minimal"), *h) + // format!("{} {}", flc!("core_similarity_minimal"), *h) // } else { // panic!(); // } @@ -1167,17 +1167,17 @@ pub fn get_string_from_similarity(similarity: &Similarity, hash_size: u8) -> Str // #[cfg(not(debug_assertions))] { if *h <= SIMILAR_VALUES[index_preset][0] { - fl!("core_similarity_very_high") + flc!("core_similarity_very_high") } else if *h <= SIMILAR_VALUES[index_preset][1] { - fl!("core_similarity_high") + flc!("core_similarity_high") } else if *h <= SIMILAR_VALUES[index_preset][2] { - fl!("core_similarity_medium") + flc!("core_similarity_medium") } else if *h <= SIMILAR_VALUES[index_preset][3] { - fl!("core_similarity_small") + flc!("core_similarity_small") } else if *h <= SIMILAR_VALUES[index_preset][4] { - fl!("core_similarity_very_small") + flc!("core_similarity_very_small") } else if *h <= SIMILAR_VALUES[index_preset][5] { - fl!("core_similarity_minimal") + flc!("core_similarity_minimal") } else { panic!(); } diff --git a/czkawka_core/src/similar_videos.rs b/czkawka_core/src/similar_videos.rs index 7d89251..ee87a32 100644 --- a/czkawka_core/src/similar_videos.rs +++ b/czkawka_core/src/similar_videos.rs @@ -23,8 +23,8 @@ use crate::common_extensions::Extensions; use crate::common_items::ExcludedItems; use crate::common_messages::Messages; use crate::common_traits::{DebugPrint, PrintResults, SaveResults}; -use crate::fl; -use crate::localizer::generate_translation_hashmap; +use crate::flc; +use crate::localizer_core::generate_translation_hashmap; use crate::similar_images::VIDEO_FILES_EXTENSIONS; pub const MAX_TOLERANCE: i32 = 20; @@ -197,8 +197,8 @@ impl SimilarVideos { /// Public function used by CLI to search for empty folders pub fn find_similar_videos(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender>) { if !check_if_ffmpeg_is_installed() { - self.text_messages.errors.push(fl!("core_ffmpeg_not_found")); - self.text_messages.errors.push(fl!( + self.text_messages.errors.push(flc!("core_ffmpeg_not_found")); + self.text_messages.errors.push(flc!( "core_ffmpeg_missing_in_snap", generate_translation_hashmap(vec![("url", "https://github.com/snapcrafters/ffmpeg/issues/73".to_string())]) )); @@ -285,7 +285,7 @@ impl SimilarVideos { let read_dir = match fs::read_dir(¤t_folder) { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_open_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -298,7 +298,7 @@ impl SimilarVideos { let entry_data = match entry { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_entry_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -308,7 +308,7 @@ impl SimilarVideos { let metadata: Metadata = match entry_data.metadata() { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_metadata_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -336,7 +336,7 @@ impl SimilarVideos { let file_name_lowercase: String = match entry_data.file_name().into_string() { Ok(t) => t, Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_not_utf8_name", generate_translation_hashmap(vec![("name", entry_data.path().display().to_string())]) )); @@ -363,7 +363,7 @@ impl SimilarVideos { Ok(t) => match t.duration_since(UNIX_EPOCH) { Ok(d) => d.as_secs(), Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_modified_before_epoch", generate_translation_hashmap(vec![("name", current_file_name.display().to_string())]) )); @@ -371,7 +371,7 @@ impl SimilarVideos { } }, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_no_modification_date", generate_translation_hashmap(vec![("name", current_file_name.display().to_string()), ("reason", e.to_string())]) )); diff --git a/czkawka_core/src/temporary.rs b/czkawka_core/src/temporary.rs index 04a503d..0ec7df8 100644 --- a/czkawka_core/src/temporary.rs +++ b/czkawka_core/src/temporary.rs @@ -16,8 +16,8 @@ use crate::common_directory::Directories; use crate::common_items::ExcludedItems; use crate::common_messages::Messages; use crate::common_traits::*; -use crate::fl; -use crate::localizer::generate_translation_hashmap; +use crate::flc; +use crate::localizer_core::generate_translation_hashmap; #[derive(Debug)] pub struct ProgressData { @@ -175,7 +175,7 @@ impl Temporary { let read_dir = match fs::read_dir(¤t_folder) { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_open_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -188,7 +188,7 @@ impl Temporary { let entry_data = match entry { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_entry_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -198,7 +198,7 @@ impl Temporary { let metadata: Metadata = match entry_data.metadata() { Ok(t) => t, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_cannot_read_metadata_dir", generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())]) )); @@ -226,7 +226,7 @@ impl Temporary { let file_name_lowercase: String = match entry_data.file_name().into_string() { Ok(t) => t, Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_not_utf8_name", generate_translation_hashmap(vec![("name", entry_data.path().display().to_string())]) )); @@ -267,7 +267,7 @@ impl Temporary { Ok(t) => match t.duration_since(UNIX_EPOCH) { Ok(d) => d.as_secs(), Err(_inspected) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_modified_before_epoch", generate_translation_hashmap(vec![("name", current_file_name.display().to_string())]) )); @@ -275,7 +275,7 @@ impl Temporary { } }, Err(e) => { - warnings.push(fl!( + warnings.push(flc!( "core_file_no_modification_date", generate_translation_hashmap(vec![("name", current_file_name.display().to_string()), ("reason", e.to_string())]) )); diff --git a/czkawka_gui/Cargo.toml b/czkawka_gui/Cargo.toml index 2461045..5c9ba17 100644 --- a/czkawka_gui/Cargo.toml +++ b/czkawka_gui/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "czkawka_gui" -version = "3.3.1" +version = "4.0.0" authors = ["Rafał Mikrut "] edition = "2018" description = "GTK frontend of Czkawka" @@ -9,7 +9,7 @@ homepage = "https://github.com/qarmin/czkawka" repository = "https://github.com/qarmin/czkawka" [dependencies] -czkawka_core = { path = "../czkawka_core", version = "3.3.1"} +czkawka_core = { path = "../czkawka_core", version = "4.0.0"} gdk = "0.14.3" glib = "0.14.8" diff --git a/czkawka_gui/i18n.toml b/czkawka_gui/i18n.toml index 111a110..f2456c8 100644 --- a/czkawka_gui/i18n.toml +++ b/czkawka_gui/i18n.toml @@ -9,5 +9,5 @@ fallback_language = "en" # (Required) The path to the assets directory. # The paths inside the assets directory should be structured like so: # `assets_dir/{language}/{domain}.ftl` -assets_dir = "../i18n" +assets_dir = "i18n" diff --git a/i18n/cs/czkawka_gui.ftl b/czkawka_gui/i18n/cs/czkawka_gui.ftl similarity index 92% rename from i18n/cs/czkawka_gui.ftl rename to czkawka_gui/i18n/cs/czkawka_gui.ftl index c309bb9..9ef41e6 100644 --- a/i18n/cs/czkawka_gui.ftl +++ b/czkawka_gui/i18n/cs/czkawka_gui.ftl @@ -1,28 +1,3 @@ -# Core -core_similarity_very_high = Velmi vysoká -core_similarity_high = Vysoká -core_similarity_medium = Střední -core_similarity_small = Malá -core_similarity_very_small = Velmi malá -core_similarity_minimal = Minimální -core_cannot_open_dir = Nelze otevřít dir { $dir }, důvod { $reason } -core_cannot_read_entry_dir = Nelze číst záznam v adresáři { $dir }, důvod { $reason } -core_cannot_read_metadata_dir = Metadata nelze číst v adresáři { $dir }, důvod { $reason } -core_file_not_utf8_name = Soubor { $name } nemá platný název UTF-8 (některé znaky nemusí být zobrazeny) -core_file_modified_before_epoch = Soubor { $name } se zdá být před Unix Epoch upraven -core_folder_modified_before_epoch = Složka { $name } se zdá být upravena před Unixem Epoch -core_file_no_modification_date = Nelze získat datum úpravy ze souboru { $name }, důvod { $reason } -core_folder_no_modification_date = Nelze získat datum úpravy ze složky { $name }, důvod { $reason } -core_missing_no_chosen_included_directory = Musí být uveden alespoň jeden adresář -core_directory_wildcard_no_supported = Adresáře: Zástupné znaky v cestě nejsou podporovány, ignoruji { $path } -core_directory_relative_path = Adresáře: Zástupné znaky v cestě nejsou podporovány, ignoruji { $path } -core_directory_must_exists = Adresáře: Poskytnutá cesta ke složce musí skončit, ignoruji { $path } -core_directory_must_be_directory = Adresáře: Poskytnutá cesta musí směřovat do adresáře, ignoruje { $path } -core_included_directory_zero_valid_directories = CHYBA zahrnutí adresáře: Nenalezena ani jedna správná cesta k zahrnutí, která je vyžadována -core_excluded_directory_pointless_slash = Adresáře: Vyloučení / je bezúčelné, protože to znamená, že žádné soubory nebudou naskenovány -core_directory_overlap = Adresáře: Všechny adresáře pro vyhledávání se překrývají s vyloučením adresářů -core_ffmpeg_not_found = Nelze najít správnou instalaci FFmpeg -core_ffmpeg_missing_in_snap = Podobná videa v současné době nefungují se snapem, pokud chcete nápovědu sledovat - { $url } # Window titles window_settings_title = Možnosti window_main_title = Czkawka (Škytavka) diff --git a/i18n/de/czkawka_gui.ftl b/czkawka_gui/i18n/de/czkawka_gui.ftl similarity index 92% rename from i18n/de/czkawka_gui.ftl rename to czkawka_gui/i18n/de/czkawka_gui.ftl index 50c8dd0..2bc3e3c 100644 --- a/i18n/de/czkawka_gui.ftl +++ b/czkawka_gui/i18n/de/czkawka_gui.ftl @@ -1,28 +1,3 @@ -# Core -core_similarity_very_high = Sehr Hoch -core_similarity_high = Hoch -core_similarity_medium = Mittel -core_similarity_small = Klein -core_similarity_very_small = Sehr klein -core_similarity_minimal = Minimale -core_cannot_open_dir = Verzeichnis { $dir } kann nicht geöffnet werden, Grund { $reason } -core_cannot_read_entry_dir = Kann Eintrag in Verzeichnis { $dir } nicht lesen, Grund { $reason } -core_cannot_read_metadata_dir = Metadaten können in Verzeichnis { $dir } nicht gelesen werden, Grund { $reason } -core_file_not_utf8_name = Datei { $name } hat keinen gültigen UTF-8-Namen (einige Zeichen dürfen nicht angezeigt werden) -core_file_modified_before_epoch = Datei { $name } scheint vor der Unix-Epoche geändert zu werden -core_folder_modified_before_epoch = Ordner { $name } scheint vor der Unix-Epoche geändert zu werden -core_file_no_modification_date = Konnte das Änderungsdatum von Datei { $name } nicht abrufen, Grund { $reason } -core_folder_no_modification_date = Konnte das Änderungsdatum aus dem Ordner { $name } nicht abrufen, Grund { $reason } -core_missing_no_chosen_included_directory = Mindestens ein Verzeichnis muss angegeben werden -core_directory_wildcard_no_supported = Verzeichnisse: Wildcards im Pfad werden nicht unterstützt, { $path } wird ignoriert -core_directory_relative_path = Verzeichnisse: Relativer Pfad wird nicht unterstützt, { $path } wird ignoriert -core_directory_must_exists = Verzeichnisse: Der angegebene Ordnerpfad muss beendet werden, { $path } wird ignoriert -core_directory_must_be_directory = Verzeichnisse: Der angegebene Pfad muss auf das Verzeichnis zeigen und { $path } ignorieren -core_included_directory_zero_valid_directories = Inklusive Verzeichnis-FEHLER: Nicht einmal einen korrekten Pfad zu inkludiert, der erforderlich ist -core_excluded_directory_pointless_slash = Verzeichnisse: Ausschließen / ist sinnlos, weil es bedeutet, dass keine Dateien gescannt werden -core_directory_overlap = Verzeichnisse: Alle Verzeichnisse zum Suchen von Überlappungen mit ausgeschlossenen Verzeichnissen -core_ffmpeg_not_found = Keine richtige Installation von FFmpeg gefunden -core_ffmpeg_missing_in_snap = Ähnliche Videos funktionieren derzeit nicht mit Snap, wenn du Hilfe möchtest - { $url } # Window titles window_settings_title = Optionen window_main_title = Czkawka (Schluckauf) diff --git a/i18n/en/czkawka_gui.ftl b/czkawka_gui/i18n/en/czkawka_gui.ftl similarity index 92% rename from i18n/en/czkawka_gui.ftl rename to czkawka_gui/i18n/en/czkawka_gui.ftl index cb95632..517fb4d 100644 --- a/i18n/en/czkawka_gui.ftl +++ b/czkawka_gui/i18n/en/czkawka_gui.ftl @@ -1,32 +1,3 @@ -# Core -core_similarity_very_high = Very High -core_similarity_high = High -core_similarity_medium = Medium -core_similarity_small = Small -core_similarity_very_small = Very Small -core_similarity_minimal = Minimal - -core_cannot_open_dir = Cannot open dir {$dir}, reason {$reason} -core_cannot_read_entry_dir = Cannot read entry in dir {$dir}, reason {$reason} -core_cannot_read_metadata_dir = Cannot read metadata in dir {$dir}, reason {$reason} -core_file_not_utf8_name = File {$name} does not have a valid UTF-8 name (some characters may not be shown) -core_file_modified_before_epoch = File {$name} seems to be modified before Unix Epoch -core_folder_modified_before_epoch = Folder {$name} seems to be modified before Unix Epoch -core_file_no_modification_date = Unable to get modification date from file {$name}, reason {$reason} -core_folder_no_modification_date = Unable to get modification date from folder {$name}, reason {$reason} - -core_missing_no_chosen_included_directory = At least one directory must be provided -core_directory_wildcard_no_supported = Directories: Wildcards in path are not supported, ignoring { $path } -core_directory_relative_path = Directories: Relative path are not supported, ignoring { $path } -core_directory_must_exists = Directories: Provided folder path must exist, ignoring { $path } -core_directory_must_be_directory = Directories: Provided path must point at the directory, ignoring { $path } -core_included_directory_zero_valid_directories = Included Directory ERROR: Not found even one correct path to included which is required -core_excluded_directory_pointless_slash = Directories: Excluding / is pointless, because it means that no files will be scanned -core_directory_overlap = Directories: All directories to search overlaps with excluded directories - -core_ffmpeg_not_found = Cannot find proper installation of FFmpeg -core_ffmpeg_missing_in_snap = Similar Videos don't work currently with snap, if you want help look at - { $url } - # Window titles window_settings_title = Settings window_main_title = Czkawka (Hiccup) diff --git a/i18n/es/czkawka_gui.ftl b/czkawka_gui/i18n/es/czkawka_gui.ftl similarity index 92% rename from i18n/es/czkawka_gui.ftl rename to czkawka_gui/i18n/es/czkawka_gui.ftl index ac62df5..ce730b5 100644 --- a/i18n/es/czkawka_gui.ftl +++ b/czkawka_gui/i18n/es/czkawka_gui.ftl @@ -1,28 +1,3 @@ -# Core -core_similarity_very_high = Muy alta -core_similarity_high = Alta -core_similarity_medium = Medio -core_similarity_small = Pequeño -core_similarity_very_small = Muy pequeño -core_similarity_minimal = Mínimo -core_cannot_open_dir = No se puede abrir el directorio { $dir }, razón { $reason } -core_cannot_read_entry_dir = No se puede leer la entrada en directorio { $dir }, razón { $reason } -core_cannot_read_metadata_dir = No se pueden leer metadatos en el directorio { $dir }, razón { $reason } -core_file_not_utf8_name = El archivo { $name } no tiene un nombre UTF-8 válido (algunos caracteres pueden no mostrarse) -core_file_modified_before_epoch = El archivo { $name } parece ser modificado antes de Unix Epoch -core_folder_modified_before_epoch = La carpeta { $name } parece ser modificada antes del Epoch Unix -core_file_no_modification_date = No se puede obtener la fecha de modificación del archivo { $name }, razón { $reason } -core_folder_no_modification_date = No se puede obtener la fecha de modificación de la carpeta { $name }, razón { $reason } -core_missing_no_chosen_included_directory = Debe proporcionarse al menos un directorio -core_directory_wildcard_no_supported = Directorios: Los comodines en la ruta no son compatibles, ignorando { $path } -core_directory_relative_path = Directorios: No se admite la ruta relativa, ignorando { $path } -core_directory_must_exists = Directorios: La ruta de la carpeta debe salir, ignorando { $path } -core_directory_must_be_directory = Directorios: La ruta proporcionada debe apuntar al directorio, ignorando { $path } -core_included_directory_zero_valid_directories = ERROR del directorio incluido: No se ha encontrado ni una ruta correcta a incluida que es necesaria -core_excluded_directory_pointless_slash = Directorios: Excluyendo / es inútil, ya que no se analizarán archivos -core_directory_overlap = Directorios: Todos los directorios para buscar superposiciones con directorios excluidos -core_ffmpeg_not_found = No se puede encontrar la instalación correcta de FFmpeg -core_ffmpeg_missing_in_snap = Los Videos Similares no funcionan actualmente con el snap, si quieres ayuda mira - { $url } # Window titles window_settings_title = Opciones window_main_title = Czkawka (Hipo) diff --git a/i18n/fr/czkawka_gui.ftl b/czkawka_gui/i18n/fr/czkawka_gui.ftl similarity index 92% rename from i18n/fr/czkawka_gui.ftl rename to czkawka_gui/i18n/fr/czkawka_gui.ftl index c26e8bf..d3f7210 100644 --- a/i18n/fr/czkawka_gui.ftl +++ b/czkawka_gui/i18n/fr/czkawka_gui.ftl @@ -1,28 +1,3 @@ -# Core -core_similarity_very_high = Très haute -core_similarity_high = Haute -core_similarity_medium = Moyenne -core_similarity_small = Basse -core_similarity_very_small = Très basse -core_similarity_minimal = Minimale -core_cannot_open_dir = Impossible d’ouvrir le répertoire { $dir }, raison : { $reason } -core_cannot_read_entry_dir = Impossible de lire l'entrée dans le répertoire { $dir }, raison : { $reason } -core_cannot_read_metadata_dir = Impossible de lire les métadonnées dans le répertoire { $dir }, raison : { $reason } -core_file_not_utf8_name = Le fichier { $name } n'a pas de nom UTF-8 valide (certains caractères ne peuvent pas être affichés) -core_file_modified_before_epoch = Le fichier { $name } semble avoir été modifié avant l'époque Unix -core_folder_modified_before_epoch = Le dossier { $name } semble avoir été modifié avant l'époque Unix -core_file_no_modification_date = Impossible d'obtenir la date de modification du fichier { $name }, raison : { $reason } -core_folder_no_modification_date = Impossible d'obtenir la date de modification du dossier { $name }, raison : { $reason } -core_missing_no_chosen_included_directory = Au moins un répertoire doit être fourni -core_directory_wildcard_no_supported = Répertoires : Les jokers dans le chemin ne sont pas pris en charge, ignorant { $path } -core_directory_relative_path = Répertoires : Le chemin relatif n'est pas pris en charge, ignorant { $path } -core_directory_must_exists = Répertoires : Le chemin du dossier fourni doit se terminer, ignorant { $path } -core_directory_must_be_directory = Répertoires : Le chemin fourni doit pointer dans le répertoire, { $path } -core_included_directory_zero_valid_directories = ERREUR de répertoire inclus : Aucun chemin n'a été trouvé, même un chemin correct à inclure qui est requis -core_excluded_directory_pointless_slash = Répertoires: Exclure / est inutile, car cela signifie qu'aucun fichier ne sera scanné -core_directory_overlap = Répertoires : Tous les répertoires pour rechercher des chevauchements avec des répertoires exclus -core_ffmpeg_not_found = Impossible de trouver une installation correcte de FFmpeg -core_ffmpeg_missing_in_snap = Les vidéos similaires ne fonctionnent pas actuellement avec un instantané, si vous voulez de l'aide - { $url } # Window titles window_settings_title = Options window_main_title = Czkawka (Hoquet) diff --git a/i18n/it/czkawka_gui.ftl b/czkawka_gui/i18n/it/czkawka_gui.ftl similarity index 92% rename from i18n/it/czkawka_gui.ftl rename to czkawka_gui/i18n/it/czkawka_gui.ftl index 1791bff..a9c7d4f 100644 --- a/i18n/it/czkawka_gui.ftl +++ b/czkawka_gui/i18n/it/czkawka_gui.ftl @@ -1,28 +1,3 @@ -# Core -core_similarity_very_high = Altissima -core_similarity_high = Alta -core_similarity_medium = Media -core_similarity_small = Piccola -core_similarity_very_small = Piccolissima -core_similarity_minimal = Minima -core_cannot_open_dir = Impossibile aprire cartella { $dir }, motivo { $reason } -core_cannot_read_entry_dir = Impossibile leggere elemento nella cartella { $dir }, ragione { $reason } -core_cannot_read_metadata_dir = Impossibile leggere metadati nella cartella { $dir }, ragione { $reason } -core_file_not_utf8_name = Il file { $name } non ha un nome UTF-8 valido (alcuni caratteri potrebbero non essere mostrati) -core_file_modified_before_epoch = Il file { $name } sembra essere stato modificato prima dell'Epoca Unix -core_folder_modified_before_epoch = La cartella { $name } sembra essere stato modificata prima dell'Epoca Unix -core_file_no_modification_date = Impossibile recuperare data di modifica dal file { $name }, ragione { $reason } -core_folder_no_modification_date = Impossibile recuperare data di modifica dalla cartella { $name }, ragione { $reason } -core_missing_no_chosen_included_directory = Almeno una directory deve essere fornita -core_directory_wildcard_no_supported = Cartelle: i caratteri jolly nel percorso non sono supportati, ignorando { $path } -core_directory_relative_path = Directories: Il percorso relativo non è supportato, ignorando { $path } -core_directory_must_exists = Directories: Il percorso della cartella fornito deve uscire, ignorando { $path } -core_directory_must_be_directory = Directories: Il percorso fornito deve puntare alla directory, ignorando { $path } -core_included_directory_zero_valid_directories = ERRORE Directory incluso: Non trovato nemmeno un percorso corretto incluso che è richiesto -core_excluded_directory_pointless_slash = Cartelle: Escludere / è inutile, perché significa che nessun file verrà scansionato -core_directory_overlap = Directories: Tutte le directory per cercare sovrapposizioni con directory escluse -core_ffmpeg_not_found = Impossibile trovare la corretta installazione di FFmpeg -core_ffmpeg_missing_in_snap = Video simili non funzionano attualmente con snap, se si desidera aiutare a guardare - { $url } # Window titles window_settings_title = Impostazioni window_main_title = Singhiozzo diff --git a/i18n/ja/czkawka_gui.ftl b/czkawka_gui/i18n/ja/czkawka_gui.ftl similarity index 92% rename from i18n/ja/czkawka_gui.ftl rename to czkawka_gui/i18n/ja/czkawka_gui.ftl index 7710de0..dbab120 100644 --- a/i18n/ja/czkawka_gui.ftl +++ b/czkawka_gui/i18n/ja/czkawka_gui.ftl @@ -1,28 +1,3 @@ -# Core -core_similarity_very_high = 非常に高い -core_similarity_high = 高い -core_similarity_medium = ミディアム -core_similarity_small = 小 -core_similarity_very_small = 非常に小さい -core_similarity_minimal = 最小 -core_cannot_open_dir = ディレクトリを開くことができません { $dir }、理由 { $reason } -core_cannot_read_entry_dir = Dir { $dir } でエントリを読み込めません、理由 { $reason } -core_cannot_read_metadata_dir = Dir { $dir } でメタデータを読み込めません、理由 { $reason } -core_file_not_utf8_name = ファイル { $name } に有効な UTF-8 名がありません (一部の文字は表示されない可能性があります) -core_file_modified_before_epoch = ファイル { $name } は Unix Epoch より前に変更されているようです -core_folder_modified_before_epoch = フォルダ { $name } は、Unix Epoch の前に変更されているようです -core_file_no_modification_date = ファイル { $name } から変更日を取得できません、理由 { $reason } -core_folder_no_modification_date = フォルダ { $name } から変更日を取得できません、理由 { $reason } -core_missing_no_chosen_included_directory = 少なくとも 1 つのディレクトリを指定する必要があります。 -core_directory_wildcard_no_supported = ディレクトリ: パス内のワイルドカードはサポートされていません。 { $path } を無視してください -core_directory_relative_path = ディレクトリ: 相対パスはサポートされていません。 { $path } を無視してください -core_directory_must_exists = ディレクトリ: 指定されたフォルダパスは、 { $path } を無視して終了する必要があります -core_directory_must_be_directory = ディレクトリ: 指定されたパスはディレクトリを指す必要があります。 { $path } を無視します -core_included_directory_zero_valid_directories = 含まれるディレクトリエラー: 必須の正しいパスが1つも見つかりません -core_excluded_directory_pointless_slash = ディレクトリ: ファイルがスキャンされないことを意味するため、除外/無意味です -core_directory_overlap = ディレクトリ: 除外されたディレクトリとオーバーラップを検索するすべてのディレクトリ -core_ffmpeg_not_found = 適切なFFmpegのインストールが見つかりません -core_ffmpeg_missing_in_snap = ヘルプを見たい場合は、現在同様のビデオはスナップでは動作しません - { $url } # Window titles window_settings_title = オプション window_main_title = Czkawka (しゃっくり) diff --git a/i18n/pl/czkawka_gui.ftl b/czkawka_gui/i18n/pl/czkawka_gui.ftl similarity index 92% rename from i18n/pl/czkawka_gui.ftl rename to czkawka_gui/i18n/pl/czkawka_gui.ftl index 5b59995..f644937 100644 --- a/i18n/pl/czkawka_gui.ftl +++ b/czkawka_gui/i18n/pl/czkawka_gui.ftl @@ -1,28 +1,3 @@ -# Core -core_similarity_very_high = Bardzo Duże -core_similarity_high = Duże -core_similarity_medium = Średnie -core_similarity_small = Małe -core_similarity_very_small = Bardzo Małe -core_similarity_minimal = Minimalne -core_cannot_open_dir = Nie można otworzyć folderu { $dir }, powód { $reason } -core_cannot_read_entry_dir = Nie można odczytać danych z folderu { $dir }, powód { $reason } -core_cannot_read_metadata_dir = Nie można odczytać metadanych folderu { $dir }, powód { $reason } -core_file_not_utf8_name = Plik { $name } nie posiada nazwy zakodowanej za pomocą UTF-8(niektóre znaki mogą się nie wyświetlać) -core_file_modified_before_epoch = Plik { $name } ma datę modyfikacji sprzed epoki unixa -core_folder_modified_before_epoch = Folder { $name } ma datę modyfikacji sprzed epoki unixa -core_file_no_modification_date = Nie udało się pobrać daty modyfikacji z pliku { $name }, powód { $reason } -core_folder_no_modification_date = Nie udało się pobrać daty modyfikacji z folderu { $name }, powód { $reason } -core_missing_no_chosen_included_directory = Należy podać co najmniej jeden katalog -core_directory_wildcard_no_supported = Katalogi: Wildcard na ścieżce nie są obsługiwane, ignorowanie { $path } -core_directory_relative_path = Katalogi: Ścieżka względna nie jest wspierana, ignorowanie { $path } -core_directory_must_exists = Katalogi: Podana ścieżka do folderu musi istnieć, ignorowanie { $path } -core_directory_must_be_directory = Katalogi: Podana ścieżka musi wskazywać na katalog, ignorowanie { $path } -core_included_directory_zero_valid_directories = Błąd katalogów do przeszukiwania: Nie znaleziono nawet jednej poprawnej ścieżki do przeszukania -core_excluded_directory_pointless_slash = Katalogi: Wykluczanie folderu / jest bezcelowe, ponieważ oznacza to, że żadne pliki nie zostaną sprawdzone -core_directory_overlap = Katalogi: Wszystkie katalogi do wyszukiwania pokrywają się z wykluczonymi -core_ffmpeg_not_found = Nie można odnaleźć poprawnej instalacji FFmpeg -core_ffmpeg_missing_in_snap = Wyszukiwanie podobnych filmów nie działa obecnie w snapach, jeśli chcesz pomóc spójrz na - { $url } # Window titles window_settings_title = Opcje window_main_title = Czkawka diff --git a/i18n/pt/czkawka_gui.ftl b/czkawka_gui/i18n/pt/czkawka_gui.ftl similarity index 92% rename from i18n/pt/czkawka_gui.ftl rename to czkawka_gui/i18n/pt/czkawka_gui.ftl index ed8ec78..457bb4b 100644 --- a/i18n/pt/czkawka_gui.ftl +++ b/czkawka_gui/i18n/pt/czkawka_gui.ftl @@ -1,28 +1,3 @@ -# Core -core_similarity_very_high = Muito alto -core_similarity_high = Alto -core_similarity_medium = Média -core_similarity_small = Pequeno -core_similarity_very_small = Muito Pequeno -core_similarity_minimal = Mínimo -core_cannot_open_dir = Não é possível abrir o diretório { $dir }, razão { $reason } -core_cannot_read_entry_dir = Não é possível ler a entrada no diretório { $dir }, razão { $reason } -core_cannot_read_metadata_dir = Não é possível ler os metadados no diretório { $dir }, razão { $reason } -core_file_not_utf8_name = Arquivo { $name } não tem nome UTF-8 válido (alguns caracteres não podem ser exibidos) -core_file_modified_before_epoch = Arquivo { $name } parece ser modificado antes do Epoch Unix -core_folder_modified_before_epoch = A pasta { $name } parece ser modificada antes do Epoch Unix -core_file_no_modification_date = Não foi possível obter a data de modificação do arquivo { $name }, motivo { $reason } -core_folder_no_modification_date = Não foi possível obter a data de modificação da pasta { $name }, motivo { $reason } -core_missing_no_chosen_included_directory = Pelo menos um diretório deve ser fornecido -core_directory_wildcard_no_supported = Directorias: Caracteres curinga no caminho não são suportados, ignorando { $path } -core_directory_relative_path = Directorias: Caminho relativo não são suportados, ignorando { $path } -core_directory_must_exists = Directórios: Caminho da pasta fornecida deve sair, ignorando { $path } -core_directory_must_be_directory = Diretórios: Caminho fornecido deve apontar para o diretório, ignorando { $path } -core_included_directory_zero_valid_directories = ERRO do Diretório incluído: Não foi encontrado nenhum caminho correto que é necessário incluir -core_excluded_directory_pointless_slash = Directorias: Excluir / não faz sentido, porque significa que nenhum arquivo será escaneado -core_directory_overlap = Diretórios: Todos os diretórios para pesquisar sobreposições com diretórios excluídos -core_ffmpeg_not_found = Instalação adequada do FFmpeg não encontrada -core_ffmpeg_missing_in_snap = Vídeos similares não funcionam atualmente com o snap, se você quiser ajudar a olhar - { $url } # Window titles window_settings_title = Opções window_main_title = Czkawka (Soluço) diff --git a/i18n/ru/czkawka_gui.ftl b/czkawka_gui/i18n/ru/czkawka_gui.ftl similarity index 92% rename from i18n/ru/czkawka_gui.ftl rename to czkawka_gui/i18n/ru/czkawka_gui.ftl index 22a13a0..5f58aec 100644 --- a/i18n/ru/czkawka_gui.ftl +++ b/czkawka_gui/i18n/ru/czkawka_gui.ftl @@ -1,28 +1,3 @@ -# Core -core_similarity_very_high = Очень высокий -core_similarity_high = Высокий -core_similarity_medium = Средний -core_similarity_small = Маленький -core_similarity_very_small = Очень маленький -core_similarity_minimal = Минимальный -core_cannot_open_dir = Невозможно открыть каталог { $dir }, причина { $reason } -core_cannot_read_entry_dir = Невозможно прочитать запись в директории { $dir }, причина { $reason } -core_cannot_read_metadata_dir = Невозможно прочитать метаданные в директории { $dir }, причина { $reason } -core_file_not_utf8_name = У файла { $name } неверное имя UTF-8 (некоторые символы не могут быть показаны) -core_file_modified_before_epoch = Файл { $name } может быть изменен до начала эпохи Unix -core_folder_modified_before_epoch = Папка { $name } изменяется до начала эпохи Unix -core_file_no_modification_date = Не удается получить дату изменения из файла { $name }, причина { $reason } -core_folder_no_modification_date = Не удается получить дату изменения из папки { $name }, причина { $reason } -core_missing_no_chosen_included_directory = Должен быть указан хотя бы один каталог -core_directory_wildcard_no_supported = Директории: Не поддерживаются шаблоны в директории, игнорируется { $path } -core_directory_relative_path = Директории: Относительный путь не поддерживается, игнорируется { $path } -core_directory_must_exists = Директории: Указанный путь к папке должен быть закрыт, игнорируется { $path } -core_directory_must_be_directory = Директории: Указанный путь должен указывать на директорию, игнорируя { $path } -core_included_directory_zero_valid_directories = Включенный каталог ОШИБКА: Не найден даже один правильный путь к включённому которому требуется -core_excluded_directory_pointless_slash = Директории: Исключение / бессмысленно, потому что ни один файл не будет просканирован -core_directory_overlap = Каталоги: Все директории для поиска совпадают с исключенными каталогами -core_ffmpeg_not_found = Не удается найти надлежащую установку FFmpeg -core_ffmpeg_missing_in_snap = Похожие видео не работают в данный момент, если вы хотите помочь посмотреть - { $url } # Window titles window_settings_title = Опции window_main_title = Czkawka (икота) diff --git a/i18n/uk/czkawka_gui.ftl b/czkawka_gui/i18n/uk/czkawka_gui.ftl similarity index 92% rename from i18n/uk/czkawka_gui.ftl rename to czkawka_gui/i18n/uk/czkawka_gui.ftl index aaa6d6f..aaa46d7 100644 --- a/i18n/uk/czkawka_gui.ftl +++ b/czkawka_gui/i18n/uk/czkawka_gui.ftl @@ -1,28 +1,3 @@ -# Core -core_similarity_very_high = Дуже високий -core_similarity_high = Високий -core_similarity_medium = Медіум -core_similarity_small = Маленький -core_similarity_very_small = Дуже малий -core_similarity_minimal = Мінімальні -core_cannot_open_dir = Не вдалося відкрити папку { $dir }, причина { $reason } -core_cannot_read_entry_dir = Не вдалося прочитати запис в папці { $dir }, причина { $reason } -core_cannot_read_metadata_dir = Не вдалося прочитати метадані в папці { $dir }, причина { $reason } -core_file_not_utf8_name = Файл { $name } не має припустимого імені UTF-8 (деякі символи не можуть бути показані) -core_file_modified_before_epoch = Файл { $name } Схоже, змінено перед Unix Epoch -core_folder_modified_before_epoch = Папка { $name } здається змінена до Unix Epoch -core_file_no_modification_date = Не вдалося отримати дату модифікації з файлу { $name }, причина { $reason } -core_folder_no_modification_date = Не вдалося отримати дату модифікації з папки { $name }, причина { $reason } -core_missing_no_chosen_included_directory = Необхідно вказати принаймні один каталог -core_directory_wildcard_no_supported = Директорія: Шаблони в шляху не підтримуються, ігноруючи { $path } -core_directory_relative_path = Каталог: Відносний шлях не підтримується, ігноруючи { $path } -core_directory_must_exists = Каталог: Наданий шлях до папки повинен вийти, ігноруючи { $path } -core_directory_must_be_directory = Каталог: Наданий шлях повинен вказувати на каталог, ігноруючи { $path } -core_included_directory_zero_valid_directories = Включена помилка в каталозі: не знайдено навіть один правильний шлях до включеного, який є обов'язковим -core_excluded_directory_pointless_slash = Теки: виключення / без урахування безточних, тому що це означає, що файли не будуть скановані -core_directory_overlap = Каталоги: Усі каталоги для пошуку перетинаються з виключеними каталогами -core_ffmpeg_not_found = Не вдалося знайти правильне встановлення FFmpeg -core_ffmpeg_missing_in_snap = Подібні відео в даний час не працюють з знімком, якщо ви хочете, щоб допомогти вам переглянути - { $url } # Window titles window_settings_title = Опції window_main_title = Czkawka (гикавка) diff --git a/i18n/zh/czkawka_gui.ftl b/czkawka_gui/i18n/zh/czkawka_gui.ftl similarity index 100% rename from i18n/zh/czkawka_gui.ftl rename to czkawka_gui/i18n/zh/czkawka_gui.ftl diff --git a/czkawka_gui/src/compute_results.rs b/czkawka_gui/src/compute_results.rs index 1b6dc5c..56ef101 100644 --- a/czkawka_gui/src/compute_results.rs +++ b/czkawka_gui/src/compute_results.rs @@ -12,13 +12,13 @@ use czkawka_core::common_dir_traversal::CheckingMethod; use czkawka_core::same_music::MusicSimilarity; use czkawka_core::similar_images; -use crate::fl; +use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_combo_box::IMAGES_HASH_SIZE_COMBO_BOX; use crate::help_functions::*; use crate::notebook_enums::*; use crate::opening_selecting_records::*; -use czkawka_core::localizer::generate_translation_hashmap; +use czkawka_core::localizer_core::generate_translation_hashmap; pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver) { let combo_box_image_hash_size = gui_data.main_notebook.combo_box_image_hash_size.clone(); @@ -76,7 +76,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< match msg { Message::Duplicates(df) => { if df.get_stopped_search() { - entry_info.set_text(&fl!("compute_stopped_by_user")); + entry_info.set_text(&flg!("compute_stopped_by_user")); } else { if df.get_use_reference() { tree_view_duplicate_finder.selection().set_select_function(Some(Box::new(select_function_always_true))); @@ -97,7 +97,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< // duplicates_size = 0; duplicates_group = information.number_of_groups_by_name; entry_info.set_text( - fl!( + flg!( "compute_found_duplicates_name", generate_translation_hashmap(vec![("number_files", duplicates_number.to_string()), ("number_groups", duplicates_group.to_string())]) ) @@ -109,7 +109,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< duplicates_size = information.lost_space_by_hash; duplicates_group = information.number_of_groups_by_hash; entry_info.set_text( - fl!( + flg!( "compute_found_duplicates_hash_size", generate_translation_hashmap(vec![ ("number_files", duplicates_number.to_string()), @@ -125,7 +125,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< duplicates_size = information.lost_space_by_size; duplicates_group = information.number_of_groups_by_size; entry_info.set_text( - fl!( + flg!( "compute_found_duplicates_hash_size", generate_translation_hashmap(vec![ ("number_files", duplicates_number.to_string()), @@ -521,7 +521,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< } Message::EmptyFolders(ef) => { if ef.get_stopped_search() { - entry_info.set_text(&fl!("compute_stopped_by_user")); + entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = ef.get_information(); let text_messages = ef.get_text_messages(); @@ -529,7 +529,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< let empty_folder_number: usize = information.number_of_empty_folders; entry_info.set_text( - fl!( + flg!( "compute_found_empty_folders", generate_translation_hashmap(vec![("number_files", empty_folder_number.to_string()),]) ) @@ -586,7 +586,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< } Message::EmptyFiles(vf) => { if vf.get_stopped_search() { - entry_info.set_text(&fl!("compute_stopped_by_user")); + entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = vf.get_information(); let text_messages = vf.get_text_messages(); @@ -594,7 +594,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< let empty_files_number: usize = information.number_of_empty_files; entry_info.set_text( - fl!( + flg!( "compute_found_empty_files", generate_translation_hashmap(vec![("number_files", empty_files_number.to_string()),]) ) @@ -652,7 +652,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< } Message::BigFiles(bf) => { if bf.get_stopped_search() { - entry_info.set_text(&fl!("compute_stopped_by_user")); + entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = bf.get_information(); let text_messages = bf.get_text_messages(); @@ -660,7 +660,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< let biggest_files_number: usize = information.number_of_real_files; entry_info.set_text( - fl!( + flg!( "compute_found_big_files", generate_translation_hashmap(vec![("number_files", biggest_files_number.to_string()),]) ) @@ -720,14 +720,14 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< } Message::Temporary(tf) => { if tf.get_stopped_search() { - entry_info.set_text(&fl!("compute_stopped_by_user")); + entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = tf.get_information(); let text_messages = tf.get_text_messages(); let temporary_files_number: usize = information.number_of_temporary_files; entry_info.set_text( - fl!( + flg!( "compute_found_temporary_files", generate_translation_hashmap(vec![("number_files", temporary_files_number.to_string()),]) ) @@ -785,7 +785,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< } Message::SimilarImages(sf) => { if sf.get_stopped_search() { - entry_info.set_text(&fl!("compute_stopped_by_user")); + entry_info.set_text(&flg!("compute_stopped_by_user")); } else { if sf.get_use_reference() { tree_view_similar_images_finder.selection().set_select_function(Some(Box::new(select_function_always_true))); @@ -800,7 +800,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< let found_any_duplicates = information.number_of_duplicates > 0; entry_info.set_text( - fl!( + flg!( "compute_found_images", generate_translation_hashmap(vec![ ("number_files", information.number_of_duplicates.to_string()), @@ -969,7 +969,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< } Message::SimilarVideos(ff) => { if ff.get_stopped_search() { - entry_info.set_text(&fl!("compute_stopped_by_user")); + entry_info.set_text(&flg!("compute_stopped_by_user")); } else { if ff.get_use_reference() { tree_view_similar_videos_finder.selection().set_select_function(Some(Box::new(select_function_always_true))); @@ -983,7 +983,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< let found_any_duplicates = information.number_of_duplicates > 0; entry_info.set_text( - fl!( + flg!( "compute_found_videos", generate_translation_hashmap(vec![ ("number_files", information.number_of_duplicates.to_string()), @@ -1138,7 +1138,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< } Message::SameMusic(mf) => { if mf.get_stopped_search() { - entry_info.set_text(&fl!("compute_stopped_by_user")); + entry_info.set_text(&flg!("compute_stopped_by_user")); } else { if mf.get_use_reference() { tree_view_same_music_finder.selection().set_select_function(Some(Box::new(select_function_always_true))); @@ -1152,7 +1152,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< let same_music_number: usize = information.number_of_duplicates; entry_info.set_text( - fl!( + flg!( "compute_found_music", generate_translation_hashmap(vec![ ("number_files", information.number_of_duplicates.to_string()), @@ -1360,7 +1360,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< } Message::InvalidSymlinks(ifs) => { if ifs.get_stopped_search() { - entry_info.set_text(&fl!("compute_stopped_by_user")); + entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = ifs.get_information(); let text_messages = ifs.get_text_messages(); @@ -1368,7 +1368,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< let invalid_symlinks: usize = information.number_of_invalid_symlinks; entry_info.set_text( - fl!( + flg!( "compute_found_invalid_symlinks", generate_translation_hashmap(vec![("number_files", invalid_symlinks.to_string()),]) ) @@ -1433,7 +1433,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< } Message::BrokenFiles(br) => { if br.get_stopped_search() { - entry_info.set_text(&fl!("compute_stopped_by_user")); + entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = br.get_information(); let text_messages = br.get_text_messages(); @@ -1441,7 +1441,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< let broken_files_number: usize = information.number_of_broken_files; entry_info.set_text( - fl!( + flg!( "compute_found_broken_files", generate_translation_hashmap(vec![("number_files", broken_files_number.to_string()),]) ) diff --git a/czkawka_gui/src/connect_things/connect_button_compare.rs b/czkawka_gui/src/connect_things/connect_button_compare.rs index 0fc31e7..b008e9b 100644 --- a/czkawka_gui/src/connect_things/connect_button_compare.rs +++ b/czkawka_gui/src/connect_things/connect_button_compare.rs @@ -1,5 +1,5 @@ +use crate::flg; use czkawka_core::common::get_dynamic_image_from_raw_image; -use czkawka_core::fl; use czkawka_core::similar_images::RAW_IMAGE_EXTENSIONS; use gtk::prelude::*; use gtk::{CheckButton, Image, ListStore, Orientation, ScrolledWindow, TreeIter, TreeModel, TreePath, TreeSelection}; @@ -13,7 +13,7 @@ use crate::help_functions::{ count_number_of_groups, get_full_name_from_path_name, get_image_path_temporary, get_max_file_name, resize_dynamic_image_dimension, NotebookObject, HEADER_ROW_COLOR, NOTEBOOKS_INFOS, }; -use crate::localizer::generate_translation_hashmap; +use crate::localizer_core::generate_translation_hashmap; const BIG_PREVIEW_SIZE: u32 = 600; const SMALL_PREVIEW_SIZE: u32 = 100; @@ -296,7 +296,7 @@ fn populate_groups_at_start( check_button_right_preview_text.set_label(&format!("2. {}", get_max_file_name(&cache_all_images[1].0, 70))); label_group_info.set_text( - fl!( + flg!( "compare_groups_number", generate_translation_hashmap(vec![ ("current_group", current_group.to_string()), @@ -488,9 +488,9 @@ fn populate_similar_scrolled_view( let smaller_box = gtk::Box::new(Orientation::Horizontal, 2); - let button_left = gtk::Button::builder().label(&fl!("compare_move_left_button")).build(); + let button_left = gtk::Button::builder().label(&flg!("compare_move_left_button")).build(); let label = gtk::Label::builder().label(&(number + 1).to_string()).build(); - let button_right = gtk::Button::builder().label(&fl!("compare_move_right_button")).build(); + let button_right = gtk::Button::builder().label(&flg!("compare_move_right_button")).build(); let image_compare_left = image_compare_left.clone(); let image_compare_right = image_compare_right.clone(); diff --git a/czkawka_gui/src/connect_things/connect_button_delete.rs b/czkawka_gui/src/connect_things/connect_button_delete.rs index bc56f6b..b52afbd 100644 --- a/czkawka_gui/src/connect_things/connect_button_delete.rs +++ b/czkawka_gui/src/connect_things/connect_button_delete.rs @@ -5,11 +5,11 @@ use std::fs::Metadata; use gtk::prelude::*; use gtk::{Align, CheckButton, Dialog, ResponseType, TextView}; -use czkawka_core::fl; +use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; -use crate::localizer::generate_translation_hashmap; +use crate::localizer_core::generate_translation_hashmap; use crate::notebook_enums::*; // TODO add support for checking if really symlink doesn't point to correct directory/file @@ -140,22 +140,22 @@ pub async fn check_if_can_delete_files( } fn create_dialog_ask_for_deletion(window_main: >k::Window, number_of_selected_items: u64, number_of_selected_groups: u64) -> (Dialog, CheckButton) { - let dialog = gtk::Dialog::builder().title(&fl!("delete_title_dialog")).transient_for(window_main).modal(true).build(); - let button_ok = dialog.add_button(&fl!("general_ok_button"), ResponseType::Ok); - dialog.add_button(&fl!("general_close_button"), ResponseType::Cancel); + let dialog = gtk::Dialog::builder().title(&flg!("delete_title_dialog")).transient_for(window_main).modal(true).build(); + let button_ok = dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); + dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); - let label: gtk::Label = gtk::Label::new(Some(&fl!("delete_question_label"))); + let label: gtk::Label = gtk::Label::new(Some(&flg!("delete_question_label"))); let label2: gtk::Label = match number_of_selected_groups { - 0 => gtk::Label::new(Some(&fl!( + 0 => gtk::Label::new(Some(&flg!( "delete_items_label", generate_translation_hashmap(vec![("items", number_of_selected_items.to_string())]) ))), - _ => gtk::Label::new(Some(&fl!( + _ => gtk::Label::new(Some(&flg!( "delete_items_groups_label", generate_translation_hashmap(vec![("items", number_of_selected_items.to_string()), ("groups", number_of_selected_groups.to_string())]) ))), }; - let check_button: gtk::CheckButton = gtk::CheckButton::with_label(&fl!("dialogs_ask_next_time")); + let check_button: gtk::CheckButton = gtk::CheckButton::with_label(&flg!("dialogs_ask_next_time")); check_button.set_active(true); check_button.set_halign(Align::Center); @@ -174,16 +174,16 @@ fn create_dialog_ask_for_deletion(window_main: >k::Window, number_of_selected_ fn create_dialog_group_deletion(window_main: >k::Window) -> (Dialog, CheckButton) { let dialog = gtk::Dialog::builder() - .title(&fl!("delete_all_files_in_group_title")) + .title(&flg!("delete_all_files_in_group_title")) .transient_for(window_main) .modal(true) .build(); - let button_ok = dialog.add_button(&fl!("general_ok_button"), ResponseType::Ok); - dialog.add_button(&fl!("general_close_button"), ResponseType::Cancel); + let button_ok = dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); + dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); - let label: gtk::Label = gtk::Label::new(Some(&fl!("delete_all_files_in_group_label1"))); - let label2: gtk::Label = gtk::Label::new(Some(&fl!("delete_all_files_in_group_label2"))); - let check_button: gtk::CheckButton = gtk::CheckButton::with_label(&fl!("dialogs_ask_next_time")); + let label: gtk::Label = gtk::Label::new(Some(&flg!("delete_all_files_in_group_label1"))); + let label2: gtk::Label = gtk::Label::new(Some(&flg!("delete_all_files_in_group_label2"))); + let check_button: gtk::CheckButton = gtk::CheckButton::with_label(&flg!("dialogs_ask_next_time")); check_button.set_active(true); check_button.set_halign(Align::Center); @@ -364,7 +364,7 @@ pub fn empty_folder_remover( } } if error_happened { - messages += &fl!( + messages += &flg!( "delete_folder_failed", generate_translation_hashmap(vec![("dir", get_full_name_from_path_name(&path, &name))]) ); @@ -421,7 +421,7 @@ pub fn basic_remove( } Err(e) => { - messages += fl!( + messages += flg!( "delete_file_failed", generate_translation_hashmap(vec![("name", get_full_name_from_path_name(&path, &name)), ("reason", e.to_string())]) ) @@ -435,7 +435,7 @@ pub fn basic_remove( model.remove(&iter); } Err(e) => { - messages += fl!( + messages += flg!( "delete_file_failed", generate_translation_hashmap(vec![("name", get_full_name_from_path_name(&path, &name)), ("reason", e.to_string())]) ) @@ -510,7 +510,7 @@ pub fn tree_remove( for file_name in vec_file_name { if !use_trash { if let Err(e) = fs::remove_file(get_full_name_from_path_name(&path, &file_name)) { - messages += fl!( + messages += flg!( "delete_file_failed", generate_translation_hashmap(vec![("name", get_full_name_from_path_name(&path, &file_name)), ("reason", e.to_string())]) ) @@ -518,7 +518,7 @@ pub fn tree_remove( messages += "\n"; } } else if let Err(e) = trash::delete(get_full_name_from_path_name(&path, &file_name)) { - messages += fl!( + messages += flg!( "delete_file_failed", generate_translation_hashmap(vec![("name", get_full_name_from_path_name(&path, &file_name)), ("reason", e.to_string())]) ) diff --git a/czkawka_gui/src/connect_things/connect_button_hardlink.rs b/czkawka_gui/src/connect_things/connect_button_hardlink.rs index 594c033..0bd17d0 100644 --- a/czkawka_gui/src/connect_things/connect_button_hardlink.rs +++ b/czkawka_gui/src/connect_things/connect_button_hardlink.rs @@ -4,12 +4,12 @@ use std::path::PathBuf; use gtk::prelude::*; use gtk::{Align, CheckButton, Dialog, ResponseType, TextView, TreeIter, TreePath}; +use crate::flg; use czkawka_core::duplicate::make_hard_link; -use czkawka_core::fl; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; -use crate::localizer::generate_translation_hashmap; +use crate::localizer_core::generate_translation_hashmap; use crate::notebook_enums::*; pub fn connect_button_hardlink_symlink(gui_data: &GuiData) { @@ -196,7 +196,7 @@ pub fn hardlink_symlink( for symhardlink_data in vec_symhardlink_data { for file_to_hardlink in symhardlink_data.files_to_symhardlink { if let Err(e) = make_hard_link(&PathBuf::from(&symhardlink_data.original_data), &PathBuf::from(&file_to_hardlink)) { - add_text_to_text_view(text_view_errors, format!("{} {}, reason {}", fl!("hardlink_failed"), file_to_hardlink, e).as_str()); + add_text_to_text_view(text_view_errors, format!("{} {}, reason {}", flg!("hardlink_failed"), file_to_hardlink, e).as_str()); continue; } } @@ -207,7 +207,7 @@ pub fn hardlink_symlink( if let Err(e) = fs::remove_file(&file_to_symlink) { add_text_to_text_view( text_view_errors, - fl!( + flg!( "delete_file_failed", generate_translation_hashmap(vec![("name", file_to_symlink.to_string()), ("reason", e.to_string())]) ) @@ -221,7 +221,7 @@ pub fn hardlink_symlink( if let Err(e) = std::os::unix::fs::symlink(&symhardlink_data.original_data, &file_to_symlink) { add_text_to_text_view( text_view_errors, - fl!( + flg!( "delete_file_failed", generate_translation_hashmap(vec![("name", file_to_symlink.to_string()), ("reason", e.to_string())]) ) @@ -235,7 +235,7 @@ pub fn hardlink_symlink( if let Err(e) = std::os::windows::fs::symlink_file(&symhardlink_data.original_data, &file_to_symlink) { add_text_to_text_view( text_view_errors, - fl!( + flg!( "delete_file_failed", generate_translation_hashmap(vec![("name", file_to_symlink.to_string()), ("reason", e.to_string())]) ) @@ -256,16 +256,16 @@ pub fn hardlink_symlink( fn create_dialog_non_group(window_main: >k::Window) -> Dialog { let dialog = gtk::Dialog::builder() - .title(&fl!("hard_sym_invalid_selection_title_dialog")) + .title(&flg!("hard_sym_invalid_selection_title_dialog")) .transient_for(window_main) .modal(true) .build(); - let button_ok = dialog.add_button(&fl!("general_ok_button"), ResponseType::Ok); - dialog.add_button(&fl!("general_close_button"), ResponseType::Cancel); + let button_ok = dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); + dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); - let label: gtk::Label = gtk::Label::new(Some(&fl!("hard_sym_invalid_selection_label_1"))); - let label2: gtk::Label = gtk::Label::new(Some(&fl!("hard_sym_invalid_selection_label_2"))); - let label3: gtk::Label = gtk::Label::new(Some(&fl!("hard_sym_invalid_selection_label_3"))); + let label: gtk::Label = gtk::Label::new(Some(&flg!("hard_sym_invalid_selection_label_1"))); + let label2: gtk::Label = gtk::Label::new(Some(&flg!("hard_sym_invalid_selection_label_2"))); + let label3: gtk::Label = gtk::Label::new(Some(&flg!("hard_sym_invalid_selection_label_3"))); button_ok.grab_focus(); @@ -364,15 +364,15 @@ pub async fn check_if_can_link_files(check_button_settings_confirm_link: >k::C fn create_dialog_ask_for_linking(window_main: >k::Window) -> (Dialog, CheckButton) { let dialog = gtk::Dialog::builder() - .title(&fl!("hard_sym_link_title_dialog")) + .title(&flg!("hard_sym_link_title_dialog")) .transient_for(window_main) .modal(true) .build(); - let button_ok = dialog.add_button(&fl!("general_ok_button"), ResponseType::Ok); - dialog.add_button(&fl!("general_close_button"), ResponseType::Cancel); + let button_ok = dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); + dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); - let label: gtk::Label = gtk::Label::new(Some(&fl!("hard_sym_link_label"))); - let check_button: gtk::CheckButton = gtk::CheckButton::with_label(&fl!("dialogs_ask_next_time")); + let label: gtk::Label = gtk::Label::new(Some(&flg!("hard_sym_link_label"))); + let check_button: gtk::CheckButton = gtk::CheckButton::with_label(&flg!("dialogs_ask_next_time")); check_button.set_active(true); check_button.set_halign(Align::Center); diff --git a/czkawka_gui/src/connect_things/connect_button_move.rs b/czkawka_gui/src/connect_things/connect_button_move.rs index d18bfae..dc0c9ca 100644 --- a/czkawka_gui/src/connect_things/connect_button_move.rs +++ b/czkawka_gui/src/connect_things/connect_button_move.rs @@ -3,11 +3,11 @@ use std::path::{Path, PathBuf}; use gtk::prelude::*; use gtk::{ResponseType, TreePath}; -use czkawka_core::fl; +use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; -use crate::localizer::generate_translation_hashmap; +use crate::localizer_core::generate_translation_hashmap; use crate::notebook_enums::*; pub fn connect_button_move(gui_data: &GuiData) { @@ -76,13 +76,13 @@ fn move_things( reset_text_view(text_view_errors); let chooser = gtk::FileChooserDialog::builder() - .title(&fl!("move_files_title_dialog")) + .title(&flg!("move_files_title_dialog")) .action(gtk::FileChooserAction::SelectFolder) .transient_for(window_main) .modal(true) .build(); - chooser.add_button(&fl!("general_ok_button"), ResponseType::Ok); - chooser.add_button(&fl!("general_close_button"), ResponseType::Cancel); + chooser.add_button(&flg!("general_ok_button"), ResponseType::Ok); + chooser.add_button(&flg!("general_close_button"), ResponseType::Cancel); chooser.set_select_multiple(false); chooser.show_all(); @@ -111,7 +111,7 @@ fn move_things( if folders.len() != 1 { add_text_to_text_view( &text_view_errors, - fl!( + flg!( "move_files_choose_more_than_1_path", generate_translation_hashmap(vec![("path_number", folders.len().to_string())]) ) @@ -234,13 +234,13 @@ fn move_files_common( let destination_file = destination_folder.join(file_name); if Path::new(&thing).is_dir() { if let Err(e) = fs_extra::dir::move_dir(&thing, &destination_file, &fs_extra::dir::CopyOptions::new()) { - messages += fl!("move_folder_failed", generate_translation_hashmap(vec![("name", thing), ("reason", e.to_string())])).as_str(); + messages += flg!("move_folder_failed", generate_translation_hashmap(vec![("name", thing), ("reason", e.to_string())])).as_str(); messages += "\n"; continue 'next_result; } } else { if let Err(e) = fs_extra::file::move_file(&thing, &destination_file, &fs_extra::file::CopyOptions::new()) { - messages += fl!("move_file_failed", generate_translation_hashmap(vec![("name", thing), ("reason", e.to_string())])).as_str(); + messages += flg!("move_file_failed", generate_translation_hashmap(vec![("name", thing), ("reason", e.to_string())])).as_str(); messages += "\n"; continue 'next_result; @@ -251,7 +251,7 @@ fn move_files_common( } entry_info.set_text( - fl!( + flg!( "move_stats", generate_translation_hashmap(vec![("num_files", moved_files.to_string()), ("all_files", selected_rows.len().to_string())]) ) diff --git a/czkawka_gui/src/connect_things/connect_button_save.rs b/czkawka_gui/src/connect_things/connect_button_save.rs index b52d311..4fd7970 100644 --- a/czkawka_gui/src/connect_things/connect_button_save.rs +++ b/czkawka_gui/src/connect_things/connect_button_save.rs @@ -5,12 +5,12 @@ use std::rc::Rc; use gtk::prelude::*; use gtk::{Button, Entry}; +use crate::flg; use czkawka_core::common_traits::SaveResults; -use czkawka_core::fl; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::BottomButtonsEnum; -use crate::localizer::generate_translation_hashmap; +use crate::localizer_core::generate_translation_hashmap; use crate::notebook_enums::*; pub fn connect_button_save(gui_data: &GuiData) { @@ -101,7 +101,7 @@ fn post_save_things( entry_info: &Entry, buttons_save: &Button, ) { - entry_info.set_text(fl!("save_results_to_file", generate_translation_hashmap(vec![("name", file_name.to_string())])).as_str()); + entry_info.set_text(flg!("save_results_to_file", generate_translation_hashmap(vec![("name", file_name.to_string())])).as_str()); // Set state { buttons_save.hide(); diff --git a/czkawka_gui/src/connect_things/connect_button_search.rs b/czkawka_gui/src/connect_things/connect_button_search.rs index 69c4165..bdbfd86 100644 --- a/czkawka_gui/src/connect_things/connect_button_search.rs +++ b/czkawka_gui/src/connect_things/connect_button_search.rs @@ -25,7 +25,7 @@ use crate::help_combo_box::{ use crate::help_functions::*; use crate::notebook_enums::*; use crate::taskbar_progress::tbp_flags::TBPF_NOPROGRESS; -use crate::{fl, DEFAULT_MAXIMAL_FILE_SIZE, DEFAULT_MINIMAL_CACHE_SIZE, DEFAULT_MINIMAL_FILE_SIZE}; +use crate::{flg, DEFAULT_MAXIMAL_FILE_SIZE, DEFAULT_MINIMAL_CACHE_SIZE, DEFAULT_MINIMAL_FILE_SIZE}; #[allow(clippy::too_many_arguments)] pub fn connect_button_search( @@ -145,7 +145,7 @@ pub fn connect_button_search( button_settings.set_sensitive(false); button_app_info.set_sensitive(false); - entry_info.set_text(&fl!("searching_for_data")); + entry_info.set_text(&flg!("searching_for_data")); // Resets progress bars progress_bar_all_stages.set_fraction(0 as f64); @@ -424,7 +424,7 @@ pub fn connect_button_search( &buttons_array, &buttons_names, ); - entry_info.set_text(&fl!("search_not_choosing_any_music")); + entry_info.set_text(&flg!("search_not_choosing_any_music")); show_dialog.store(false, Ordering::Relaxed); } } diff --git a/czkawka_gui/src/connect_things/connect_change_language.rs b/czkawka_gui/src/connect_things/connect_change_language.rs index daff69f..ff42035 100644 --- a/czkawka_gui/src/connect_things/connect_change_language.rs +++ b/czkawka_gui/src/connect_things/connect_change_language.rs @@ -3,7 +3,7 @@ use i18n_embed::unic_langid::LanguageIdentifier; use i18n_embed::DesktopLanguageRequester; use crate::language_functions::get_language_from_combo_box_text; -use crate::{GuiData, LANGUAGES_ALL}; +use crate::{localizer_gui, GuiData, LANGUAGES_ALL}; // use i18n_embed::{DesktopLanguageRequester, Localizer}; @@ -18,7 +18,10 @@ pub fn connect_change_language(gui_data: &GuiData) { } fn change_language(gui_data: &GuiData) { - let localizers = vec![("czkawka_gui", czkawka_core::localizer::localizer())]; + let localizers = vec![ + ("czkawka_core", czkawka_core::localizer_core::localizer_core()), + ("czkawka_gui", localizer_gui::localizer_gui()), + ]; let lang_short = get_language_from_combo_box_text(gui_data.settings.combo_box_settings_language.active_text().unwrap().to_string()).short_text; diff --git a/czkawka_gui/src/connect_things/connect_popovers.rs b/czkawka_gui/src/connect_things/connect_popovers.rs index c8aeb5c..3c04f0b 100644 --- a/czkawka_gui/src/connect_things/connect_popovers.rs +++ b/czkawka_gui/src/connect_things/connect_popovers.rs @@ -4,9 +4,9 @@ use regex::Regex; use czkawka_core::common::Common; +use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; -use czkawka_core::fl; // File length variable allows users to choose duplicates which have shorter file name // e.g. 'tar.gz' will be selected instead 'tar.gz (copy)' etc. @@ -244,21 +244,21 @@ fn popover_custom_select_unselect( popover.popdown(); let window_title = match select_things { - false => fl!("popover_custom_mode_unselect"), - true => fl!("popover_custom_mode_select"), + false => flg!("popover_custom_mode_unselect"), + true => flg!("popover_custom_mode_select"), }; // Dialog for select/unselect items { let dialog = gtk::Dialog::builder().title(&window_title).transient_for(window_main).modal(true).build(); - dialog.add_button(&fl!("general_ok_button"), ResponseType::Ok); - dialog.add_button(&fl!("general_close_button"), ResponseType::Cancel); + dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); + dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); - let check_button_path = gtk::CheckButton::builder().label(&fl!("popover_custom_regex_path_label")).build(); - let check_button_name = gtk::CheckButton::builder().label(&fl!("popover_custom_regex_name_label")).build(); - let check_button_rust_regex = gtk::CheckButton::builder().label(&fl!("popover_custom_regex_regex_label")).build(); + let check_button_path = gtk::CheckButton::builder().label(&flg!("popover_custom_regex_path_label")).build(); + let check_button_name = gtk::CheckButton::builder().label(&flg!("popover_custom_regex_name_label")).build(); + let check_button_rust_regex = gtk::CheckButton::builder().label(&flg!("popover_custom_regex_regex_label")).build(); - let check_button_select_not_all_results = gtk::CheckButton::builder().label(&fl!("popover_custom_all_in_group_label")).build(); + let check_button_select_not_all_results = gtk::CheckButton::builder().label(&flg!("popover_custom_all_in_group_label")).build(); check_button_select_not_all_results.set_active(true); let entry_path = gtk::Entry::new(); @@ -270,16 +270,16 @@ fn popover_custom_select_unselect( // Tooltips { - check_button_path.set_tooltip_text(Some(&fl!("popover_custom_path_check_button_entry_tooltip"))); - entry_path.set_tooltip_text(Some(&fl!("popover_custom_path_check_button_entry_tooltip"))); + check_button_path.set_tooltip_text(Some(&flg!("popover_custom_path_check_button_entry_tooltip"))); + entry_path.set_tooltip_text(Some(&flg!("popover_custom_path_check_button_entry_tooltip"))); - check_button_name.set_tooltip_text(Some(&fl!("popover_custom_name_check_button_entry_tooltip"))); - entry_name.set_tooltip_text(Some(&fl!("popover_custom_name_check_button_entry_tooltip"))); + check_button_name.set_tooltip_text(Some(&flg!("popover_custom_name_check_button_entry_tooltip"))); + entry_name.set_tooltip_text(Some(&flg!("popover_custom_name_check_button_entry_tooltip"))); - check_button_rust_regex.set_tooltip_text(Some(&fl!("popover_custom_regex_check_button_entry_tooltip"))); - entry_rust_regex.set_tooltip_text(Some(&fl!("popover_custom_regex_check_button_entry_tooltip"))); + check_button_rust_regex.set_tooltip_text(Some(&flg!("popover_custom_regex_check_button_entry_tooltip"))); + entry_rust_regex.set_tooltip_text(Some(&flg!("popover_custom_regex_check_button_entry_tooltip"))); - check_button_select_not_all_results.set_tooltip_text(Some(&fl!("popover_custom_not_all_check_button_tooltip"))); + check_button_select_not_all_results.set_tooltip_text(Some(&flg!("popover_custom_not_all_check_button_tooltip"))); } { let label_regex_valid = label_regex_valid.clone(); @@ -290,8 +290,8 @@ fn popover_custom_select_unselect( message = "".to_string(); } else { match Regex::new(&text_to_check) { - Ok(_) => message = fl!("popover_valid_regex"), - Err(_) => message = fl!("popover_invalid_regex"), + Ok(_) => message = flg!("popover_valid_regex"), + Err(_) => message = flg!("popover_invalid_regex"), } } diff --git a/czkawka_gui/src/connect_things/connect_progress_window.rs b/czkawka_gui/src/connect_things/connect_progress_window.rs index 078d146..a7223d6 100644 --- a/czkawka_gui/src/connect_things/connect_progress_window.rs +++ b/czkawka_gui/src/connect_things/connect_progress_window.rs @@ -3,10 +3,10 @@ use gtk::prelude::*; use czkawka_core::{big_file, broken_files, common_dir_traversal, similar_images, similar_videos, temporary}; +use crate::flg; use crate::gui_structs::gui_data::GuiData; -use crate::localizer::generate_translation_hashmap; +use crate::localizer_core::generate_translation_hashmap; use crate::taskbar_progress::tbp_flags::TBPF_INDETERMINATE; -use czkawka_core::fl; #[allow(clippy::too_many_arguments)] pub fn connect_progress_window( @@ -43,7 +43,7 @@ pub fn connect_progress_window( progress_bar_current_stage.hide(); // progress_bar_all_stages.hide(); progress_bar_all_stages.set_fraction(0 as f64); - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_size", generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) )); @@ -66,7 +66,7 @@ pub fn connect_progress_window( taskbar_state.borrow().set_progress_value(1, 1 + item.max_stage as u64); } - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_analyzed_partial_hash", generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) )); @@ -86,7 +86,7 @@ pub fn connect_progress_window( taskbar_state.borrow().set_progress_value(2, 1 + item.max_stage as u64); } - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_analyzed_full_hash", generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) )); @@ -100,7 +100,7 @@ pub fn connect_progress_window( label_stage.show(); grid_progress_stages.hide(); - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_name", generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) )); @@ -110,7 +110,7 @@ pub fn connect_progress_window( label_stage.show(); grid_progress_stages.hide(); - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_size", generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) )); @@ -130,7 +130,7 @@ pub fn connect_progress_window( let taskbar_state = gui_data.taskbar_state.clone(); let future = async move { while let Some(item) = futures_receiver_empty_files.next().await { - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_general_file", generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) )); @@ -145,7 +145,7 @@ pub fn connect_progress_window( let taskbar_state = gui_data.taskbar_state.clone(); let future = async move { while let Some(item) = futures_receiver_empty_folder.next().await { - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_empty_folders", generate_translation_hashmap(vec![("folder_number", item.entries_checked.to_string())]) )); @@ -160,7 +160,7 @@ pub fn connect_progress_window( let taskbar_state = gui_data.taskbar_state.clone(); let future = async move { while let Some(item) = futures_receiver_big_files.next().await { - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_general_file", generate_translation_hashmap(vec![("file_number", item.files_checked.to_string())]) )); @@ -180,7 +180,7 @@ pub fn connect_progress_window( match item.current_stage { 0 => { progress_bar_current_stage.hide(); - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_general_file", generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) )); @@ -200,7 +200,7 @@ pub fn connect_progress_window( progress_bar_current_stage.set_fraction(0f64); taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); } - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_music_tags", generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) )); @@ -218,7 +218,7 @@ pub fn connect_progress_window( progress_bar_current_stage.set_fraction(0f64); taskbar_state.borrow().set_progress_value(2, (item.max_stage + 1) as u64); } - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_music_tags_end", generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) )); @@ -242,7 +242,7 @@ pub fn connect_progress_window( match item.current_stage { 0 => { progress_bar_current_stage.hide(); - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_general_file", generate_translation_hashmap(vec![("file_number", item.images_checked.to_string())]) )); @@ -262,7 +262,7 @@ pub fn connect_progress_window( progress_bar_current_stage.set_fraction(0f64); taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); } - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_image", generate_translation_hashmap(vec![("file_checked", item.images_checked.to_string()), ("all_files", item.images_to_check.to_string())]) )); @@ -281,7 +281,7 @@ pub fn connect_progress_window( progress_bar_current_stage.set_fraction(0f64); taskbar_state.borrow().set_progress_value(2, (item.max_stage + 1) as u64); } - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_comparing_image_hashes", generate_translation_hashmap(vec![("file_checked", item.images_checked.to_string()), ("all_files", item.images_to_check.to_string())]) )); @@ -305,7 +305,7 @@ pub fn connect_progress_window( match item.current_stage { 0 => { progress_bar_current_stage.hide(); - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_general_file", generate_translation_hashmap(vec![("file_number", item.videos_checked.to_string())]) )); @@ -325,7 +325,7 @@ pub fn connect_progress_window( progress_bar_current_stage.set_fraction(0f64); taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); } - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_video", generate_translation_hashmap(vec![("file_checked", item.videos_checked.to_string()), ("all_files", item.videos_to_check.to_string())]) )); @@ -344,7 +344,7 @@ pub fn connect_progress_window( let taskbar_state = gui_data.taskbar_state.clone(); let future = async move { while let Some(item) = futures_receiver_temporary.next().await { - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_general_file", generate_translation_hashmap(vec![("file_number", item.files_checked.to_string())]) )); @@ -359,7 +359,7 @@ pub fn connect_progress_window( let taskbar_state = gui_data.taskbar_state.clone(); let future = async move { while let Some(item) = futures_receiver_invalid_symlinks.next().await { - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_general_file", generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) )); @@ -379,7 +379,7 @@ pub fn connect_progress_window( match item.current_stage { 0 => { progress_bar_current_stage.hide(); - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_general_file", generate_translation_hashmap(vec![("file_number", item.files_checked.to_string())]) )); @@ -398,7 +398,7 @@ pub fn connect_progress_window( progress_bar_current_stage.set_fraction(0f64); taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); } - label_stage.set_text(&fl!( + label_stage.set_text(&flg!( "progress_scanning_broken_files", generate_translation_hashmap(vec![("file_checked", item.files_checked.to_string()), ("all_files", item.files_to_check.to_string())]) )); diff --git a/czkawka_gui/src/connect_things/connect_selection_of_directories.rs b/czkawka_gui/src/connect_things/connect_selection_of_directories.rs index c130557..9807415 100644 --- a/czkawka_gui/src/connect_things/connect_selection_of_directories.rs +++ b/czkawka_gui/src/connect_things/connect_selection_of_directories.rs @@ -3,9 +3,9 @@ use std::path::PathBuf; use gtk::prelude::*; use gtk::{ResponseType, TreeView, Window}; +use crate::flg; #[cfg(target_family = "windows")] use czkawka_core::common::Common; -use czkawka_core::fl; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::{get_dialog_box_child, get_list_store, ColumnsExcludedDirectory, ColumnsIncludedDirectory}; @@ -81,9 +81,9 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) { fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_items: bool) { let folders_to = if excluded_items { - fl!("exclude_folders_dialog_title") + flg!("exclude_folders_dialog_title") } else { - fl!("include_folders_dialog_title") + flg!("include_folders_dialog_title") }; let file_chooser = gtk::FileChooserDialog::builder() @@ -92,8 +92,8 @@ fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_i .transient_for(window_main) .modal(true) .build(); - file_chooser.add_button(&fl!("general_ok_button"), ResponseType::Ok); - file_chooser.add_button(&fl!("general_close_button"), ResponseType::Cancel); + file_chooser.add_button(&flg!("general_ok_button"), ResponseType::Ok); + file_chooser.add_button(&flg!("general_close_button"), ResponseType::Cancel); file_chooser.set_select_multiple(true); file_chooser.show_all(); @@ -140,12 +140,12 @@ fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_i fn add_manually_directories(window_main: &Window, tree_view: &TreeView, excluded_items: bool) { let dialog = gtk::Dialog::builder() - .title(&fl!("include_manually_directories_dialog_title")) + .title(&flg!("include_manually_directories_dialog_title")) .transient_for(window_main) .modal(true) .build(); - dialog.add_button(&fl!("general_ok_button"), ResponseType::Ok); - dialog.add_button(&fl!("general_close_button"), ResponseType::Cancel); + dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); + dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); let entry: gtk::Entry = gtk::Entry::new(); diff --git a/czkawka_gui/src/connect_things/connect_settings.rs b/czkawka_gui/src/connect_things/connect_settings.rs index f1eef58..cfe4bd7 100644 --- a/czkawka_gui/src/connect_things/connect_settings.rs +++ b/czkawka_gui/src/connect_things/connect_settings.rs @@ -7,9 +7,9 @@ use gtk::{LabelBuilder, ResponseType, Window}; use image::imageops::FilterType; use img_hash::HashAlg; +use crate::flg; use czkawka_core::common_messages::Messages; use czkawka_core::duplicate::HashType; -use czkawka_core::fl; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::get_dialog_box_child; @@ -95,7 +95,7 @@ pub fn connect_settings(gui_data: &GuiData) { let entry_settings_cache_file_minimal_size = gui_data.settings.entry_settings_cache_file_minimal_size.clone(); button_settings_duplicates_clear_cache.connect_clicked(move |_| { - let dialog = create_clear_cache_dialog(fl!("cache_clear_duplicates_title"), &settings_window); + let dialog = create_clear_cache_dialog(flg!("cache_clear_duplicates_title"), &settings_window); dialog.show_all(); let text_view_errors = text_view_errors.clone(); @@ -123,7 +123,7 @@ pub fn connect_settings(gui_data: &GuiData) { } } - messages.messages.push(fl!("cache_properly_cleared")); + messages.messages.push(flg!("cache_properly_cleared")); text_view_errors.buffer().unwrap().set_text(messages.create_messages_text().as_str()); } } @@ -137,7 +137,7 @@ pub fn connect_settings(gui_data: &GuiData) { let text_view_errors = gui_data.text_view_errors.clone(); button_settings_similar_images_clear_cache.connect_clicked(move |_| { - let dialog = create_clear_cache_dialog(fl!("cache_clear_similar_images_title"), &settings_window); + let dialog = create_clear_cache_dialog(flg!("cache_clear_similar_images_title"), &settings_window); dialog.show_all(); let text_view_errors = text_view_errors.clone(); @@ -163,7 +163,7 @@ pub fn connect_settings(gui_data: &GuiData) { } } - messages.messages.push(fl!("cache_properly_cleared")); + messages.messages.push(flg!("cache_properly_cleared")); text_view_errors.buffer().unwrap().set_text(messages.create_messages_text().as_str()); } dialog.close(); @@ -176,7 +176,7 @@ pub fn connect_settings(gui_data: &GuiData) { let text_view_errors = gui_data.text_view_errors.clone(); button_settings_similar_videos_clear_cache.connect_clicked(move |_| { - let dialog = create_clear_cache_dialog(fl!("cache_clear_similar_videos_title"), &settings_window); + let dialog = create_clear_cache_dialog(flg!("cache_clear_similar_videos_title"), &settings_window); dialog.show_all(); let text_view_errors = text_view_errors.clone(); @@ -188,7 +188,7 @@ pub fn connect_settings(gui_data: &GuiData) { czkawka_core::similar_videos::save_hashes_to_file(&cache_entries, &mut messages, false); } - messages.messages.push(fl!("cache_properly_cleared")); + messages.messages.push(flg!("cache_properly_cleared")); text_view_errors.buffer().unwrap().set_text(messages.create_messages_text().as_str()); } dialog.close(); @@ -200,13 +200,13 @@ pub fn connect_settings(gui_data: &GuiData) { fn create_clear_cache_dialog(title_str: String, window_settings: &Window) -> gtk::Dialog { let dialog = gtk::Dialog::builder().title(&title_str).modal(true).transient_for(window_settings).build(); - dialog.add_button(&fl!("general_ok_button"), ResponseType::Ok); - dialog.add_button(&fl!("general_close_button"), ResponseType::Cancel); + dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); + dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); - let label = LabelBuilder::new().label(&fl!("cache_clear_message_label_1")).build(); - let label2 = LabelBuilder::new().label(&fl!("cache_clear_message_label_2")).build(); - let label3 = LabelBuilder::new().label(&fl!("cache_clear_message_label_3")).build(); - let label4 = LabelBuilder::new().label(&fl!("cache_clear_message_label_4")).build(); + let label = LabelBuilder::new().label(&flg!("cache_clear_message_label_1")).build(); + let label2 = LabelBuilder::new().label(&flg!("cache_clear_message_label_2")).build(); + let label3 = LabelBuilder::new().label(&flg!("cache_clear_message_label_3")).build(); + let label4 = LabelBuilder::new().label(&flg!("cache_clear_message_label_4")).build(); let internal_box = get_dialog_box_child(&dialog); internal_box.add(&label); diff --git a/czkawka_gui/src/gui_structs/gui_about.rs b/czkawka_gui/src/gui_structs/gui_about.rs index 1963068..6fbcb61 100644 --- a/czkawka_gui/src/gui_structs/gui_about.rs +++ b/czkawka_gui/src/gui_structs/gui_about.rs @@ -2,7 +2,7 @@ use gdk::gdk_pixbuf::Pixbuf; use gtk::prelude::*; use gtk::{Builder, Window}; -use czkawka_core::fl; +use crate::flg; #[derive(Clone)] pub struct GuiAbout { @@ -81,17 +81,17 @@ impl GuiAbout { } pub fn update_language(&self) { let mut comment_text: String = "2020 - 2022 Rafał Mikrut(qarmin)\n\n".to_string(); - comment_text += &fl!("about_window_motto"); + comment_text += &flg!("about_window_motto"); self.about_dialog.set_comments(Some(&comment_text)); - self.button_repository.set_tooltip_text(Some(&fl!("about_repository_button_tooltip"))); - self.button_donation.set_tooltip_text(Some(&fl!("about_donation_button_tooltip"))); - self.button_instruction.set_tooltip_text(Some(&fl!("about_instruction_button_tooltip"))); - self.button_translation.set_tooltip_text(Some(&fl!("about_translation_button_tooltip"))); + self.button_repository.set_tooltip_text(Some(&flg!("about_repository_button_tooltip"))); + self.button_donation.set_tooltip_text(Some(&flg!("about_donation_button_tooltip"))); + self.button_instruction.set_tooltip_text(Some(&flg!("about_instruction_button_tooltip"))); + self.button_translation.set_tooltip_text(Some(&flg!("about_translation_button_tooltip"))); - self.button_repository.set_label(&fl!("about_repository_button")); - self.button_donation.set_label(&fl!("about_donation_button")); - self.button_instruction.set_label(&fl!("about_instruction_button")); - self.button_translation.set_label(&fl!("about_translation_button")); + self.button_repository.set_label(&flg!("about_repository_button")); + self.button_donation.set_label(&flg!("about_donation_button")); + self.button_instruction.set_label(&flg!("about_instruction_button")); + self.button_translation.set_label(&flg!("about_translation_button")); } } diff --git a/czkawka_gui/src/gui_structs/gui_bottom_buttons.rs b/czkawka_gui/src/gui_structs/gui_bottom_buttons.rs index 0458169..c41f8fb 100644 --- a/czkawka_gui/src/gui_structs/gui_bottom_buttons.rs +++ b/czkawka_gui/src/gui_structs/gui_bottom_buttons.rs @@ -1,8 +1,8 @@ use gtk::prelude::*; use gtk::{Bin, Widget}; +use crate::flg; use crate::help_functions::{get_custom_label_from_button_with_image, BottomButtonsEnum}; -use czkawka_core::fl; #[derive(Clone)] pub struct GuiBottomButtons { @@ -73,31 +73,31 @@ impl GuiBottomButtons { } } pub fn update_language(&self) { - get_custom_label_from_button_with_image(&self.buttons_search.clone().upcast::()).set_text(&fl!("bottom_search_button")); - get_custom_label_from_button_with_image(&self.buttons_select.clone().upcast::()).set_text(&fl!("bottom_select_button")); - get_custom_label_from_button_with_image(&self.buttons_delete.clone().upcast::()).set_text(&fl!("bottom_delete_button")); - get_custom_label_from_button_with_image(&self.buttons_save.clone().upcast::()).set_text(&fl!("bottom_save_button")); - get_custom_label_from_button_with_image(&self.buttons_symlink.clone().upcast::()).set_text(&fl!("bottom_symlink_button")); - get_custom_label_from_button_with_image(&self.buttons_hardlink.clone().upcast::()).set_text(&fl!("bottom_hardlink_button")); - get_custom_label_from_button_with_image(&self.buttons_move.clone().upcast::()).set_text(&fl!("bottom_move_button")); + get_custom_label_from_button_with_image(&self.buttons_search.clone().upcast::()).set_text(&flg!("bottom_search_button")); + get_custom_label_from_button_with_image(&self.buttons_select.clone().upcast::()).set_text(&flg!("bottom_select_button")); + get_custom_label_from_button_with_image(&self.buttons_delete.clone().upcast::()).set_text(&flg!("bottom_delete_button")); + get_custom_label_from_button_with_image(&self.buttons_save.clone().upcast::()).set_text(&flg!("bottom_save_button")); + get_custom_label_from_button_with_image(&self.buttons_symlink.clone().upcast::()).set_text(&flg!("bottom_symlink_button")); + get_custom_label_from_button_with_image(&self.buttons_hardlink.clone().upcast::()).set_text(&flg!("bottom_hardlink_button")); + get_custom_label_from_button_with_image(&self.buttons_move.clone().upcast::()).set_text(&flg!("bottom_move_button")); - // get_custom_label_from_button_with_image(&self.buttons_search.clone()).set_text(&fl!("bottom_search_button")); - // get_custom_label_from_button_with_image(&self.buttons_select.clone()).set_text(&fl!("bottom_select_button")); - // get_custom_label_from_button_with_image(&self.buttons_delete.clone()).set_text(&fl!("bottom_delete_button")); - // get_custom_label_from_button_with_image(&self.buttons_save.clone()).set_text(&fl!("bottom_save_button")); - // get_custom_label_from_button_with_image(&self.buttons_symlink.clone()).set_text(&fl!("bottom_symlink_button")); - // get_custom_label_from_button_with_image(&self.buttons_hardlink.clone()).set_text(&fl!("bottom_hardlink_button")); - // get_custom_label_from_button_with_image(&self.buttons_move.clone()).set_text(&fl!("bottom_move_button")); + // get_custom_label_from_button_with_image(&self.buttons_search.clone()).set_text(&flg!("bottom_search_button")); + // get_custom_label_from_button_with_image(&self.buttons_select.clone()).set_text(&flg!("bottom_select_button")); + // get_custom_label_from_button_with_image(&self.buttons_delete.clone()).set_text(&flg!("bottom_delete_button")); + // get_custom_label_from_button_with_image(&self.buttons_save.clone()).set_text(&flg!("bottom_save_button")); + // get_custom_label_from_button_with_image(&self.buttons_symlink.clone()).set_text(&flg!("bottom_symlink_button")); + // get_custom_label_from_button_with_image(&self.buttons_hardlink.clone()).set_text(&flg!("bottom_hardlink_button")); + // get_custom_label_from_button_with_image(&self.buttons_move.clone()).set_text(&flg!("bottom_move_button")); - self.buttons_search.set_tooltip_text(Some(&fl!("bottom_search_button_tooltip"))); - self.buttons_select.set_tooltip_text(Some(&fl!("bottom_select_button_tooltip"))); - self.buttons_delete.set_tooltip_text(Some(&fl!("bottom_delete_button_tooltip"))); - self.buttons_save.set_tooltip_text(Some(&fl!("bottom_save_button_tooltip"))); - self.buttons_symlink.set_tooltip_text(Some(&fl!("bottom_symlink_button_tooltip"))); - self.buttons_hardlink.set_tooltip_text(Some(&fl!("bottom_hardlink_button_tooltip"))); - self.buttons_move.set_tooltip_text(Some(&fl!("bottom_move_button_tooltip"))); + self.buttons_search.set_tooltip_text(Some(&flg!("bottom_search_button_tooltip"))); + self.buttons_select.set_tooltip_text(Some(&flg!("bottom_select_button_tooltip"))); + self.buttons_delete.set_tooltip_text(Some(&flg!("bottom_delete_button_tooltip"))); + self.buttons_save.set_tooltip_text(Some(&flg!("bottom_save_button_tooltip"))); + self.buttons_symlink.set_tooltip_text(Some(&flg!("bottom_symlink_button_tooltip"))); + self.buttons_hardlink.set_tooltip_text(Some(&flg!("bottom_hardlink_button_tooltip"))); + self.buttons_move.set_tooltip_text(Some(&flg!("bottom_move_button_tooltip"))); - self.buttons_show_errors.set_tooltip_text(Some(&fl!("bottom_show_errors_tooltip"))); - self.buttons_show_upper_notebook.set_tooltip_text(Some(&fl!("bottom_show_upper_notebook_tooltip"))); + self.buttons_show_errors.set_tooltip_text(Some(&flg!("bottom_show_errors_tooltip"))); + self.buttons_show_upper_notebook.set_tooltip_text(Some(&flg!("bottom_show_upper_notebook_tooltip"))); } } diff --git a/czkawka_gui/src/gui_structs/gui_compare_images.rs b/czkawka_gui/src/gui_structs/gui_compare_images.rs index 626ab1f..2b250d1 100644 --- a/czkawka_gui/src/gui_structs/gui_compare_images.rs +++ b/czkawka_gui/src/gui_structs/gui_compare_images.rs @@ -1,4 +1,4 @@ -use czkawka_core::fl; +use crate::flg; use gtk::prelude::*; use gtk::{Builder, TreePath}; use std::cell::RefCell; @@ -34,7 +34,7 @@ impl GuiCompareImages { let builder = Builder::from_string(glade_src.as_str()); let window_compare: gtk::Window = builder.object("window_compare").unwrap(); - window_compare.set_title(&fl!("window_compare_images")); + window_compare.set_title(&flg!("window_compare_images")); window_compare.set_modal(true); window_compare.set_transient_for(Some(window_main)); @@ -75,6 +75,6 @@ impl GuiCompareImages { } } pub fn update_language(&self) { - self.window_compare.set_title(&fl!("window_compare_images")); + self.window_compare.set_title(&flg!("window_compare_images")); } } diff --git a/czkawka_gui/src/gui_structs/gui_data.rs b/czkawka_gui/src/gui_structs/gui_data.rs index db87d03..4c860cd 100644 --- a/czkawka_gui/src/gui_structs/gui_data.rs +++ b/czkawka_gui/src/gui_structs/gui_data.rs @@ -7,12 +7,12 @@ use gdk::gdk_pixbuf::Pixbuf; use gtk::prelude::*; use gtk::Builder; +use crate::flg; use czkawka_core::big_file::BigFile; use czkawka_core::broken_files::BrokenFiles; use czkawka_core::duplicate::DuplicateFinder; use czkawka_core::empty_files::EmptyFiles; use czkawka_core::empty_folder::EmptyFolder; -use czkawka_core::fl; use czkawka_core::invalid_symlinks::InvalidSymlinks; use czkawka_core::same_music::SameMusic; use czkawka_core::similar_images::SimilarImages; @@ -93,7 +93,7 @@ impl GuiData { //// Windows let window_main: gtk::Window = builder.object("window_main").unwrap(); - window_main.set_title(&fl!("window_main_title")); + window_main.set_title(&flg!("window_main_title")); window_main.show_all(); let pixbuf = Pixbuf::from_read(std::io::BufReader::new(&ICON_ABOUT[..])).unwrap(); @@ -193,7 +193,7 @@ impl GuiData { } pub fn update_language(&self) { - self.window_main.set_title(&fl!("window_main_title")); + self.window_main.set_title(&flg!("window_main_title")); self.main_notebook.update_language(); self.upper_notebook.update_language(); diff --git a/czkawka_gui/src/gui_structs/gui_header.rs b/czkawka_gui/src/gui_structs/gui_header.rs index bd8fb36..54229c5 100644 --- a/czkawka_gui/src/gui_structs/gui_header.rs +++ b/czkawka_gui/src/gui_structs/gui_header.rs @@ -1,6 +1,6 @@ use gtk::prelude::*; -use czkawka_core::fl; +use crate::flg; #[derive(Clone)] pub struct GuiHeader { @@ -17,7 +17,7 @@ impl GuiHeader { } pub fn update_language(&self) { - self.button_settings.set_tooltip_text(Some(&fl!("header_setting_button_tooltip"))); - self.button_app_info.set_tooltip_text(Some(&fl!("header_about_button_tooltip"))); + self.button_settings.set_tooltip_text(Some(&flg!("header_setting_button_tooltip"))); + self.button_app_info.set_tooltip_text(Some(&flg!("header_about_button_tooltip"))); } } diff --git a/czkawka_gui/src/gui_structs/gui_main_notebook.rs b/czkawka_gui/src/gui_structs/gui_main_notebook.rs index 385f3e6..66201a1 100644 --- a/czkawka_gui/src/gui_structs/gui_main_notebook.rs +++ b/czkawka_gui/src/gui_structs/gui_main_notebook.rs @@ -1,12 +1,13 @@ use czkawka_core::common_dir_traversal::CheckingMethod; +use czkawka_core::localizer_core::{fnc_get_similarity_minimal, fnc_get_similarity_very_high}; use gtk::prelude::*; use gtk::{EventControllerKey, TreeView}; use czkawka_core::similar_images::{get_string_from_similarity, Similarity, SIMILAR_VALUES}; +use crate::flg; use crate::help_combo_box::{DUPLICATES_CHECK_METHOD_COMBO_BOX, IMAGES_HASH_SIZE_COMBO_BOX}; use crate::notebook_enums::{NotebookMainEnum, NUMBER_OF_NOTEBOOK_MAIN_TABS}; -use czkawka_core::fl; #[derive(Clone)] pub struct GuiMainNotebook { @@ -316,52 +317,52 @@ impl GuiMainNotebook { } pub fn update_language(&self) { - self.check_button_music_title.set_label(&fl!("music_title_checkbox")); - self.check_button_music_artist.set_label(&fl!("music_artist_checkbox")); - self.check_button_music_album_title.set_label(&fl!("music_album_title_checkbox")); - self.check_button_music_album_artist.set_label(&fl!("music_album_artist_checkbox")); - self.check_button_music_year.set_label(&fl!("music_year_checkbox")); - self.check_button_music_approximate_comparison.set_label(&fl!("music_comparison_checkbox")); + self.check_button_music_title.set_label(&flg!("music_title_checkbox")); + self.check_button_music_artist.set_label(&flg!("music_artist_checkbox")); + self.check_button_music_album_title.set_label(&flg!("music_album_title_checkbox")); + self.check_button_music_album_artist.set_label(&flg!("music_album_artist_checkbox")); + self.check_button_music_year.set_label(&flg!("music_year_checkbox")); + self.check_button_music_approximate_comparison.set_label(&flg!("music_comparison_checkbox")); self.check_button_music_approximate_comparison - .set_tooltip_text(Some(&fl!("music_comparison_checkbox_tooltip"))); + .set_tooltip_text(Some(&flg!("music_comparison_checkbox_tooltip"))); - self.label_duplicate_check_method.set_label(&fl!("main_label_check_method")); - self.label_duplicate_hash_type.set_label(&fl!("main_label_hash_type")); - self.label_big_shown_files.set_label(&fl!("main_label_shown_files")); - self.label_image_resize_algorithm.set_label(&fl!("main_label_resize_algorithm")); - self.label_image_hash_type.set_label(&fl!("main_label_hash_type")); - self.label_image_hash_size.set_label(&fl!("main_label_hash_size")); - self.label_image_similarity.set_label(&fl!("main_label_similarity")); - self.label_image_similarity_max.set_label(&fl!("core_similarity_very_high")); - self.label_video_similarity.set_label(&fl!("main_label_similarity")); - self.label_video_similarity_min.set_label(&fl!("core_similarity_minimal")); - self.label_video_similarity_max.set_label(&fl!("core_similarity_very_high")); + self.label_duplicate_check_method.set_label(&flg!("main_label_check_method")); + self.label_duplicate_hash_type.set_label(&flg!("main_label_hash_type")); + self.label_big_shown_files.set_label(&flg!("main_label_shown_files")); + self.label_image_resize_algorithm.set_label(&flg!("main_label_resize_algorithm")); + self.label_image_hash_type.set_label(&flg!("main_label_hash_type")); + self.label_image_hash_size.set_label(&flg!("main_label_hash_size")); + self.label_image_similarity.set_label(&flg!("main_label_similarity")); + self.label_image_similarity_max.set_label(&fnc_get_similarity_very_high()); + self.label_video_similarity.set_label(&flg!("main_label_similarity")); + self.label_video_similarity_min.set_label(&fnc_get_similarity_minimal()); + self.label_video_similarity_max.set_label(&fnc_get_similarity_very_high()); - self.label_duplicate_check_method.set_tooltip_text(Some(&fl!("duplicate_check_method_tooltip"))); - self.combo_box_duplicate_check_method.set_tooltip_text(Some(&fl!("duplicate_check_method_tooltip"))); - self.label_duplicate_hash_type.set_tooltip_text(Some(&fl!("duplicate_hash_type_tooltip"))); - self.combo_box_duplicate_hash_type.set_tooltip_text(Some(&fl!("duplicate_hash_type_tooltip"))); + self.label_duplicate_check_method.set_tooltip_text(Some(&flg!("duplicate_check_method_tooltip"))); + self.combo_box_duplicate_check_method.set_tooltip_text(Some(&flg!("duplicate_check_method_tooltip"))); + self.label_duplicate_hash_type.set_tooltip_text(Some(&flg!("duplicate_hash_type_tooltip"))); + self.combo_box_duplicate_hash_type.set_tooltip_text(Some(&flg!("duplicate_hash_type_tooltip"))); - self.combo_box_image_hash_size.set_tooltip_text(Some(&fl!("image_hash_size_tooltip"))); - self.label_image_hash_size.set_tooltip_text(Some(&fl!("image_hash_size_tooltip"))); + self.combo_box_image_hash_size.set_tooltip_text(Some(&flg!("image_hash_size_tooltip"))); + self.label_image_hash_size.set_tooltip_text(Some(&flg!("image_hash_size_tooltip"))); - self.combo_box_image_resize_algorithm.set_tooltip_text(Some(&fl!("image_resize_filter_tooltip"))); - self.label_image_resize_algorithm.set_tooltip_text(Some(&fl!("image_resize_filter_tooltip"))); + self.combo_box_image_resize_algorithm.set_tooltip_text(Some(&flg!("image_resize_filter_tooltip"))); + self.label_image_resize_algorithm.set_tooltip_text(Some(&flg!("image_resize_filter_tooltip"))); - self.combo_box_image_hash_algorithm.set_tooltip_text(Some(&fl!("image_hash_alg_tooltip"))); - self.label_image_hash_type.set_tooltip_text(Some(&fl!("image_hash_alg_tooltip"))); + self.combo_box_image_hash_algorithm.set_tooltip_text(Some(&flg!("image_hash_alg_tooltip"))); + self.label_image_hash_type.set_tooltip_text(Some(&flg!("image_hash_alg_tooltip"))); self.check_button_image_ignore_same_size - .set_tooltip_text(Some(&fl!("check_button_general_same_size_tooltip"))); + .set_tooltip_text(Some(&flg!("check_button_general_same_size_tooltip"))); self.check_button_video_ignore_same_size - .set_tooltip_text(Some(&fl!("check_button_general_same_size_tooltip"))); - self.check_button_image_ignore_same_size.set_label(&fl!("check_button_general_same_size")); - self.check_button_video_ignore_same_size.set_label(&fl!("check_button_general_same_size")); + .set_tooltip_text(Some(&flg!("check_button_general_same_size_tooltip"))); + self.check_button_image_ignore_same_size.set_label(&flg!("check_button_general_same_size")); + self.check_button_video_ignore_same_size.set_label(&flg!("check_button_general_same_size")); - self.check_button_image_fast_compare.set_label(&fl!("main_notebook_image_fast_compare")); + self.check_button_image_fast_compare.set_label(&flg!("main_notebook_image_fast_compare")); self.check_button_image_fast_compare - .set_tooltip_text(Some(&fl!("main_notebook_image_fast_compare_tooltip"))); + .set_tooltip_text(Some(&flg!("main_notebook_image_fast_compare_tooltip"))); { let hash_size_index = self.combo_box_image_hash_size.active().unwrap() as usize; @@ -394,16 +395,16 @@ impl GuiMainNotebook { // Change name of main notebook tabs for (main_enum, fl_thing) in [ - (NotebookMainEnum::Duplicate as usize, fl!("main_notebook_duplicates")), - (NotebookMainEnum::EmptyDirectories as usize, fl!("main_notebook_empty_directories")), - (NotebookMainEnum::BigFiles as usize, fl!("main_notebook_big_files")), - (NotebookMainEnum::EmptyFiles as usize, fl!("main_notebook_empty_files")), - (NotebookMainEnum::Temporary as usize, fl!("main_notebook_temporary")), - (NotebookMainEnum::SimilarImages as usize, fl!("main_notebook_similar_images")), - (NotebookMainEnum::SimilarVideos as usize, fl!("main_notebook_similar_videos")), - (NotebookMainEnum::SameMusic as usize, fl!("main_notebook_same_music")), - (NotebookMainEnum::Symlinks as usize, fl!("main_notebook_symlinks")), - (NotebookMainEnum::BrokenFiles as usize, fl!("main_notebook_broken_files")), + (NotebookMainEnum::Duplicate as usize, flg!("main_notebook_duplicates")), + (NotebookMainEnum::EmptyDirectories as usize, flg!("main_notebook_empty_directories")), + (NotebookMainEnum::BigFiles as usize, flg!("main_notebook_big_files")), + (NotebookMainEnum::EmptyFiles as usize, flg!("main_notebook_empty_files")), + (NotebookMainEnum::Temporary as usize, flg!("main_notebook_temporary")), + (NotebookMainEnum::SimilarImages as usize, flg!("main_notebook_similar_images")), + (NotebookMainEnum::SimilarVideos as usize, flg!("main_notebook_similar_videos")), + (NotebookMainEnum::SameMusic as usize, flg!("main_notebook_same_music")), + (NotebookMainEnum::Symlinks as usize, flg!("main_notebook_symlinks")), + (NotebookMainEnum::BrokenFiles as usize, flg!("main_notebook_broken_files")), ] { self.notebook_main .tab_label(&vec_children[main_enum]) @@ -416,69 +417,69 @@ impl GuiMainNotebook { // Change names of columns let names_of_columns = [ vec![ - fl!("main_tree_view_column_size"), - fl!("main_tree_view_column_file_name"), - fl!("main_tree_view_column_path"), - fl!("main_tree_view_column_modification"), + flg!("main_tree_view_column_size"), + flg!("main_tree_view_column_file_name"), + flg!("main_tree_view_column_path"), + flg!("main_tree_view_column_modification"), ], // Duplicates vec![ - fl!("main_tree_view_column_folder_name"), - fl!("main_tree_view_column_path"), - fl!("main_tree_view_column_modification"), + flg!("main_tree_view_column_folder_name"), + flg!("main_tree_view_column_path"), + flg!("main_tree_view_column_modification"), ], // Empty Folders vec![ - fl!("main_tree_view_column_size"), - fl!("main_tree_view_column_file_name"), - fl!("main_tree_view_column_path"), - fl!("main_tree_view_column_modification"), + flg!("main_tree_view_column_size"), + flg!("main_tree_view_column_file_name"), + flg!("main_tree_view_column_path"), + flg!("main_tree_view_column_modification"), ], // Big files vec![ - fl!("main_tree_view_column_file_name"), - fl!("main_tree_view_column_path"), - fl!("main_tree_view_column_modification"), + flg!("main_tree_view_column_file_name"), + flg!("main_tree_view_column_path"), + flg!("main_tree_view_column_modification"), ], // Empty files vec![ - fl!("main_tree_view_column_file_name"), - fl!("main_tree_view_column_path"), - fl!("main_tree_view_column_modification"), + flg!("main_tree_view_column_file_name"), + flg!("main_tree_view_column_path"), + flg!("main_tree_view_column_modification"), ], // Temporary Files vec![ - fl!("main_tree_view_column_similarity"), - fl!("main_tree_view_column_size"), - fl!("main_tree_view_column_dimensions"), - fl!("main_tree_view_column_file_name"), - fl!("main_tree_view_column_path"), - fl!("main_tree_view_column_modification"), + flg!("main_tree_view_column_similarity"), + flg!("main_tree_view_column_size"), + flg!("main_tree_view_column_dimensions"), + flg!("main_tree_view_column_file_name"), + flg!("main_tree_view_column_path"), + flg!("main_tree_view_column_modification"), ], // Similar Images vec![ - fl!("main_tree_view_column_size"), - fl!("main_tree_view_column_file_name"), - fl!("main_tree_view_column_path"), - fl!("main_tree_view_column_modification"), + flg!("main_tree_view_column_size"), + flg!("main_tree_view_column_file_name"), + flg!("main_tree_view_column_path"), + flg!("main_tree_view_column_modification"), ], // Similar Videos vec![ - fl!("main_tree_view_column_size"), - fl!("main_tree_view_column_file_name"), - fl!("main_tree_view_column_path"), - fl!("main_tree_view_column_title"), - fl!("main_tree_view_column_artist"), - fl!("main_tree_view_column_year"), - fl!("main_tree_view_column_album_title"), - fl!("main_tree_view_column_album_artist"), - fl!("main_tree_view_column_modification"), + flg!("main_tree_view_column_size"), + flg!("main_tree_view_column_file_name"), + flg!("main_tree_view_column_path"), + flg!("main_tree_view_column_title"), + flg!("main_tree_view_column_artist"), + flg!("main_tree_view_column_year"), + flg!("main_tree_view_column_album_title"), + flg!("main_tree_view_column_album_artist"), + flg!("main_tree_view_column_modification"), ], // Music Dupliactes vec![ - fl!("main_tree_view_column_symlink_file_name"), - fl!("main_tree_view_column_symlink_folder"), - fl!("main_tree_view_column_destination_path"), - fl!("main_tree_view_column_type_of_error"), - fl!("main_tree_view_column_modification"), + flg!("main_tree_view_column_symlink_file_name"), + flg!("main_tree_view_column_symlink_folder"), + flg!("main_tree_view_column_destination_path"), + flg!("main_tree_view_column_type_of_error"), + flg!("main_tree_view_column_modification"), ], // Invalid Symlinks vec![ - fl!("main_tree_view_column_file_name"), - fl!("main_tree_view_column_path"), - fl!("main_tree_view_column_type_of_error"), - fl!("main_tree_view_column_modification"), + flg!("main_tree_view_column_file_name"), + flg!("main_tree_view_column_path"), + flg!("main_tree_view_column_type_of_error"), + flg!("main_tree_view_column_modification"), ], // Broken Files ]; @@ -496,9 +497,9 @@ impl GuiMainNotebook { self.combo_box_duplicate_check_method.remove_all(); for i in &DUPLICATES_CHECK_METHOD_COMBO_BOX { let text = match i.check_method { - CheckingMethod::Hash => fl!("duplicate_mode_hash_combo_box"), - CheckingMethod::Size => fl!("duplicate_mode_size_combo_box"), - CheckingMethod::Name => fl!("duplicate_mode_name_combo_box"), + CheckingMethod::Hash => flg!("duplicate_mode_hash_combo_box"), + CheckingMethod::Size => flg!("duplicate_mode_size_combo_box"), + CheckingMethod::Name => flg!("duplicate_mode_name_combo_box"), _ => { panic!() } diff --git a/czkawka_gui/src/gui_structs/gui_popovers.rs b/czkawka_gui/src/gui_structs/gui_popovers.rs index 89c06a5..a905ab6 100644 --- a/czkawka_gui/src/gui_structs/gui_popovers.rs +++ b/czkawka_gui/src/gui_structs/gui_popovers.rs @@ -1,7 +1,7 @@ use gtk::prelude::*; use gtk::Builder; -use czkawka_core::fl; +use crate::flg; #[derive(Clone)] pub struct GuiPopovers { @@ -85,18 +85,18 @@ impl GuiPopovers { } } pub fn update_language(&self) { - self.buttons_popover_select_all.set_label(&fl!("popover_select_all")); - self.buttons_popover_unselect_all.set_label(&fl!("popover_unselect_all")); - self.buttons_popover_reverse.set_label(&fl!("popover_reverse")); - self.buttons_popover_select_all_except_oldest.set_label(&fl!("popover_select_all_except_oldest")); - self.buttons_popover_select_all_except_newest.set_label(&fl!("popover_select_all_except_newest")); - self.buttons_popover_select_one_oldest.set_label(&fl!("popover_select_one_oldest")); - self.buttons_popover_select_one_newest.set_label(&fl!("popover_select_one_newest")); - self.buttons_popover_select_custom.set_label(&fl!("popover_select_custom")); - self.buttons_popover_unselect_custom.set_label(&fl!("popover_unselect_custom")); + self.buttons_popover_select_all.set_label(&flg!("popover_select_all")); + self.buttons_popover_unselect_all.set_label(&flg!("popover_unselect_all")); + self.buttons_popover_reverse.set_label(&flg!("popover_reverse")); + self.buttons_popover_select_all_except_oldest.set_label(&flg!("popover_select_all_except_oldest")); + self.buttons_popover_select_all_except_newest.set_label(&flg!("popover_select_all_except_newest")); + self.buttons_popover_select_one_oldest.set_label(&flg!("popover_select_one_oldest")); + self.buttons_popover_select_one_newest.set_label(&flg!("popover_select_one_newest")); + self.buttons_popover_select_custom.set_label(&flg!("popover_select_custom")); + self.buttons_popover_unselect_custom.set_label(&flg!("popover_unselect_custom")); self.buttons_popover_select_all_images_except_biggest - .set_label(&fl!("popover_select_all_images_except_biggest")); + .set_label(&flg!("popover_select_all_images_except_biggest")); self.buttons_popover_select_all_images_except_smallest - .set_label(&fl!("popover_select_all_images_except_smallest")); + .set_label(&flg!("popover_select_all_images_except_smallest")); } } diff --git a/czkawka_gui/src/gui_structs/gui_progress_dialog.rs b/czkawka_gui/src/gui_structs/gui_progress_dialog.rs index 2f2d499..4077b8e 100644 --- a/czkawka_gui/src/gui_structs/gui_progress_dialog.rs +++ b/czkawka_gui/src/gui_structs/gui_progress_dialog.rs @@ -1,8 +1,8 @@ use gtk::prelude::*; use gtk::{Bin, Builder, EventControllerKey, Window}; +use crate::flg; use crate::help_functions::get_custom_label_from_button_with_image; -use czkawka_core::fl; #[derive(Clone)] pub struct GuiProgressDialog { @@ -28,7 +28,7 @@ impl GuiProgressDialog { let builder = Builder::from_string(glade_src.as_str()); let window_progress: gtk::Dialog = builder.object("window_progress").unwrap(); - window_progress.set_title(&fl!("window_progress_title")); + window_progress.set_title(&flg!("window_progress_title")); window_progress.set_transient_for(Some(window_main)); window_progress.set_modal(true); @@ -61,11 +61,11 @@ impl GuiProgressDialog { } } pub fn update_language(&self) { - self.window_progress.set_title(&fl!("window_progress_title")); + self.window_progress.set_title(&flg!("window_progress_title")); - get_custom_label_from_button_with_image(&self.button_stop_in_dialog.clone().upcast::()).set_text(&fl!("progress_stop_button")); + get_custom_label_from_button_with_image(&self.button_stop_in_dialog.clone().upcast::()).set_text(&flg!("progress_stop_button")); - self.label_progress_current_stage.set_label(&fl!("progress_current_stage")); - self.label_progress_all_stages.set_label(&fl!("progress_all_stages")); + self.label_progress_current_stage.set_label(&flg!("progress_current_stage")); + self.label_progress_all_stages.set_label(&flg!("progress_all_stages")); } } diff --git a/czkawka_gui/src/gui_structs/gui_settings.rs b/czkawka_gui/src/gui_structs/gui_settings.rs index 55c525d..53effd4 100644 --- a/czkawka_gui/src/gui_structs/gui_settings.rs +++ b/czkawka_gui/src/gui_structs/gui_settings.rs @@ -1,7 +1,7 @@ use gtk::prelude::*; use gtk::{Builder, Window}; -use czkawka_core::fl; +use crate::flg; #[derive(Clone)] pub struct GuiSettings { @@ -57,7 +57,7 @@ impl GuiSettings { let builder = Builder::from_string(glade_src.as_str()); let window_settings: gtk::Window = builder.object("window_settings").unwrap(); - window_settings.set_title(&fl!("window_settings_title")); + window_settings.set_title(&flg!("window_settings_title")); window_settings.set_modal(true); window_settings.set_transient_for(Some(window_main)); @@ -141,98 +141,100 @@ impl GuiSettings { } pub fn update_language(&self) { - self.window_settings.set_title(&fl!("window_settings_title")); + self.window_settings.set_title(&flg!("window_settings_title")); - self.check_button_settings_save_at_exit.set_label(&fl!("settings_save_at_exit_button")); - self.check_button_settings_load_at_start.set_label(&fl!("settings_load_at_start_button")); - self.check_button_settings_confirm_deletion.set_label(&fl!("settings_confirm_deletion_button")); - self.check_button_settings_confirm_link.set_label(&fl!("settings_confirm_link_button")); - self.check_button_settings_confirm_group_deletion.set_label(&fl!("settings_confirm_group_deletion_button")); - self.check_button_settings_show_text_view.set_label(&fl!("settings_show_text_view_button")); - self.check_button_settings_use_cache.set_label(&fl!("settings_use_cache_button")); - self.check_button_settings_save_also_json.set_label(&fl!("settings_save_also_as_json_button")); - self.check_button_settings_use_trash.set_label(&fl!("settings_use_trash_button")); - self.label_settings_general_language.set_label(&fl!("settings_language_label")); + self.check_button_settings_save_at_exit.set_label(&flg!("settings_save_at_exit_button")); + self.check_button_settings_load_at_start.set_label(&flg!("settings_load_at_start_button")); + self.check_button_settings_confirm_deletion.set_label(&flg!("settings_confirm_deletion_button")); + self.check_button_settings_confirm_link.set_label(&flg!("settings_confirm_link_button")); + self.check_button_settings_confirm_group_deletion.set_label(&flg!("settings_confirm_group_deletion_button")); + self.check_button_settings_show_text_view.set_label(&flg!("settings_show_text_view_button")); + self.check_button_settings_use_cache.set_label(&flg!("settings_use_cache_button")); + self.check_button_settings_save_also_json.set_label(&flg!("settings_save_also_as_json_button")); + self.check_button_settings_use_trash.set_label(&flg!("settings_use_trash_button")); + self.label_settings_general_language.set_label(&flg!("settings_language_label")); - self.check_button_settings_save_at_exit.set_tooltip_text(Some(&fl!("settings_save_at_exit_button_tooltip"))); + self.check_button_settings_save_at_exit + .set_tooltip_text(Some(&flg!("settings_save_at_exit_button_tooltip"))); self.check_button_settings_load_at_start - .set_tooltip_text(Some(&fl!("settings_load_at_start_button_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_load_at_start_button_tooltip"))); self.check_button_settings_confirm_deletion - .set_tooltip_text(Some(&fl!("settings_confirm_deletion_button_tooltip"))); - self.check_button_settings_confirm_link.set_tooltip_text(Some(&fl!("settings_confirm_link_button_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_confirm_deletion_button_tooltip"))); + self.check_button_settings_confirm_link + .set_tooltip_text(Some(&flg!("settings_confirm_link_button_tooltip"))); self.check_button_settings_confirm_group_deletion - .set_tooltip_text(Some(&fl!("settings_confirm_group_deletion_button_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_confirm_group_deletion_button_tooltip"))); self.check_button_settings_show_text_view - .set_tooltip_text(Some(&fl!("settings_show_text_view_button_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_show_text_view_button_tooltip"))); self.check_button_settings_save_also_json - .set_tooltip_text(Some(&fl!("settings_save_also_as_json_button_tooltip"))); - self.check_button_settings_use_cache.set_tooltip_text(Some(&fl!("settings_use_cache_button_tooltip"))); - self.check_button_settings_use_trash.set_tooltip_text(Some(&fl!("settings_use_trash_button_tooltip"))); - self.label_settings_general_language.set_tooltip_text(Some(&fl!("settings_language_label_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_save_also_as_json_button_tooltip"))); + self.check_button_settings_use_cache.set_tooltip_text(Some(&flg!("settings_use_cache_button_tooltip"))); + self.check_button_settings_use_trash.set_tooltip_text(Some(&flg!("settings_use_trash_button_tooltip"))); + self.label_settings_general_language.set_tooltip_text(Some(&flg!("settings_language_label_tooltip"))); - self.check_button_settings_hide_hard_links.set_label(&fl!("settings_duplicates_hide_hard_link_button")); + self.check_button_settings_hide_hard_links.set_label(&flg!("settings_duplicates_hide_hard_link_button")); self.check_button_settings_show_preview_duplicates - .set_label(&fl!("settings_multiple_image_preview_checkbutton")); + .set_label(&flg!("settings_multiple_image_preview_checkbutton")); self.check_button_settings_duplicates_delete_outdated_cache - .set_label(&fl!("settings_multiple_delete_outdated_cache_checkbutton")); - self.button_settings_duplicates_clear_cache.set_label(&fl!("settings_multiple_clear_cache_button")); - self.check_button_duplicates_use_prehash_cache.set_label(&fl!("settings_duplicates_prehash_checkbutton")); + .set_label(&flg!("settings_multiple_delete_outdated_cache_checkbutton")); + self.button_settings_duplicates_clear_cache.set_label(&flg!("settings_multiple_clear_cache_button")); + self.check_button_duplicates_use_prehash_cache.set_label(&flg!("settings_duplicates_prehash_checkbutton")); self.label_settings_duplicate_minimal_size_cache - .set_label(&fl!("settings_duplicates_minimal_size_cache_label")); + .set_label(&flg!("settings_duplicates_minimal_size_cache_label")); self.label_settings_duplicate_minimal_size_cache_prehash - .set_label(&fl!("settings_duplicates_minimal_size_cache_prehash_label")); + .set_label(&flg!("settings_duplicates_minimal_size_cache_prehash_label")); self.check_button_settings_hide_hard_links - .set_tooltip_text(Some(&fl!("settings_duplicates_hide_hard_link_button_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_duplicates_hide_hard_link_button_tooltip"))); self.entry_settings_cache_file_minimal_size - .set_tooltip_text(Some(&fl!("settings_duplicates_minimal_size_entry_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_duplicates_minimal_size_entry_tooltip"))); self.check_button_settings_show_preview_duplicates - .set_tooltip_text(Some(&fl!("settings_multiple_image_preview_checkbutton_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_multiple_image_preview_checkbutton_tooltip"))); self.check_button_settings_duplicates_delete_outdated_cache - .set_tooltip_text(Some(&fl!("settings_multiple_delete_outdated_cache_checkbutton_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_multiple_delete_outdated_cache_checkbutton_tooltip"))); self.button_settings_duplicates_clear_cache - .set_tooltip_text(Some(&fl!("settings_multiple_clear_cache_button_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_multiple_clear_cache_button_tooltip"))); self.check_button_duplicates_use_prehash_cache - .set_tooltip_text(Some(&fl!("settings_duplicates_prehash_checkbutton_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_duplicates_prehash_checkbutton_tooltip"))); self.entry_settings_prehash_cache_file_minimal_size - .set_tooltip_text(Some(&fl!("settings_duplicates_prehash_minimal_entry_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_duplicates_prehash_minimal_entry_tooltip"))); self.check_button_settings_show_preview_similar_images - .set_label(&fl!("settings_multiple_image_preview_checkbutton")); + .set_label(&flg!("settings_multiple_image_preview_checkbutton")); self.check_button_settings_similar_images_delete_outdated_cache - .set_label(&fl!("settings_multiple_delete_outdated_cache_checkbutton")); - self.button_settings_similar_images_clear_cache.set_label(&fl!("settings_multiple_clear_cache_button")); + .set_label(&flg!("settings_multiple_delete_outdated_cache_checkbutton")); + self.button_settings_similar_images_clear_cache.set_label(&flg!("settings_multiple_clear_cache_button")); self.check_button_settings_show_preview_similar_images - .set_tooltip_text(Some(&fl!("settings_multiple_image_preview_checkbutton_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_multiple_image_preview_checkbutton_tooltip"))); self.check_button_settings_similar_images_delete_outdated_cache - .set_tooltip_text(Some(&fl!("settings_multiple_delete_outdated_cache_checkbutton_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_multiple_delete_outdated_cache_checkbutton_tooltip"))); self.button_settings_similar_images_clear_cache - .set_tooltip_text(Some(&fl!("settings_multiple_clear_cache_button_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_multiple_clear_cache_button_tooltip"))); self.check_button_settings_similar_videos_delete_outdated_cache - .set_label(&fl!("settings_multiple_delete_outdated_cache_checkbutton")); - self.button_settings_similar_videos_clear_cache.set_label(&fl!("settings_multiple_clear_cache_button")); + .set_label(&flg!("settings_multiple_delete_outdated_cache_checkbutton")); + self.button_settings_similar_videos_clear_cache.set_label(&flg!("settings_multiple_clear_cache_button")); self.check_button_settings_similar_videos_delete_outdated_cache - .set_tooltip_text(Some(&fl!("settings_multiple_delete_outdated_cache_checkbutton_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_multiple_delete_outdated_cache_checkbutton_tooltip"))); self.button_settings_similar_videos_clear_cache - .set_tooltip_text(Some(&fl!("settings_multiple_clear_cache_button_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_multiple_clear_cache_button_tooltip"))); - self.button_settings_save_configuration.set_label(&fl!("settings_saving_button")); - self.button_settings_load_configuration.set_label(&fl!("settings_loading_button")); - self.button_settings_reset_configuration.set_label(&fl!("settings_reset_button")); + self.button_settings_save_configuration.set_label(&flg!("settings_saving_button")); + self.button_settings_load_configuration.set_label(&flg!("settings_loading_button")); + self.button_settings_reset_configuration.set_label(&flg!("settings_reset_button")); - self.button_settings_save_configuration.set_tooltip_text(Some(&fl!("settings_saving_button_tooltip"))); - self.button_settings_load_configuration.set_tooltip_text(Some(&fl!("settings_loading_button_tooltip"))); - self.button_settings_reset_configuration.set_tooltip_text(Some(&fl!("settings_reset_button_tooltip"))); + self.button_settings_save_configuration.set_tooltip_text(Some(&flg!("settings_saving_button_tooltip"))); + self.button_settings_load_configuration.set_tooltip_text(Some(&flg!("settings_loading_button_tooltip"))); + self.button_settings_reset_configuration.set_tooltip_text(Some(&flg!("settings_reset_button_tooltip"))); - self.button_settings_open_cache_folder.set_label(&fl!("settings_folder_cache_open")); - self.button_settings_open_settings_folder.set_label(&fl!("settings_folder_settings_open")); + self.button_settings_open_cache_folder.set_label(&flg!("settings_folder_cache_open")); + self.button_settings_open_settings_folder.set_label(&flg!("settings_folder_settings_open")); - self.button_settings_open_cache_folder.set_tooltip_text(Some(&fl!("settings_folder_cache_open_tooltip"))); + self.button_settings_open_cache_folder.set_tooltip_text(Some(&flg!("settings_folder_cache_open_tooltip"))); self.button_settings_open_settings_folder - .set_tooltip_text(Some(&fl!("settings_folder_settings_open_tooltip"))); + .set_tooltip_text(Some(&flg!("settings_folder_settings_open_tooltip"))); let vec_children: Vec = self.notebook_settings.children(); @@ -241,10 +243,10 @@ impl GuiSettings { // Change name of main notebook tabs let names: [String; 4] = [ - fl!("settings_notebook_general"), - fl!("settings_notebook_duplicates"), - fl!("settings_notebook_images"), - fl!("settings_notebook_videos"), + flg!("settings_notebook_general"), + flg!("settings_notebook_duplicates"), + flg!("settings_notebook_images"), + flg!("settings_notebook_videos"), ]; for (index, fl_thing) in names.iter().enumerate() { self.notebook_settings diff --git a/czkawka_gui/src/gui_structs/gui_upper_notebook.rs b/czkawka_gui/src/gui_structs/gui_upper_notebook.rs index b7146a8..2dd4270 100644 --- a/czkawka_gui/src/gui_structs/gui_upper_notebook.rs +++ b/czkawka_gui/src/gui_structs/gui_upper_notebook.rs @@ -1,9 +1,9 @@ use gtk::prelude::*; use gtk::{Bin, EventControllerKey, TreeView}; +use crate::flg; use crate::help_functions::get_custom_label_from_button_with_image; use crate::notebook_enums::NotebookUpperEnum; -use czkawka_core::fl; #[derive(Clone)] pub struct GuiUpperNotebook { @@ -101,50 +101,50 @@ impl GuiUpperNotebook { } } pub fn update_language(&self) { - self.check_button_recursive.set_label(&fl!("upper_recursive_button")); - self.check_button_recursive.set_tooltip_text(Some(&fl!("upper_recursive_button_tooltip"))); + self.check_button_recursive.set_label(&flg!("upper_recursive_button")); + self.check_button_recursive.set_tooltip_text(Some(&flg!("upper_recursive_button_tooltip"))); - get_custom_label_from_button_with_image(&self.buttons_manual_add_included_directory.clone().upcast::()).set_text(&fl!("upper_manual_add_included_button")); - get_custom_label_from_button_with_image(&self.buttons_add_included_directory.clone().upcast::()).set_text(&fl!("upper_add_included_button")); - get_custom_label_from_button_with_image(&self.buttons_remove_included_directory.clone().upcast::()).set_text(&fl!("upper_remove_included_button")); - get_custom_label_from_button_with_image(&self.buttons_manual_add_excluded_directory.clone().upcast::()).set_text(&fl!("upper_manual_add_excluded_button")); - get_custom_label_from_button_with_image(&self.buttons_add_excluded_directory.clone().upcast::()).set_text(&fl!("upper_add_excluded_button")); - get_custom_label_from_button_with_image(&self.buttons_remove_excluded_directory.clone().upcast::()).set_text(&fl!("upper_remove_excluded_button")); + get_custom_label_from_button_with_image(&self.buttons_manual_add_included_directory.clone().upcast::()).set_text(&flg!("upper_manual_add_included_button")); + get_custom_label_from_button_with_image(&self.buttons_add_included_directory.clone().upcast::()).set_text(&flg!("upper_add_included_button")); + get_custom_label_from_button_with_image(&self.buttons_remove_included_directory.clone().upcast::()).set_text(&flg!("upper_remove_included_button")); + get_custom_label_from_button_with_image(&self.buttons_manual_add_excluded_directory.clone().upcast::()).set_text(&flg!("upper_manual_add_excluded_button")); + get_custom_label_from_button_with_image(&self.buttons_add_excluded_directory.clone().upcast::()).set_text(&flg!("upper_add_excluded_button")); + get_custom_label_from_button_with_image(&self.buttons_remove_excluded_directory.clone().upcast::()).set_text(&flg!("upper_remove_excluded_button")); // GTK 4 - // get_custom_label_from_label_with_image(&self.buttons_manual_add_included_directory.clone()).set_text(&fl!("upper_manual_add_included_button")); - // get_custom_label_from_label_with_image(&self.buttons_add_included_directory.clone()).set_text(&fl!("upper_add_included_button")); - // get_custom_label_from_label_with_image(&self.buttons_remove_included_directory.clone()).set_text(&fl!("upper_remove_included_button")); - // get_custom_label_from_label_with_image(&self.buttons_manual_add_excluded_directory.clone()).set_text(&fl!("upper_manual_add_excluded_button")); - // get_custom_label_from_label_with_image(&self.buttons_add_excluded_directory.clone()).set_text(&fl!("upper_add_excluded_button")); - // get_custom_label_from_label_with_image(&self.buttons_remove_excluded_directory.clone()).set_text(&fl!("upper_remove_excluded_button")); + // get_custom_label_from_label_with_image(&self.buttons_manual_add_included_directory.clone()).set_text(&flg!("upper_manual_add_included_button")); + // get_custom_label_from_label_with_image(&self.buttons_add_included_directory.clone()).set_text(&flg!("upper_add_included_button")); + // get_custom_label_from_label_with_image(&self.buttons_remove_included_directory.clone()).set_text(&flg!("upper_remove_included_button")); + // get_custom_label_from_label_with_image(&self.buttons_manual_add_excluded_directory.clone()).set_text(&flg!("upper_manual_add_excluded_button")); + // get_custom_label_from_label_with_image(&self.buttons_add_excluded_directory.clone()).set_text(&flg!("upper_add_excluded_button")); + // get_custom_label_from_label_with_image(&self.buttons_remove_excluded_directory.clone()).set_text(&flg!("upper_remove_excluded_button")); self.buttons_manual_add_included_directory - .set_tooltip_text(Some(&fl!("upper_manual_add_included_button_tooltip"))); - self.buttons_add_included_directory.set_tooltip_text(Some(&fl!("upper_add_included_button_tooltip"))); - self.buttons_remove_included_directory.set_tooltip_text(Some(&fl!("upper_remove_included_button_tooltip"))); + .set_tooltip_text(Some(&flg!("upper_manual_add_included_button_tooltip"))); + self.buttons_add_included_directory.set_tooltip_text(Some(&flg!("upper_add_included_button_tooltip"))); + self.buttons_remove_included_directory.set_tooltip_text(Some(&flg!("upper_remove_included_button_tooltip"))); self.buttons_manual_add_excluded_directory - .set_tooltip_text(Some(&fl!("upper_manual_add_excluded_button_tooltip"))); - self.buttons_add_excluded_directory.set_tooltip_text(Some(&fl!("upper_add_excluded_button_tooltip"))); - self.buttons_remove_excluded_directory.set_tooltip_text(Some(&fl!("upper_remove_excluded_button_tooltip"))); + .set_tooltip_text(Some(&flg!("upper_manual_add_excluded_button_tooltip"))); + self.buttons_add_excluded_directory.set_tooltip_text(Some(&flg!("upper_add_excluded_button_tooltip"))); + self.buttons_remove_excluded_directory.set_tooltip_text(Some(&flg!("upper_remove_excluded_button_tooltip"))); - self.label_allowed_extensions.set_tooltip_text(Some(&fl!("upper_allowed_extensions_tooltip"))); - self.entry_allowed_extensions.set_tooltip_text(Some(&fl!("upper_allowed_extensions_tooltip"))); - self.label_excluded_items.set_tooltip_text(Some(&fl!("upper_excluded_items_tooltip"))); - self.entry_excluded_items.set_tooltip_text(Some(&fl!("upper_excluded_items_tooltip"))); + self.label_allowed_extensions.set_tooltip_text(Some(&flg!("upper_allowed_extensions_tooltip"))); + self.entry_allowed_extensions.set_tooltip_text(Some(&flg!("upper_allowed_extensions_tooltip"))); + self.label_excluded_items.set_tooltip_text(Some(&flg!("upper_excluded_items_tooltip"))); + self.entry_excluded_items.set_tooltip_text(Some(&flg!("upper_excluded_items_tooltip"))); - self.label_excluded_items.set_label(&fl!("upper_excluded_items")); - self.label_allowed_extensions.set_label(&fl!("upper_allowed_extensions")); + self.label_excluded_items.set_label(&flg!("upper_excluded_items")); + self.label_allowed_extensions.set_label(&flg!("upper_allowed_extensions")); - self.label_general_size_bytes.set_label(&fl!("main_label_size_bytes")); - self.label_general_min_size.set_label(&fl!("main_label_min_size")); - self.label_general_max_size.set_label(&fl!("main_label_max_size")); + self.label_general_size_bytes.set_label(&flg!("main_label_size_bytes")); + self.label_general_min_size.set_label(&flg!("main_label_min_size")); + self.label_general_max_size.set_label(&flg!("main_label_max_size")); - self.label_general_size_bytes.set_tooltip_text(Some(&fl!("main_label_size_bytes_tooltip"))); - self.label_general_min_size.set_tooltip_text(Some(&fl!("main_label_size_bytes_tooltip"))); - self.label_general_max_size.set_tooltip_text(Some(&fl!("main_label_size_bytes_tooltip"))); - self.entry_general_minimal_size.set_tooltip_text(Some(&fl!("main_label_size_bytes_tooltip"))); - self.entry_general_maximal_size.set_tooltip_text(Some(&fl!("main_label_size_bytes_tooltip"))); + self.label_general_size_bytes.set_tooltip_text(Some(&flg!("main_label_size_bytes_tooltip"))); + self.label_general_min_size.set_tooltip_text(Some(&flg!("main_label_size_bytes_tooltip"))); + self.label_general_max_size.set_tooltip_text(Some(&flg!("main_label_size_bytes_tooltip"))); + self.entry_general_minimal_size.set_tooltip_text(Some(&flg!("main_label_size_bytes_tooltip"))); + self.entry_general_maximal_size.set_tooltip_text(Some(&flg!("main_label_size_bytes_tooltip"))); let vec_children: Vec = self.notebook_upper.children(); @@ -153,9 +153,9 @@ impl GuiUpperNotebook { // Change name of upper notebook tabs for (upper_enum, fl_thing) in [ - (NotebookUpperEnum::ItemsConfiguration as usize, fl!("upper_notebook_items_configuration")), - (NotebookUpperEnum::ExcludedDirectories as usize, fl!("upper_notebook_excluded_directories")), - (NotebookUpperEnum::IncludedDirectories as usize, fl!("upper_notebook_included_directories")), + (NotebookUpperEnum::ItemsConfiguration as usize, flg!("upper_notebook_items_configuration")), + (NotebookUpperEnum::ExcludedDirectories as usize, flg!("upper_notebook_excluded_directories")), + (NotebookUpperEnum::IncludedDirectories as usize, flg!("upper_notebook_included_directories")), ] { self.notebook_upper .tab_label(&vec_children[upper_enum]) @@ -166,7 +166,10 @@ impl GuiUpperNotebook { } let names_of_columns = [ - vec![fl!("upper_tree_view_included_folder_column_title"), fl!("upper_tree_view_included_reference_column_title")], // Included folders + vec![ + flg!("upper_tree_view_included_folder_column_title"), + flg!("upper_tree_view_included_reference_column_title"), + ], // Included folders ]; for (notebook_index, tree_view) in [self.tree_view_included_directories.clone()].iter().enumerate() { diff --git a/czkawka_gui/src/help_functions.rs b/czkawka_gui/src/help_functions.rs index ec00781..c19ce66 100644 --- a/czkawka_gui/src/help_functions.rs +++ b/czkawka_gui/src/help_functions.rs @@ -9,8 +9,10 @@ use image::imageops::FilterType; use image::DynamicImage; use image::GenericImageView; +use crate::flg; use czkawka_core::big_file::BigFile; use czkawka_core::broken_files::BrokenFiles; +use czkawka_core::common_dir_traversal; use czkawka_core::common_messages::Messages; use czkawka_core::duplicate::DuplicateFinder; use czkawka_core::empty_files::EmptyFiles; @@ -20,7 +22,6 @@ use czkawka_core::same_music::SameMusic; use czkawka_core::similar_images::SimilarImages; use czkawka_core::similar_videos::SimilarVideos; use czkawka_core::temporary::Temporary; -use czkawka_core::{common_dir_traversal, fl}; use crate::notebook_enums::{NotebookMainEnum, NotebookUpperEnum, NUMBER_OF_NOTEBOOK_MAIN_TABS}; @@ -395,7 +396,7 @@ pub fn split_path(path: &Path) -> (String, String) { pub fn print_text_messages_to_text_view(text_messages: &Messages, text_view: >k::TextView) { let mut messages: String = String::from(""); if !text_messages.messages.is_empty() { - messages += format!("############### {}({}) ###############\n", fl!("text_view_messages"), text_messages.messages.len()).as_str(); + messages += format!("############### {}({}) ###############\n", flg!("text_view_messages"), text_messages.messages.len()).as_str(); } for text in &text_messages.messages { messages += text.as_str(); @@ -405,7 +406,7 @@ pub fn print_text_messages_to_text_view(text_messages: &Messages, text_view: > // messages += "\n"; // } if !text_messages.warnings.is_empty() { - messages += format!("############### {}({}) ###############\n", fl!("text_view_warnings"), text_messages.warnings.len()).as_str(); + messages += format!("############### {}({}) ###############\n", flg!("text_view_warnings"), text_messages.warnings.len()).as_str(); } for text in &text_messages.warnings { messages += text.as_str(); @@ -415,7 +416,7 @@ pub fn print_text_messages_to_text_view(text_messages: &Messages, text_view: > // messages += "\n"; // } if !text_messages.errors.is_empty() { - messages += format!("############### {}({}) ###############\n", fl!("text_view_errors"), text_messages.errors.len()).as_str(); + messages += format!("############### {}({}) ###############\n", flg!("text_view_errors"), text_messages.errors.len()).as_str(); } for text in &text_messages.errors { messages += text.as_str(); @@ -463,8 +464,8 @@ pub fn hide_all_buttons(buttons_array: &[Widget]) { pub fn get_text_from_invalid_symlink_cause(error: &common_dir_traversal::ErrorType) -> String { match error { - common_dir_traversal::ErrorType::InfiniteRecursion => fl!("invalid_symlink_infinite_recursion"), - common_dir_traversal::ErrorType::NonExistentFile => fl!("invalid_symlink_non_existent_destination"), + common_dir_traversal::ErrorType::InfiniteRecursion => flg!("invalid_symlink_infinite_recursion"), + common_dir_traversal::ErrorType::NonExistentFile => flg!("invalid_symlink_non_existent_destination"), } } diff --git a/czkawka_gui/src/initialize_gui.rs b/czkawka_gui/src/initialize_gui.rs index 292f75b..7a8f0cc 100644 --- a/czkawka_gui/src/initialize_gui.rs +++ b/czkawka_gui/src/initialize_gui.rs @@ -11,7 +11,7 @@ use gtk::{CheckButton, Image, SelectionMode, TextView, TreeView}; use image::imageops::FilterType; use image::GenericImageView; -use czkawka_core::fl; +use crate::flg; use czkawka_core::similar_images::{IMAGE_RS_EXTENSIONS, RAW_IMAGE_EXTENSIONS, SIMILAR_VALUES}; use czkawka_core::similar_videos::MAX_TOLERANCE; @@ -23,7 +23,7 @@ use crate::help_combo_box::{ }; use crate::help_functions::*; use crate::language_functions::LANGUAGES_ALL; -use crate::localizer::generate_translation_hashmap; +use crate::localizer_core::generate_translation_hashmap; use crate::notebook_enums::NotebookMainEnum; use crate::opening_selecting_records::*; @@ -697,7 +697,7 @@ fn show_preview( } else if let Err(e) = fs::create_dir_all(cache_dir) { add_text_to_text_view( text_view_errors, - fl!( + flg!( "preview_failed_to_create_cache_dir", generate_translation_hashmap(vec![("name", cache_dir.display().to_string()), ("reason", e.to_string())]) ) @@ -733,7 +733,7 @@ fn show_preview( Err(e) => { add_text_to_text_view( text_view_errors, - fl!( + flg!( "preview_temporary_file", generate_translation_hashmap(vec![("name", file_name.to_string()), ("reason", e.to_string())]) ) @@ -748,7 +748,7 @@ fn show_preview( None => { add_text_to_text_view( text_view_errors, - fl!( + flg!( "preview_temporary_file", generate_translation_hashmap(vec![("name", file_name.to_string()), ("reason", "None".to_string())]) ) @@ -761,7 +761,7 @@ fn show_preview( if img.width() == 0 || img.height() == 0 { add_text_to_text_view( text_view_errors, - fl!("preview_0_size", generate_translation_hashmap(vec![("name", file_name.to_string())])).as_str(), + flg!("preview_0_size", generate_translation_hashmap(vec![("name", file_name.to_string())])).as_str(), ); break 'dir; } @@ -773,7 +773,7 @@ fn show_preview( if let Err(e) = img.save(&file_dir) { add_text_to_text_view( text_view_errors, - fl!( + flg!( "preview_temporary_image_save", generate_translation_hashmap(vec![("name", file_dir.display().to_string()), ("reason", e.to_string())]) ) @@ -793,7 +793,7 @@ fn show_preview( if let Err(e) = fs::remove_file(&file_dir) { add_text_to_text_view( text_view_errors, - fl!( + flg!( "preview_temporary_image_remove", generate_translation_hashmap(vec![("name", file_dir.display().to_string()), ("reason", e.to_string())]) ) diff --git a/czkawka_gui/src/localizer_gui.rs b/czkawka_gui/src/localizer_gui.rs new file mode 100644 index 0000000..37d431d --- /dev/null +++ b/czkawka_gui/src/localizer_gui.rs @@ -0,0 +1,34 @@ +use i18n_embed::{ + fluent::{fluent_language_loader, FluentLanguageLoader}, + DefaultLocalizer, LanguageLoader, Localizer, +}; +use once_cell::sync::Lazy; +use rust_embed::RustEmbed; + +#[derive(RustEmbed)] +#[folder = "i18n/"] +struct Localizations; + +pub static LANGUAGE_LOADER_GUI: Lazy = Lazy::new(|| { + let loader: FluentLanguageLoader = fluent_language_loader!(); + + loader.load_fallback_language(&Localizations).expect("Error while loading fallback language"); + + loader +}); + +#[macro_export] +macro_rules! flg { + ($message_id:literal) => {{ + i18n_embed_fl::fl!($crate::localizer_gui::LANGUAGE_LOADER_GUI, $message_id) + }}; + + ($message_id:literal, $($args:expr),*) => {{ + i18n_embed_fl::fl!($crate::localizer_gui::LANGUAGE_LOADER_GUI, $message_id, $($args), *) + }}; +} + +// Get the `Localizer` to be used for localizing this library. +pub fn localizer_gui() -> Box { + Box::from(DefaultLocalizer::new(&*LANGUAGE_LOADER_GUI, &Localizations)) +} diff --git a/czkawka_gui/src/main.rs b/czkawka_gui/src/main.rs index 1093a79..2cd6031 100644 --- a/czkawka_gui/src/main.rs +++ b/czkawka_gui/src/main.rs @@ -42,6 +42,7 @@ mod help_combo_box; mod help_functions; mod initialize_gui; mod language_functions; +mod localizer_gui; mod notebook_enums; mod opening_selecting_records; mod saving_loading; diff --git a/czkawka_gui/src/saving_loading.rs b/czkawka_gui/src/saving_loading.rs index 8f7e958..aba3651 100644 --- a/czkawka_gui/src/saving_loading.rs +++ b/czkawka_gui/src/saving_loading.rs @@ -8,15 +8,15 @@ use directories_next::ProjectDirs; use gtk::prelude::*; use gtk::{ComboBoxText, ScrolledWindow, TextView}; +use crate::flg; use crate::gui_structs::gui_main_notebook::GuiMainNotebook; -use czkawka_core::fl; use czkawka_core::similar_images::SIMILAR_VALUES; use crate::gui_structs::gui_settings::GuiSettings; use crate::gui_structs::gui_upper_notebook::GuiUpperNotebook; use crate::help_functions::*; use crate::language_functions::{get_language_from_combo_box_text, LANGUAGES_ALL}; -use crate::localizer::generate_translation_hashmap; +use crate::localizer_core::generate_translation_hashmap; // TODO organize this better, add specific functions that will allow to load from files specific strings const SAVE_FILE_NAME: &str = "czkawka_gui_config_4.txt"; @@ -107,7 +107,7 @@ impl LoadSaveStruct { } else { add_text_to_text_view( &self.text_view, - &fl!( + &flg!( "saving_loading_invalid_string", generate_translation_hashmap(vec![("key", key), ("result", format!("{:?}", item))]) ), @@ -133,7 +133,7 @@ impl LoadSaveStruct { } else { add_text_to_text_view( &self.text_view, - &fl!( + &flg!( "saving_loading_invalid_int", generate_translation_hashmap(vec![("key", key), ("result", format!("{:?}", item))]) ), @@ -156,7 +156,7 @@ impl LoadSaveStruct { } else { add_text_to_text_view( &self.text_view, - &fl!( + &flg!( "saving_loading_decode_problem_bool", generate_translation_hashmap(vec![("key", key), ("result", item[0].to_string())]) ), @@ -166,7 +166,7 @@ impl LoadSaveStruct { } else { add_text_to_text_view( &self.text_view, - &fl!( + &flg!( "saving_loading_invalid_bool", generate_translation_hashmap(vec![("key", key), ("result", format!("{:?}", item))]) ), @@ -183,7 +183,7 @@ impl LoadSaveStruct { if self.loaded_items.contains_key(&key) { add_text_to_text_view( &self.text_view, - &fl!("saving_loading_saving_same_keys", generate_translation_hashmap(vec![("key", key.clone())])), + &flg!("saving_loading_saving_same_keys", generate_translation_hashmap(vec![("key", key.clone())])), ); } @@ -219,7 +219,7 @@ impl LoadSaveStruct { if !config_dir.is_dir() { add_text_to_text_view( text_view_errors, - &fl!( + &flg!( "saving_loading_folder_config_instead_file", generate_translation_hashmap(vec![("path", config_dir.display().to_string())]) ), @@ -229,7 +229,7 @@ impl LoadSaveStruct { } else if let Err(e) = fs::create_dir_all(config_dir) { add_text_to_text_view( text_view_errors, - &fl!( + &flg!( "saving_loading_failed_to_create_configuration_folder", generate_translation_hashmap(vec![("path", config_dir.display().to_string()), ("reason", e.to_string())]) ), @@ -242,7 +242,7 @@ impl LoadSaveStruct { Err(e) => { add_text_to_text_view( text_view_errors, - &fl!( + &flg!( "saving_loading_failed_to_create_config_file", generate_translation_hashmap(vec![("path", config_file.display().to_string()), ("reason", e.to_string())]) ), @@ -257,7 +257,7 @@ impl LoadSaveStruct { // Don't show errors when there is no configuration file when starting app add_text_to_text_view( text_view_errors, - &fl!( + &flg!( "saving_loading_failed_to_read_config_file", generate_translation_hashmap(vec![("path", config_file.display().to_string())]) ), @@ -271,7 +271,7 @@ impl LoadSaveStruct { Err(e) => { add_text_to_text_view( text_view_errors, - &fl!( + &flg!( "saving_loading_failed_to_create_config_file", generate_translation_hashmap(vec![("path", config_file.display().to_string()), ("reason", e.to_string())]) ), @@ -282,7 +282,7 @@ impl LoadSaveStruct { return Some((config_file_handler, config_file)); } } else { - add_text_to_text_view(text_view_errors, fl!("saving_loading_failed_to_get_home_directory").as_str()); + add_text_to_text_view(text_view_errors, flg!("saving_loading_failed_to_get_home_directory").as_str()); } None } @@ -293,7 +293,7 @@ impl LoadSaveStruct { if let Err(e) = config_file_handler.read_to_string(&mut loaded_data) { add_text_to_text_view( text_view_errors, - &fl!( + &flg!( "saving_loading_failed_to_read_data_from_file", generate_translation_hashmap(vec![("path", config_file.display().to_string()), ("reason", e.to_string())]) ), @@ -313,7 +313,7 @@ impl LoadSaveStruct { } else { add_text_to_text_view( text_view_errors, - &fl!( + &flg!( "saving_loading_orphan_data", generate_translation_hashmap(vec![("data", line.to_string()), ("index", index.to_string())]) ), @@ -326,13 +326,13 @@ impl LoadSaveStruct { if !hashmap_sl.contains_key(setting) { add_text_to_text_view( text_view_errors, - &fl!("saving_loading_not_valid", generate_translation_hashmap(vec![("data", setting.to_string())])), + &flg!("saving_loading_not_valid", generate_translation_hashmap(vec![("data", setting.to_string())])), ); } } if manual_execution { - add_text_to_text_view(text_view_errors, &fl!("saving_loading_loading_success")); + add_text_to_text_view(text_view_errors, &flg!("saving_loading_loading_success")); } } } @@ -365,7 +365,7 @@ impl LoadSaveStruct { if data_saved { add_text_to_text_view( text_view_errors, - fl!( + flg!( "saving_loading_saving_success", generate_translation_hashmap(vec![("name", config_file.display().to_string())]) ) @@ -374,7 +374,7 @@ impl LoadSaveStruct { } else { add_text_to_text_view( text_view_errors, - fl!( + flg!( "saving_loading_saving_failure", generate_translation_hashmap(vec![("name", config_file.display().to_string())]) ) @@ -934,6 +934,6 @@ pub fn reset_configuration(manual_clearing: bool, upper_notebook: &GuiUpperNoteb main_notebook.scale_similarity_similar_videos.set_value(DEFAULT_SIMILAR_VIDEOS_SIMILARITY as f64); } if manual_clearing { - add_text_to_text_view(&text_view_errors, &fl!("saving_loading_reset_configuration")); + add_text_to_text_view(&text_view_errors, &flg!("saving_loading_reset_configuration")); } } diff --git a/czkawka_gui/ui/about_dialog.glade b/czkawka_gui/ui/about_dialog.glade index 4c1e037..8dbc4f7 100644 --- a/czkawka_gui/ui/about_dialog.glade +++ b/czkawka_gui/ui/about_dialog.glade @@ -37,7 +37,7 @@ Author: Rafał Mikrut center dialog Czkawka - 3.3.1 + 4.0.0 2020 - 2022 Rafał Mikrut(qarmin) This program is free to use and will always be. diff --git a/czkawka_gui/ui/main_window.glade b/czkawka_gui/ui/main_window.glade index 14294da..e49b909 100644 --- a/czkawka_gui/ui/main_window.glade +++ b/czkawka_gui/ui/main_window.glade @@ -1938,7 +1938,7 @@ Author: Rafał Mikrut True False False - Czkawka 3.3.1 + Czkawka 4.0.0 1 none False diff --git a/data/com.github.qarmin.czkawka.metainfo.xml b/data/com.github.qarmin.czkawka.metainfo.xml index bf513dc..3572eb9 100644 --- a/data/com.github.qarmin.czkawka.metainfo.xml +++ b/data/com.github.qarmin.czkawka.metainfo.xml @@ -19,7 +19,7 @@ - + Rafał Mikrut diff --git a/i18n/cs/czkawka_core.ftl b/i18n/cs/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/cs/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/de/czkawka_core.ftl b/i18n/de/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/de/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/en/czkawka_core.ftl b/i18n/en/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/en/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/es/czkawka_core.ftl b/i18n/es/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/es/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/fr/czkawka_core.ftl b/i18n/fr/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/fr/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/it/czkawka_core.ftl b/i18n/it/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/it/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/ja/czkawka_core.ftl b/i18n/ja/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/ja/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/pl/czkawka_core.ftl b/i18n/pl/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/pl/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/pt/czkawka_core.ftl b/i18n/pt/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/pt/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/ru/czkawka_core.ftl b/i18n/ru/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/ru/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/uk/czkawka_core.ftl b/i18n/uk/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/uk/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/i18n/zh/czkawka_core.ftl b/i18n/zh/czkawka_core.ftl deleted file mode 120000 index 32c5da8..0000000 --- a/i18n/zh/czkawka_core.ftl +++ /dev/null @@ -1 +0,0 @@ -czkawka_gui.ftl \ No newline at end of file diff --git a/misc/cargo/PublishCore.sh b/misc/cargo/PublishCore.sh index 035d61a..025d7aa 100755 --- a/misc/cargo/PublishCore.sh +++ b/misc/cargo/PublishCore.sh @@ -1,5 +1,5 @@ #!/bin/bash -NUMBER="3.3.1" +NUMBER="4.0.0" CZKAWKA_PATH="/home/rafal" cd "$CZKAWKA_PATH" diff --git a/misc/cargo/PublishOther.sh b/misc/cargo/PublishOther.sh index 591af8e..6cddbe4 100755 --- a/misc/cargo/PublishOther.sh +++ b/misc/cargo/PublishOther.sh @@ -1,5 +1,5 @@ #!/bin/bash -NUMBER="3.3.1" +NUMBER="4.0.0" CZKAWKA_PATH="/home/rafal" cd "$CZKAWKA_PATH" diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index c2fe960..19cf685 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -1,6 +1,6 @@ name: czkawka # you probably want to 'snapcraft register ' base: core20 # the base snap is the execution environment for this snap -version: '3.3.1' # just for humans, typically '1.2+git' or '1.3.2' +version: '4.0.0' # just for humans, typically '1.2+git' or '1.3.2' summary: Czkawka - fast data cleaner written in Rust # 79 char long summary description: | Czkawka is very fast and feature rich cleaner which finds file duplicates, empty folders and files, duplicated music, similar images or the biggest files in selected directories.