Skip to content

Commit c6faee8

Browse files
committed
Translations
1 parent 94591cc commit c6faee8

8 files changed

Lines changed: 255 additions & 123 deletions

File tree

Cargo.lock

Lines changed: 63 additions & 62 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

czkawka_core/src/common.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,17 @@ pub fn get_number_of_threads() -> usize {
166166

167167
fn filtering_messages(record: &Record) -> bool {
168168
if let Some(module_path) = record.module_path() {
169-
["krokiet", "czkawka_core", "czkawka_gui"].iter().any(|t| module_path.starts_with(t))
169+
// if !["krokiet", "czkawka_core", "czkawka_gui", "log_panics", "smithay_client_toolkit", "sctk_adwaita"]
170+
// .iter()
171+
// .any(|t| module_path.starts_with(t))
172+
// {
173+
// println!("{:?}", module_path);
174+
// return true;
175+
// } else {
176+
// return false;
177+
// }
178+
179+
["krokiet", "czkawka_core", "czkawka_gui", "log_panics"].iter().any(|t| module_path.starts_with(t))
170180
} else {
171181
true
172182
}

krokiet/i18n/en/krokiet.ftl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,28 @@ rust_saved_preset = Saved preset { $preset_idx }
5454
rust_cannot_save_preset = Cannot save preset { $preset_idx } - reason { $reason }
5555
rust_reset_preset = Reset preset { $preset_idx }
5656
57+
# Slint translations, but in arrays
58+
59+
column_selection = Selection
60+
column_size = Size
61+
column_file_name = File Name
62+
column_path = Path
63+
column_modification_date = Modification Date
64+
column_similarity = Similarity
65+
column_dimensions = Dimensions
66+
column_title = Title
67+
column_artist = Artist
68+
column_year = Year
69+
column_bitrate = Bitrate
70+
column_length = Length
71+
column_genre = Genre
72+
column_type_of_error = Type of Error
73+
column_symlink_name = Symlink Name
74+
column_symlink_folder = Symlink Folder
75+
column_destination_path = Destination Path
76+
column_current_extension = Current Extension
77+
column_proper_extension = Proper Extension
78+
5779
# Slint translations
5880
yes_button = Yes
5981
no_button = No

krokiet/i18n/pl/krokiet.ftl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,28 @@ rust_saved_preset = Zapisano preset { $preset_idx }
5454
rust_cannot_save_preset = Nie można zapisać presetu { $preset_idx } - powód: { $reason }
5555
rust_reset_preset = Zresetowano preset { $preset_idx }
5656
57+
# Slint translations, but in arrays
58+
59+
column_selection = Zaznaczenie
60+
column_size = Rozmiar
61+
column_file_name = Nazwa pliku
62+
column_path = Ścieżka
63+
column_modification_date = Data modyfikacji
64+
column_similarity = Podobieństwo
65+
column_dimensions = Wymiary
66+
column_title = Tytuł
67+
column_artist = Artysta
68+
column_year = Rok
69+
column_bitrate = Przepływność
70+
column_length = Długość
71+
column_genre = Gatunek
72+
column_type_of_error = Typ błędu
73+
column_symlink_name = Nazwa dowiązania symbolicznego
74+
column_symlink_folder = Folder dowiązania symbolicznego
75+
column_destination_path = Ścieżka docelowa
76+
column_current_extension = Obecne rozszerzenie
77+
column_proper_extension = Właściwe rozszerzenie
78+
5779
# Slint translations
5880
yes_button = Tak
5981
no_button = Nie

krokiet/src/connect_translation.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ pub(crate) fn change_language(app: &MainWindow) {
7878
// This is ugly workaround for missing fluent language support in slint
7979
fn translate_items(app: &MainWindow) {
8080
let translation = app.global::<Translations>();
81+
let settings = app.global::<Settings>();
8182

8283
translation.set_yes_button_text(flk!("yes_button").into());
8384
translation.set_no_button_text(flk!("no_button").into());
@@ -264,6 +265,43 @@ fn translate_items(app: &MainWindow) {
264265
];
265266

266267
gui_state.set_sort_results_list(ModelRc::new(VecModel::from(sort_model.to_vec())));
268+
269+
let selection = flk!("column_selection");
270+
let size = flk!("column_size");
271+
let file_name = flk!("column_file_name");
272+
let path = flk!("column_path");
273+
let mod_date = flk!("column_modification_date");
274+
let similarity = flk!("column_similarity");
275+
let dimensions = flk!("column_dimensions");
276+
let title = flk!("column_title");
277+
let artist = flk!("column_artist");
278+
let year = flk!("column_year");
279+
let bitrate = flk!("column_bitrate");
280+
let length = flk!("column_length");
281+
let genre = flk!("column_genre");
282+
let type_of_error = flk!("column_type_of_error");
283+
let symlink_name = flk!("column_symlink_name");
284+
let symlink_folder = flk!("column_symlink_folder");
285+
let destination_path = flk!("column_destination_path");
286+
let current_extension = flk!("column_current_extension");
287+
let proper_extension = flk!("column_proper_extension");
288+
289+
let fnm = |model: &[&str]| {
290+
let shared_string = model.iter().map(|s| (*s).into()).collect::<Vec<SharedString>>();
291+
ModelRc::new(VecModel::from(shared_string))
292+
};
293+
294+
settings.set_duplicates_column_name(fnm(&[&selection, &size, &file_name, &path, &mod_date]));
295+
settings.set_empty_folders_column_name(fnm(&[&selection, &file_name, &path, &mod_date]));
296+
settings.set_empty_files_column_name(fnm(&[&selection, &file_name, &path, &mod_date]));
297+
settings.set_temporary_files_column_name(fnm(&[&selection, &file_name, &path, &mod_date]));
298+
settings.set_big_files_column_name(fnm(&[&selection, &size, &file_name, &path, &mod_date]));
299+
settings.set_similar_images_column_name(fnm(&[&selection, &similarity, &size, &dimensions, &file_name, &path, &mod_date]));
300+
settings.set_similar_videos_column_name(fnm(&[&selection, &size, &file_name, &path, &mod_date]));
301+
settings.set_similar_music_column_name(fnm(&[&selection, &size, &file_name, &title, &artist, &year, &bitrate, &length, &genre, &path, &mod_date]));
302+
settings.set_invalid_symlink_column_name(fnm(&[&selection, &symlink_name, &symlink_folder, &destination_path, &mod_date]));
303+
settings.set_broken_files_column_name(fnm(&[&selection, &file_name, &path, &type_of_error, &size, &mod_date]));
304+
settings.set_bad_extensions_column_name(fnm(&[&selection, &file_name, &path, &current_extension, &proper_extension]));
267305
}
268306

269307
pub(crate) fn translate_select_mode(select_mode: SelectMode) -> SharedString {

krokiet/src/settings.rs

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use std::cmp::{max, min};
2+
use std::collections::BTreeMap;
23
use std::env;
34
use std::fmt::Debug;
45
use std::path::PathBuf;
@@ -14,7 +15,7 @@ use image_hasher::{FilterType, HashAlg};
1415
use log::{debug, error, info, warn};
1516
use once_cell::sync::Lazy;
1617
use serde::{Deserialize, Serialize};
17-
use slint::{ComponentHandle, Model, ModelRc, PhysicalSize, SharedString, WindowSize};
18+
use slint::{ComponentHandle, Model, ModelRc, PhysicalSize, SharedString, VecModel, WindowSize};
1819

1920
use crate::common::{create_excluded_directories_model_from_pathbuf, create_included_directories_model_from_pathbuf, create_vec_model_from_vec_string};
2021
use crate::connect_translation::{LANGUAGE_LIST, change_language, find_the_closest_language_idx_to_system};
@@ -291,6 +292,8 @@ pub struct SettingsCustom {
291292
pub broken_files_sub_archive: bool,
292293
#[serde(default)]
293294
pub broken_files_sub_image: bool,
295+
#[serde(default)]
296+
pub column_sizes: BTreeMap<String, Vec<f32>>,
294297
}
295298

296299
impl Default for SettingsCustom {
@@ -676,6 +679,35 @@ pub fn set_settings_to_gui(app: &MainWindow, custom_settings: &SettingsCustom) {
676679
settings.set_broken_files_sub_archive(custom_settings.broken_files_sub_archive);
677680
settings.set_broken_files_sub_image(custom_settings.broken_files_sub_image);
678681

682+
let sel_px = 35.0;
683+
let path_px = 350.0;
684+
let name_px = 100.0;
685+
let mod_px = 150.0;
686+
let size_px = 75.0;
687+
688+
let fnm = |default_model: &[f32], name: &str| {
689+
let model = default_model.iter().map(|s| (*s).clamp(30.0, 2500.0));
690+
let model = model
691+
.into_iter()
692+
.enumerate()
693+
.map(|(idx, data)| *custom_settings.column_sizes.get(name).cloned().unwrap_or_default().get(idx).unwrap_or(&data))
694+
.collect::<Vec<_>>();
695+
696+
ModelRc::new(VecModel::from(model))
697+
};
698+
699+
settings.set_duplicates_column_size(fnm(&[sel_px, size_px, name_px, path_px, mod_px], "duplicates"));
700+
settings.set_empty_folders_column_size(fnm(&[sel_px, name_px, path_px, mod_px], "empty_folders"));
701+
settings.set_empty_files_column_size(fnm(&[sel_px, name_px, path_px, mod_px], "empty_files"));
702+
settings.set_temporary_files_column_size(fnm(&[sel_px, name_px, path_px, mod_px], "temporary_files"));
703+
settings.set_big_files_column_size(fnm(&[sel_px, size_px, name_px, path_px, mod_px], "big_files"));
704+
settings.set_similar_images_column_size(fnm(&[sel_px, 80.0, 80.0, 80.0, name_px, path_px, mod_px], "similar_images"));
705+
settings.set_similar_videos_column_size(fnm(&[sel_px, size_px, name_px, path_px, mod_px], "similar_videos"));
706+
settings.set_similar_music_column_size(fnm(&[sel_px, size_px, name_px, 80.0, 80.0, 80.0, 80.0, 80.0, 80.0, path_px, mod_px], "similar_music"));
707+
settings.set_invalid_symlink_column_size(fnm(&[sel_px, name_px, path_px, path_px, mod_px], "invalid_symlink"));
708+
settings.set_broken_files_column_size(fnm(&[sel_px, name_px, path_px, 200.0, size_px, mod_px], "broken_files"));
709+
settings.set_bad_extensions_column_size(fnm(&[sel_px, name_px, path_px, 40.0, 200.0], "bad_extensions"));
710+
679711
// Clear text
680712
app.global::<GuiState>().set_info_text("".into());
681713
}
@@ -768,6 +800,20 @@ pub fn collect_settings(app: &MainWindow) -> SettingsCustom {
768800
let broken_files_sub_archive = settings.get_broken_files_sub_archive();
769801
let broken_files_sub_image = settings.get_broken_files_sub_image();
770802

803+
let column_sizes = BTreeMap::from([
804+
("duplicates".to_string(), settings.get_duplicates_column_size().iter().collect::<Vec<_>>()),
805+
("empty_folders".to_string(), settings.get_empty_folders_column_size().iter().collect::<Vec<_>>()),
806+
("empty_files".to_string(), settings.get_empty_files_column_size().iter().collect::<Vec<_>>()),
807+
("temporary_files".to_string(), settings.get_temporary_files_column_size().iter().collect::<Vec<_>>()),
808+
("big_files".to_string(), settings.get_big_files_column_size().iter().collect::<Vec<_>>()),
809+
("similar_images".to_string(), settings.get_similar_images_column_size().iter().collect::<Vec<_>>()),
810+
("similar_videos".to_string(), settings.get_similar_videos_column_size().iter().collect::<Vec<_>>()),
811+
("similar_music".to_string(), settings.get_similar_music_column_size().iter().collect::<Vec<_>>()),
812+
("invalid_symlink".to_string(), settings.get_invalid_symlink_column_size().iter().collect::<Vec<_>>()),
813+
("broken_files".to_string(), settings.get_broken_files_column_size().iter().collect::<Vec<_>>()),
814+
("bad_extensions".to_string(), settings.get_bad_extensions_column_size().iter().collect::<Vec<_>>()),
815+
]);
816+
771817
SettingsCustom {
772818
included_directories,
773819
included_directories_referenced,
@@ -822,6 +868,7 @@ pub fn collect_settings(app: &MainWindow) -> SettingsCustom {
822868
broken_files_sub_pdf,
823869
broken_files_sub_archive,
824870
broken_files_sub_image,
871+
column_sizes,
825872
}
826873
}
827874

krokiet/ui/main_lists.slint

Lines changed: 23 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {MainListModel} from "common.slint";
66
import {SettingsList} from "settings_list.slint";
77
import {GuiState} from "gui_state.slint";
88
import {About} from "about.slint";
9+
import {Settings} from "settings.slint";
910

1011
export component MainList {
1112
in-out property <[MainListModel]> duplicate_files_model: [];
@@ -34,16 +35,12 @@ export component MainList {
3435

3536
callback changed_current_tab();
3637

37-
out property <length> path_px: 350px;
38-
out property <length> name_px: 100px;
39-
out property <length> mod_px: 150px;
40-
out property <length> size_px: 75px;
4138
duplicates := SelectableTableView {
4239
visible: GuiState.active_tab == CurrentTab.DuplicateFiles;
4340
min-width: 200px;
4441
height: parent.height;
45-
columns: ["Selection", "Size", "File Name", "Path", "Modification Date"];
46-
column_sizes: [35px, size_px, name_px, path_px, mod_px];
42+
columns <=> Settings.duplicates_column_name;
43+
column_sizes <=> Settings.duplicates_column_size;
4744
values <=> duplicate_files_model;
4845
parentPathIdx: 3;
4946
fileNameIdx: 2;
@@ -53,8 +50,8 @@ export component MainList {
5350
visible: GuiState.active_tab == CurrentTab.EmptyFolders;
5451
min-width: 200px;
5552
height: parent.height;
56-
columns: ["Selection", "Folder Name", "Path", "Modification Date"];
57-
column_sizes: [35px, name_px, path_px, mod_px];
53+
columns <=> Settings.empty_folders_column_name;
54+
column_sizes <=> Settings.empty_folders_column_size;
5855
values <=> empty_folder_model;
5956
parentPathIdx: 2;
6057
fileNameIdx: 1;
@@ -64,8 +61,8 @@ export component MainList {
6461
visible: GuiState.active_tab == CurrentTab.BigFiles;
6562
min-width: 200px;
6663
height: parent.height;
67-
columns: ["Selection", "Size", "File Name", "Path", "Modification Date"];
68-
column_sizes: [35px, size_px, name_px, path_px, mod_px];
64+
columns <=> Settings.big_files_column_name;
65+
column_sizes <=> Settings.big_files_column_size;
6966
values <=> big_files_model;
7067
parentPathIdx: 3;
7168
fileNameIdx: 2;
@@ -75,8 +72,8 @@ export component MainList {
7572
visible: GuiState.active_tab == CurrentTab.EmptyFiles;
7673
min-width: 200px;
7774
height: parent.height;
78-
columns: ["Selection", "File Name", "Path", "Modification Date"];
79-
column_sizes: [35px, name_px, path_px, mod_px];
75+
columns <=> Settings.empty_files_column_name;
76+
column_sizes <=> Settings.empty_files_column_size;
8077
values <=> empty_files_model;
8178
parentPathIdx: 2;
8279
fileNameIdx: 1;
@@ -86,8 +83,8 @@ export component MainList {
8683
visible: GuiState.active_tab == CurrentTab.TemporaryFiles;
8784
min-width: 200px;
8885
height: parent.height;
89-
columns: ["Selection", "File Name", "Path", "Modification Date"];
90-
column_sizes: [35px, name_px, path_px, mod_px];
86+
columns <=> Settings.temporary_files_column_name;
87+
column_sizes <=> Settings.temporary_files_column_size;
9188
values <=> temporary_files_model;
9289
parentPathIdx: 2;
9390
fileNameIdx: 1;
@@ -97,16 +94,8 @@ export component MainList {
9794
visible: GuiState.active_tab == CurrentTab.SimilarImages;
9895
min-width: 200px;
9996
height: parent.height;
100-
columns: [
101-
"Selection",
102-
"Similarity",
103-
"Size",
104-
"Dimensions",
105-
"File Name",
106-
"Path",
107-
"Modification Date"
108-
];
109-
column_sizes: [35px, 80px, 80px, 80px, name_px, path_px, mod_px];
97+
columns <=> Settings.similar_images_column_name;
98+
column_sizes <=> Settings.similar_images_column_size;
11099
values <=> similar_images_model;
111100
parentPathIdx: 5;
112101
fileNameIdx: 4;
@@ -116,8 +105,8 @@ export component MainList {
116105
visible: GuiState.active_tab == CurrentTab.SimilarVideos;
117106
min-width: 200px;
118107
height: parent.height;
119-
columns: ["Selection", "Size", "File Name", "Path", "Modification Date"];
120-
column_sizes: [35px, size_px, name_px, path_px, mod_px];
108+
columns <=> Settings.similar_videos_column_name;
109+
column_sizes <=> Settings.similar_videos_column_size;
121110
values <=> similar_videos_model;
122111
parentPathIdx: 3;
123112
fileNameIdx: 2;
@@ -127,20 +116,8 @@ export component MainList {
127116
visible: GuiState.active_tab == CurrentTab.SimilarMusic;
128117
min-width: 200px;
129118
height: parent.height;
130-
columns: [
131-
"Selection",
132-
"Size",
133-
"File Name",
134-
"Title",
135-
"Artist",
136-
"Year",
137-
"Bitrate",
138-
"Length",
139-
"Genre",
140-
"Path",
141-
"Modification Date"
142-
];
143-
column_sizes: [35px, size_px, name_px, 80px, 80px, 80px, 80px, 80px, 80px, path_px, mod_px];
119+
columns <=> Settings.similar_music_column_name;
120+
column_sizes <=> Settings.similar_music_column_size;
144121
values <=> similar_music_model;
145122
parentPathIdx: 9;
146123
fileNameIdx: 2;
@@ -150,14 +127,8 @@ export component MainList {
150127
visible: GuiState.active_tab == CurrentTab.InvalidSymlinks;
151128
min-width: 200px;
152129
height: parent.height;
153-
columns: [
154-
"Selection",
155-
"Symlink Name",
156-
"Symlink Folder",
157-
"Destination Path",
158-
"Modification Date"
159-
];
160-
column_sizes: [35px, name_px, path_px, path_px, mod_px];
130+
columns <=> Settings.invalid_symlink_column_name;
131+
column_sizes <=> Settings.invalid_symlink_column_size;
161132
values <=> invalid_symlinks_model;
162133
parentPathIdx: 2;
163134
fileNameIdx: 1;
@@ -167,15 +138,8 @@ export component MainList {
167138
visible: GuiState.active_tab == CurrentTab.BrokenFiles;
168139
min-width: 200px;
169140
height: parent.height;
170-
columns: [
171-
"Selection",
172-
"File Name",
173-
"Path",
174-
"Type of Error",
175-
"Size",
176-
"Modification Date"
177-
];
178-
column_sizes: [35px, name_px, path_px, 200px, size_px, mod_px];
141+
columns <=> Settings.broken_files_column_name;
142+
column_sizes <=> Settings.broken_files_column_size;
179143
values <=> broken_files_model;
180144
parentPathIdx: 2;
181145
fileNameIdx: 1;
@@ -185,8 +149,8 @@ export component MainList {
185149
visible: GuiState.active_tab == CurrentTab.BadExtensions;
186150
min-width: 200px;
187151
height: parent.height;
188-
columns: ["Selection", "File Name", "Path", "Current Extension", "Proper Extension"];
189-
column_sizes: [35px, name_px, path_px, 40px, 200px];
152+
columns <=> Settings.bad_extensions_column_name;
153+
column_sizes <=> Settings.bad_extensions_column_size;
190154
values <=> bad_extensions_model;
191155
parentPathIdx: 2;
192156
fileNameIdx: 1;

0 commit comments

Comments
 (0)