diff --git a/pd/nw/dialog_search.html b/pd/nw/dialog_search.html
index 01bc0aff5e416d3211d9d20b9b7d7d492daa8164..fe215b969ec17a93af944893ccf96d55d5a20089 100644
--- a/pd/nw/dialog_search.html
+++ b/pd/nw/dialog_search.html
@@ -524,7 +524,7 @@ function register_window_id(id, attrs) {
     add_events();
     // set file types for the file dialog
     document.getElementById("file_browser").accept = filetypes.join(",");
-    document.getElementById("results").textContent = "Building index...";
+    document.getElementById("results").textContent = l("search.building_index");
     document.getElementById("search_text").disabled = true;
     document.getElementById("file_browser").setAttribute("nwworkingdir",
         pdgui.get_gui_dir() + "/doc"); // Probably need a doc getter in pdgui
@@ -532,7 +532,7 @@ function register_window_id(id, attrs) {
 }
 
 function display_no_results() {
-    document.getElementById("results").textContent = "No results found.";
+    document.getElementById("results").textContent = l("search.no_results");
 }
 
 function display_doc(doc) {
diff --git a/pd/nw/locales/de/translation.json b/pd/nw/locales/de/translation.json
new file mode 100644
index 0000000000000000000000000000000000000000..6a199fbdc9a3be829f02a101dc0e0d7356032e5b
--- /dev/null
+++ b/pd/nw/locales/de/translation.json
@@ -0,0 +1,409 @@
+{
+  "hello": "world",
+  "iem": {
+    "prop": {
+      "heading": {
+          "size":    "Größe und Verhalten",
+          "messages": "Nachrichten",
+          "label":   "Etikett",
+          "colors":  "Farben"
+      },
+      "size_tt": "Größe des iemgui-Elements",
+      "size": "Größe",
+      "select_size": "Auswahlgröße",
+      "select_size_tt": "Größe des Auswahl-Rechtecks zum Selektieren und Ziehen des Objekts",
+      "visible_width": "Breite",
+      "visible_width_tt": "Breite des Rechtecks",
+      "visible_height": "Höhe",
+      "visible_height_tt": "Höhe des Rechtecks",
+      "nonzero_value": "Wert ungleich Null",
+      "nonzero_value_tt": "Ausgabewert, wenn der Schalter ein 'x' zeigt",
+      "flash_interrupt": "Unterbrechung",
+      "flash_interrupt_tt": "die Zeit (in Millisekunden), die Pd wartet, bevor das Aufleuchten des Schalters unterbrochen wird",
+      "flash_hold":  "Halt",
+      "flash_hold_tt": "die Zeit (in Millisekunden), die Pd die Animation des Aufleuchtens anzeigt",
+      "vu_scale":    "Skala",
+      "vu_scale_tt": "Anzeige-Skala (Zahlen) neben dem VU-Meter",
+      "width":       "Breite",
+      "width_tt":     "Breite des iemgui-Elements in Pixeln",
+      "height":       "Höhe",
+      "height_tt":    "Höhe des iemgui-Elements in Pixeln",
+      "minimum":      "Minimum",
+      "minimum_tt":   "kleinste ausgegebene Zahl. Jeder kleinere Wert wird durch diese Zahl ersetzt",
+      "maximum":      "Maximum",
+      "maximum_tt":   "größte ausgegebene Zahl. Jeder größere Wert wird durch diese Zahl ersetzt",
+      "number":       "Zahl",
+      "number_tt":    "Anzahl der Schalter",
+      "init":         "Init",
+      "init_tt":      "Speichere den Zustand des iemgui-Elements mit dem Patch, und gib den gespeicherten Wert beim Laden aus (als ob ein [loadbang] mit der Eingabe verbunden wäre)",
+      "log_scale":          "logarithmische Skala",
+      "log_scale_tt":       "verwende eine logarithmische Skala für die Werte auf dem Schieberegler",
+      "log_height":   "logarithmische Höhe",
+      "log_height_tt":   "the framus intersects with the ramistan approximately at the podernoster",
+      "steady":       "stabil beim Klicken",
+      "steady_tt":    "verschiebe den Schieberegler nicht beim Klicken. Verschiebe ihn nur beim Ziehen der Maus",
+      "send":         "Sende-Symbol",
+      "send_tt":      "Symbol zum Senden drahtloser Nachrichten an andere iemgui-Elemente oder Objekte",
+      "receive":      "Empfangs-Symbol",
+      "receive_tt":   "Symbol zum Empfangen drahtloser Nachrichten von anderen iemgui-Elementen oder Objekten",
+      "label":        "Text",
+      "label_tt":     "Text zur Anzeige neben diesem iemgui-Element",
+      "xoffset":      "x",
+      "xoffset_tt":  "horizontales Offset des Textes relativ zur linken oberen Ecke des iemgui-Elements",
+      "yoffset":      "y",
+      "yoffset_tt":   "vertikales Offset des Textes relativ zur linken oberen Ecke des iemgui-Elements",
+      "font":         "Font",
+      "font_tt":      "zu verwendender Font für die Anzeige des Textes",
+      "fontsize":     "Größe",
+      "fontsize_tt":  "Größe des Etikett-Fonts",
+      "bgcolor":      "Hintergrund",
+      "bgcolor_tt":   "Hintergrundfarbe des iemgui-Elements",
+      "fgcolor":      "Vordergrund",
+      "fgcolor_tt":   "Vordergrundfarbe des iemgui-Elements",
+      "label_color":        "Etikett",
+      "label_color_tt":     "Farbe des Textes",
+      "ok":           "Ok",
+      "ok_tt":        "Wende die Einstellungen an und schließe das Dialog-Fenster",
+      "apply":        "Anwenden",
+      "apply_tt":     "Wende die Einstellungen an, ohne den Dialog zu schließen",
+      "cancel":       "Abbrechen",
+      "cancel_tt":    "Schließe das Dialog-Fenster",
+      "close":        "Schließen",
+      "close_tt":     "Schließe das Dialog-Fenster"
+    }
+  },
+  "gatom": {
+    "prop": {
+      "gatom": "Atom-Box",
+      "label": "Etikett",
+      "label_left": "links",
+      "label_right": "rechts",
+      "label_tt": "Text zur Anzeige neben diesem Objekt",
+      "labelpos": "Position des Etiketts",
+      "labelpos_tt": "positioniere das Etiketts links oder rechts vom Objekt",
+      "label_top": "oben",
+      "label_bottom": "unten",
+      "label_left": "links",
+      "label_right": "rechts",
+      "width": "Breite",
+      "width_tt": "Breite (in Zeichen)"
+    }
+  },
+  "menu": {
+    "file": "Datei",
+    "new": "Neu",
+    "new_tt": "Erzeuge einen leeren Pd-Patch",
+    "open": "Öffnen",
+    "open_tt": "Öffne eine oder mehrere Pd-Dateien",
+    "k12_demos": "K12-Demos",
+    "k12_demos_tt": "Demo-Patches zur Verwendung im K12-Modus",
+    "save": "Speichern",
+    "save_tt": "Speichere einen Pd-Patch auf der Festplatte",
+    "saveas": "Speichern unter...",
+    "saveas_tt": "Speichere einen Pd-Patch unter einem neuen Dateinamen",
+    "message": "Nachricht...",
+    "message_tt": "Sende eine Nachricht direkt an die laufende Pd-Instanz",
+
+    "close": "Schließen",
+    "close_tt": "Schließe den Patch",
+
+    "quit": "Beenden",
+    "quit_tt": "Schließe alle Patches und beende das Programm",
+
+    "edit": "Bearbeiten",
+
+    "undo": "Rückgängig",
+    "undo_tt": "Macht die letzte Aktion auf diesem Patch rückgängig",
+    "redo": "Wiederherstellen",
+    "redo_tt": "Wiederholt die zuletzt rückgängig gemachte Aktion",
+    "cut": "Ausschneiden",
+    "cut_tt": "Verschiebe die selektierten Objekte in die Ablage",
+    "copy": "Kopieren",
+    "copy_tt": "Kopiere die selektierten Objekte in die Ablage",
+    "paste": "Einfügen",
+    "paste_tt": "Füge Objekte aus der Ablage in den Patch ein",
+    "duplicate": "Duplizieren",
+    "duplicate_tt": "Füge eine Kopie der aktuell selektierten Objekte in den Patch ein (verwendet nicht die Zwischenablage)",
+    "selectall": "Alles auswählen",
+    "selectall_tt": "Selektiert alle Objekte in einem Patch",
+    "reselect": "Wieder auswählen",
+    "reselect_tt": "Stellt die vorhergehende Selektion wieder her",
+    "find": "Finde",
+    "find_tt": "Finde Text in Konsole-Ausgabe",
+    "tidyup": "Aufräumen",
+    "tidyup_tt": "Richte die selektierten Objekte in geraden Zeilen und Spalten aus",
+    "clear_console": "Konsole löschen",
+    "clear_console_tt": "Lösche den Inhalt der Konsole im Pd-Fenster",
+    "tofront": "Nach vorne",
+    "tofront_tt": "Bringe das selektierte Object vor alle anderen Objekte in der Anzeige",
+    "toback": "Nach hinten",
+    "toback_tt": "Sende das selektierte Object hinter alle anderen Objekte in der Anzeige",
+    "font": "Font",
+    "font_tt": "Font-Einstellungen für diesen Patch",
+    "cordinspector": "Kabel-Inspektor",
+    "cordinspector_tt": "Bewege die Maus über ein Patch-Kabel zur Anzeige des Datenflusses zwischen Objekten",
+    "find": "Finde",
+    "find_tt": "Suche nach einem Objekt in diesem Patch",
+    "findagain": "Finde nochmal",
+    "findagain_tt": "Suche nach dem nächsten Objekt, das mit der eingegebenen Zeichenkette übereinstimmt",
+    "finderror": "Finde den letzten Fehler",
+    "finderror_tt": "Finde das letzte Objekt, das einen Fehler verursacht hat (wenn möglich)",
+    "autotips": "Autotips",
+    "autotips_tt": "Schalte Objekt-Kurzinfos in diesem Patch ein",
+    "editmode": "Editier-Modus",
+    "editmode_tt": "Schalte um zwischen Bearbeiten und Verwenden eines Patches",
+    "preferences": "Einstellungen",
+    "preferences_tt": "Öffne einen Dialog zum Bearbeiten der Voreinstellungen der laufenden Pd-Instanz",
+
+    "view": "Ansicht",
+
+    "zoomin": "Vergrößern",
+    "zoomin_tt": "Vergrößere die Anzeige des Patches",
+    "zoomout": "Verkleinern",
+    "zoomout_tt": "Verkleinere die Anzeige des Patches",
+    "zoomreset": "Originalgröße",
+    "zoomreset_tt": "Setze die Anzeige des Patches auf die Originalgröße zurück",
+    "fullscreen": "Vollbild",
+
+    "put": "Hinzufügen",
+
+    "object": "Objekt",
+    "object_tt": "Füge dem Patch ein neues Objekt hinzu",
+    "msgbox": "Nachricht",
+    "msg_tt": "Füge dem Patch eine Nachrichten-Box hinzu",
+    "number": "Zahl",
+    "number_tt": "Füge dem Patch ein Feld zur Eingabe und Anzeige von Zahlen hinzu",
+    "symbol": "Symbol",
+    "symbol_tt": "Füge dem Patch ein Feld zur Eingabe und Anzeige von Symbolen hinzu",
+    "comment": "Kommentar",
+    "comment_tt": "Füge dem Patch einen Kommentar hinzu",
+    "bang": "Bang",
+    "bang_tt": "Füge dem Patch einen Taster zum Senden von Bang-Nachrichten hinzu",
+    "toggle": "Toggle",
+    "bang_tt": "Füge dem Patch einen Schalter zum Umschalten zwischen zwei Werten hinzu",
+    "number2": "Zahl2",
+    "number2_tt": "Füge dem Patch ein erweitertes Feld zur Eingabe und Anzeige von Zahlen hinzu",
+    "vslider": "VSchieberegler",
+    "vslider_tt": "Füge dem Patch einen vertikalen Schieberegler zur Eingabe und Anzeige von Zahlen hinzu",
+    "hslider": "HSchieberegler",
+    "hslider_tt": "Füge dem Patch einen horizontalen Schieberegler zur Eingabe und Anzeige von Zahlen hinzu",
+    "vradio": "VRadio",
+    "vradio_tt": "Füge dem Patch eine vertikale Gruppe von Radio-Tastern zur Auswahl eines Zahlenwertes hinzu",
+    "hradio": "HRadio",
+    "hradio_tt": "Füge dem Patch eine horizontale Gruppe von Radio-Tastern zur Auswahl eines Zahlenwertes hinzu",
+    "vu": "VU",
+    "vu_tt": "Füge dem Patch ein VU-Meter hinzu",
+    "cnv": "Arbeitsfläche",
+    "cnv_tt": "Füge dem Patch eine langweilige rechteckige Arbeitsfläche hinzu",
+
+    "graph": "Graph",
+    "graph_tt": "Füge dem Patch einen neuen Graphen hinzu",
+    "array": "Feld",
+    "array_tt": "Füge dem Patch ein Zahlenfeld mit graphischer Anzeige hinzu (mit Einstellungs-Dialog)",
+
+    "windows": "Fenster",
+
+    "nextwin": "Nächstes Fenster",
+    "nextwin_tt": "Zeige das nächste Fenster in der Stapelordnung",
+    "prevwin": "Vorheriges Fenster",
+    "prevwin_tt": "Zeige das vorherige Fenster in der Stapelordnung",
+    "parentwin": "Ãœbergeordnetes Fenster",
+    "parentwin_tt": "Zeige das übergeordnete Fenster des aktuellen Fensters",
+    "visible_ancestor": "Nächster sichtbarer Vorgänger",
+    "visible_ancestor_tt": "Zeige den nächsten aktuell sichtbaren Vorgänger des aktuellen Fensters",
+    "pdwin": "Pd-Fenster",
+    "pdwin_tt": "Zeige das Pd-Hauptfenster",
+
+    "media": "Medien",
+
+    "audio_on": "Audio An",
+    "audio_on_tt": "Schalte Audio an",
+    "audio_off": "Audio Aus",
+    "audio_off_tt": "Schalte Audio aus",
+    "test": "Teste Audio und MIDI",
+    "test_tt": "Öffne einen Patch zum Testen der Audio- und MIDI-Konfiguration",
+    "loadmeter": "Auslastungsanzeige",
+    "loadmeter_tt": "Öffne einen Patch zur Verfolgung der CPU-Auslastung (ohne GUI)",
+
+    "help": "Hilfe",
+
+    "about": "Ãœber Pd-L2ork",
+    "about_tt": "Zeige Informationen über diese Version von Pd an",
+    "manual": "Handbuch",
+    "manual_tt": "Öffne das Pd-HTML-Handbuch",
+    "browser": "Hilfe-Browser",
+    "browser_tt": "Öffne einen Hilfe-Browser, um nach Dokumentation und Objekten zu suchen",
+    "l2ork_list": "Pd-L2Ork-Mailing-Liste",
+    "l2ork_list_tt": "Öffne einen Link zur Pd-L2Ork-Mailing-Liste im Browser",
+    "pd_list": "Pure Data-Mailing-Liste",
+    "pd_list_tt": "Öffne einen Link zur Pure Data-Mailing-Liste im Browser",
+    "forums": "Foren",
+    "forums_tt": "Öffne einen Link zum Pd-Forum im Browser",
+    "irc": "IRC Chat",
+    "irc_tt": "Öffne einen Link zum IRC-Chat im Browser",
+    "devtools": "Anzeige DevTools",
+    "devtools_tt": "Öffne das DevTools-Fenster (zum Debuggen)"
+  },
+  "pd_window": {
+    "find": {
+      "placeholder": "Suche in der Konsole"
+    }
+  },
+  "canvas": {
+    "paste_clipboard_prompt": "Warnung: Sie sind dabei, Pd-Code einzufügen, der außerhalb von Pd erstellt wurde. Möchten Sie fortfahren?",
+    "save_dialog": {
+      "yes": "Ja",
+      "yes_tt": "Speichern der Änderungen in einer Datei vor dem Schließen des Patches",
+      "no": "Nein",
+      "no_tt": "Kein Speichern der Änderungen, nur Schließen des Patches",
+      "cancel": "Abbrechen",
+      "cancel_tt": "Kein Speichern der Änderungen und kein Schließen des Patches"
+    },
+    "find": {
+      "placeholder": "Suche im Patch"
+    },
+    "prop": {
+      "heading": {
+        "gop": "Erscheinungsbild",
+        "data_scaling": "Daten-Skalierung",
+        "size": "Größe",
+        "viewbox_offsets": "Anzeigebox-Offsets",
+        "arrays": "Feld-Optionen"
+      },
+      "gop": "Anzeige im übergeordneten Patch",
+      "gop_tt": "Zeige den Inhalt dieses Patches in einem Rechteck im übergeordneten Patch",
+      "hide_name": "Namen und Argumente verbergen",
+      "hide_name_tt": "verberge den Text in der Objekt-Box im übergeordneten Patch",
+      "gop_0": "Objekt",
+      "gop_1": "Fenster",
+      "gop_2": "Fenster (kein Text)",
+      "x_pix": "Breite",
+      "x_pix_tt": "Breite des Objekts",
+      "y_pix": "Höhe",
+      "y_pix_tt": "Höhe des Objekts",
+      "x_scale": "x-Skalierung",
+      "x_scale_tt": "horizontaler Skalierungsfaktor",
+      "y_scale": "y-Skalierung",
+      "y_scale_tt": "vertikaler Skalierungsfaktor",
+      "x_margin": "x-Offset",
+      "x_margin_tt": "horizontales Offset im Subpatch für den Anzeigebereich",
+      "y_margin": "y-Offset",
+      "y_margin_tt": "vertikales Offset im Subpatch für den Anzeigebereich",
+      "x1": "links",
+      "x1_tt": "x-Wert an der linken Kante des Graphs. (wird bei Feldern automatisch gesetzt)",
+      "x2": "rechts",
+      "x2_tt": "x-Wert an der rechten Kante des Graphs. (wird bei Feldern automatisch gesetzt)",
+      "y1": "oben",
+      "y1_tt": "y-Wert an der oberen Kante des Graphs",
+      "y2": "unten",
+      "y2_tt": "y-Wert an der unteren Kante des Graphs",
+
+      "array_name": "Name",
+      "array_name_tt": "Empfänger-Name des Felds",
+      "array_size": "size",
+      "array_size_tt": "Anzahl der Elemente des Felds",
+      "array_polygon": "Polygon",
+      "array_polygon_tt": "die Feldwerte werden als Polygon gezeichnet",
+      "array_points": "Punkte",
+      "array_points_tt": "die Feldwerte werden als horizontale Linien-Segmente gezeichnet",
+      "array_bezier": "Bezier curve",
+      "array_bezier_tt": "die Feldwerte werden als Bézier-Kurve gezeichnet",
+      "array_bars": "bar graph",
+      "array_bars_tt": "die Feldwerte werden als Balkendiagramm gezeichnet",
+      "array_save": "Inhalt speichern",
+      "array_save_tt": "der Inhalt des Felds wird mit dem Patch gespeichert",
+      "array_jump": "Springen bei Klick",
+      "array_jump_tt": "beim Klicken wird das Element auf die Position des Klicks aktualisiert",
+      "array_style": "Zeichnen als:",
+      "array_outline": "Umriss-Farbe",
+      "array_outline_tt": "Farbe für den Umriss der Balken",
+      "array_fill": "Füll-Farbe",
+      "array_fill_tt": "innere Farbe der Balken",
+      "array_in_existing_graph": "dem letzten Graphen hinzufügen",
+      "array_in_existing_graph_tt": "Zeichne das Feld in dem letzten Graphen, der  erstellt wurde. Dies ermöglicht das Zeichnen mehrerer Felder in dem selben Graphen.",
+      "array_delete": "dieses Feld löschen",
+      "array_delete_tt": "Lösche dieses Feld beim Klicken von Ok (d.h., entferne es aus dem Graphen)"
+    }
+  },
+  "prefs": {
+    "heading": {
+      "gui": "GUI",
+      "gui_tt": "Einstellungen der Benutzeroberfläche",
+      "audio": "Audio",
+      "audio_tt": "konfiguriere die Audio-Geräte",
+      "midi": "MIDI",
+      "midi_tt": "konfiguriere die MIDI-Geräte"
+    },
+    "gui": {
+      "presets": {
+        "gui_preset": "GUI-Preset",
+        "gui_preset_tt": "Kollektion von Patch-Farben und -Stilen",
+        "default": "Voreinstellung",
+        "vanilla": "Vanilla",
+        "vanilla_inverted": "Vanilla (Invertiert)",
+        "extended": "Pd-Extended",
+        "inverted": "Invertiert",
+        "subdued": "Dezent",
+        "strongbad": "Strongbad",
+        "extended": "Extended",
+        "c64": "C64"
+      }
+    },
+    "audio": {
+      "api": "Audio-API",
+      "api_tt": "Audio-Backend oder Server für die Audio-Verarbeitung",
+      "sr": "Abtastrate",
+      "sr_tt": "Anzahl von Samples pro Sekunde",
+      "advance": "Verzögerung",
+      "advance_tt": "Verzögerung (msec)",
+      "blocksize": "Blockgröße",
+      "blocksize_tt": "Anzahl von Samples in einem Block, der an die Audio-API gesendet oder von dort empfangen wird",
+      "channels": "Kanäle",
+      "channels_tt": "Anzahl von Kanälen für dieses Gerät",
+      "input_title": "Eingabe-Geräte",
+      "input_title_tt": "Hardware-Geräte für die Audio-Eingabe von Pd",
+      "output_title": "Ausgabe-Geräte",
+      "output_title_tt": "Hardware-Geräte für die Audio-Ausgabe von Pd"
+    },
+    "midi": {
+      "api": "MIDI API",
+      "api_tt": "MIDI-Backend oder Server für die Kommunikation mit MIDI-Geräten",
+      "alsa_in_ports": "Eingänge",
+      "alsa_in_ports_tt": "maximale Anzahl von eingehenden MIDI-Verbindungen",
+      "alsa_out_ports": "Ausgänge",
+      "alsa_out_ports_tt": "maximale Anzahl von ausgehenden MIDI-Verbindungen",
+      "input_title": "Eingabe-Geräte",
+      "input_title_tt": "Hardware-Geräte für die MIDI-Eingabe von Pd",
+      "output_title": "Ausgabe-Geräte",
+      "output_title_tt": "Hardware-Geräte für die MIDI-Ausgabe von Pd"
+    },
+    "ok": "Ok",
+    "ok_tt": "Aktualisiere die Audio-Einstellungen und schließe den Dialog",
+    "apply": "Anwenden",
+    "apply_tt": "Aktualisiere die Audio-Einstellungen ohne Schließen des Dialogs",
+    "cancel": "Abbrechen",
+    "cancel_tt": "Aktualisierung der Einstellungen abbrechen",
+    "close": "Schließen",
+    "close_tt": "Schließe den Einstellungs-Dialog"
+  },
+  "font": {
+    "prop": {
+      "size": "Font-Größe",
+      "8": "8",
+      "10": "10",
+      "12": "12",
+      "16": "16",
+      "24": "24",
+      "36": "36",
+      "close": "Schließen",
+      "close_tt": "schließe den Font-Dialog"
+    }
+  },
+  "search": {
+    "browse": "Durchsuche die Dokumentation",
+    "search": "Suche",
+    "building_index": "Erstelle Index...",
+    "no_results": "Keine Resultate gefunden.",
+    "search_placeholder": "Suche Pd-Doku"
+  }
+}
diff --git a/pd/nw/locales/en/translation.json b/pd/nw/locales/en/translation.json
index 0c85cb4883a5c5feba9a5766a0e5ba0d69877e09..2b98e8d02807275d68896ffc345d57f21effe19f 100644
--- a/pd/nw/locales/en/translation.json
+++ b/pd/nw/locales/en/translation.json
@@ -121,7 +121,7 @@
     "copy": "Copy",
     "copy_tt": "Copy selected objects to the clipboard",
     "paste": "Paste",
-    "paste_tt": "Add any objects to the canvas which wer previously cut or copied",
+    "paste_tt": "Add any objects to the canvas which were previously cut or copied",
     "duplicate": "Duplicate",
     "duplicate_tt": "Paste a copy of the current selection on the canvas (doesn't use clipboard)",
     "selectall": "Select All",
@@ -151,7 +151,7 @@
     "autotips": "Autotips",
     "autotips_tt": "Turn on tooltips in the patch",
     "editmode": "Editmode",
-    "autotips_tt": "Toggle Editmode",
+    "editmode_tt": "Toggle Editmode",
     "preferences": "Preferences",
     "preferences_tt": "Open a dialog window to configure the running instance of Pd",
 
@@ -192,7 +192,7 @@
     "hradio": "Hradio",
     "hradio_tt": "Add horizontal group of radio buttons to the canvas for selecting a value",
     "vu": "VU",
-    "vu_tt": "Add a Vu Meter to the canvas",
+    "vu_tt": "Add a VU Meter to the canvas",
     "cnv": "Canvas Rectangle",
     "cnv_tt": "Add a boring rectangle to the canvas for displaying a rectangle",
 
@@ -402,6 +402,8 @@
   "search": {
     "browse": "browse the documentation",
     "search": "search",
+    "building_index": "Building index...",
+    "no_results": "No results found.",
     "search_placeholder": "Search Pd Docs"
   }
 }
diff --git a/pd/nw/pdlang.js b/pd/nw/pdlang.js
index 9c1561796a4b84242e381ade50d497c38ee423ab..91cea98b3e5017eeab3896281c58e7503f7432f6 100644
--- a/pd/nw/pdlang.js
+++ b/pd/nw/pdlang.js
@@ -1,6 +1,14 @@
 "use strict";
 
-var lang = require('./locales/en/translation.json');
+var lang;
+
+try {
+    // try the locale given by navigator.language
+    lang = require("./locales/" + navigator.language + "/translation.json");
+} catch (e) {
+    // if that fails then fall back to the default locale "en"
+    lang = require("./locales/en/translation.json");
+}
 
 exports.lang = lang;