ThreeDimensionModeller 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,754 @@
1
+ # =============================================================================
2
+ # Menu language for the text menu.
3
+ # requirement-python-cli-language — codes, the language leaf, and menu copy.
4
+ # requirement-python-oop — class MenuLanguage.
5
+ # =============================================================================
6
+ from __future__ import annotations
7
+
8
+ import os
9
+
10
+
11
+ class MenuLanguage:
12
+ """The thirteen menu languages, the saved code, and the words the menu prints.
13
+
14
+ English is the default when the leaf is missing, empty, or not one of the
15
+ codes. LANG is not read. THREEDIMENSIONMODELLER_LANG wins at startup and does not write
16
+ the leaf. A menu pick writes the leaf and updates this process.
17
+ """
18
+
19
+ CODES = (
20
+ ("en", "English", 41),
21
+ ("zh-Hans", "简体中文", 42),
22
+ ("zh-Hant", "繁體中文", 43),
23
+ ("es", "Español", 44),
24
+ ("ar", "العربية", 45),
25
+ ("fr", "Français", 46),
26
+ ("pt", "Português", 47),
27
+ ("ru", "Русский", 48),
28
+ ("de", "Deutsch", 49),
29
+ ("ja", "日本語", 50),
30
+ ("ko", "한국어", 51),
31
+ ("nl", "Nederlands", 52),
32
+ ("el", "Ελληνικά", 53),
33
+ )
34
+ BLOCK_FIRST = 40
35
+ BLOCK_LAST = 59
36
+ APP_DIR = "ThreeDimensionModeller"
37
+ LEAF_NAME = "language"
38
+
39
+ def __init__(self, logger=None, home=None) -> None:
40
+ self.logger = logger
41
+ if logger is not None:
42
+ logger.log_message("instantiated", component="MenuLanguage")
43
+ if home is None:
44
+ home = os.environ.get("HOME", "")
45
+ self.home = home
46
+ self._code = "en"
47
+ self.load()
48
+
49
+ def codes(self) -> tuple:
50
+ return tuple(code for code, _name, _number in self.CODES)
51
+
52
+ def endonym(self, code: str) -> str:
53
+ for item, name, _number in self.CODES:
54
+ if item == code:
55
+ return name
56
+ return ""
57
+
58
+ def number_for(self, code: str) -> int | None:
59
+ for item, _name, number in self.CODES:
60
+ if item == code:
61
+ return number
62
+ return None
63
+
64
+ def code_for_number(self, number: int) -> str | None:
65
+ for code, _name, item in self.CODES:
66
+ if item == number:
67
+ return code
68
+ return None
69
+
70
+ def leaf_path(self) -> str:
71
+ """The language leaf. Empty when this process has no home directory."""
72
+ if not self.home:
73
+ return ""
74
+ return os.path.join(self.home, ".local", self.APP_DIR, self.LEAF_NAME)
75
+
76
+ def code(self) -> str:
77
+ return self._code
78
+
79
+ def load(self) -> None:
80
+ """Pick the code for this process. Does not write the leaf.
81
+
82
+ THREEDIMENSIONMODELLER_LANG wins when it is one of the thirteen codes. Otherwise the
83
+ first line of the leaf is used. A missing, empty, or other line is English.
84
+ An other line is not rewritten.
85
+ """
86
+ forced = os.environ.get("THREEDIMENSIONMODELLER_LANG", "")
87
+ if forced in self.codes():
88
+ self._code = forced
89
+ return
90
+ self._code = self._read_leaf()
91
+
92
+ def _read_leaf(self) -> str:
93
+ path = self.leaf_path()
94
+ if not path or not os.path.isfile(path):
95
+ return "en"
96
+ try:
97
+ with open(path, "r", encoding="utf-8") as handle:
98
+ line = handle.readline()
99
+ except OSError:
100
+ return "en"
101
+ line = line.replace("\r", "").strip()
102
+ if line in self.codes():
103
+ return line
104
+ return "en"
105
+
106
+ def save(self, code: str) -> str:
107
+ """Write one code and switch this process. A failed write keeps the old code.
108
+
109
+ The message is in the language that is current after a success, and in
110
+ the language that was current before a failed write.
111
+ """
112
+ if code not in self.codes():
113
+ return self.text("save_failed")
114
+ path = self.leaf_path()
115
+ if not path:
116
+ return self.text("save_failed")
117
+ previous = self._code
118
+ try:
119
+ folder = os.path.dirname(path)
120
+ os.makedirs(folder, mode=0o700, exist_ok=True)
121
+ os.chmod(folder, 0o700)
122
+ descriptor = os.open(path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600)
123
+ try:
124
+ os.write(descriptor, (code + "\n").encode("utf-8"))
125
+ finally:
126
+ os.close(descriptor)
127
+ os.chmod(path, 0o600)
128
+ except OSError:
129
+ self._code = previous
130
+ return self.text("save_failed")
131
+ self._code = code
132
+ return self.text("saved")
133
+
134
+ def text(self, key: str) -> str:
135
+ block = _TEXTS.get(self._code) or _TEXTS["en"]
136
+ found = block.get(key)
137
+ if found is None:
138
+ found = _TEXTS["en"].get(key, "")
139
+ return found
140
+
141
+ def path_label(self) -> str:
142
+ """The path-line word for the selected code. The directory is not translated."""
143
+ return self.text("path")
144
+
145
+ def lang_long(self, endonym: str) -> str:
146
+ return self.text("lang_long").format(name=endonym)
147
+
148
+ def row_short(self, kind: str, english: str) -> str:
149
+ key = _SHORT_KEY.get(kind)
150
+ if key is None:
151
+ return english
152
+ return self.text(key)
153
+
154
+ def row_long(self, kind: str, english: str) -> str:
155
+ key = _LONG_KEY.get(kind)
156
+ if key is None:
157
+ return english
158
+ return self.text(key)
159
+
160
+ def token_kind(self, token: str, layer: str) -> str | None:
161
+ """A typed word that is not the row currently on screen.
162
+
163
+ The language board accepts the code tokens. The front board accepts
164
+ every category short. Leaf verbs stay the English token on the row.
165
+ """
166
+ if layer == "lang":
167
+ code = _LANG_TOKENS.get(token)
168
+ if code is not None:
169
+ return "set-" + code
170
+ return None
171
+ if layer == "front":
172
+ return _FRONT_TOKENS.get(token)
173
+ return None
174
+
175
+
176
+ _SHORT_KEY = {
177
+ "language": "language_short",
178
+ "system-log": "system_log_short",
179
+ "self-management": "self_short",
180
+ "exit": "exit_short",
181
+ "back": "back_short",
182
+ }
183
+
184
+ _LONG_KEY = {
185
+ "model": "model_long",
186
+ "language": "language_long",
187
+ "system-log": "system_log_long",
188
+ "self-management": "self_long",
189
+ "exit": "exit_long",
190
+ "back": "back_long",
191
+ "view-log": "view_long",
192
+ "clear-log": "clear_long",
193
+ "log-folder": "folder_long",
194
+ "version": "version_long",
195
+ "about": "about_long",
196
+ "version-check": "version_check_long",
197
+ "self-update": "self_update_long",
198
+ "self-uninstall": "self_uninstall_long",
199
+ "self-install": "self_install_long",
200
+ }
201
+
202
+ _LANG_TOKENS = {
203
+ "english": "en",
204
+ "en": "en",
205
+ "English": "en",
206
+ "simplified-chinese": "zh-Hans",
207
+ "zh-hans": "zh-Hans",
208
+ "zh-Hans": "zh-Hans",
209
+ "简体中文": "zh-Hans",
210
+ "traditional-chinese": "zh-Hant",
211
+ "zh-hant": "zh-Hant",
212
+ "zh-Hant": "zh-Hant",
213
+ "繁體中文": "zh-Hant",
214
+ "spanish": "es",
215
+ "es": "es",
216
+ "Español": "es",
217
+ "español": "es",
218
+ "arabic": "ar",
219
+ "ar": "ar",
220
+ "العربية": "ar",
221
+ "عربي": "ar",
222
+ "french": "fr",
223
+ "fr": "fr",
224
+ "Français": "fr",
225
+ "français": "fr",
226
+ "portuguese": "pt",
227
+ "pt": "pt",
228
+ "Português": "pt",
229
+ "português": "pt",
230
+ "portugues": "pt",
231
+ "russian": "ru",
232
+ "ru": "ru",
233
+ "Русский": "ru",
234
+ "русский": "ru",
235
+ "german": "de",
236
+ "de": "de",
237
+ "Deutsch": "de",
238
+ "deutsch": "de",
239
+ "japanese": "ja",
240
+ "ja": "ja",
241
+ "日本語": "ja",
242
+ "korean": "ko",
243
+ "ko": "ko",
244
+ "한국어": "ko",
245
+ "dutch": "nl",
246
+ "nl": "nl",
247
+ "Nederlands": "nl",
248
+ "nederlands": "nl",
249
+ "greek": "el",
250
+ "el": "el",
251
+ "Ελληνικά": "el",
252
+ "ελληνικά": "el",
253
+ }
254
+
255
+ _FRONT_TOKENS = {
256
+ "language": "language",
257
+ "語言": "language",
258
+ "语言": "language",
259
+ "idioma": "language",
260
+ "langue": "language",
261
+ "Sprache": "language",
262
+ "sprache": "language",
263
+ "言語": "language",
264
+ "언어": "language",
265
+ "لغة": "language",
266
+ "язык": "language",
267
+ "taal": "language",
268
+ "γλώσσα": "language",
269
+ "system-log": "system-log",
270
+ "系统日志": "system-log",
271
+ "系統日誌": "system-log",
272
+ "registro": "system-log",
273
+ "journal": "system-log",
274
+ "Systemprotokoll": "system-log",
275
+ "システムログ": "system-log",
276
+ "시스템 로그": "system-log",
277
+ "registo": "system-log",
278
+ "системный журнал": "system-log",
279
+ "systeemlog": "system-log",
280
+ "αρχείο καταγραφής": "system-log",
281
+ "سجل النظام": "system-log",
282
+ "self-management": "self-management",
283
+ "自我管理": "self-management",
284
+ "autogestión": "self-management",
285
+ "autogestion": "self-management",
286
+ "autogestão": "self-management",
287
+ "Selbstverwaltung": "self-management",
288
+ "selbstverwaltung": "self-management",
289
+ "自己管理": "self-management",
290
+ "자기관리": "self-management",
291
+ "إدارة ذاتية": "self-management",
292
+ "самоуправление": "self-management",
293
+ "zelfbeheer": "self-management",
294
+ "αυτοδιαχείριση": "self-management",
295
+ "model": "model",
296
+ "Exit": "exit",
297
+ "离开": "exit",
298
+ "離開": "exit",
299
+ "Salir": "exit",
300
+ "خروج": "exit",
301
+ "Quitter": "exit",
302
+ "Sair": "exit",
303
+ "Выход": "exit",
304
+ "Beenden": "exit",
305
+ "終了": "exit",
306
+ "종료": "exit",
307
+ "Afsluiten": "exit",
308
+ "Έξοδος": "exit",
309
+ }
310
+
311
+ _TEXTS = {
312
+ "en": {
313
+ "path": "Path",
314
+ "language_short": "language",
315
+ "language_long": "display language for this menu",
316
+ "system_log_short": "system-log",
317
+ "system_log_long": "view, clear, and the log folder",
318
+ "self_short": "self-management",
319
+ "self_long": "version, about, and pip lifecycle",
320
+ "exit_short": "Exit",
321
+ "exit_long": "leave",
322
+ "back_short": "Back",
323
+ "back_long": "return to the main menu",
324
+ "model_long": "build a 3D model from outline images in a chosen folder",
325
+ "current_long": "build a 3D model from outline images in this folder",
326
+ "subfolder_long": "build a 3D model from outline images in this subfolder",
327
+ "title_folders": "model",
328
+ "view_long": "list a log file and show it",
329
+ "clear_long": "empty one log file",
330
+ "folder_long": "show the log folder",
331
+ "version_long": "show the installed version",
332
+ "about_long": "version and this computer",
333
+ "version_check_long": "compare this install with pip",
334
+ "self_update_long": "upgrade this package with pip",
335
+ "self_uninstall_long": "remove this package with pip",
336
+ "self_install_long": "install this package with pip",
337
+ "title_main": "main menu",
338
+ "title_language": "language",
339
+ "title_log": "system-log",
340
+ "title_self": "self-management",
341
+ "invalid": "That choice is not on this list. Pick a listed number.",
342
+ "saved": "Menu language is English",
343
+ "save_failed": "Could not save the menu language",
344
+ "lang_long": "use {name} for this menu",
345
+ },
346
+ "zh-Hans": {
347
+ "path": "路径",
348
+ "language_short": "语言",
349
+ "language_long": "此菜单的显示语言",
350
+ "system_log_short": "系统日志",
351
+ "system_log_long": "查看、清空,以及日志文件夹",
352
+ "self_short": "自我管理",
353
+ "self_long": "版本、关于,以及 pip 生命周期",
354
+ "exit_short": "离开",
355
+ "exit_long": "离开",
356
+ "back_short": "返回",
357
+ "back_long": "返回主菜单",
358
+ "model_long": "把所选文件夹中的轮廓图做成三维模型",
359
+ "current_long": "用此文件夹中的轮廓图做三维模型",
360
+ "subfolder_long": "用此子文件夹中的轮廓图做三维模型",
361
+ "title_folders": "模型",
362
+ "view_long": "列出日志文件并显示",
363
+ "clear_long": "清空一个日志文件",
364
+ "folder_long": "显示日志文件夹",
365
+ "version_long": "显示已安装的版本",
366
+ "about_long": "版本,以及这台计算机",
367
+ "version_check_long": "用 pip 比较此安装",
368
+ "self_update_long": "用 pip 升级此包",
369
+ "self_uninstall_long": "用 pip 移除此包",
370
+ "self_install_long": "用 pip 安装此包",
371
+ "title_main": "主菜单",
372
+ "title_language": "语言",
373
+ "title_log": "系统日志",
374
+ "title_self": "自我管理",
375
+ "invalid": "这个选择不在列表上。请挑选列出的号码。",
376
+ "saved": "菜单语言是简体中文",
377
+ "save_failed": "无法保存菜单语言",
378
+ "lang_long": "此菜单使用{name}",
379
+ },
380
+ "zh-Hant": {
381
+ "path": "路徑",
382
+ "language_short": "語言",
383
+ "language_long": "這個選單的顯示語言",
384
+ "system_log_short": "系統日誌",
385
+ "system_log_long": "查看、清空,以及日誌資料夾",
386
+ "self_short": "自我管理",
387
+ "self_long": "版本、關於,以及 pip 生命週期",
388
+ "exit_short": "離開",
389
+ "exit_long": "離開",
390
+ "back_short": "返回",
391
+ "back_long": "返回主選單",
392
+ "model_long": "把所選資料夾中的輪廓圖做成三維模型",
393
+ "current_long": "用此資料夾中的輪廓圖做三維模型",
394
+ "subfolder_long": "用此子資料夾中的輪廓圖做三維模型",
395
+ "title_folders": "模型",
396
+ "view_long": "列出日誌檔並顯示",
397
+ "clear_long": "清空一個日誌檔",
398
+ "folder_long": "顯示日誌資料夾",
399
+ "version_long": "顯示已安裝的版本",
400
+ "about_long": "版本,以及這台電腦",
401
+ "version_check_long": "用 pip 比較此安裝",
402
+ "self_update_long": "用 pip 升級此套件",
403
+ "self_uninstall_long": "用 pip 移除此套件",
404
+ "self_install_long": "用 pip 安裝此套件",
405
+ "title_main": "主選單",
406
+ "title_language": "語言",
407
+ "title_log": "系統日誌",
408
+ "title_self": "自我管理",
409
+ "invalid": "這個選擇不在清單上。請挑選列出的號碼。",
410
+ "saved": "選單語言是繁體中文",
411
+ "save_failed": "無法儲存選單語言",
412
+ "lang_long": "這個選單使用{name}",
413
+ },
414
+ "es": {
415
+ "path": "Ruta",
416
+ "language_short": "idioma",
417
+ "language_long": "idioma de este menú",
418
+ "system_log_short": "registro",
419
+ "system_log_long": "ver, vaciar y la carpeta de registro",
420
+ "self_short": "autogestión",
421
+ "self_long": "versión, acerca de y el ciclo de pip",
422
+ "exit_short": "Salir",
423
+ "exit_long": "salir",
424
+ "back_short": "Atrás",
425
+ "back_long": "volver al menú principal",
426
+ "model_long": "construye un modelo 3D con los contornos de una carpeta elegida",
427
+ "current_long": "construye un modelo 3D con los contornos de esta carpeta",
428
+ "subfolder_long": "construye un modelo 3D con los contornos de esta subcarpeta",
429
+ "title_folders": "modelo",
430
+ "view_long": "listar un archivo de registro y mostrarlo",
431
+ "clear_long": "vaciar un archivo de registro",
432
+ "folder_long": "mostrar la carpeta de registro",
433
+ "version_long": "mostrar la versión instalada",
434
+ "about_long": "versión y este equipo",
435
+ "version_check_long": "comparar esta instalación con pip",
436
+ "self_update_long": "actualizar este paquete con pip",
437
+ "self_uninstall_long": "quitar este paquete con pip",
438
+ "self_install_long": "instalar este paquete con pip",
439
+ "title_main": "menú principal",
440
+ "title_language": "idioma",
441
+ "title_log": "registro",
442
+ "title_self": "autogestión",
443
+ "invalid": "Esa opción no está en la lista. Elija un número de la lista.",
444
+ "saved": "El idioma del menú es español",
445
+ "save_failed": "No se pudo guardar el idioma del menú",
446
+ "lang_long": "usar {name} en este menú",
447
+ },
448
+ "ar": {
449
+ "path": "المسار",
450
+ "language_short": "لغة",
451
+ "language_long": "لغة العرض لهذه القائمة",
452
+ "system_log_short": "سجل النظام",
453
+ "system_log_long": "عرض ومسح ومجلد السجل",
454
+ "self_short": "إدارة ذاتية",
455
+ "self_long": "الإصدار وحول ودورة pip",
456
+ "exit_short": "خروج",
457
+ "exit_long": "خروج",
458
+ "back_short": "رجوع",
459
+ "back_long": "العودة إلى القائمة الرئيسية",
460
+ "model_long": "يبني نموذجا ثلاثي الأبعاد من حدود المجلد المختار",
461
+ "current_long": "يبني نموذجا ثلاثي الأبعاد من حدود هذا المجلد",
462
+ "subfolder_long": "يبني نموذجا ثلاثي الأبعاد من حدود المجلد الفرعي",
463
+ "title_folders": "نموذج",
464
+ "view_long": "سرد ملف سجل وعرضه",
465
+ "clear_long": "إفراغ ملف سجل واحد",
466
+ "folder_long": "عرض مجلد السجل",
467
+ "version_long": "عرض الإصدار المثبّت",
468
+ "about_long": "الإصدار وهذا الجهاز",
469
+ "version_check_long": "قارن هذا التثبيت مع pip",
470
+ "self_update_long": "ترقية هذه الحزمة بـ pip",
471
+ "self_uninstall_long": "إزالة هذه الحزمة بـ pip",
472
+ "self_install_long": "تثبيت هذه الحزمة بـ pip",
473
+ "title_main": "القائمة الرئيسية",
474
+ "title_language": "لغة",
475
+ "title_log": "سجل النظام",
476
+ "title_self": "إدارة ذاتية",
477
+ "invalid": "هذا الاختيار ليس في القائمة. اختر رقماً معروضاً.",
478
+ "saved": "لغة القائمة هي العربية",
479
+ "save_failed": "تعذر حفظ لغة القائمة",
480
+ "lang_long": "استخدام {name} لهذه القائمة",
481
+ },
482
+ "fr": {
483
+ "path": "Chemin",
484
+ "language_short": "langue",
485
+ "language_long": "langue d'affichage de ce menu",
486
+ "system_log_short": "journal",
487
+ "system_log_long": "voir, vider et le dossier du journal",
488
+ "self_short": "autogestion",
489
+ "self_long": "version, à propos et le cycle pip",
490
+ "exit_short": "Quitter",
491
+ "exit_long": "quitter",
492
+ "back_short": "Retour",
493
+ "back_long": "revenir au menu principal",
494
+ "model_long": "construit un modèle 3D à partir des contours d'un dossier choisi",
495
+ "current_long": "construit un modèle 3D à partir des contours de ce dossier",
496
+ "subfolder_long": "construit un modèle 3D à partir des contours de ce sous-dossier",
497
+ "title_folders": "modèle",
498
+ "view_long": "lister un fichier journal et l'afficher",
499
+ "clear_long": "vider un fichier journal",
500
+ "folder_long": "afficher le dossier du journal",
501
+ "version_long": "afficher la version installée",
502
+ "about_long": "version et cet ordinateur",
503
+ "version_check_long": "comparer cette installation avec pip",
504
+ "self_update_long": "mettre à jour ce paquet avec pip",
505
+ "self_uninstall_long": "retirer ce paquet avec pip",
506
+ "self_install_long": "installer ce paquet avec pip",
507
+ "title_main": "menu principal",
508
+ "title_language": "langue",
509
+ "title_log": "journal",
510
+ "title_self": "autogestion",
511
+ "invalid": "Ce choix n'est pas dans la liste. Choisissez un numéro affiché.",
512
+ "saved": "La langue du menu est le français",
513
+ "save_failed": "Impossible d'enregistrer la langue du menu",
514
+ "lang_long": "utiliser {name} pour ce menu",
515
+ },
516
+ "pt": {
517
+ "path": "Caminho",
518
+ "language_short": "idioma",
519
+ "language_long": "idioma deste menu",
520
+ "system_log_short": "registo",
521
+ "system_log_long": "ver, esvaziar e a pasta de registo",
522
+ "self_short": "autogestão",
523
+ "self_long": "versão, acerca de e o ciclo do pip",
524
+ "exit_short": "Sair",
525
+ "exit_long": "sair",
526
+ "back_short": "Voltar",
527
+ "back_long": "voltar ao menu principal",
528
+ "model_long": "constrói um modelo 3D a partir dos contornos de uma pasta escolhida",
529
+ "current_long": "constrói um modelo 3D a partir dos contornos desta pasta",
530
+ "subfolder_long": "constrói um modelo 3D a partir dos contornos desta subpasta",
531
+ "title_folders": "modelo",
532
+ "view_long": "listar um ficheiro de registo e mostrá-lo",
533
+ "clear_long": "esvaziar um ficheiro de registo",
534
+ "folder_long": "mostrar a pasta de registo",
535
+ "version_long": "mostrar a versão instalada",
536
+ "about_long": "versão e este computador",
537
+ "version_check_long": "comparar esta instalação com o pip",
538
+ "self_update_long": "atualizar este pacote com o pip",
539
+ "self_uninstall_long": "remover este pacote com o pip",
540
+ "self_install_long": "instalar este pacote com o pip",
541
+ "title_main": "menu principal",
542
+ "title_language": "idioma",
543
+ "title_log": "registo",
544
+ "title_self": "autogestão",
545
+ "invalid": "Essa escolha não está na lista. Escolha um número da lista.",
546
+ "saved": "O idioma do menu é português",
547
+ "save_failed": "Não foi possível guardar o idioma do menu",
548
+ "lang_long": "usar {name} neste menu",
549
+ },
550
+ "ru": {
551
+ "path": "Путь",
552
+ "language_short": "язык",
553
+ "language_long": "язык этого меню",
554
+ "system_log_short": "системный журнал",
555
+ "system_log_long": "просмотр, очистка и папка журнала",
556
+ "self_short": "самоуправление",
557
+ "self_long": "версия, о программе и цикл pip",
558
+ "exit_short": "Выход",
559
+ "exit_long": "выход",
560
+ "back_short": "Назад",
561
+ "back_long": "вернуться в главное меню",
562
+ "model_long": "собрать трёхмерную модель из контуров выбранной папки",
563
+ "current_long": "собрать трёхмерную модель из контуров в этой папке",
564
+ "subfolder_long": "собрать трёхмерную модель из контуров в этой подпапке",
565
+ "title_folders": "модель",
566
+ "view_long": "показать список файлов журнала и открыть один",
567
+ "clear_long": "очистить один файл журнала",
568
+ "folder_long": "показать папку журнала",
569
+ "version_long": "показать установленную версию",
570
+ "about_long": "версия и этот компьютер",
571
+ "version_check_long": "сравнить эту установку с pip",
572
+ "self_update_long": "обновить этот пакет через pip",
573
+ "self_uninstall_long": "удалить этот пакет через pip",
574
+ "self_install_long": "установить этот пакет через pip",
575
+ "title_main": "главное меню",
576
+ "title_language": "язык",
577
+ "title_log": "системный журнал",
578
+ "title_self": "самоуправление",
579
+ "invalid": "Этого пункта нет в списке. Выберите номер из списка.",
580
+ "saved": "Язык меню — русский",
581
+ "save_failed": "Не удалось сохранить язык меню",
582
+ "lang_long": "использовать {name} для этого меню",
583
+ },
584
+ "de": {
585
+ "path": "Pfad",
586
+ "language_short": "Sprache",
587
+ "language_long": "Anzeigesprache für dieses Menü",
588
+ "system_log_short": "Systemprotokoll",
589
+ "system_log_long": "ansehen, leeren und der Protokollordner",
590
+ "self_short": "Selbstverwaltung",
591
+ "self_long": "Version, Info und pip-Lebenszyklus",
592
+ "exit_short": "Beenden",
593
+ "exit_long": "beenden",
594
+ "back_short": "Zurück",
595
+ "back_long": "zurück zum Hauptmenü",
596
+ "model_long": "aus Umrissen eines gewählten Ordners ein 3D-Modell bauen",
597
+ "current_long": "aus Umrissen in diesem Ordner ein 3D-Modell bauen",
598
+ "subfolder_long": "aus Umrissen in diesem Unterordner ein 3D-Modell bauen",
599
+ "title_folders": "Modell",
600
+ "view_long": "eine Protokolldatei auflisten und anzeigen",
601
+ "clear_long": "eine Protokolldatei leeren",
602
+ "folder_long": "den Protokollordner anzeigen",
603
+ "version_long": "die installierte Version anzeigen",
604
+ "about_long": "Version und dieser Computer",
605
+ "version_check_long": "diese Installation mit pip vergleichen",
606
+ "self_update_long": "dieses Paket mit pip aktualisieren",
607
+ "self_uninstall_long": "dieses Paket mit pip entfernen",
608
+ "self_install_long": "dieses Paket mit pip installieren",
609
+ "title_main": "Hauptmenü",
610
+ "title_language": "Sprache",
611
+ "title_log": "Systemprotokoll",
612
+ "title_self": "Selbstverwaltung",
613
+ "invalid": "Diese Wahl steht nicht auf der Liste. Wählen Sie eine angezeigte Nummer.",
614
+ "saved": "Die Menüsprache ist Deutsch",
615
+ "save_failed": "Die Menüsprache konnte nicht gespeichert werden",
616
+ "lang_long": "{name} für dieses Menü verwenden",
617
+ },
618
+ "ja": {
619
+ "path": "パス",
620
+ "language_short": "言語",
621
+ "language_long": "このメニューの表示言語",
622
+ "system_log_short": "システムログ",
623
+ "system_log_long": "表示、消去、ログフォルダ",
624
+ "self_short": "自己管理",
625
+ "self_long": "バージョン、概要、pip のライフサイクル",
626
+ "exit_short": "終了",
627
+ "exit_long": "終了",
628
+ "back_short": "戻る",
629
+ "back_long": "メインメニューに戻る",
630
+ "model_long": "選んだフォルダの輪郭画像から3Dモデルを作る",
631
+ "current_long": "このフォルダの輪郭画像から3Dモデルを作る",
632
+ "subfolder_long": "このサブフォルダの輪郭画像から3Dモデルを作る",
633
+ "title_folders": "モデル",
634
+ "view_long": "ログファイルを一覧して表示する",
635
+ "clear_long": "ログファイルを1つ空にする",
636
+ "folder_long": "ログフォルダを表示する",
637
+ "version_long": "インストール済みのバージョンを表示する",
638
+ "about_long": "バージョンとこのコンピュータ",
639
+ "version_check_long": "このインストールを pip と比較する",
640
+ "self_update_long": "pip でこのパッケージを更新する",
641
+ "self_uninstall_long": "pip でこのパッケージを削除する",
642
+ "self_install_long": "pip でこのパッケージをインストールする",
643
+ "title_main": "メインメニュー",
644
+ "title_language": "言語",
645
+ "title_log": "システムログ",
646
+ "title_self": "自己管理",
647
+ "invalid": "その選択は一覧にありません。表示された番号を選んでください。",
648
+ "saved": "メニューの言語は日本語",
649
+ "save_failed": "メニューの言語を保存できませんでした",
650
+ "lang_long": "このメニューで{name}を使う",
651
+ },
652
+ "ko": {
653
+ "path": "경로",
654
+ "language_short": "언어",
655
+ "language_long": "이 메뉴의 표시 언어",
656
+ "system_log_short": "시스템 로그",
657
+ "system_log_long": "보기, 비우기, 로그 폴더",
658
+ "self_short": "자기관리",
659
+ "self_long": "버전, 정보, pip 수명 주기",
660
+ "exit_short": "종료",
661
+ "exit_long": "종료",
662
+ "back_short": "뒤로",
663
+ "back_long": "주 메뉴로 돌아가기",
664
+ "model_long": "고른 폴더의 윤곽 이미지로 3D 모델을 만듭니다",
665
+ "current_long": "이 폴더의 윤곽 이미지로 3D 모델을 만듭니다",
666
+ "subfolder_long": "이 하위 폴더의 윤곽 이미지로 3D 모델을 만듭니다",
667
+ "title_folders": "모델",
668
+ "view_long": "로그 파일을 나열하고 표시합니다",
669
+ "clear_long": "로그 파일 하나를 비웁니다",
670
+ "folder_long": "로그 폴더를 표시합니다",
671
+ "version_long": "설치된 버전을 표시합니다",
672
+ "about_long": "버전과 이 컴퓨터",
673
+ "version_check_long": "이 설치를 pip과 비교합니다",
674
+ "self_update_long": "pip으로 이 패키지를 업그레이드합니다",
675
+ "self_uninstall_long": "pip으로 이 패키지를 제거합니다",
676
+ "self_install_long": "pip으로 이 패키지를 설치합니다",
677
+ "title_main": "주 메뉴",
678
+ "title_language": "언어",
679
+ "title_log": "시스템 로그",
680
+ "title_self": "자기관리",
681
+ "invalid": "그 선택은 목록에 없습니다. 표시된 번호를 고르세요.",
682
+ "saved": "메뉴 언어는 한국어",
683
+ "save_failed": "메뉴 언어를 저장하지 못했습니다",
684
+ "lang_long": "이 메뉴에서 {name} 사용",
685
+ },
686
+ "nl": {
687
+ "path": "Pad",
688
+ "language_short": "taal",
689
+ "language_long": "weergavetaal voor dit menu",
690
+ "system_log_short": "systeemlog",
691
+ "system_log_long": "bekijken, legen en de logmap",
692
+ "self_short": "zelfbeheer",
693
+ "self_long": "versie, info en de pip-levenscyclus",
694
+ "exit_short": "Afsluiten",
695
+ "exit_long": "afsluiten",
696
+ "back_short": "Terug",
697
+ "back_long": "terug naar het hoofdmenu",
698
+ "model_long": "maak een 3D-model van contouren in een gekozen map",
699
+ "current_long": "maak een 3D-model van contouren in deze map",
700
+ "subfolder_long": "maak een 3D-model van contouren in deze submap",
701
+ "title_folders": "model",
702
+ "view_long": "een logbestand tonen en weergeven",
703
+ "clear_long": "één logbestand legen",
704
+ "folder_long": "de logmap tonen",
705
+ "version_long": "de geïnstalleerde versie tonen",
706
+ "about_long": "versie en deze computer",
707
+ "version_check_long": "deze installatie met pip vergelijken",
708
+ "self_update_long": "dit pakket met pip bijwerken",
709
+ "self_uninstall_long": "dit pakket met pip verwijderen",
710
+ "self_install_long": "dit pakket met pip installeren",
711
+ "title_main": "hoofdmenu",
712
+ "title_language": "taal",
713
+ "title_log": "systeemlog",
714
+ "title_self": "zelfbeheer",
715
+ "invalid": "Die keuze staat niet op de lijst. Kies een nummer van de lijst.",
716
+ "saved": "De menutaal is Nederlands",
717
+ "save_failed": "De menutaal kon niet worden opgeslagen",
718
+ "lang_long": "{name} voor dit menu gebruiken",
719
+ },
720
+ "el": {
721
+ "path": "Διαδρομή",
722
+ "language_short": "γλώσσα",
723
+ "language_long": "γλώσσα εμφάνισης για αυτό το μενού",
724
+ "system_log_short": "αρχείο καταγραφής",
725
+ "system_log_long": "προβολή, εκκαθάριση και ο φάκελος καταγραφής",
726
+ "self_short": "αυτοδιαχείριση",
727
+ "self_long": "έκδοση, σχετικά και ο κύκλος του pip",
728
+ "exit_short": "Έξοδος",
729
+ "exit_long": "έξοδος",
730
+ "back_short": "Πίσω",
731
+ "back_long": "επιστροφή στο κύριο μενού",
732
+ "model_long": "φτιάχνει ένα τρισδιάστατο μοντέλο από τα περιγράμματα ενός φακέλου",
733
+ "current_long": "φτιάχνει ένα τρισδιάστατο μοντέλο από τα περιγράμματα αυτού του φακέλου",
734
+ "subfolder_long": "φτιάχνει ένα τρισδιάστατο μοντέλο από τα περιγράμματα αυτού του υποφακέλου",
735
+ "title_folders": "μοντέλο",
736
+ "view_long": "λίστα αρχείων καταγραφής και εμφάνιση",
737
+ "clear_long": "εκκένωση ενός αρχείου καταγραφής",
738
+ "folder_long": "εμφάνιση του φακέλου καταγραφής",
739
+ "version_long": "εμφάνιση της εγκατεστημένης έκδοσης",
740
+ "about_long": "έκδοση και αυτός ο υπολογιστής",
741
+ "version_check_long": "σύγκριση αυτής της εγκατάστασης με το pip",
742
+ "self_update_long": "αναβάθμιση αυτού του πακέτου με το pip",
743
+ "self_uninstall_long": "αφαίρεση αυτού του πακέτου με το pip",
744
+ "self_install_long": "εγκατάσταση αυτού του πακέτου με το pip",
745
+ "title_main": "κύριο μενού",
746
+ "title_language": "γλώσσα",
747
+ "title_log": "αρχείο καταγραφής",
748
+ "title_self": "αυτοδιαχείριση",
749
+ "invalid": "Αυτή η επιλογή δεν είναι στη λίστα. Διάλεξε έναν αριθμό της λίστας.",
750
+ "saved": "Η γλώσσα του μενού είναι ελληνικά",
751
+ "save_failed": "Δεν ήταν δυνατή η αποθήκευση της γλώσσας του μενού",
752
+ "lang_long": "χρήση της {name} για αυτό το μενού",
753
+ },
754
+ }