1
0
Fork 0
mirror of synced 2024-05-05 04:52:38 +12:00

Small changes and fixes

This commit is contained in:
Rafał Mikrut 2021-12-26 12:08:37 +01:00
parent 1f5fca3f46
commit d8dc176e63
8 changed files with 185 additions and 97 deletions

View file

@ -666,6 +666,14 @@ impl SimilarImages {
continue;
}
// This shouldn't be executed too much times, so it should be quite fast to check this
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
// End thread which send info to gui
progress_thread_run.store(false, Ordering::Relaxed);
progress_thread_handle.join().unwrap();
return false;
}
// Jeśli jeszcze nie dodał, to dodaje teraz grupę główną do już obrobionych
if !master_of_group.contains(hash) {
master_of_group.insert(hash.clone());

View file

@ -676,10 +676,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
let (directory, file) = split_path(&file_entry.path);
let values: [(u32, &dyn ToValue); 7] = [
(ColumnsBigFiles::SelectionButton as u32, &false),
(
ColumnsBigFiles::Size as u32,
&(format!("{} ({} {})", size.file_size(options::BINARY).unwrap(), size, fl!("general_bytes"))),
),
(ColumnsBigFiles::Size as u32, &(size.file_size(options::BINARY).unwrap())),
(ColumnsBigFiles::Name as u32, &file),
(ColumnsBigFiles::Path as u32, &directory),
(

View file

@ -425,7 +425,11 @@ pub fn add_text_to_text_view(text_view: &TextView, string_to_append: &str) {
Some(t) => t.to_string(),
None => "".to_string(),
};
buffer.set_text(format!("{}\n{}", current_text, string_to_append).as_str());
if current_text.is_empty() {
buffer.set_text(string_to_append);
} else {
buffer.set_text(format!("{}\n{}", current_text, string_to_append).as_str());
}
}
pub fn set_buttons(hashmap: &mut HashMap<String, bool>, buttons_array: &[gtk::Widget], button_names: &[String]) {
@ -577,7 +581,6 @@ pub fn clean_invalid_headers(model: &gtk::ListStore, column_color: i32, column_p
}
// Non empty means that header points at reference folder
else {
// TODO verify how it works
'reference: loop {
if model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!("First deleted element, should be a header"); // First element should be header

View file

@ -38,11 +38,15 @@ const DEFAULT_DUPLICATE_REMOVE_AUTO_OUTDATED_CACHE: bool = true;
struct LoadSaveStruct {
loaded_items: HashMap<String, Vec<String>>,
text_view: gtk::TextView,
}
impl LoadSaveStruct {
pub fn new() -> Self {
Self { loaded_items: Default::default() }
pub fn with_text_view(text_view: gtk::TextView) -> Self {
Self {
loaded_items: Default::default(),
text_view,
}
}
pub fn get_vector_string(&self, key: String, default_value: Vec<String>) -> Vec<String> {
@ -66,7 +70,13 @@ impl LoadSaveStruct {
} else if item.is_empty() {
"".to_string()
} else {
println!("For key {}, found invalid {:?} result(not string)", key, item);
add_text_to_text_view(
&self.text_view,
&fl!(
"saving_loading_invalid_string",
generate_translation_hashmap(vec![("key", key), ("result", format!("{:?}", item))])
),
);
default_value
};
}
@ -86,7 +96,13 @@ impl LoadSaveStruct {
}
}
} else {
println!("For key {}, found invalid {:?} result(not string)", key, item);
add_text_to_text_view(
&self.text_view,
&fl!(
"saving_loading_invalid_int",
generate_translation_hashmap(vec![("key", key), ("result", format!("{:?}", item))])
),
);
default_value
};
}
@ -103,11 +119,23 @@ impl LoadSaveStruct {
} else if text == "true" || text == "1" {
true
} else {
println!("Failed to decode bool from \"{}\", found {}", key, item[0]);
add_text_to_text_view(
&self.text_view,
&fl!(
"saving_loading_decode_problem_bool",
generate_translation_hashmap(vec![("key", key), ("result", item[0].to_string())])
),
);
default_value
}
} else {
println!("For key {}, found invalid {:?} result(not bool)", key, item);
add_text_to_text_view(
&self.text_view,
&fl!(
"saving_loading_invalid_bool",
generate_translation_hashmap(vec![("key", key), ("result", format!("{:?}", item))])
),
);
default_value
};
}
@ -118,7 +146,10 @@ impl LoadSaveStruct {
// Bool, int, string
pub fn save_var<T: ToString>(&mut self, key: String, value: T) {
if self.loaded_items.contains_key(&key) {
println!("Already exists in hashmap key {}", key)
add_text_to_text_view(
&self.text_view,
&fl!("saving_loading_saving_same_keys", generate_translation_hashmap(vec![("key", key.clone())])),
);
}
self.loaded_items.insert(key, vec![value.to_string()]);
@ -153,18 +184,20 @@ impl LoadSaveStruct {
if !config_dir.is_dir() {
add_text_to_text_view(
text_view_errors,
format!(
"Cannot create or open save configuration file in path {} because already there is a folder.",
config_dir.display()
)
.as_str(),
&fl!(
"saving_loading_folder_config_instead_file",
generate_translation_hashmap(vec![("path", config_dir.display().to_string())])
),
);
return None;
}
} else if let Err(e) = fs::create_dir_all(config_dir) {
add_text_to_text_view(
text_view_errors,
format!("Failed configuration to create configuration folder {}, reason {}", config_dir.display(), e).as_str(),
&fl!(
"saving_loading_failed_to_create_configuration_folder",
generate_translation_hashmap(vec![("path", config_dir.display().to_string()), ("reason", e.to_string())])
),
);
return None;
}
@ -172,7 +205,13 @@ impl LoadSaveStruct {
let config_file_handler = match File::create(&config_file) {
Ok(t) => t,
Err(e) => {
add_text_to_text_view(text_view_errors, format!("Failed to create config file {}, reason {}", config_dir.display(), e).as_str());
add_text_to_text_view(
text_view_errors,
&fl!(
"saving_loading_failed_to_create_config_file",
generate_translation_hashmap(vec![("path", config_file.display().to_string()), ("reason", e.to_string())])
),
);
return None;
}
};
@ -181,7 +220,13 @@ impl LoadSaveStruct {
if !config_file.exists() || !config_file.is_file() {
if manual_execution {
// Don't show errors when there is no configuration file when starting app
add_text_to_text_view(text_view_errors, format!("Cannot load configuration from file {:?}.", config_file.display()).as_str());
add_text_to_text_view(
text_view_errors,
&fl!(
"saving_loading_failed_to_read_config_file",
generate_translation_hashmap(vec![("path", config_file.display().to_string())])
),
);
}
return None;
}
@ -189,7 +234,13 @@ impl LoadSaveStruct {
let config_file_handler = match File::open(&config_file) {
Ok(t) => t,
Err(e) => {
add_text_to_text_view(text_view_errors, format!("Failed to create config file {}, reason {}", config_dir.display(), e).as_str());
add_text_to_text_view(
text_view_errors,
&fl!(
"saving_loading_failed_to_create_config_file",
generate_translation_hashmap(vec![("path", config_file.display().to_string()), ("reason", e.to_string())])
),
);
return None;
}
};
@ -205,7 +256,13 @@ impl LoadSaveStruct {
if let Some((mut config_file_handler, config_file)) = self.open_save_file(text_view_errors, false, manual_execution) {
let mut loaded_data: String = String::new();
if let Err(e) = config_file_handler.read_to_string(&mut loaded_data) {
add_text_to_text_view(text_view_errors, format!("Failed to read data from file {:?}, reason {}", config_file, e).as_str());
add_text_to_text_view(
text_view_errors,
&fl!(
"saving_loading_failed_to_read_data_from_file",
generate_translation_hashmap(vec![("path", config_file.display().to_string()), ("reason", e.to_string())])
),
);
return;
}
@ -219,18 +276,29 @@ impl LoadSaveStruct {
self.loaded_items.entry(header.clone()).or_insert_with(Vec::new);
self.loaded_items.get_mut(&header).unwrap().push(line.to_string());
} else {
println!("Failed {} orphan data in line {}", line, index);
add_text_to_text_view(
text_view_errors,
&fl!(
"saving_loading_orphan_data",
generate_translation_hashmap(vec![("data", line.to_string()), ("index", index.to_string())])
),
);
}
}
let (_, hashmap_sl) = create_hash_map();
for setting in self.loaded_items.keys() {
if !hashmap_sl.contains_key(setting) {
println!("Setting {} is not valid", setting);
add_text_to_text_view(
text_view_errors,
&fl!("saving_loading_not_valid", generate_translation_hashmap(vec![("data", setting.to_string())])),
);
}
}
// dbg!(&self.loaded_items);
if manual_execution {
add_text_to_text_view(text_view_errors, &fl!("saving_loading_loading_success"));
}
}
}
@ -353,7 +421,7 @@ pub fn save_configuration(manual_execution: bool, upper_notebook: &GuiUpperNoteb
return;
}
let mut saving_struct = LoadSaveStruct::new();
let mut saving_struct = LoadSaveStruct::with_text_view(text_view_errors.clone());
let (hashmap_ls, _hashmap_sl) = create_hash_map();
@ -454,7 +522,7 @@ pub fn load_configuration(manual_execution: bool, upper_notebook: &GuiUpperNoteb
reset_text_view(&text_view_errors);
let mut loaded_entries = LoadSaveStruct::new();
let mut loaded_entries = LoadSaveStruct::with_text_view(text_view_errors.clone());
loaded_entries.open_and_read_content(&text_view_errors, manual_execution);
// Load here language, default system language could change value in settings so we don't want to lose this value
@ -569,10 +637,6 @@ pub fn load_configuration(manual_execution: bool, upper_notebook: &GuiUpperNoteb
} else {
settings.check_button_settings_load_at_start.set_active(false);
}
if manual_execution {
add_text_to_text_view(&text_view_errors, &fl!("saving_loading_reset_configuration"));
}
}
pub fn reset_configuration(manual_clearing: bool, upper_notebook: &GuiUpperNotebook, settings: &GuiSettings, text_view_errors: &TextView) {

View file

@ -24,9 +24,6 @@ window_progress_title = Scanning
general_ok_button = Ok
general_close_button = Close
general_bytes = bytes
general_lost = lost
# Main window
music_title_checkbox = Title
music_artist_checkbox = Artist
@ -340,10 +337,6 @@ settings_saving_button = Save configuration
settings_loading_button = Load configuration
settings_reset_button = Reset configuration
settings_load_orphan_data = Found invalid header in line {$line_number} \"{$line}\" when loading file {$name} (save file may be from different Czkawka version)
settings_load_invalid_bool_value = Found invalid header in line {$line_number} \"{$line}\" which isn't proper value(0/1/true/false) when loading file {$name}
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Opens folder where are stored txt files with cache.
@ -399,9 +392,23 @@ progress_all_stages = All Stages:{" "}
saving_loading_saving_success = Saved configuration to file { $name }.
saving_loading_saving_failure = Failed to save configuration data to file { $name }.
saving_loading_reset_configuration = Current configuration was cleared.
saving_loading_loading_success = Properly loaded configuration from file.
saving_loading_loading_success = Properly loaded app configuration.
saving_loading_invalid_string = For key "{ $key }" found invalid result - "{ $result }" which is not a string.
saving_loading_invalid_int = For key "{ $key }" found invalid result - "{ $result }" which is not a integer.
saving_loading_invalid_bool = For key "{ $key }" found invalid result - "{ $result }" which is not a bool.
saving_loading_decode_problem_bool = Failed to decode bool from key "{ $key }" found "{ $result }" but allowed values are 0, 1, true or false.
saving_loading_saving_same_keys = Trying to save setting with duplicated key "{ $key }".
saving_loading_failed_to_get_home_directory = Failed to get home directory to open/save config file.
saving_loading_folder_config_instead_file = Cannot create or open save configuration file in path "{ $path }" because already there is a folder.
saving_loading_failed_to_create_configuration_folder = Failed configuration to create configuration folder "{ $path }", reason "{ $reason }".
saving_loading_failed_to_create_config_file = Failed to create config file "{ $path }", reason "{ $reason }".
saving_loading_failed_to_read_config_file = Cannot load configuration from "{ $path }" because not exists or is not a file.
saving_loading_failed_to_read_data_from_file = Cannot read data from file "{ $path }", reason "{ $reason }".
saving_loading_orphan_data = Found orphan data "{ $data }" in line "{ $line }".
saving_loading_not_valid = Setting "{ $data }" not exists in current app version.
# Invalid symlinks
invalid_symlink_infinite_recursion = Infinite recursion
@ -416,7 +423,6 @@ about_window_motto = This program is free to use and will always be.
# Various dialog
dialogs_ask_next_time = Ask next time
reason_of_error = reason
delete_file_failed = Failed to remove file {$name}, reason {$reason}

View file

@ -20,8 +20,6 @@ window_progress_title = Skanowanie
# General
general_ok_button = Ok
general_close_button = Zamknij
general_bytes = bajtów
general_lost = zaprzepaszczono
# Main window
music_title_checkbox = Tytuł
music_artist_checkbox = Wykonawca
@ -41,7 +39,7 @@ duplicate_hash_type_tooltip =
Blake3 - kryptograficzna funkcja haszująca. Z racji połączenia szybkości i niskiej ilości kolizji jest to domyślny tryb.
CRC32 - prosta funkcja haszująca. Powinna być szybsza niż Blake3, lecz bardzo rzadko może mogą wystąpić kolizje hashy.
CRC32 - prosta funkcja haszująca. Powinna być szybsza niż Blake3, lecz bardzo rzadko może mogą wystąpić kolizje hashów.
XXH3 - zarówno pod względem jakości hashu jak i wydajności jest podobny do Blake3, dlatego te algorytmy mogą być używane wymiennie.
duplicate_check_method_tooltip =
@ -98,7 +96,7 @@ check_button_general_same_size_tooltip = Wyrzuca z wyników skanowania pliki, kt
main_label_size_bytes_tooltip = Rozmiar plików które będą zawarte przy przeszukiwaniu
# Upper window
upper_tree_view_included_folder_column_title = Foldery do Przeszukania
upper_tree_view_included_reference_column_title = Źródłowy Folder
upper_tree_view_included_reference_column_title = Foldery Referencyjne
upper_recursive_button = Rekursywnie
upper_recursive_button_tooltip = Jeśli zaznaczony, szuka plików i folderów również w katalogach wewnątrz, nawet jeśli nie znajdują się one bezpośrednio w tym folderze.
upper_manual_add_included_button = Ręcznie Dodaj
@ -107,21 +105,21 @@ upper_remove_included_button = Usuń
upper_manual_add_excluded_button = Ręcznie Dodaj
upper_add_excluded_button = Dodaj
upper_remove_excluded_button = Usuń
upper_manual_add_included_button_tooltip = Pozwala ręcznie dodać foldery do skanowania
upper_add_included_button_tooltip = Dodaje wybrany folder do przeskanowania
upper_remove_included_button_tooltip = Usuwa zaznaczony folder z listy do przeskanowania
upper_manual_add_excluded_button_tooltip = Pozwala ręcznie dodać foldery do ignorowania
upper_add_excluded_button_tooltip = Dodaje wybrany folder do ignorowanych
upper_remove_excluded_button_tooltip = Usuwa zaznaczony folder z ignorowanych
upper_manual_add_included_button_tooltip = Pozwala ręcznie dodać foldery do skanowania.
upper_add_included_button_tooltip = Dodaje wybrany folder do przeskanowania.
upper_remove_included_button_tooltip = Usuwa zaznaczony folder z listy do skanowania.
upper_manual_add_excluded_button_tooltip = Pozwala ręcznie dodać ignorowane foldery.
upper_add_excluded_button_tooltip = Dodaje wybrany folder do ignorowanych.
upper_remove_excluded_button_tooltip = Usuwa zaznaczony folder z ignorowanych.
upper_notebook_items_configuration = Konfiguracja Skanowania
upper_notebook_excluded_directories = Ignorowane Foldery
upper_notebook_included_directories = Przeszukiwane Foldery
upper_allowed_extensions_tooltip =
Dozwolone rozszerzenia muszą być oddzielone za pomocą przecinków - brak rozszerzeń oznacza ż wszystkie rozszerzenia są używane.
Dozwolone rozszerzenia muszą być oddzielone za pomocą przecinków - brak rozszerzeń oznacza że wszystkie rozszerzenia są używane.
Makra IMAGE, VIDEO, MUSIC, TEXT które dodają rozrzerzenia w paczkach, również są wspierane
Makra IMAGE, VIDEO, MUSIC, TEXT które dodają rozszerzenia w paczkach, również są wspierane.
Przykładowe użycie ".exe, IMAGE, VIDEO, .rar, 7z" oznacza że obrazy(np. jpg, png), widea(np. avi, mp4) oraz pliki z roszerzeniami exe, rar i 7z będą przeskanowane
Przykładowe użycie ".exe, IMAGE, VIDEO, .rar, 7z" oznacza że obrazy(np. jpg, png), widea(np. avi, mp4) oraz pliki z rozszerzeniami exe, rar i 7z będą przeskanowane.
upper_excluded_items_tooltip =
Ignorowane obiekty mogą zawierać *(oznaczający dowolny ciąg znaków) i muszą być oddzielone za pomocą przecinków.
Działa o wiele wolniej niż Ignorowane Foldery, dlatego należy używać tego ostrożnie.
@ -152,9 +150,9 @@ popover_custom_name_check_button_entry_tooltip =
popover_custom_regex_check_button_entry_tooltip =
Pozwala wyszukiwać rekordy za pomocą regexów.
W tym trybie przeszukiwanym tekstem jest pełna ścieżka(nazwa + ścieżka)
W tym trybie przeszukiwanym tekstem jest pełna ścieżka(nazwa pliku + ścieżka do niego).
Example usage:
Przykładowe użycie:
/usr/bin/ziemniak.txt może zostać znalezione with /ziem[a-z]+
Używana jest domyśla implementacja Rust regex o której użyciu można więcej przeczytać tutaj - https://docs.rs/regex.
@ -253,13 +251,6 @@ settings_notebook_videos = Podobne Wideo
## Multiple - settings used in multiple tabs
settings_multiple_delete_outdated_cache_checkbutton = Delete outdated cache entries automatically
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Dozwolone rozszerzenia muszą być oddzielone za pomocą przecinków - brak rozszerzeń oznacza że wszystkie rozszerzenia są używane.
Makra IMAGE, VIDEO, MUSIC, TEXT które dodają rozszerzenia w paczkach, również są wspierane
Przykładowe użycie ". exe, Image, Video,. rar, 7z" oznacza że obrazy(np. jpg, png), widea(np. avi, mp4) oraz pliki z rozszerzeniami exe, rar i 7z będą przeskanowane.
settings_multiple_image_preview_checkbutton_tooltip = Pokazuje podgląd obrazów po ich zaznaczeniu po prawej stronie aplikacji.
settings_multiple_image_preview_checkbutton = Pokazuj podgląd obrazów
settings_multiple_clear_cache_button_tooltip = Ręcznie czyści pamięć podręczną z nieaktualnych danych.
@ -281,7 +272,7 @@ settings_duplicates_prehash_checkbutton_tooltip =
Domyślnie jest zablokowane, ponieważ może powodować spowolnione skanowanie w niektórych sytuacjach.
Jest mocno polecane osobom które skanują tylko i wyłącznie katalogi zawierające dziesiątki lub setki tysięcy lub nawet miliony plików, ponieważ może to wielokrotnie przyspieszyć proces skanowania.
settings_duplicates_prehash_minimal_entry_tooltip = Minimalny rozmiar pliku, którego cząstowy hash będzie zapisywany do pamięci podręcznej.
settings_duplicates_prehash_minimal_entry_tooltip = Minimalny rozmiar pliku, którego cząstkowy hash będzie zapisywany do pamięci podręcznej.
settings_duplicates_hide_hard_link_button = Ukrywaj twarde dowiązania(nie działa na Windowsie)
settings_duplicates_prehash_checkbutton = Używaj pamięci podręcznej dla hashy cząstkowych
settings_duplicates_minimal_size_cache_label = Wielkość pliku, od którego hash będzie zapisywany w pamięci podręcznej
@ -295,44 +286,40 @@ settings_reset_button_tooltip = Resetuje aktualne ustawienia do domyślnie używ
settings_saving_button = Zapisanie ustawień
settings_loading_button = Załadowanie ustawień
settings_reset_button = Reset ustawień
settings_load_orphan_data = Znaleziono dane bez wlaściciela w lini { $line_number } \"{ $line }\" podczas ładowania pliku { $name } (plik zapisu może pochodzić z innej wersji Czkawki)
settings_load_invalid_bool_value = Znaleziono nieprawidłowe dane w linii { $line_number } \"{ $line }\" które nie są poprawną wartością binarną(0/1/true/false) w pliku { $name }
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Otwiera folder gdzie przechowywana jest pamięć podręczna aplikacji.
Jej ręczne modyfikowanie może powodować wyświetlanie niepoprawnych wyników lub jej uszkodzenie spowoduje koniecznośc ponownej generacji, lecz umożliwia też oszczędzenie czasu przy przesuwaniu większej ilości plików.
Jej ręczne modyfikowanie może powodować wyświetlanie niepoprawnych wyników lub jej uszkodzenie spowoduje konieczność ponownej generacji, lecz umożliwia też oszczędzenie czasu przy przesuwaniu większej ilości plików.
Można pliki kopiować pomiędzy komputerami by zaoszczędzić czas na hashowaniu plików(oczywiście tylko gdy dane są przechowywane w identycznej strukturze katalogów na komputerach).
settings_folder_settings_open_tooltip =
Otwiera folder gdzie Czkawka przechowuje ustawienia.
Ich ręczna zmiana, może spowodować różne błędy i kataklizmy, którym fiziologom się nie śniły.
Ich ręczna zmiana, może spowodować różne błędy i kataklizmy, o których fizjologom się nie śniło.
settings_folder_cache_open = Otwórz folder pamięci podręcznej
settings_folder_settings_open = Otwórz folder ustawień
# Compute results
compute_stopped_by_user = Przeszukiwanie zostało zatrzymane przez użytkownika
compute_found = Znaleziono
compute_duplicated_files_in = duplikatów w
compute_groups_which_took = grupach, które zabrały
compute_groups = grup
compute_duplicates_for = duplikatów dla
compute_empty_folders = pustych folderów
compute_empty_files = pustych plików
compute_biggest_files = największych plików
compute_temporary_files = plików tymczasowych
compute_similar_image = obrazów
compute_similar_videos = plików wideo
compute_music_files = plików muzycznych
compute_symlinks = niepoprawnych linków symbolicznych
compute_broken_files = zepsutych plików
compute_found_duplicates_hash_size = Znaleziono { $number_files } duplikatów w { $number_groups } grupach, które zajmują { $size }
compute_found_duplicates_name = Znaleziono { $number_files } duplikatów w { $number_groups } grupach
compute_found_empty_folders = Znaleziono { $number_files } pustych folderów
compute_found_empty_files = Znaleziono { $number_files } pustych plików
compute_found_big_files = Znaleziono { $number_files } największych plików
compute_found_temporary_files = Znaleziono { $number_files } tymczasowych plików
compute_found_images = Znaleziono { $number_files } podobnych obrazów w { $number_groups } grupach
compute_found_videos = Znaleziono { $number_files } podobnych plików wideo w { $number_groups } grupach
compute_found_music = Znaleziono { $number_files } podobnych plików muzycznych w { $number_groups } grupach
compute_found_invalid_symlinks = Znaleziono { $number_files } niepoprawnych dowiązań symbolicznych
compute_found_broken_files = Znaleziono { $number_files } uszkodzonych plików
# Progress window
progress_scanning_general_file = Skanowanie { $file_number } pliku
progress_scanning_broken_files = Sprawdzanie { $file_checked }/{ $all_files } pliku
progress_scanning_video = Hashowanie { $file_checked }/{ $all_files } pliku wideo
progress_scanning_image = Hashowanie { $file_checked }/{ $all_files } obrazu
progress_comparing_image_hashes = Porównywanie { $file_checked }/{ $all_files } hashu obrazu
progress_scanning_music_tags_end = Porównywanie tagów { $file_checked }/{ $all_files } pliku audio
progress_scanning_music_tags = Sczytywanie tagów { $file_checked }/{ $all_files } pliku audio
progress_scanning_empty_folders = Przeszukiwanie { $folder_number } folderu
@ -343,9 +330,23 @@ progress_analyzed_full_hash = Obliczanie pełnego hashu { $file_checked }/{ $all
progress_current_stage = Aktualny Etap:{ " " }
progress_all_stages = Wszystkie Etapy:{ " " }
# Saving loading
saving_loading_saving_success = Zapisano konfigurację do pliku
saving_loading_saving_success = Zapisano konfigurację do pliku { $name }.
saving_loading_saving_failure = Nie udało zapisać się konfiguracji do pliku { $name }.
saving_loading_reset_configuration = Przywrócono domyślą konfigurację.
saving_loading_loading_success = Poprawnie załadowano konfigurację z pliku
saving_loading_loading_success = Poprawnie załadowano ustawienia aplikacji.
saving_loading_invalid_string = Dla klucza "{ $key }" znaleziono niepoprawną wartość - "{ $result }" która nie jest jedno-liniowym ciągiem znaków.
saving_loading_invalid_int = Dla klucza "{ $key }" znaleziono niepoprawną wartość - "{ $result }" która nie jest liczbą całkowitą.
saving_loading_invalid_bool = Dla klucza "{ $key }" znaleziono niepoprawną wartość - "{ $result }" która nie jest typem logicznym.
saving_loading_decode_problem_bool = Nie udało się zdekodować wartości z klucza "{ $key }", znaleziono "{ $result }" ale dozwolone wartości to 0, 1, true lub false.
saving_loading_saving_same_keys = Próba zapisania ustawień z zduplikowanym kluczem "{ $key }".
saving_loading_failed_to_get_home_directory = Nie udało się pobrać informacji o katalogu domowym by otworzyć i zapisać plik konfiguracyjny.
saving_loading_folder_config_instead_file = Nie można utworzyć lub otworzyć pliku konfiguracyjnego w ścieżce "{ $path }", ponieważ w danej ścieżce istnieje już folder.
saving_loading_failed_to_create_configuration_folder = Nie udało się utworzyć folderu konfiguracyjnego "{ $path }", powód "{ $reason }".
saving_loading_failed_to_create_config_file = Nie udało się utworzyć pliku konfiguracyjnego "{ $path }", powód "{ $reason }".
saving_loading_failed_to_read_config_file = Nie można załadować konfiguracji z "{ $path }" ponieważ nie istnieje lub nie jest plikiem.
saving_loading_failed_to_read_data_from_file = Nie można odczytać danych z pliku "{ $path }", powód "{ $reason }".
saving_loading_orphan_data = Znaleziono osierocone dane "{ $data }" w wierszu "{ $line }".
saving_loading_not_valid = Ustawienie "{ $data }" nie istnieje w bieżącej wersji aplikacji.
# Invalid symlinks
invalid_symlink_infinite_recursion = Nieskończona rekurencja
invalid_symlink_non_existent_destination = Nie istniejący docelowy plik
@ -361,44 +362,43 @@ about_window_motto =
ale za to przynajmniej kod jest nieczytelny.
# Various dialog
dialogs_ask_next_time = Pytaj następnym razem
reason_of_error = powód
delete_file_failed = Nie udało się usunąć pliku { $name }, powód { $reason }
delete_title_dialog = Potwierdzenie usunięcia
delete_question_label = Czy na pewno usunąć te pliki?
delete_all_files_in_group_title = Potwierdzenie usunięcia wszystkich plików w grupie
delete_all_files_in_group_label1 = W niektórych grupach zaznaczono wszystkie rekordy.
delete_all_files_in_group_label2 = Czy na pewno je usunąć?
delete_folder_failed = Nie udało się usunąć folderu { $name } ponieważ nie istnieje, uprawnienia nie są wystarczające lub nie jest pusty.
delete_items_label = { $items } plików zostanie usuniętych.
delete_folder_failed = Nie udało się usunąć folderu { $dir } ponieważ nie istnieje, uprawnienia nie są wystarczające lub nie jest pusty.
delete_items_label = { $items } plików będzie usuniętych.
delete_items_groups_label = { $items } plików z { $groups } grup będzie usuniętych.
hardlink_failed = Nie udało się utworzyć twardego dowiązania
hard_sym_invalid_selection_title_dialog = Niepoprawne zaznaczenie w niektórych grupach
hard_sym_invalid_selection_label_1 = W niektórych grupach zaznaczono tylko 1 rekord który zostanie zignorowany.
hard_sym_invalid_selection_label_1 = W niektórych grupach zaznaczono tylko 1 rekord, który zostanie zignorowany.
hard_sym_invalid_selection_label_2 = Aby móc używać dowiązań, należy zaznaczyć przynajmniej 2 obiekty w danej grupie.
hard_sym_invalid_selection_label_3 = Pierwszy pozostaje nienaruszony a drugi i kolejne są dowiązywane do tego pierwszego.
hard_sym_link_title_dialog = Potwierdzenie dowiązania
hard_sym_link_label = Czy na pewno dowiązać te pliki?
move_folder_failed = Nie można przenieść folderu { $name }, powód { $reason }
move_file_failed = Nie można przenieść pliku { $name }, powód { $reason }
move_files_title_dialog = Wybierz folder do którego zostaną przeniesione pliki
move_files_choose_more_than_1_path = Można przenieść elementy tylko do 1 folderu, zaznaczono { $path_number }
move_files_title_dialog = Wybierz folder, do którego zostaną przeniesione pliki
move_files_choose_more_than_1_path = Można przenieść elementy tylko do 1 folderu, zaznaczono { $path_number }.
move_stats = Poprawnie przeniesiono { $num_files }/{ $all_files } elementów
save_results_to_file = Zapisano wyniki do pliku { $name }
search_not_choosing_any_music = BŁĄD: Musisz zaznaczyć przynajmniej jeden pole, według którego będą wyszukiwane podobne pliki muzyczne.
include_folders_dialog_title = Foldery do przeszukiwania
exclude_folders_dialog_title = Foldery do ignorowania
include_manually_directories_dialog_title = Dodaj katalogi ręcznie
cache_properly_cleared = Poprawnie wyczyszczono pamięc podręczną
cache_properly_cleared = Poprawnie wyczyszczono pamięć podręczną
cache_clear_duplicates_title = Czyszczenie pamięci podręcznej duplikatów
cache_clear_similar_images_title = Czyszczenie pamięci podręcznej podobnych obrazów
cache_clear_similar_videos_title = Czyszczenie pamięci podręcznej podobnych plików Wideo
cache_clear_similar_videos_title = Czyszczenie pamięci podręcznej podobnych plików wideo
cache_clear_message_label_1 = Czy na pewno chcesz oczyścić pamięć podręczną z przestarzałych wpisów?
cache_clear_message_label_2 = Ta operacja usunie wszystkie rekordy, które wskazują na nieistniejące pliki.
cache_clear_message_label_3 = Może spowodować to przyspieszenie ładowania i zapisywania danych do pamięci w trakcie skanowania.
cache_clear_message_label_4 = OSTRZEŻENIE: Usunięte zostaną wszystkie rekordy z odpiętych dyskach zewnętrznych i konieczne będzie ich ponowne sprawdzenie po podpięciu.
# Show preview
preview_temporary_file = Nie udało się otworzyć tymczasowego obrazu { $name }, powód { $reason }
preview_0_size = Nie można stworzyć podglądu obrazu { $name }, z wysokością lub szerokością 0 pikseli
preview_temporary_image_save = Nie udało się zapisać tymczasowego obrazu do { $name }, powód { $reason }
preview_temporary_image_remove = Nie udało się usunąć tymczasowego obrazu { $name }, powód { $reason }
preview_failed_to_create_cache_dir = Nie udało stworzyć się katalogu { $name } wymaganego do stworzenia podglądu obrazu, powód { $reason }
preview_temporary_file = Nie udało się otworzyć tymczasowego obrazu { $name }, powód { $reason }.
preview_0_size = Nie można stworzyć podglądu obrazu { $name }, z wysokością lub szerokością 0 pikseli.
preview_temporary_image_save = Nie udało się zapisać tymczasowego obrazu do { $name }, powód { $reason }.
preview_temporary_image_remove = Nie udało się usunąć tymczasowego obrazu { $name }, powód { $reason }.
preview_failed_to_create_cache_dir = Nie udało stworzyć się katalogu { $name } wymaganego do stworzenia podglądu obrazu, powód { $reason }.

View file

@ -7,6 +7,9 @@ with open('i18n/' + base_translation + "/czkawka_gui.ftl", 'r') as file:
for line in base_translation_file_content:
if line.find("=") != -1:
first_split = line.split("=")[0].strip()
# Debug check, check for usage of AAAAA in result to see which esults are unused
# To check in what exactly places are usused, remove -c parameter
# print("rg \"" + first_split + "\" czkawka_gui/src -c;echo \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - "+first_split+"\"")
try:
base_keywords.index(first_split)
print("Duplicated member " + first_split +" in base translation")

View file

@ -26,3 +26,10 @@ apps:
- home
- removable-media
- udisks2
slots:
- dbus-daemon
slots:
dbus-daemon:
interface: dbus
bus: session
name: pl.qarmin.czkawka