Skip to content

Commit c89e736

Browse files
committed
Language switcher
1 parent 4c05929 commit c89e736

7 files changed

Lines changed: 139 additions & 20 deletions

File tree

config/_default/hugo.toml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ baseURL = "https://noscribe.de/"
22

33
theme = "hugo-book"
44

5-
defaultContentLanguage = "de"
6-
defaultContentLanguageInSubdir = false
5+
defaultContentLanguage = "en"
6+
defaultContentLanguageInSubdir = true
7+
disableDefaultLanguageRedirect = true
78

8-
languageCode = "de-DE"
9+
languageCode = "en-US"
910

1011
title = "noScribe"
1112

@@ -35,7 +36,7 @@ enableRobotsTXT = false
3536
BookSection = "docs"
3637
BookToC = false
3738
BookFavicon = "img/noScribeLogo.png"
38-
DefaultLang = "de"
39+
DefaultLang = "en"
3940
OgImage = "img/graphic_sw.png"
4041
siteDescription = "Offizielle Website der Open-Source-Transkriptionssoftware noScribe – lokal, datenschutzfreundlich, ohne Cloud."
4142
authorName = "Dr. Kai Dröge"
@@ -48,13 +49,13 @@ enableRobotsTXT = false
4849
[languages.de]
4950
languageName = "Deutsch"
5051
languageCode = "de-DE"
51-
weight = 1
52+
weight = 2
5253
title = "noScribe"
5354
contentDir = "content/de"
5455
[languages.en]
5556
languageName = "English"
5657
languageCode = "en-US"
57-
weight = 2
58+
weight = 1
5859
title = "noScribe"
5960
contentDir = "content/en"
6061

content/de/_index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ NoScribe kann fast jedes Audio- oder Videoformat verarbeiten. Als Ausgabe wird s
3535

3636
**Verarbeitung**
3737

38-
Da die Transkription komplett lokal auf dem eigenen Computer erfolgt, muss man etwas Zeit einplanen: Eine Stunde Interview braucht ca. 1-3 Stunden Transkriptionszeit, auf älteren Rechnern teils noch länger. Man kann aber mehrere Aufträge in eine Warteschlange stellen, die dann bspw. über Nacht abgearbeitet werden. Eine NVIDIA-Grafikkarte (CUDA) kann die Transkription stark beschleunigen. Da der [Download](/docs/download-installation/) auch die KI-Modelle enthält, ist die Installationsdatei recht groß (ca. 3 GB).
38+
Da die Transkription komplett lokal auf dem eigenen Computer erfolgt, muss man etwas Zeit einplanen: Eine Stunde Interview braucht ca. 1-3 Stunden Transkriptionszeit, auf älteren Rechnern teils noch länger. Man kann aber mehrere Aufträge in eine Warteschlange stellen, die dann bspw. über Nacht abgearbeitet werden. Eine NVIDIA-Grafikkarte (CUDA) kann die Transkription stark beschleunigen. Da der [Download]({{< relref "docs/download-installation.md" >}}) auch die KI-Modelle enthält, ist die Installationsdatei recht groß (ca. 3 GB).
3939

4040
**Spezialfunktionen**
4141

@@ -48,7 +48,7 @@ Das KI-Modell hinter noScribe kann auch Dialekte wie bspw. Schweizerdeutsch rech
4848

4949
{{% hint info %}}
5050
**Mehr Info:**
51-
- Die noScribe [Bedienungsanleitung](/docs/usage/).
51+
- Die noScribe [Bedienungsanleitung]({{< relref "docs/usage.md" >}}).
5252
- Ein [Erfahrungbericht von Rebecca Schmidt](https://sozmethode.hypotheses.org/2315) (Universität Paderborn)
5353
- ["Datenaufbereitung durch Transkription"](https://www.pedocs.de/volltexte/2025/33856/pdf/Droege_2025_Datenaufbereitung_durch_Transkription.pdf), ein Fachartikel von mir zum Thema
5454
{{% /hint %}}

content/de/docs/usage.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,5 @@ KI-gestützte Spracherkennung hat in den letzten Jahren enorme Fortschritte gema
6767
- Wie andere KI-Sprachmodelle kann auch das hier verwendete Modell Whisper manchmal "halluzinieren", also Worte oder Satzteile hinzufügen, die zwar inhaltlich passend erscheinen, tatsächlich aber nicht gesagt wurden - siehe diese [Studie der Cornell University](https://facctconference.org/static/papers24/facct24-111.pdf) zum Thema.
6868
- Selten können sich fortwährend wiederholende Textschleifen entstehen, ähnlich einer defekten Schallplatte. In diesem Fall kürzere Abschnitte mit leichter Überlappung transkribieren und manuell aneinanderfügen.
6969
- Eine Mischung mehrerer Sprachen in derselben Aufnahme kann dazu führen, dass das KI-Modell übersetzt statt wortgetreu zu transkribieren.
70-
- Bei langen Audios kann die Interpunktion/Kapitalisierung verloren gehen. Auch hier kann eine Aufteilung des Transkripts möglicherweise helfen, oder man verwendet das Transkriptionsmodell "faster-whisper-large-v2", das weniger anfällig für dieses Problem ist. Es muss allerdings zunächst [installiert werden](/docs/advanced-options/#andere-transkriptionsmodelle-nutzen).
70+
- Bei langen Audios kann die Interpunktion/Kapitalisierung verloren gehen. Auch hier kann eine Aufteilung des Transkripts möglicherweise helfen, oder man verwendet das Transkriptionsmodell "faster-whisper-large-v2", das weniger anfällig für dieses Problem ist. Es muss allerdings zunächst [installiert werden]({{< relref "docs/advanced-options.md" >}}#andere-transkriptionsmodelle-nutzen).
7171
- Die Qualität des Ergebnisses hängt stark von der Sprache ab. Westliche Sprachen werden generell sehr gut unterstützt, auch kleinere wie bspw. Niederländisch. Gut ist auch die Unterstützung für Koreanisch, Chinesisch (Mandarin), oder Indonesisch. Dagegen werden andere, ebenfalls große Sprachen wie bspw. Persisch, Panjabi oder Tamil nur sehr fehlerhaft transkribiert. Dies ist ein klarer Fall von KI-Bias, in dem sich die ökonomischen Interessen von OpenAI spiegeln, die das Whisper-Modell trainiert haben. Hier findet man eine Übersicht zu [typischen Fehlerraten in verschiedenen Sprachen](https://github.com/openai/whisper?tab=readme-ov-file#available-models-and-languages). Siehe auch [dieses Paper](https://doi.org/10.1145/3576915.3624380) für einen Vergleich verschiedener Transkriptionsmodelle und deren Fehlerraten.

content/en/_index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ noScribe can process almost any audio or video format. By default it creates an
3434

3535
**Processing**
3636

37-
Because transcription happens entirely locally on your own computer, it needs some time: One hour of interview takes about 1-3 hours of transcription time, on older machines even longer. But you can queue multiple jobs, for example overnight. An NVIDIA graphics card (CUDA) can significantly speed up transcription. Since the [download](/en/docs/download-installation/) also includes the AI models, the installer is quite large (about 3 GB).
37+
Because transcription happens entirely locally on your own computer, it needs some time: One hour of interview takes about 1-3 hours of transcription time, on older machines even longer. But you can queue multiple jobs, for example overnight. An NVIDIA graphics card (CUDA) can significantly speed up transcription. Since the [download]({{< relref "docs/download-installation.md" >}}) also includes the AI models, the installer is quite large (about 3 GB).
3838

3939
**Special features**
4040

@@ -46,7 +46,7 @@ The AI model behind noScribe supports many languages and can handle dialects qui
4646

4747
{{% hint info %}}
4848
**More info:**
49-
- The noScribe [usage guide](/en/docs/usage/) and [FAQ](/en/docs/faq/).
49+
- The noScribe [usage guide]({{< relref "docs/usage.md" >}}) and [FAQ]({{< relref "docs/faq.md" >}}).
5050
- [Review and tutorial video (external)](https://www.youtube.com/watch?v=d0iwEVdW3qg)
5151
{{% /hint %}}
5252

content/en/docs/usage.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,5 @@ AI-assisted speech recognition has made huge advances in recent years. Still, th
6767
- Like other AI language models, the Whisper model used here can sometimes "hallucinate" and add words or phrases that sound plausible but were not actually said - see this [Cornell University study](https://facctconference.org/static/papers24/facct24-111.pdf) on the topic.
6868
- Rarely, endlessly repeating text loops can occur, similar to a defective record. In this case, transcribe shorter sections with slight overlap and stitch them together manually.
6969
- A mix of multiple languages in the same recording can cause the AI model to translate instead of transcribing verbatim.
70-
- With long audio files, punctuation/capitalization can be lost. In that case, splitting the transcript may help, or you can use the transcription model "faster-whisper-large-v2", which is less prone to this problem. However, it must first be [installed](/en/docs/advanced-options/#use-special-transcription-models).
70+
- With long audio files, punctuation/capitalization can be lost. In that case, splitting the transcript may help, or you can use the transcription model "faster-whisper-large-v2", which is less prone to this problem. However, it must first be [installed]({{< relref "docs/advanced-options.md" >}}#use-special-transcription-models).
7171
- The quality of the result depends heavily on the language. Western languages are generally very well supported, including smaller ones like Dutch. Support is also good for Korean, Chinese (Mandarin), or Indonesian. By contrast, other large languages such as Persian, Punjabi, or Tamil are transcribed much less accurately. This is a clear case of AI bias, reflecting the economic interests of OpenAI, which trained the Whisper model. Here is an overview of [typical error rates in different languages](https://github.com/openai/whisper?tab=readme-ov-file#available-models-and-languages). See also [this paper](https://doi.org/10.1145/3576915.3624380) for a comparison of different transcription models and their error rates.

layouts/_partials/docs/html-head.html

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,8 @@
3939
<link rel="alternate" hreflang="{{ default .Site.LanguageCode .Language.Lang }}" href="{{ .Permalink }}" title="{{ partial "docs/title" . }}">
4040
{{- end -}}
4141

42-
{{- $defaultLang := .Site.Params.DefaultLang | default .Site.Language.Lang -}}
43-
{{- $xDefault := . -}}
44-
{{- range $translations -}}
45-
{{- if eq .Language.Lang $defaultLang -}}
46-
{{- $xDefault = . -}}
47-
{{- end -}}
48-
{{- end -}}
49-
<link rel="alternate" hreflang="x-default" href="{{ $xDefault.Permalink }}">
42+
{{- $xDefault := "/" | absURL -}}
43+
<link rel="alternate" hreflang="x-default" href="{{ $xDefault }}">
5044

5145
{{- $styles := resources.Get "book.scss" | resources.ExecuteAsTemplate "book.scss" . | css.Sass | resources.Minify | resources.Fingerprint }}
5246
<link rel="stylesheet" href="{{ partial "docs/links/resource-precache" $styles }}" {{ template "integrity" $styles }}>

static/index.html

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<meta name="robots" content="noindex,follow">
7+
<title>noScribe — Language</title>
8+
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
9+
<link rel="icon" href="/favicon.png" type="image/png">
10+
<style>
11+
:root {
12+
color-scheme: light;
13+
}
14+
body {
15+
margin: 0;
16+
min-height: 100vh;
17+
display: grid;
18+
place-items: center;
19+
font-family: "Source Serif 4", "Georgia", "Times New Roman", serif;
20+
background: radial-gradient(120% 120% at 10% 10%, #f5f1ea 0%, #efe7db 45%, #e8ded0 100%);
21+
color: #1d1d1d;
22+
}
23+
main {
24+
max-width: 36rem;
25+
padding: 2.5rem 2rem 2rem;
26+
margin: 2rem;
27+
background: rgba(255, 255, 255, 0.85);
28+
border: 1px solid #d9cfc1;
29+
border-radius: 18px;
30+
box-shadow: 0 10px 30px rgba(29, 29, 29, 0.08);
31+
text-align: center;
32+
}
33+
h1 {
34+
font-size: 2rem;
35+
margin: 0 0 0.5rem;
36+
letter-spacing: 0.02em;
37+
}
38+
p {
39+
margin: 0.5rem 0 0;
40+
font-size: 1.05rem;
41+
line-height: 1.5;
42+
}
43+
.choices {
44+
display: grid;
45+
gap: 0.75rem;
46+
margin: 1.5rem 0 0.75rem;
47+
}
48+
.lang {
49+
display: block;
50+
padding: 0.85rem 1rem;
51+
border: 1px solid #b9ab98;
52+
border-radius: 12px;
53+
text-decoration: none;
54+
color: inherit;
55+
font-weight: 600;
56+
background: #fff7eb;
57+
transition: transform 160ms ease, box-shadow 160ms ease;
58+
}
59+
.lang:hover,
60+
.lang:focus-visible {
61+
transform: translateY(-2px);
62+
box-shadow: 0 6px 16px rgba(29, 29, 29, 0.12);
63+
}
64+
.meta {
65+
font-size: 0.9rem;
66+
color: #4b4b4b;
67+
}
68+
</style>
69+
</head>
70+
<body>
71+
<main>
72+
<h1>noScribe</h1>
73+
<p>Select your language</p>
74+
<div class="choices">
75+
<a class="lang" href="/en/">English</a>
76+
<a class="lang" href="/de/">Deutsch</a>
77+
</div>
78+
<p class="meta">
79+
Your browser language is used for an automatic redirect on this page only.
80+
You can change language on every page later.
81+
</p>
82+
<noscript>
83+
<p class="meta">JavaScript is disabled; please choose a language above.</p>
84+
</noscript>
85+
</main>
86+
87+
<script>
88+
(function () {
89+
if (window.location.pathname !== "/") return;
90+
91+
// Add new languages by extending this map.
92+
var languagePaths = {
93+
en: "/en/",
94+
de: "/de/"
95+
};
96+
var fallback = "/en/";
97+
98+
var preferred = (navigator.languages && navigator.languages.length)
99+
? navigator.languages
100+
: [navigator.language || ""];
101+
102+
var target = null;
103+
for (var i = 0; i < preferred.length; i++) {
104+
var lang = String(preferred[i] || "").toLowerCase();
105+
if (!lang) continue;
106+
if (languagePaths[lang]) {
107+
target = languagePaths[lang];
108+
break;
109+
}
110+
var base = lang.split("-")[0];
111+
if (languagePaths[base]) {
112+
target = languagePaths[base];
113+
break;
114+
}
115+
}
116+
117+
if (!target) target = fallback;
118+
if (target && target !== window.location.pathname) {
119+
window.location.replace(target);
120+
}
121+
})();
122+
</script>
123+
</body>
124+
</html>

0 commit comments

Comments
 (0)