feat(i18n): nine languages, each at its own address; release v6.3.0
The site now speaks German, French, Spanish, Ukrainian, Russian, Chinese, Korean and Hindi alongside English — 623 strings per language, 5,607 translations, covering the landing page, the key exchange, the chat, group calls and every error along the way. Each locale is a real page at a real URL (/de/, /fr/, …), generated at build time from locales/*.json. That is the whole point: the app is client-rendered, so a language that only swaps strings at runtime has no address for a crawler to index and no link anyone can share. Each page carries its own canonical, a reciprocal hreflang cluster and translated schema.org. The URL decides the language, always. A stored preference only applies where the address does not say, and nothing ever redirects on Accept-Language — that is how sites become invisible to search engines outside one country. robots.txt and sitemap.xml did not exist before; both are generated now. Bugs found on the way, each with a test that would have caught it: - partner logos used page-relative paths and 404'd from any /xx/ page - post-build stamped ?v= only into the root shell, leaving locales behind - "Back online" appeared on every page load, not just after being offline - update timestamps were hard-coded to US format for every reader - t() threw on a partial window, taking whole components down with it
This commit is contained in:
+7
-3
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "SecureBit.chat — Private, Encrypted Messenger",
|
||||
"name": "SecureBit.chat - Private, Encrypted Messenger",
|
||||
"short_name": "SecureBit",
|
||||
"description": "P2P messenger with ECDH + DTLS + SAS security, military-grade cryptography and Lightning Network payments",
|
||||
"start_url": "./",
|
||||
@@ -10,7 +10,11 @@
|
||||
"scope": "./",
|
||||
"lang": "en",
|
||||
"dir": "ltr",
|
||||
"categories": ["communication", "security", "productivity"],
|
||||
"categories": [
|
||||
"communication",
|
||||
"security",
|
||||
"productivity"
|
||||
],
|
||||
"prefer_related_applications": false,
|
||||
"icons": [
|
||||
{
|
||||
@@ -102,7 +106,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Join Channel",
|
||||
"short_name": "Join",
|
||||
"short_name": "Join",
|
||||
"description": "Join an existing secure channel",
|
||||
"url": "./?action=join",
|
||||
"icons": [
|
||||
|
||||
Reference in New Issue
Block a user