Skip to content

Commit 42d1cb7

Browse files
authored
Create localization.rs
1 parent 7db63c1 commit 42d1cb7

File tree

1 file changed

+377
-0
lines changed

1 file changed

+377
-0
lines changed

src/localization.rs

Lines changed: 377 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,377 @@
1+
use std::collections::HashMap;
2+
3+
/// Supported languages
4+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5+
pub enum Language {
6+
English,
7+
Arabic,
8+
French,
9+
Chinese,
10+
}
11+
12+
pub struct Localizer {
13+
translations: HashMap<&'static str, HashMap<Language, &'static str>>,
14+
}
15+
16+
impl Localizer {
17+
pub fn new() -> Self {
18+
let mut translations = HashMap::new();
19+
20+
translations.insert(
21+
"theme_label",
22+
HashMap::from([
23+
(Language::English, "Theme:"),
24+
(Language::Arabic, "المظهر:"),
25+
(Language::French, "Thème :"),
26+
(Language::Chinese, "主题:"),
27+
]),
28+
);
29+
30+
translations.insert(
31+
"switch_light_mode",
32+
HashMap::from([
33+
(Language::English, "Switch to Light Mode"),
34+
(Language::Arabic, "التحويل إلى الوضع الفاتح"),
35+
(Language::French, "Passer en mode clair"),
36+
(Language::Chinese, "切换到浅色模式"),
37+
]),
38+
);
39+
40+
translations.insert(
41+
"switch_dark_mode",
42+
HashMap::from([
43+
(Language::English, "Switch to Dark Mode"),
44+
(Language::Arabic, "التحويل إلى الوضع الداكن"),
45+
(Language::French, "Passer en mode sombre"),
46+
(Language::Chinese, "切换到深色模式"),
47+
]),
48+
);
49+
50+
translations.insert(
51+
"operation_in_progress",
52+
HashMap::from([
53+
(Language::English, "Operation in progress..."),
54+
(Language::Arabic, "العملية جارية..."),
55+
(Language::French, "Opération en cours..."),
56+
(Language::Chinese, "操作进行中..."),
57+
]),
58+
);
59+
60+
translations.insert(
61+
"connect_to_ssh",
62+
HashMap::from([
63+
(Language::English, "Connect to SSH Server"),
64+
(Language::Arabic, "الاتصال بخادم SSH"),
65+
(Language::French, "Se connecter au serveur SSH"),
66+
(Language::Chinese, "连接到SSH服务器"),
67+
]),
68+
);
69+
70+
translations.insert(
71+
"saved_connections",
72+
HashMap::from([
73+
(Language::English, "Saved Connections:"),
74+
(Language::Arabic, "الاتصالات المحفوظة:"),
75+
(Language::French, "Connexions enregistrées :"),
76+
(Language::Chinese, "已保存的连接:"),
77+
]),
78+
);
79+
80+
translations.insert(
81+
"no_saved_connections",
82+
HashMap::from([
83+
(Language::English, "No saved connections."),
84+
(Language::Arabic, "لا توجد اتصالات محفوظة."),
85+
(Language::French, "Aucune connexion enregistrée."),
86+
(Language::Chinese, "没有已保存的连接。"),
87+
]),
88+
);
89+
90+
translations.insert(
91+
"select_connection_combo_label",
92+
HashMap::from([
93+
(Language::English, "Select"),
94+
(Language::Arabic, "اختر"),
95+
(Language::French, "Sélectionner"),
96+
(Language::Chinese, "选择"),
97+
]),
98+
);
99+
100+
translations.insert(
101+
"choose_a_connection",
102+
HashMap::from([
103+
(Language::English, "Choose a connection"),
104+
(Language::Arabic, "اختر اتصالاً"),
105+
(Language::French, "Choisissez une connexion"),
106+
(Language::Chinese, "选择一个连接"),
107+
]),
108+
);
109+
110+
translations.insert(
111+
"hostname_label",
112+
HashMap::from([
113+
(Language::English, "Hostname:"),
114+
(Language::Arabic, "اسم المضيف:"),
115+
(Language::French, "Nom d'hôte :"),
116+
(Language::Chinese, "主机名:"),
117+
]),
118+
);
119+
120+
translations.insert(
121+
"username_label",
122+
HashMap::from([
123+
(Language::English, "Username:"),
124+
(Language::Arabic, "اسم المستخدم:"),
125+
(Language::French, "Nom d'utilisateur :"),
126+
(Language::Chinese, "用户名:"),
127+
]),
128+
);
129+
130+
translations.insert(
131+
"password_label",
132+
HashMap::from([
133+
(Language::English, "Password:"),
134+
(Language::Arabic, "كلمة المرور:"),
135+
(Language::French, "Mot de passe :"),
136+
(Language::Chinese, "密码:"),
137+
]),
138+
);
139+
140+
translations.insert(
141+
"port_label",
142+
HashMap::from([
143+
(Language::English, "Port:"),
144+
(Language::Arabic, "المنفذ:"),
145+
(Language::French, "Port :"),
146+
(Language::Chinese, "端口:"),
147+
]),
148+
);
149+
150+
translations.insert(
151+
"save_current_connection",
152+
HashMap::from([
153+
(Language::English, "Save Current Connection"),
154+
(Language::Arabic, "حفظ الاتصال الحالي"),
155+
(Language::French, "Enregistrer la connexion"),
156+
(Language::Chinese, "保存当前连接"),
157+
]),
158+
);
159+
160+
translations.insert(
161+
"connect_button",
162+
HashMap::from([
163+
(Language::English, "Connect"),
164+
(Language::Arabic, "اتصال"),
165+
(Language::French, "Se connecter"),
166+
(Language::Chinese, "连接"),
167+
]),
168+
);
169+
170+
translations.insert(
171+
"ssh_file_manager",
172+
HashMap::from([
173+
(Language::English, "SSH File Manager"),
174+
(Language::Arabic, "مدير ملفات SSH"),
175+
(Language::French, "Gestionnaire de fichiers SSH"),
176+
(Language::Chinese, "SSH文件管理器"),
177+
]),
178+
);
179+
180+
translations.insert(
181+
"current_path_label",
182+
HashMap::from([
183+
(Language::English, "Current Path:"),
184+
(Language::Arabic, "المسار الحالي:"),
185+
(Language::French, "Chemin actuel :"),
186+
(Language::Chinese, "当前路径:"),
187+
]),
188+
);
189+
190+
translations.insert(
191+
"create_directory_label",
192+
HashMap::from([
193+
(Language::English, "Create Directory:"),
194+
(Language::Arabic, "إنشاء مجلد:"),
195+
(Language::French, "Créer un répertoire :"),
196+
(Language::Chinese, "创建目录:"),
197+
]),
198+
);
199+
200+
translations.insert(
201+
"create_file_label",
202+
HashMap::from([
203+
(Language::English, "Create File:"),
204+
(Language::Arabic, "إنشاء ملف:"),
205+
(Language::French, "Créer un fichier :"),
206+
(Language::Chinese, "创建文件:"),
207+
]),
208+
);
209+
210+
translations.insert(
211+
"create_label",
212+
HashMap::from([
213+
(Language::English, "Create"),
214+
(Language::Arabic, "إنشاء"),
215+
(Language::French, "Créer"),
216+
(Language::Chinese, "创建"),
217+
]),
218+
);
219+
220+
translations.insert(
221+
"directory_name_empty_error",
222+
HashMap::from([
223+
(Language::English, "Directory name cannot be empty."),
224+
(Language::Arabic, "لا يمكن أن يكون اسم الدليل فارغاً."),
225+
(
226+
Language::French,
227+
"Le nom du répertoire ne peut pas être vide.",
228+
),
229+
(Language::Chinese, "目录名称不能为空。"),
230+
]),
231+
);
232+
233+
translations.insert(
234+
"file_name_empty_error",
235+
HashMap::from([
236+
(Language::English, "File name cannot be empty."),
237+
(Language::Arabic, "لا يمكن أن يكون اسم الملف فارغاً."),
238+
(Language::French, "Le nom du fichier ne peut pas être vide."),
239+
(Language::Chinese, "文件名不能为空。"),
240+
]),
241+
);
242+
243+
translations.insert(
244+
"up_button",
245+
HashMap::from([
246+
(Language::English, "Up"),
247+
(Language::Arabic, "أعلى"),
248+
(Language::French, "Haut"),
249+
(Language::Chinese, "向上"),
250+
]),
251+
);
252+
253+
translations.insert(
254+
"home_button",
255+
HashMap::from([
256+
(Language::English, "Home"),
257+
(Language::Arabic, "الرئيسية"),
258+
(Language::French, "Accueil"),
259+
(Language::Chinese, "主页"),
260+
]),
261+
);
262+
263+
translations.insert(
264+
"disconnect_button",
265+
HashMap::from([
266+
(Language::English, "Disconnect"),
267+
(Language::Arabic, "قطع الاتصال"),
268+
(Language::French, "Déconnecter"),
269+
(Language::Chinese, "断开连接"),
270+
]),
271+
);
272+
273+
translations.insert(
274+
"download_button",
275+
HashMap::from([
276+
(Language::English, "Download"),
277+
(Language::Arabic, "تنزيل"),
278+
(Language::French, "Télécharger"),
279+
(Language::Chinese, "下载"),
280+
]),
281+
);
282+
283+
translations.insert(
284+
"delete_button",
285+
HashMap::from([
286+
(Language::English, "Delete"),
287+
(Language::Arabic, "حذف"),
288+
(Language::French, "Supprimer"),
289+
(Language::Chinese, "删除"),
290+
]),
291+
);
292+
293+
translations.insert(
294+
"modify_button",
295+
HashMap::from([
296+
(Language::English, "Modify"),
297+
(Language::Arabic, "تعديل"),
298+
(Language::French, "Modifier"),
299+
(Language::Chinese, "修改"),
300+
]),
301+
);
302+
303+
translations.insert(
304+
"rename_button",
305+
HashMap::from([
306+
(Language::English, "Rename"),
307+
(Language::Arabic, "إعادة تسمية"),
308+
(Language::French, "Renommer"),
309+
(Language::Chinese, "重命名"),
310+
]),
311+
);
312+
313+
translations.insert(
314+
"edit_file_window",
315+
HashMap::from([
316+
(Language::English, "Edit File"),
317+
(Language::Arabic, "تحرير الملف"),
318+
(Language::French, "Modifier le fichier"),
319+
(Language::Chinese, "编辑文件"),
320+
]),
321+
);
322+
323+
translations.insert(
324+
"editing_label",
325+
HashMap::from([
326+
(Language::English, "Editing:"),
327+
(Language::Arabic, "تحرير:"),
328+
(Language::French, "Édition :"),
329+
(Language::Chinese, "编辑中:"),
330+
]),
331+
);
332+
333+
translations.insert(
334+
"save_button",
335+
HashMap::from([
336+
(Language::English, "Save"),
337+
(Language::Arabic, "حفظ"),
338+
(Language::French, "Enregistrer"),
339+
(Language::Chinese, "保存"),
340+
]),
341+
);
342+
343+
translations.insert(
344+
"cancel_button",
345+
HashMap::from([
346+
(Language::English, "Cancel"),
347+
(Language::Arabic, "إلغاء"),
348+
(Language::French, "Annuler"),
349+
(Language::Chinese, "取消"),
350+
]),
351+
);
352+
353+
translations.insert(
354+
"upload_file_button",
355+
HashMap::from([
356+
(Language::English, "Upload File"),
357+
(Language::Arabic, "رفع ملف"),
358+
(Language::French, "Téléverser un fichier"),
359+
(Language::Chinese, "上传文件"),
360+
]),
361+
);
362+
363+
Localizer { translations }
364+
}
365+
366+
pub fn t(&self, lang: Language, key: &str) -> &str {
367+
if let Some(map) = self.translations.get(key) {
368+
if let Some(value) = map.get(&lang) {
369+
return value;
370+
}
371+
}
372+
self.translations
373+
.get(key)
374+
.and_then(|m| m.get(&Language::English))
375+
.map_or("MISSING_TRANSLATION", |v| v)
376+
}
377+
}

0 commit comments

Comments
 (0)