<feed xmlns='http://www.w3.org/2005/Atom'>
<title>progmaweb/apps/web/lib/localization.ts, branch content/no-programming-languages</title>
<subtitle>The site and account service of Progmasoft: a Next.js frontend and an ASP.NET Core API.</subtitle>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/'/>
<entry>
<title>Describe Progmasoft without programming languages and compilers</title>
<updated>2026-11-14T13:33:47+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-14T13:33:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=638d81dc4d0cfe554ea952cae2f59ac70534976d'/>
<id>638d81dc4d0cfe554ea952cae2f59ac70534976d</id>
<content type='text'>
The footer of every page, the site description and the home page still
said that Progmasoft builds programming-language infrastructure,
languages and compilers. Since Tala and its tools are archived, they
describe what Progmasoft makes now, in all four languages:

- Footer: "Developer tools and data infrastructure built with durable
  contracts."
- Site and home description: build systems, testing tools, an agentic
  IDE and data infrastructure.
- Home hero: build systems, testing tools, agentic development
  environments, data infrastructure and the services around them.
- The area "Languages and compilers" becomes "Data infrastructure"
  (columnar in-memory formats and engines for large data on the JVM);
  "Developer tools" drops language servers for agentic development
  environments.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The footer of every page, the site description and the home page still
said that Progmasoft builds programming-language infrastructure,
languages and compilers. Since Tala and its tools are archived, they
describe what Progmasoft makes now, in all four languages:

- Footer: "Developer tools and data infrastructure built with durable
  contracts."
- Site and home description: build systems, testing tools, an agentic
  IDE and data infrastructure.
- Home hero: build systems, testing tools, agentic development
  environments, data infrastructure and the services around them.
- The area "Languages and compilers" becomes "Data infrastructure"
  (columnar in-memory formats and engines for large data on the JVM);
  "Developer tools" drops language servers for agentic development
  environments.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>List C, C++ and Objective-C packages on ViGet instead of Tala</title>
<updated>2026-11-10T00:19:15+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-10T00:19:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=a69b53d92b18a0ecd0d8710efbddd4799dc6a3e7'/>
<id>a69b53d92b18a0ecd0d8710efbddd4799dc6a3e7</id>
<content type='text'>
Tala and its tools are no longer developed as of 2026-11-10; Progmasoft
puts its work into Tazel, a build system for C, C++, Objective-C,
Objective-C++ and Zig. ViGet follows:

- /langs/tala is removed. /langs/c, /langs/cpp and /langs/objc are the
  language catalogs (Objective-C++ packages belong to /langs/objc), served
  by one page, app/viget/langs/[language], which knows only these three;
  any other language is 404. /langs leads to the language list on the
  ViGet home page.
- lib/viget-catalogs.ts: three open language catalogs with their own
  title, description and empty state in en-US, de-DE, ru-RU and he-IL; the
  Tazel catalog describes Tazel as the build system for C, C++,
  Objective-C, Objective-C++ and Zig.
- The ViGet home, header, footer and metadata name C, C++ and Objective-C;
  "Explore Tala" becomes "Explore Tazel" (tazel.net), and the footer links
  Tazel instead of Tala. The sitemap lists the three catalogs.
- Tests: the catalogs, their texts in every language, no text naming Tala,
  and the proxy routes.

pnpm test (37), lint, check and build pass; next start answers /langs/c,
/langs/cpp and /langs/objc with their pages, /langs/tala and /langs/zig
with 404, and /langs with 308 to the language list.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Tala and its tools are no longer developed as of 2026-11-10; Progmasoft
puts its work into Tazel, a build system for C, C++, Objective-C,
Objective-C++ and Zig. ViGet follows:

- /langs/tala is removed. /langs/c, /langs/cpp and /langs/objc are the
  language catalogs (Objective-C++ packages belong to /langs/objc), served
  by one page, app/viget/langs/[language], which knows only these three;
  any other language is 404. /langs leads to the language list on the
  ViGet home page.
- lib/viget-catalogs.ts: three open language catalogs with their own
  title, description and empty state in en-US, de-DE, ru-RU and he-IL; the
  Tazel catalog describes Tazel as the build system for C, C++,
  Objective-C, Objective-C++ and Zig.
- The ViGet home, header, footer and metadata name C, C++ and Objective-C;
  "Explore Tala" becomes "Explore Tazel" (tazel.net), and the footer links
  Tazel instead of Tala. The sitemap lists the three catalogs.
- Tests: the catalogs, their texts in every language, no text naming Tala,
  and the proxy routes.

pnpm test (37), lint, check and build pass; next start answers /langs/c,
/langs/cpp and /langs/objc with their pages, /langs/tala and /langs/zig
with 404, and /langs with 308 to the language list.
</pre>
</div>
</content>
</entry>
<entry>
<title>Ask for the Privacy and Security Policies at registration</title>
<updated>2026-11-06T09:57:27+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-06T09:57:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=53fb8b8bde857025d12655ae53857fc30226b186'/>
<id>53fb8b8bde857025d12655ae53857fc30226b186</id>
<content type='text'>
progmasoft.com/privacy and progmasoft.com/security publish the two
policies in en-US, de-DE, ru-RU and he-IL, and the footer links both.
The Privacy Policy says what an account keeps and that Progmasoft keeps
an IP address for one purpose only: with a ViGet upload, to establish
where an upload that turns out to be malicious software came from and
to give it to the competent authorities. It says that no data, the IP
address included, is sold, rented or traded. The Security Policy covers
passwords, sessions, HTTPS, the ban on malicious software in ViGet and
how to report a weakness.

The registration form asks the person to accept both policies, and the
API refuses a registration without that acceptance, with a password
(acceptPolicies, a validation error of that field) or through Google:
the start of a Google registration without acceptPolicies=true goes
back to /register?google=policies-required, and the completion creates
no account unless the authentication state carries the current version.
An account keeps the version it accepted and the moment, in two new
columns that schema step 2 adds; accounts created before it keep null.
PolicyAcceptance.CurrentVersion and policyVersion on the web side name
the same date, and a web test reads the C# constant to keep them equal.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
progmasoft.com/privacy and progmasoft.com/security publish the two
policies in en-US, de-DE, ru-RU and he-IL, and the footer links both.
The Privacy Policy says what an account keeps and that Progmasoft keeps
an IP address for one purpose only: with a ViGet upload, to establish
where an upload that turns out to be malicious software came from and
to give it to the competent authorities. It says that no data, the IP
address included, is sold, rented or traded. The Security Policy covers
passwords, sessions, HTTPS, the ban on malicious software in ViGet and
how to report a weakness.

The registration form asks the person to accept both policies, and the
API refuses a registration without that acceptance, with a password
(acceptPolicies, a validation error of that field) or through Google:
the start of a Google registration without acceptPolicies=true goes
back to /register?google=policies-required, and the completion creates
no account unless the authentication state carries the current version.
An account keeps the version it accepted and the moment, in two new
columns that schema step 2 adds; accounts created before it keep null.
PolicyAcceptance.CurrentVersion and policyVersion on the web side name
the same date, and a web test reads the C# constant to keep them equal.
</pre>
</div>
</content>
</entry>
<entry>
<title>Show the Tazel plugins of ViGet, open the Gradle catalog, and route their files</title>
<updated>2026-10-29T09:32:23+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-29T09:32:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=3d1c6d52b830d201a68b0440a8a81c13b74c8b92'/>
<id>3d1c6d52b830d201a68b0440a8a81c13b74c8b92</id>
<content type='text'>
The API of the previous commit holds the catalog; this adds what people and
Tazel reach.

Pages:
- /dslplugins/tazel lists the published plugins, read from the API on its
  loopback address, and says when there is none.
- /dslplugins/tazel/&lt;Publisher&gt;/&lt;Name&gt; is the page of a plugin: its
  description, publisher, latest version, license, authors, homepage and
  repository, the plugins block that uses it, and every version with its
  date, plugin API, size, SHA-256, yanked mark and JAR.
- /dslplugins/gradle opens the Gradle catalog. It only lists: Gradle takes
  com.progmasoft.tazel.plugin from the Gradle Plugin Portal.
- The availability note says that Progmasoft publishes first and every
  account later. Texts are in the four languages of the site.

Nginx (ops/nginx/progmaweb.conf):
- On viget.progmasoft.com, index.json of a plugin goes to the API and the
  JARs come from /srv/viget/files with immutable caching; /api/ stays
  closed.
- maven.progmasoft.com serves /srv/maven, whose /tazel holds tazel-api.

ops/README.md describes the directories, their SELinux labels, the publish
and yank commands, and how a release of Tazel copies the API into the Maven
repository.

Tests cover the texts in every language, the plugins block, the Gradle list,
and that a page asks the API only for identifiers.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The API of the previous commit holds the catalog; this adds what people and
Tazel reach.

Pages:
- /dslplugins/tazel lists the published plugins, read from the API on its
  loopback address, and says when there is none.
- /dslplugins/tazel/&lt;Publisher&gt;/&lt;Name&gt; is the page of a plugin: its
  description, publisher, latest version, license, authors, homepage and
  repository, the plugins block that uses it, and every version with its
  date, plugin API, size, SHA-256, yanked mark and JAR.
- /dslplugins/gradle opens the Gradle catalog. It only lists: Gradle takes
  com.progmasoft.tazel.plugin from the Gradle Plugin Portal.
- The availability note says that Progmasoft publishes first and every
  account later. Texts are in the four languages of the site.

Nginx (ops/nginx/progmaweb.conf):
- On viget.progmasoft.com, index.json of a plugin goes to the API and the
  JARs come from /srv/viget/files with immutable caching; /api/ stays
  closed.
- maven.progmasoft.com serves /srv/maven, whose /tazel holds tazel-api.

ops/README.md describes the directories, their SELinux labels, the publish
and yank commands, and how a release of Tazel copies the API into the Maven
repository.

Tests cover the texts in every language, the plugins block, the Gradle list,
and that a page asks the API only for identifiers.
</pre>
</div>
</content>
</entry>
<entry>
<title>Redesign progmasoft.com and add the product catalog and product sites</title>
<updated>2026-10-23T08:29:43+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-23T08:29:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=20a55c4ccbb0f181346444a4c7f083e86389cf9c'/>
<id>20a55c4ccbb0f181346444a4c7f083e86389cf9c</id>
<content type='text'>
progmasoft.com presents Progmasoft as a pool of technology areas instead
of a list of products: languages and compilers, build and packages,
developer tools, quality and testing, identity and access, and
infrastructure. The page has a new hero, a bento of areas, principles and
a developers band that leads to the Progmasoft Console; the products are
one link away in their own catalog.

product.progmasoft.com lists Tala, talac, talafmt, talalint, Tazel, Xide
and Catch3, each with its own page (/tala-lang, /talac, ...) that leads
to the product's site and source. ides.progmasoft.com lists the IDEs and
hosts the Xide site at /xide; catch3.progmasoft.com is the Catch3 site.
The facts follow the READMEs and documentation of the product
repositories: Xide is marked as early work, and Catch3 states that it is
not an official Catch2 release.

The theme switch no longer freezes or flickers. The layout rendered
data-theme="light" on &lt;html&gt;, so every server re-render of the layout
(a language switch) set it back. The control also applied the theme in
an effect after the render while buttons animated their colours. The
attribute now belongs to the bootstrap script and the control alone; the
control applies the theme in the click, and transitions are off for the
two frames of the change.

All new text is in en-US, de-DE, ru-RU and he-IL. The old home messages
leave localization.ts. The proxy maps the new hosts through one table, and
nginx gains their virtual hosts.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
progmasoft.com presents Progmasoft as a pool of technology areas instead
of a list of products: languages and compilers, build and packages,
developer tools, quality and testing, identity and access, and
infrastructure. The page has a new hero, a bento of areas, principles and
a developers band that leads to the Progmasoft Console; the products are
one link away in their own catalog.

product.progmasoft.com lists Tala, talac, talafmt, talalint, Tazel, Xide
and Catch3, each with its own page (/tala-lang, /talac, ...) that leads
to the product's site and source. ides.progmasoft.com lists the IDEs and
hosts the Xide site at /xide; catch3.progmasoft.com is the Catch3 site.
The facts follow the READMEs and documentation of the product
repositories: Xide is marked as early work, and Catch3 states that it is
not an official Catch2 release.

The theme switch no longer freezes or flickers. The layout rendered
data-theme="light" on &lt;html&gt;, so every server re-render of the layout
(a language switch) set it back. The control also applied the theme in
an effect after the render while buttons animated their colours. The
attribute now belongs to the bootstrap script and the control alone; the
control applies the theme in the click, and transitions are off for the
two frames of the change.

All new text is in en-US, de-DE, ru-RU and he-IL. The old home messages
leave localization.ts. The proxy maps the new hosts through one table, and
nginx gains their virtual hosts.
</pre>
</div>
</content>
</entry>
<entry>
<title>Name the project file of Tazel instead of BUILD.kts on ViGet</title>
<updated>2026-10-15T15:21:28+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-15T15:21:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=9fd63414caa1977ae913e8cb468dce30cae72394'/>
<id>9fd63414caa1977ae913e8cb468dce30cae72394</id>
<content type='text'>
A Tazel project file may be called BUILD.kts, BUILD.tzl, BUILD.tazel,
BUILD or Tazel.build, so ViGet no longer names one of them. The plugin
texts in all four locales speak of the project file of Tazel.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A Tazel project file may be called BUILD.kts, BUILD.tzl, BUILD.tazel,
BUILD or Tazel.build, so ViGet no longer names one of them. The plugin
texts in all four locales speak of the project file of Tazel.
</pre>
</div>
</content>
</entry>
<entry>
<title>Group ViGet by language and by build system</title>
<updated>2026-10-15T15:18:50+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-15T15:18:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=16b47e37e2d00b5f9bf0c83c1c03cc6a0991f1c4'/>
<id>16b47e37e2d00b5f9bf0c83c1c03cc6a0991f1c4</id>
<content type='text'>
viget.progmasoft.com now shows, from the top:

1. The state of the registry: what it holds today, the package format,
   the publisher identity and that publishing is not open yet.
2. LANGUAGES: Tala links to viget.progmasoft.com/langs/tala; C++ is a
   gray, disabled button that leads nowhere.
3. BUILD SYSTEM DSL PLUGINS: Tazel links to
   viget.progmasoft.com/dslplugins/tazel; Gradle is a gray, disabled
   button that leads nowhere.

/langs/tala is the catalog of Tala packages and /dslplugins/tazel the
catalog of Kotlin DSL plugins for Tazel, both honestly empty. /langs and
/dslplugins redirect to them. The header, the footer and the sitemap
link the two catalogs, and the coordinates they show begin with the
catalog: /langs/tala/&lt;Publisher&gt;/&lt;Name&gt;/ and
/dslplugins/tazel/&lt;Publisher&gt;/&lt;Name&gt;/.

The text of the catalogs lives in lib/viget-catalogs.ts in all four
locales; localization.ts is close to the size limit of a file. The
two section headings are the registry's names and stay in English.

The language links of the ViGet and Progmasoft pages point at tala.run.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
viget.progmasoft.com now shows, from the top:

1. The state of the registry: what it holds today, the package format,
   the publisher identity and that publishing is not open yet.
2. LANGUAGES: Tala links to viget.progmasoft.com/langs/tala; C++ is a
   gray, disabled button that leads nowhere.
3. BUILD SYSTEM DSL PLUGINS: Tazel links to
   viget.progmasoft.com/dslplugins/tazel; Gradle is a gray, disabled
   button that leads nowhere.

/langs/tala is the catalog of Tala packages and /dslplugins/tazel the
catalog of Kotlin DSL plugins for Tazel, both honestly empty. /langs and
/dslplugins redirect to them. The header, the footer and the sitemap
link the two catalogs, and the coordinates they show begin with the
catalog: /langs/tala/&lt;Publisher&gt;/&lt;Name&gt;/ and
/dslplugins/tazel/&lt;Publisher&gt;/&lt;Name&gt;/.

The text of the catalogs lives in lib/viget-catalogs.ts in all four
locales; localization.ts is close to the size limit of a file. The
two section headings are the registry's names and stay in English.

The language links of the ViGet and Progmasoft pages point at tala.run.
</pre>
</div>
</content>
</entry>
<entry>
<title>Call the language Tala on the Progmasoft and ViGet pages</title>
<updated>2026-10-12T03:19:10+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-12T03:19:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=b71e93b547e9f6425cc83b121f01e7d82b88079f'/>
<id>b71e93b547e9f6425cc83b121f01e7d82b88079f</id>
<content type='text'>
The language Visual X# is now Tala. The Progmasoft home page, the ViGet
pages, the dashboard and the two footers name it so in the four languages of
the site; the project file is BUILD.kts, and the source link leads to
Progmasoft/tala. The README, the operations and localization documents and
the issue templates follow.

The localization document said that a left-to-right mark follows the name of
the language in Hebrew text. That was for the `#` of the old name; the
sentence now speaks of names that end in a symbol.

The links to xsharp-lang.xyz stay: the language site is still served there.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The language Visual X# is now Tala. The Progmasoft home page, the ViGet
pages, the dashboard and the two footers name it so in the four languages of
the site; the project file is BUILD.kts, and the source link leads to
Progmasoft/tala. The README, the operations and localization documents and
the issue templates follow.

The localization document said that a left-to-right mark follows the name of
the language in Hebrew text. That was for the `#` of the old name; the
sentence now speaks of names that end in a symbol.

The links to xsharp-lang.xyz stay: the language site is still served there.
</pre>
</div>
</content>
</entry>
<entry>
<title>Revise the Hebrew wording</title>
<updated>2026-10-03T10:38:29+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-03T10:38:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=ef8875267978042cf91a16062630ec583cac8eba'/>
<id>ef8875267978042cf91a16062630ec583cac8eba</id>
<content type='text'>
A second pass over the Hebrew text replaced words a Hebrew reader would
misread or that are not used for the concept:

- "native" was rendered with the word for "local"; it is now machine code
  for output and the Latin term for the native parts of the toolchain.
- Typed boundaries, the ecosystem, the dedicated account area and the
  first-party infrastructure use the usual terms instead of literal ones.
- The greetings and the new-visitor prompt no longer address one gender.

The text is still not reviewed by a native speaker.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A second pass over the Hebrew text replaced words a Hebrew reader would
misread or that are not used for the concept:

- "native" was rendered with the word for "local"; it is now machine code
  for output and the Latin term for the native parts of the toolchain.
- Typed boundaries, the ecosystem, the dedicated account area and the
  first-party infrastructure use the usual terms instead of literal ones.
- The greetings and the new-visitor prompt no longer address one gender.

The text is still not reviewed by a native speaker.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add Hebrew and follow the browser language by default</title>
<updated>2026-10-03T10:00:20+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-03T10:00:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=5a321c2eb1c691bdb7cc96bbab1e28b88ef92aab'/>
<id>5a321c2eb1c691bdb7cc96bbab1e28b88ef92aab</id>
<content type='text'>
Hebrew (he-IL) joins English, German and Russian with a complete message
tree and its own entry in the language menu.

A visitor who has not chosen a language now gets the language their browser
prefers. The Accept-Language header is negotiated by quality, only the
primary language is compared, and `iw` is accepted as the former code for
Hebrew. A browser that prefers no published language gets en-US, as before.
A language chosen in the menu is still stored in the cookie and always wins.

Hebrew does not mirror the page. The layout, the navigation and code keep
their left-to-right arrangement; only text follows the language. Blocks of
prose run right to left, short pieces such as links and buttons take the
direction of their own first letter, and inputs and code stay left to right.
The onward arrow points left in Hebrew, and a left-to-right mark keeps
"Visual X#" intact inside right-to-left text.

The Hebrew text was not reviewed by a native speaker.

Verified locally: node tests, type check, lint, prettier and a production
build; language selection per Accept-Language header against the dev server;
the Hebrew home and registration pages in a browser.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Hebrew (he-IL) joins English, German and Russian with a complete message
tree and its own entry in the language menu.

A visitor who has not chosen a language now gets the language their browser
prefers. The Accept-Language header is negotiated by quality, only the
primary language is compared, and `iw` is accepted as the former code for
Hebrew. A browser that prefers no published language gets en-US, as before.
A language chosen in the menu is still stored in the cookie and always wins.

Hebrew does not mirror the page. The layout, the navigation and code keep
their left-to-right arrangement; only text follows the language. Blocks of
prose run right to left, short pieces such as links and buttons take the
direction of their own first letter, and inputs and code stay left to right.
The onward arrow points left in Hebrew, and a left-to-right mark keeps
"Visual X#" intact inside right-to-left text.

The Hebrew text was not reviewed by a native speaker.

Verified locally: node tests, type check, lint, prettier and a production
build; language selection per Accept-Language header against the dev server;
the Hebrew home and registration pages in a browser.
</pre>
</div>
</content>
</entry>
</feed>
