Initial TTRPG character meta-builder with visual sheet editor.

Offline Electron app seeds 10 system presets, supports create-from-scratch designer with palette/drag/resize/bricks, and exports .ttrpg-system.json for the player.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-09-12 14:49:31 +08:00
commit d1f180ee0a
44 changed files with 10548 additions and 0 deletions
+52
View File
@@ -0,0 +1,52 @@
export type Locale = 'ru' | 'en';
const messages = {
en: {
brand: 'TTRPG Character Builder',
systems: 'Systems',
characters: 'Characters',
designer: 'Sheet designer',
fill: 'Fill character',
import: 'Import',
export: 'Export',
loadPresets: 'Load presets',
newSystem: 'New system',
save: 'Save',
delete: 'Delete',
refresh: 'Refresh',
noSystem: 'Select or create a system',
attributes: 'Attributes',
derived: 'Derived',
validationOk: 'Validation passed',
validationFail: 'Validation failed',
createCharacter: 'Create character',
characterName: 'Character name',
},
ru: {
brand: 'Конструктор персонажей НРИ',
systems: 'Системы',
characters: 'Персонажи',
designer: 'Дизайнер листа',
fill: 'Заполнение',
import: 'Импорт',
export: 'Экспорт',
loadPresets: 'Загрузить пресеты',
newSystem: 'Новая система',
save: 'Сохранить',
delete: 'Удалить',
refresh: 'Обновить',
noSystem: 'Выберите или создайте систему',
attributes: 'Атрибуты',
derived: 'Производные',
validationOk: 'Валидация пройдена',
validationFail: 'Ошибки валидации',
createCharacter: 'Создать персонажа',
characterName: 'Имя персонажа',
},
} as const;
export type MessageKey = keyof typeof messages.en;
export function t(locale: Locale, key: MessageKey): string {
return messages[locale][key] ?? messages.en[key];
}