-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathi18n.py
More file actions
359 lines (340 loc) · 20.9 KB
/
Copy pathi18n.py
File metadata and controls
359 lines (340 loc) · 20.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
# i18n.py
from __future__ import annotations
from dataclasses import dataclass
from typing import Dict
STR: Dict[str, Dict[str, str]] = {
"ru": {
"APP_TITLE": "RapNote",
"NEW": "Новый",
"FILE_MENU": "Файл",
"OPEN": "Открыть",
"SAVE": "Сохранить",
"IMPORT_TXT": "Импорт из TXT",
"EXPORT_TXT": "Экспорт TXT",
"NEW_TIP": "Создать новый проект",
"OPEN_TIP": "Открыть проект из файла",
"SAVE_TIP": "Сохранить текущий проект",
"IMPORT_TXT_TIP": "Импортировать текст из TXT по блокам и строкам",
"EXPORT_TXT_TIP": "Экспортировать текст проекта в TXT",
"LANGUAGE_ENGLISH_TIP": "Переключить интерфейс на английский язык",
"LANGUAGE_RUSSIAN_TIP": "Переключить интерфейс на русский язык",
"EDIT_MENU": "Правка",
"UNDO": "Отменить",
"UNDO_TIP": "Отменить последнее действие",
"REDO": "Повторить",
"REDO_TIP": "Повторить отменённое действие",
"READY": "Готово",
"OPENED": "Открыто",
"SAVED": "Сохранено",
"IMPORTED_TXT": "TXT импортирован",
"EXPORTED": "TXT экспортирован",
"UNSAVED_TITLE": "Несохранённые изменения",
"UNSAVED_Q": "Есть несохранённые изменения. Сбросить их?",
"OPEN_PROJECT": "Открыть проект",
"SAVE_PROJECT": "Сохранить проект",
"IMPORT_TXT_FILE": "Импорт из TXT",
"EXPORT_FILE": "Экспорт TXT",
"FILTER_JSON": "RapNote JSON (*.json);;Все файлы (*.*)",
"FILTER_JSON_ONLY": "RapNote JSON (*.json)",
"FILTER_TXT": "Текстовый файл (*.txt)",
"FILTER_RAPNOTE": "RapNote (*.rapnote);;Текстовый файл (*.txt);;Все файлы (*.*)",
"FILTER_RAPNOTE_ONLY": "RapNote (*.rapnote)",
"IMPORT_TXT_EMPTY_TITLE": "Импорт из TXT",
"IMPORT_TXT_EMPTY_MESSAGE": "В выбранном файле нет строк для импорта.",
"BLOCK": "Блок",
"ADD_BLOCK": "+ Блок (4)",
"ADD_LINE": "+1",
"REMOVE_LINE": "-1",
"ADD_INSTR_BLOCK": "+ Инстр. блок",
"ADD_BLOCK_2": "+2",
"ADD_BLOCK_8": "+8",
"ADD_BLOCK_12": "+12",
"ADD_BLOCK_16": "+16",
"INSERT_BLOCK": "Вставить блок",
"INSERT_INSTR_BLOCK": "Вставить инструментальный блок",
"DELETE": "Удалить",
"DELETE_BLOCK": "Удалить блок",
"MOVE_BLOCK_UP": "Переместить блок вверх",
"MOVE_BLOCK_DOWN": "Переместить блок вниз",
"SELECT_SECTION_TIP": "Выбрать тип секции для текущего блока",
"INSTRUCTIONS_BTN_TIP": "Открыть инструкции для текущего блока",
"ADD_BLOCK_TIP": "Добавить новый текстовый блок на 4 строки после текущего",
"ADD_BLOCK_2_TIP": "Добавить новый текстовый блок на 2 строки после текущего",
"ADD_BLOCK_8_TIP": "Добавить новый текстовый блок на 8 строк после текущего",
"ADD_BLOCK_12_TIP": "Добавить новый текстовый блок на 12 строк после текущего",
"ADD_BLOCK_16_TIP": "Добавить новый текстовый блок на 16 строк после текущего",
"ADD_INSTR_BLOCK_TIP": "Добавить инструментальный блок после текущего",
"ADD_LINE_TIP": "Добавить одну строку в текущий блок",
"REMOVE_LINE_TIP": "Удалить последнюю строку текущего блока",
"MOVE_UP_TIP": "Переместить текущий блок вверх",
"MOVE_DOWN_TIP": "Переместить текущий блок вниз",
"DELETE_BLOCK_TIP": "Удалить текущий блок",
"CANT_DELETE": "Нельзя удалить",
"AT_LEAST_ONE_BLOCK": "Должен остаться хотя бы один блок.",
"DELETE_BLOCK_Q": "Удалить этот блок?",
"DELETE_LINE_TITLE": "Удалить строку",
"DELETE_LINE_Q": "Удалить последнюю строку текущего блока?",
"INSTRUMENTAL_NO_INSTRUCTION": "Нет инструкции",
"INSTRUCTIONS_TEMPLATES_LABEL": "Сохранённые инструкции",
"INSTRUCTIONS_TEMPLATES_EMPTY": "Нет сохранённых инструкций.",
"INSTRUCTIONS_DIALOG_TITLE": "Инструкции для блока",
"INSTRUCTIONS_DIALOG_INFO": "Опишите инструкцию для секции: {section}",
"INSTRUCTIONS_COMMAND_PLACEHOLDER": "Команда (англ.)",
"INSTRUCTIONS_DESCRIPTION_PLACEHOLDER": "Описание (для себя)",
"INSTRUCTIONS_COMMAND_LABEL": "Команда",
"INSTRUCTIONS_DESCRIPTION_LABEL": "Описание",
"INSTRUCTIONS_APPLY_BUTTON": "Применить",
"INSTRUCTIONS_SAVE_CHECKBOX": "Сохранить в библиотеку",
"INSTRUCTIONS_DELETE_TEMPLATE_BUTTON": "Удалить из библиотеки",
"INSTRUCTIONS_CLEAR_BUTTON": "Сбросить инструкцию",
"INSTRUCTIONS_CANCEL_BUTTON": "Отмена",
"INSTRUCTIONS_COMMAND_TIP": "Короткая команда для генерации или обработки блока",
"INSTRUCTIONS_DESCRIPTION_TIP": "Пояснение инструкции для себя",
"INSTRUCTIONS_SAVE_TIP": "Сохранить эту инструкцию в библиотеку шаблонов",
"INSTRUCTIONS_DELETE_TEMPLATE_TIP": "Удалить выбранную инструкцию из библиотеки шаблонов",
"INSTRUCTIONS_DELETE_TEMPLATE_TITLE": "Удалить из библиотеки",
"INSTRUCTIONS_DELETE_TEMPLATE_Q": "Удалить «{command}» из библиотеки?",
"INSTRUCTIONS_APPLY_TIP": "Применить инструкцию к текущему блоку",
"INSTRUCTIONS_CLEAR_TIP": "Удалить инструкцию из текущего блока",
"INSTRUCTIONS_CANCEL_TIP": "Закрыть окно без изменений",
"INSTRUCTIONS_TEMPLATES_TIP": "Выбрать сохранённую инструкцию",
"LANGUAGES_MENU": "Языки",
"LANGUAGE_ENGLISH_NAME": "English",
"LANGUAGE_RUSSIAN_NAME": "Русский",
"ANALYSIS_LANG_RU": "Русский",
"ANALYSIS_LANG_UA": "Украинский",
"ANALYSIS_LANG_EN": "Латинские разделители",
"TOP_LANG_EN": "EN",
"TOP_LANG_UA": "UA",
"SYLLABLES": "Слоги",
"RHYMES": "Рифма",
"RHYME_PICKER_LABEL": "Подобрать рифму:",
"RHYME_INPUT_PLACEHOLDER": "Рифма к слову",
"UA_VOWELS": "UA гласные (і ї є)",
"LATIN_VOWELS": "Лат. гласные (aeiouy)",
"NAVIGATION_PLACEHOLDER": "Выберите блок",
"NAVIGATION_TIP": "Перейти к выбранному блоку",
"TARGET_SYLLABLES_TIP": "Целевое количество слогов в строке",
"SYLLABLE_TOLERANCE_TIP": "Допустимое отклонение от цели по слогам",
"READING_MODE_TIP": "Переключить режим редактирования и просмотра",
"RHYME_PICKER_TIP": "Автоматический подбор рифмы по введённому слову",
"RHYME_INPUT_TIP": "Введите слово для подбора рифмы",
"RHYME_LANG_RU_TIP": "Искать русские рифмы",
"RHYME_LANG_UA_TIP": "Искать украинские рифмы",
"RHYME_SEARCH_ERROR_TITLE": "Ошибка",
"RHYME_SEARCH_ERROR_MESSAGE": "Не удалось загрузить рифмы.",
"RHYME_NO_MATCHES": "Нет совпадений",
"SECTION_NONE": "None",
"SECTION_NONE_HINT": "Блок не привязан к конкретной части песни",
"SECTION_INTRO": "Intro",
"SECTION_INTRO_HINT": "Вступительная часть, задающая настроение",
"SECTION_VERSE": "Verse",
"SECTION_VERSE_HINT": "Части, развивающие сюжет, обычно с меняющимся текстом",
"SECTION_CHORUS": "Chorus",
"SECTION_CHORUS_HINT": "Главная повторяющаяся часть с основным посылом или хуком",
"SECTION_BRIDGE": "Bridge",
"SECTION_BRIDGE_HINT": "Контрастная часть, добавляющая разнообразие и напряжение",
"SECTION_PRE_CHORUS": "Pre-Chorus",
"SECTION_PRE_CHORUS_HINT": "Переходная часть, подводящая к припеву",
"SECTION_HOOK": "Hook",
"SECTION_HOOK_HINT": "Запоминающийся музыкальный или текстовый крючок",
"SECTION_REFRAIN": "Refrain",
"SECTION_REFRAIN_HINT": "Повторяющаяся строка или фраза, часто в конце куплетов",
"SECTION_BREAK": "Break",
"SECTION_BREAK_HINT": "Эпизод, где часть инструментов замолкает, создавая контраст",
"SECTION_DROP": "Drop",
"SECTION_DROP_HINT": "В электронной музыке момент максимального энергетического выброса",
"SECTION_OUTRO": "Outro",
"SECTION_OUTRO_HINT": "Завершающая часть, ставящая точку в песне",
"NAV_BLOCK_PREFIX": "B",
"NAV_PREFIX_INSTRUMENTAL": "инстр.",
"ISS_POST_CHORUS": "Post-Chorus",
"ISS_POST_CHORUS_HINT": "Инструментальное продолжение припева или вокальные фразы без смыслового текста",
"ISS_BREAK": "Break",
"ISS_BREAK_HINT": "Краткая пауза или резкое снижение плотности без вокала",
"ISS_BREAKDOWN": "Breakdown",
"ISS_BREAKDOWN_HINT": "Разреженная секция без основного вокала, с минимальной аранжировкой",
"ISS_INSTRUMENTAL_BREAK": "Instrumental Break",
"ISS_INSTRUMENTAL_BREAK_HINT": "Полностью инструментальный фрагмент без вокала",
"ISS_BUILD": "Build",
"ISS_BUILD_HINT": "Нарастающая инструментальная секция без текста",
"ISS_BUILD_UP": "Build-up",
"ISS_BUILD_UP_HINT": "Инструментальное нарастание напряжения перед дропом или входом энергии",
"ISS_DROP": "Drop",
"ISS_DROP_HINT": "Ударная инструментальная секция без вокального текста",
"ISS_INTERLUDE": "Interlude",
"ISS_INTERLUDE_HINT": "Атмосферная инструментальная вставка между частями",
"ISS_TRANSITION": "Transition",
"ISS_TRANSITION_HINT": "Служебный инструментальный переход между секциями",
},
"en": {
"APP_TITLE": "RapNote",
"NEW": "New",
"FILE_MENU": "File",
"OPEN": "Open",
"SAVE": "Save",
"IMPORT_TXT": "Import from TXT",
"EXPORT_TXT": "Export TXT",
"NEW_TIP": "Create a new project",
"OPEN_TIP": "Open a project from file",
"SAVE_TIP": "Save the current project",
"IMPORT_TXT_TIP": "Import text from TXT into blocks and lines",
"EXPORT_TXT_TIP": "Export project text to TXT",
"LANGUAGE_ENGLISH_TIP": "Switch the interface to English",
"LANGUAGE_RUSSIAN_TIP": "Switch the interface to Russian",
"EDIT_MENU": "Edit",
"UNDO": "Undo",
"UNDO_TIP": "Undo last action",
"REDO": "Redo",
"REDO_TIP": "Redo undone action",
"READY": "Ready",
"OPENED": "Opened",
"SAVED": "Saved",
"IMPORTED_TXT": "Imported TXT",
"EXPORTED": "Exported TXT",
"UNSAVED_TITLE": "Unsaved changes",
"UNSAVED_Q": "You have unsaved changes. Discard them?",
"OPEN_PROJECT": "Open Project",
"SAVE_PROJECT": "Save Project",
"IMPORT_TXT_FILE": "Import from TXT",
"EXPORT_FILE": "Export TXT",
"FILTER_JSON": "RapNote JSON (*.json);;All files (*.*)",
"FILTER_JSON_ONLY": "RapNote JSON (*.json)",
"FILTER_TXT": "Text file (*.txt)",
"FILTER_RAPNOTE": "RapNote (*.rapnote);;Text file (*.txt);;All files (*.*)",
"FILTER_RAPNOTE_ONLY": "RapNote (*.rapnote)",
"IMPORT_TXT_EMPTY_TITLE": "Import from TXT",
"IMPORT_TXT_EMPTY_MESSAGE": "The selected file has no lines to import.",
"BLOCK": "Block",
"ADD_BLOCK": "+ Block (4)",
"ADD_LINE": "+1",
"REMOVE_LINE": "-1",
"ADD_INSTR_BLOCK": "+ Instrumental Block",
"ADD_BLOCK_2": "+2",
"ADD_BLOCK_8": "+8",
"ADD_BLOCK_12": "+12",
"ADD_BLOCK_16": "+16",
"INSERT_BLOCK": "Insert Block",
"INSERT_INSTR_BLOCK": "Insert Instrumental Block",
"DELETE": "Delete",
"DELETE_BLOCK": "Delete Block",
"MOVE_BLOCK_UP": "Move Block Up",
"MOVE_BLOCK_DOWN": "Move Block Down",
"SELECT_SECTION_TIP": "Select the section type for the current block",
"INSTRUCTIONS_BTN_TIP": "Open instructions for the current block",
"ADD_BLOCK_TIP": "Add a new 4-line lyrics block after the current block",
"ADD_BLOCK_2_TIP": "Add a new 2-line lyrics block after the current block",
"ADD_BLOCK_8_TIP": "Add a new 8-line lyrics block after the current block",
"ADD_BLOCK_12_TIP": "Add a new 12-line lyrics block after the current block",
"ADD_BLOCK_16_TIP": "Add a new 16-line lyrics block after the current block",
"ADD_INSTR_BLOCK_TIP": "Add an instrumental block after the current block",
"ADD_LINE_TIP": "Add one line to the current block",
"REMOVE_LINE_TIP": "Delete the last line of the current block",
"MOVE_UP_TIP": "Move the current block up",
"MOVE_DOWN_TIP": "Move the current block down",
"DELETE_BLOCK_TIP": "Delete the current block",
"CANT_DELETE": "Can't delete",
"AT_LEAST_ONE_BLOCK": "At least one block must remain.",
"DELETE_BLOCK_Q": "Delete this block?",
"DELETE_LINE_TITLE": "Delete line",
"DELETE_LINE_Q": "Delete the last line of the current block?",
"INSTRUMENTAL_NO_INSTRUCTION": "No instruction",
"INSTRUCTIONS_TEMPLATES_LABEL": "Saved instructions",
"INSTRUCTIONS_TEMPLATES_EMPTY": "No saved instructions yet.",
"INSTRUCTIONS_DIALOG_TITLE": "Block instructions",
"INSTRUCTIONS_DIALOG_INFO": "Describe an instruction for section: {section}",
"INSTRUCTIONS_COMMAND_PLACEHOLDER": "Command (English)",
"INSTRUCTIONS_DESCRIPTION_PLACEHOLDER": "Description (for you)",
"INSTRUCTIONS_COMMAND_LABEL": "Command",
"INSTRUCTIONS_DESCRIPTION_LABEL": "Description",
"INSTRUCTIONS_APPLY_BUTTON": "Apply",
"INSTRUCTIONS_SAVE_CHECKBOX": "Save to library",
"INSTRUCTIONS_DELETE_TEMPLATE_BUTTON": "Delete from library",
"INSTRUCTIONS_CLEAR_BUTTON": "Clear instruction",
"INSTRUCTIONS_CANCEL_BUTTON": "Cancel",
"INSTRUCTIONS_COMMAND_TIP": "Short command for generating or processing the block",
"INSTRUCTIONS_DESCRIPTION_TIP": "Instruction note for your own reference",
"INSTRUCTIONS_SAVE_TIP": "Save this instruction to the template library",
"INSTRUCTIONS_DELETE_TEMPLATE_TIP": "Delete the selected instruction from the template library",
"INSTRUCTIONS_DELETE_TEMPLATE_TITLE": "Delete from library",
"INSTRUCTIONS_DELETE_TEMPLATE_Q": "Delete \"{command}\" from the library?",
"INSTRUCTIONS_APPLY_TIP": "Apply the instruction to the current block",
"INSTRUCTIONS_CLEAR_TIP": "Remove the instruction from the current block",
"INSTRUCTIONS_CANCEL_TIP": "Close the dialog without changes",
"INSTRUCTIONS_TEMPLATES_TIP": "Select a saved instruction",
"LANGUAGES_MENU": "Languages",
"LANGUAGE_ENGLISH_NAME": "English",
"LANGUAGE_RUSSIAN_NAME": "Русский",
"ANALYSIS_LANG_RU": "Russian",
"ANALYSIS_LANG_UA": "Ukrainian",
"ANALYSIS_LANG_EN": "Latin separators",
"TOP_LANG_UA": "UA",
"TOP_LANG_EN": "EN",
"SYLLABLES": "Syllables",
"RHYMES": "Rhyme",
"RHYME_PICKER_LABEL": "Find rhyme:",
"RHYME_INPUT_PLACEHOLDER": "Rhyme for word",
"UA_VOWELS": "UA vowels (і ї є)",
"LATIN_VOWELS": "Latin vowels (aeiouy)",
"NAVIGATION_PLACEHOLDER": "Select block",
"NAVIGATION_TIP": "Jump to the selected block",
"TARGET_SYLLABLES_TIP": "Target number of syllables per line",
"SYLLABLE_TOLERANCE_TIP": "Allowed syllable deviation from the target",
"READING_MODE_TIP": "Switch between editing and reading mode",
"RHYME_PICKER_TIP": "Automatically find rhymes for the entered word",
"RHYME_INPUT_TIP": "Enter a word to find rhymes",
"RHYME_LANG_RU_TIP": "Search Russian rhymes",
"RHYME_LANG_UA_TIP": "Search Ukrainian rhymes",
"RHYME_SEARCH_ERROR_TITLE": "Error",
"RHYME_SEARCH_ERROR_MESSAGE": "Failed to load rhymes.",
"RHYME_NO_MATCHES": "No matches",
"SECTION_NONE": "No section",
"SECTION_NONE_HINT": "This block is not assigned to a specific song section",
"SECTION_INTRO": "Intro",
"SECTION_INTRO_HINT": "The opening section that establishes the mood",
"SECTION_VERSE": "Verse",
"SECTION_VERSE_HINT": "Sections that tell the story, typically with changing lyrics",
"SECTION_CHORUS": "Chorus",
"SECTION_CHORUS_HINT": "The main, repeated section with the central message or hook",
"SECTION_BRIDGE": "Bridge",
"SECTION_BRIDGE_HINT": "A contrasting section that provides variety and builds tension",
"SECTION_PRE_CHORUS": "Pre-Chorus",
"SECTION_PRE_CHORUS_HINT": "A transitional section building up to the chorus",
"SECTION_HOOK": "Hook",
"SECTION_HOOK_HINT": "A catchy, memorable musical or lyrical phrase",
"SECTION_REFRAIN": "Refrain",
"SECTION_REFRAIN_HINT": "A repeated line or phrase, often at the end of verses",
"SECTION_BREAK": "Break",
"SECTION_BREAK_HINT": "A section where some instruments drop out, creating contrast",
"SECTION_DROP": "Drop",
"SECTION_DROP_HINT": "In electronic music, the moment of maximum energy release",
"SECTION_OUTRO": "Outro",
"SECTION_OUTRO_HINT": "The ending section that wraps up the song",
"NAV_BLOCK_PREFIX": "B",
"NAV_PREFIX_INSTRUMENTAL": "instr.",
"ISS_POST_CHORUS": "Post-Chorus",
"ISS_POST_CHORUS_HINT": "Instrumental continuation of the chorus or vocal phrases without lyrical text",
"ISS_BREAK": "Break",
"ISS_BREAK_HINT": "Short pause or sharp drop in density without vocals",
"ISS_BREAKDOWN": "Breakdown",
"ISS_BREAKDOWN_HINT": "Sparse section without lead vocal, minimal arrangement",
"ISS_INSTRUMENTAL_BREAK": "Instrumental Break",
"ISS_INSTRUMENTAL_BREAK_HINT": "Fully instrumental fragment with no vocals",
"ISS_BUILD": "Build",
"ISS_BUILD_HINT": "Instrumental build-up section without text",
"ISS_BUILD_UP": "Build-up",
"ISS_BUILD_UP_HINT": "Instrumental tension build before the drop or energy entry",
"ISS_DROP": "Drop",
"ISS_DROP_HINT": "Impactful instrumental section without vocal text",
"ISS_INTERLUDE": "Interlude",
"ISS_INTERLUDE_HINT": "Atmospheric instrumental insert between parts",
"ISS_TRANSITION": "Transition",
"ISS_TRANSITION_HINT": "Functional instrumental transition between sections",
},
}
@dataclass
class I18N:
lang: str = "ru"
def t(self, key: str) -> str:
d = STR.get(self.lang) or STR["ru"]
return d.get(key, STR["ru"].get(key, key))