Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/apps/web/lib/products.ts
blob: 4fe8dfd97c8680a2f5a4243fb9157630018de71b (plain)
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
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
// SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com>
// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.1

import type { Locale } from "./localization";

/**
 * The products of product.progmasoft.com. Each one has a page there and its
 * own site; the catalog only introduces it and leads on.
 */
export const productSlugs = [
  "tala-lang",
  "talac",
  "talafmt",
  "talalint",
  "tazel",
  "catch3",
] as const;
export type ProductSlug = (typeof productSlugs)[number];

export function isProductSlug(value: string): value is ProductSlug {
  return productSlugs.includes(value as ProductSlug);
}

interface ProductFacts {
  name: string;
  /** The product's own site. */
  site: string;
  /** The public source repository. */
  source: string;
  accent: "violet" | "blue" | "green" | "orange" | "teal" | "slate";
}

export const products: Record<ProductSlug, ProductFacts> = {
  "tala-lang": {
    name: "Tala",
    site: "https://tala.run/",
    source: "https://github.com/Progmasoft/tala",
    accent: "violet",
  },
  talac: {
    name: "talac",
    site: "https://talac.tala.run/",
    source: "https://github.com/Progmasoft/tala",
    accent: "blue",
  },
  talafmt: {
    name: "talafmt",
    site: "https://talafmt.tala.run/",
    source: "https://github.com/Progmasoft/talafmt",
    accent: "teal",
  },
  talalint: {
    name: "talalint",
    site: "https://talalint.tala.run/",
    source: "https://github.com/Progmasoft/talalint",
    accent: "green",
  },
  tazel: {
    name: "Tazel",
    site: "https://tazel.net/",
    source: "https://github.com/Progmasoft/tazel",
    accent: "orange",
  },
  catch3: {
    name: "Catch3",
    site: "https://catch3.progmasoft.com/",
    source: "https://github.com/Progmasoft/catch3",
    accent: "green",
  },
};

interface ProductText {
  category: string;
  tagline: string;
  description: string;
  features: string[];
}

interface CatalogMessages {
  metadataTitle: string;
  metadataDescription: string;
  eyebrow: string;
  title: string;
  description: string;
  details: string;
  site: string;
  source: string;
  features: string;
  back: string;
  products: Record<ProductSlug, ProductText>;
}

export const catalogMessages: Record<Locale, CatalogMessages> = {
  "en-US": {
    metadataTitle: "Products",
    metadataDescription:
      "The products of Progmasoft: the Tala language with its tools, and the Catch3 testing toolkit.",
    eyebrow: "Progmasoft products",
    title: "Products",
    description:
      "Each product grows out of the Progmasoft technology pool and has its own site. Choose one to read more.",
    details: "Details",
    site: "Visit the site",
    source: "Source code",
    features: "What it does",
    back: "All products",
    products: {
      "tala-lang": {
        category: "Programming language",
        tagline: "A lazy, statically typed language.",
        description:
          "Tala evaluates by need and checks types before it runs. Programs are organized in namespaces and classes, and an executable starts at a parameterless static Main method.",
        features: [
          "Call-by-need evaluation with effects kept out of sight of the types",
          "Namespaces and classes; no top-level functions",
          "The System standard library and the Progmasoft library",
          "Packages published on ViGet",
        ],
      },
      talac: {
        category: "Compiler",
        tagline: "The Tala compiler.",
        description:
          "talac turns Tala sources into native executables. Its frontend parses, resolves and type-checks in Haskell; its backend lowers through its own intermediate representations to LLVM in C++.",
        features: [
          "One program from any number of source files",
          "Inspectable intermediate stages (.core, .xpp, .xmm)",
          "Native executables through LLVM",
          "A command line read by a typed parser",
        ],
      },
      talafmt: {
        category: "Formatter",
        tagline: "One layout for every Tala file.",
        description:
          "talafmt rewrites Tala sources in place to one consistent layout, or checks them without changing anything.",
        features: [
          "Formats files in place by default",
          "--check for continuous integration",
          "Output as files, standard output, coverage, Checkstyle or JSON",
          "Settings in talafmt.kts",
        ],
      },
      talalint: {
        category: "Linter",
        tagline: "Finds what a compiler lets through.",
        description:
          "talalint reports what is wrong with Tala sources: the diagnostics of the Tala compiler frontend, and checks of its own on the physical source.",
        features: [
          "The diagnostics of the Tala compiler, under the compiler check",
          "Trailing whitespace, mixed line endings and a missing final newline",
          "--fix applies only safe fixes to the physical source",
          "Runs from Tazel with tazel lint",
        ],
      },
      tazel: {
        category: "Build system and package manager",
        tagline: "Builds Tala projects and their packages.",
        description:
          "Tazel reads a project from BUILD.kts, resolves its packages from ViGet, records them in a lockfile and runs talac to build.",
        features: [
          "Projects described in a Kotlin DSL (BUILD.kts)",
          "Packages from ViGet, with a lockfile",
          "Runs the compiler, formatter and linter",
          "Extensible with DSL plugins",
        ],
      },
      catch3: {
        category: "Testing toolkit",
        tagline: "C++ testing beyond assertions.",
        description:
          "Catch3 keeps Catch2 compatibility and adds a native property-testing engine, with more kinds of testing on its roadmap.",
        features: [
          "Catch2-compatible tests",
          "Property, stateful and metamorphic tests with shrinking",
          "Text snapshots and JUnit-style XML results",
          "Planned: own runner, mocking, coverage and mutation testing",
        ],
      },
    },
  },
  "de-DE": {
    metadataTitle: "Produkte",
    metadataDescription:
      "Die Produkte von Progmasoft: die Sprache Tala mit ihren Werkzeugen und das Testwerkzeug Catch3.",
    eyebrow: "Progmasoft-Produkte",
    title: "Produkte",
    description:
      "Jedes Produkt wächst aus dem Progmasoft-Technologiepool und hat eine eigene Website. Wählen Sie eines, um mehr zu lesen.",
    details: "Details",
    site: "Zur Website",
    source: "Quellcode",
    features: "Was es kann",
    back: "Alle Produkte",
    products: {
      "tala-lang": {
        category: "Programmiersprache",
        tagline: "Eine träge, statisch typisierte Sprache.",
        description:
          "Tala wertet nach Bedarf aus und prüft Typen vor der Ausführung. Programme sind in Namespaces und Klassen gegliedert; ein Programm beginnt bei einer parameterlosen statischen Main-Methode.",
        features: [
          "Auswertung nach Bedarf, Effekte bleiben für die Typen unsichtbar",
          "Namespaces und Klassen; keine Funktionen auf oberster Ebene",
          "Die Standardbibliothek System und die Progmasoft-Bibliothek",
          "Pakete auf ViGet",
        ],
      },
      talac: {
        category: "Compiler",
        tagline: "Der Tala-Compiler.",
        description:
          "talac übersetzt Tala-Quellen in native Programme. Das Frontend parst, löst Namen auf und prüft Typen in Haskell; das Backend senkt über eigene Zwischendarstellungen in C++ nach LLVM ab.",
        features: [
          "Ein Programm aus beliebig vielen Quelldateien",
          "Einsehbare Zwischenstufen (.core, .xpp, .xmm)",
          "Native Programme über LLVM",
          "Eine Kommandozeile mit typisiertem Parser",
        ],
      },
      talafmt: {
        category: "Formatierer",
        tagline: "Ein Layout für jede Tala-Datei.",
        description:
          "talafmt bringt Tala-Quellen direkt in ein einheitliches Layout oder prüft sie, ohne etwas zu ändern.",
        features: [
          "Formatiert Dateien standardmäßig direkt",
          "--check für die kontinuierliche Integration",
          "Ausgabe als Dateien, Standardausgabe, Abdeckung, Checkstyle oder JSON",
          "Einstellungen in talafmt.kts",
        ],
      },
      talalint: {
        category: "Linter",
        tagline: "Findet, was ein Compiler durchlässt.",
        description:
          "talalint meldet, was an Tala-Quellen nicht stimmt: die Diagnosen des Tala-Compiler-Frontends und eigene Prüfungen der physischen Quelle.",
        features: [
          "Die Diagnosen des Tala-Compilers unter der Prüfung compiler",
          "Leerzeichen am Zeilenende, gemischte Zeilenenden und ein fehlender Zeilenumbruch am Dateiende",
          "--fix wendet nur sichere Korrekturen an der physischen Quelle an",
          "Läuft aus Tazel mit tazel lint",
        ],
      },
      tazel: {
        category: "Build-System und Paketmanager",
        tagline: "Baut Tala-Projekte und ihre Pakete.",
        description:
          "Tazel liest ein Projekt aus BUILD.kts, löst seine Pakete aus ViGet auf, hält sie in einer Lock-Datei fest und baut mit talac.",
        features: [
          "Projekte in einer Kotlin-DSL (BUILD.kts)",
          "Pakete aus ViGet mit Lock-Datei",
          "Startet Compiler, Formatierer und Linter",
          "Erweiterbar mit DSL-Plugins",
        ],
      },
      catch3: {
        category: "Testwerkzeug",
        tagline: "C++-Tests jenseits von Assertions.",
        description:
          "Catch3 bleibt Catch2-kompatibel und ergänzt eine native Engine für eigenschaftsbasierte Tests; weitere Testarten stehen auf dem Fahrplan.",
        features: [
          "Catch2-kompatible Tests",
          "Eigenschafts-, zustandsbehaftete und metamorphe Tests mit Verkleinerung",
          "Text-Snapshots und XML-Ergebnisse im JUnit-Stil",
          "Geplant: eigener Runner, Mocking, Abdeckung und Mutationstests",
        ],
      },
    },
  },
  "ru-RU": {
    metadataTitle: "Продукты",
    metadataDescription:
      "Продукты Progmasoft: язык Tala с его инструментами и набор для тестирования Catch3.",
    eyebrow: "Продукты Progmasoft",
    title: "Продукты",
    description:
      "Каждый продукт вырастает из технологического пула Progmasoft и имеет собственный сайт. Выберите продукт, чтобы узнать больше.",
    details: "Подробнее",
    site: "Перейти на сайт",
    source: "Исходный код",
    features: "Что он умеет",
    back: "Все продукты",
    products: {
      "tala-lang": {
        category: "Язык программирования",
        tagline: "Ленивый язык со статической типизацией.",
        description:
          "Tala вычисляет по необходимости и проверяет типы до запуска. Программы организованы в пространства имён и классы, а исполняемая программа начинается со статического метода Main без параметров.",
        features: [
          "Вычисление по необходимости; эффекты скрыты от типов",
          "Пространства имён и классы; без функций верхнего уровня",
          "Стандартная библиотека System и библиотека Progmasoft",
          "Пакеты публикуются в ViGet",
        ],
      },
      talac: {
        category: "Компилятор",
        tagline: "Компилятор Tala.",
        description:
          "talac превращает исходные тексты Tala в исполняемые программы. Фронтенд разбирает, разрешает имена и проверяет типы на Haskell; бэкенд на C++ через собственные промежуточные представления доходит до LLVM.",
        features: [
          "Одна программа из любого числа исходных файлов",
          "Доступные для просмотра промежуточные этапы (.core, .xpp, .xmm)",
          "Исполняемые программы через LLVM",
          "Командная строка с типизированным разбором",
        ],
      },
      talafmt: {
        category: "Форматировщик",
        tagline: "Единое оформление для каждого файла Tala.",
        description:
          "talafmt приводит исходные тексты Tala к единому оформлению на месте или только проверяет их, ничего не меняя.",
        features: [
          "По умолчанию форматирует файлы на месте",
          "--check для непрерывной интеграции",
          "Вывод в файлы, стандартный вывод, покрытие, Checkstyle или JSON",
          "Настройки в talafmt.kts",
        ],
      },
      talalint: {
        category: "Линтер",
        tagline: "Находит то, что пропускает компилятор.",
        description:
          "talalint сообщает, что не так в исходных текстах Tala: диагностику фронтенда компилятора Tala и собственные проверки физического текста.",
        features: [
          "Диагностика компилятора Tala в проверке compiler",
          "Пробелы в конце строк, смешанные концы строк и отсутствие перевода строки в конце файла",
          "--fix применяет только безопасные исправления физического текста",
          "Запускается из Tazel командой tazel lint",
        ],
      },
      tazel: {
        category: "Система сборки и менеджер пакетов",
        tagline: "Собирает проекты Tala и их пакеты.",
        description:
          "Tazel читает проект из BUILD.kts, разрешает его пакеты из ViGet, фиксирует их в lock-файле и собирает с помощью talac.",
        features: [
          "Проекты описываются на Kotlin DSL (BUILD.kts)",
          "Пакеты из ViGet с lock-файлом",
          "Запускает компилятор, форматировщик и линтер",
          "Расширяется DSL-плагинами",
        ],
      },
      catch3: {
        category: "Набор для тестирования",
        tagline: "Тестирование C++ за пределами утверждений.",
        description:
          "Catch3 сохраняет совместимость с Catch2 и добавляет собственный движок тестирования на основе свойств; другие виды тестирования — в планах.",
        features: [
          "Тесты, совместимые с Catch2",
          "Тесты свойств, с состоянием и метаморфные, с упрощением",
          "Текстовые снимки и результаты в XML в стиле JUnit",
          "В планах: свой запускатель, моки, покрытие и мутационное тестирование",
        ],
      },
    },
  },
  "he-IL": {
    metadataTitle: "מוצרים",
    metadataDescription:
      "המוצרים של Progmasoft: שפת Tala עם הכלים שלה וערכת הבדיקות Catch3.",
    eyebrow: "המוצרים של Progmasoft",
    title: "מוצרים",
    description:
      "כל מוצר צומח ממאגר הטכנולוגיה של Progmasoft ויש לו אתר משלו. בחרו מוצר כדי לקרוא עוד.",
    details: "פרטים",
    site: "לאתר",
    source: "קוד מקור",
    features: "מה הוא עושה",
    back: "כל המוצרים",
    products: {
      "tala-lang": {
        category: "שפת תכנות",
        tagline: "שפה עצלה עם טיפוסים סטטיים.",
        description:
          "Tala מחשבת לפי הצורך ובודקת טיפוסים לפני ההרצה. התוכניות מאורגנות במרחבי שמות ובמחלקות, ותוכנית מתחילה במתודת Main סטטית בלי פרמטרים.",
        features: [
          "חישוב לפי הצורך; האפקטים נשארים מחוץ לטיפוסים",
          "מרחבי שמות ומחלקות; אין פונקציות ברמה העליונה",
          "הספרייה הסטנדרטית System והספרייה של Progmasoft",
          "חבילות שמתפרסמות ב־ViGet",
        ],
      },
      talac: {
        category: "מהדר",
        tagline: "המהדר של Tala.",
        description:
          "talac הופך קוד Tala לתוכניות מכונה. החלק הקדמי מנתח, פותר שמות ובודק טיפוסים ב־Haskell; החלק האחורי ב־C++ יורד דרך ייצוגי ביניים משלו אל LLVM.",
        features: [
          "תוכנית אחת מכל מספר של קובצי מקור",
          "שלבי ביניים שאפשר לבחון (‎.core,‏ .xpp,‏ .xmm)",
          "תוכניות מכונה דרך LLVM",
          "שורת פקודה שנקראת במנתח עם טיפוסים",
        ],
      },
      talafmt: {
        category: "מעצב קוד",
        tagline: "פריסה אחת לכל קובץ Tala.",
        description:
          "talafmt משכתב קוד Tala במקום לפריסה אחידה, או בודק אותו בלי לשנות דבר.",
        features: [
          "מעצב קבצים במקום כברירת מחדל",
          "‏--check לאינטגרציה רציפה",
          "פלט כקבצים, פלט תקני, כיסוי, Checkstyle או JSON",
          "הגדרות ב־talafmt.kts",
        ],
      },
      talalint: {
        category: "לינטר",
        tagline: "מוצא את מה שהמהדר מעביר.",
        description:
          "talalint מדווח מה לא תקין בקוד Tala: האבחונים של החלק הקדמי של מהדר Tala, ובדיקות משלו על הטקסט הפיזי.",
        features: [
          "האבחונים של מהדר Tala, תחת הבדיקה compiler",
          "רווחים בסוף שורה, סופי שורה מעורבים ושורה חדשה חסרה בסוף הקובץ",
          "‏--fix מחיל רק תיקונים בטוחים על הטקסט הפיזי",
          "רץ מתוך Tazel עם tazel lint",
        ],
      },
      tazel: {
        category: "מערכת בנייה ומנהל חבילות",
        tagline: "בונה פרויקטים של Tala ואת החבילות שלהם.",
        description:
          "Tazel קורא פרויקט מ־BUILD.kts, פותר את החבילות שלו מ־ViGet, רושם אותן בקובץ נעילה ובונה עם talac.",
        features: [
          "פרויקטים שמתוארים ב־Kotlin DSL ‏(BUILD.kts)",
          "חבילות מ־ViGet עם קובץ נעילה",
          "מפעיל את המהדר, מעצב הקוד והלינטר",
          "ניתן להרחבה בתוספי DSL",
        ],
      },
      catch3: {
        category: "ערכת בדיקות",
        tagline: "בדיקות C++‎ מעבר לטענות.",
        description:
          "Catch3 שומרת על תאימות ל־Catch2 ומוסיפה מנוע בדיקות מבוססות תכונות משלה; סוגי בדיקות נוספים נמצאים בתוכנית.",
        features: [
          "בדיקות תואמות Catch2",
          "בדיקות תכונות, בדיקות עם מצב ובדיקות מטמורפיות, עם צמצום",
          "תמונות מצב טקסטואליות ותוצאות XML בסגנון JUnit",
          "בתוכנית: מריץ משלה, אובייקטים מדומים, כיסוי ובדיקות מוטציה",
        ],
      },
    },
  },
};

export function getCatalogMessages(locale: Locale): CatalogMessages {
  return catalogMessages[locale];
}