feat(i18n): Arabic, Hebrew, Persian and Urdu, and a layout that mirrors; release v6.4.0
CodeQL Analysis / Analyze CodeQL (push) Canceled after 0s
Deploy Application / deploy (push) Canceled after 0s
Mirror to Codeberg / mirror (push) Canceled after 0s
Mirror to PrivacyGuides / mirror (push) Canceled after 0s

Four right-to-left languages at /ar/, /he/, /fa/ and /ur/ — thirteen in all.

The layout no longer has a left and a right, it has a start and an end: the
margins, insets and corners are CSS logical properties now, so they follow
dir on <html>. Directional glyphs flip; keys, safety codes and session
descriptors are pinned left-to-right so bidi cannot reorder what two people
compare against each other's screens.

Also fixed: the Service Worker was registered as './sw.js', which 404s from
every locale subdirectory, so twelve of the thirteen pages had no worker at
all. And the bundler ran before the dictionaries were generated, so a newly
added language could reach the page ahead of the app that renders it.
This commit is contained in:
lockbitchat
2026-08-29 18:05:20 -04:00
parent 98d42ac2fb
commit 5e32f547b9
68 changed files with 15147 additions and 500 deletions
+112
View File
@@ -12,6 +12,10 @@
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
@@ -27,6 +31,10 @@
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
@@ -42,6 +50,10 @@
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
@@ -57,6 +69,10 @@
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
@@ -72,6 +88,10 @@
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
@@ -87,6 +107,10 @@
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
@@ -102,6 +126,10 @@
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
@@ -117,6 +145,10 @@
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
@@ -132,6 +164,86 @@
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://securebit.chat/ar/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://securebit.chat/"/>
<xhtml:link rel="alternate" hreflang="de" href="https://securebit.chat/de/"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://securebit.chat/fr/"/>
<xhtml:link rel="alternate" hreflang="es" href="https://securebit.chat/es/"/>
<xhtml:link rel="alternate" hreflang="uk" href="https://securebit.chat/uk/"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://securebit.chat/ru/"/>
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://securebit.chat/he/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://securebit.chat/"/>
<xhtml:link rel="alternate" hreflang="de" href="https://securebit.chat/de/"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://securebit.chat/fr/"/>
<xhtml:link rel="alternate" hreflang="es" href="https://securebit.chat/es/"/>
<xhtml:link rel="alternate" hreflang="uk" href="https://securebit.chat/uk/"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://securebit.chat/ru/"/>
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://securebit.chat/fa/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://securebit.chat/"/>
<xhtml:link rel="alternate" hreflang="de" href="https://securebit.chat/de/"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://securebit.chat/fr/"/>
<xhtml:link rel="alternate" hreflang="es" href="https://securebit.chat/es/"/>
<xhtml:link rel="alternate" hreflang="uk" href="https://securebit.chat/uk/"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://securebit.chat/ru/"/>
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://securebit.chat/ur/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://securebit.chat/"/>
<xhtml:link rel="alternate" hreflang="de" href="https://securebit.chat/de/"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://securebit.chat/fr/"/>
<xhtml:link rel="alternate" hreflang="es" href="https://securebit.chat/es/"/>
<xhtml:link rel="alternate" hreflang="uk" href="https://securebit.chat/uk/"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://securebit.chat/ru/"/>
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://securebit.chat/zh/"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://securebit.chat/ko/"/>
<xhtml:link rel="alternate" hreflang="hi" href="https://securebit.chat/hi/"/>
<xhtml:link rel="alternate" hreflang="ar" href="https://securebit.chat/ar/"/>
<xhtml:link rel="alternate" hreflang="he" href="https://securebit.chat/he/"/>
<xhtml:link rel="alternate" hreflang="fa" href="https://securebit.chat/fa/"/>
<xhtml:link rel="alternate" hreflang="ur" href="https://securebit.chat/ur/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://securebit.chat/"/>
<changefreq>weekly</changefreq>
<priority>1.0</priority>