diff --git a/doc/efun/get_dir b/doc/efun/get_dir
index d0bdf5a..d298e3e 100644
--- a/doc/efun/get_dir
+++ b/doc/efun/get_dir
@@ -4,124 +4,114 @@
         mixed * get_dir(string str)
         mixed * get_dir(string str, int mask)
 
-BESCHREIBUNG
-        Benoetigt einen Pfad als erstes Argument und liefert ein Feld
-        (Array) mit Dateinamen bzw. Eigenschaften der gefundenen Dateien im
-        angegebenen Verzeichnis.
+DESCRIPTION
+        This function takes a path as argument and returns an array of file
+        names and attributes in that directory.
 
-        Liefert 0 zurueck, wenn es das Verzeichnis, in dem gesucht werden
-        soll, nicht gibt.
+        Returns 0 if the directory to search in does not exist.
 
-        Der Dateinamen-Teil des Pfades darf "*" und "?" als Platzhalter
-        enthalten: jeder "*" steht fuer eine beliebige Anzahl Zeichen (oder
-        sich selber), "?" fuer ein beliebiges Zeichen. Entsprechend liefert
-        get_dir("/pfad/*") ein alphabetisch sortiertes Feld aller Dateien
-        im Verzeichnis "/pfad" oder ({ "/pfad/*" }), wenn es diese Datei
-        geben sollte.
+        The filename part of the path may contain '*' or '?' as wildcards:
+        every '*' matches an arbitrary amount of characters (or just itself),
+        a '?' matches any character. Thus get_dir("/path/*") would return an
+        alphabetically sorted array of all files in directory "/path", or
+        just ({ "/path/*" }) if this file happens to exist.
 
-        Gibt man den Pfad eines Verzeichnisses mit abschliessendem "/" oder
-        "/." an (z. B. get_dir("/pfad/.")), so erhaelt man den Inhalt des
-        Verzeichnisses. Um Informationen ueber das Verzeichnis selber zu
-        erhalten, muss man den Pfad des Verzeichnisses angeben.
+        To query the content of a directory, use the directory name with a
+        trailing '/' or '/.', for example get_dir("/path/."). Use the
+        directory name as it is to get information about the directory itself.
 
-        Das optionale zweite Argument ist eine Bitmaske, mit der man
-        angeben kann, welche Informationen man ueber die angegebenen
-        Dateien erhalten moechte.
+        The optional second argument mask can be used to get
+        information about the specified files.
 
-        GETDIR_EMPTY    (0x00)  get_dir() liefert ein leeres Feld (nicht
-                                wirklich sinnvoll)
-        GETDIR_NAMES    (0x01)  liefert die alphabetisch sortierten
-                                Dateinamen.
-        GETDIR_SIZES    (0x02)  liefert die unsortierten Dateigroessen
-                                (file_size()), Verzeichnisse haben die
-                                Dateigroesse FSIZE_DIR (-2).
-        GETDIR_DATES    (0x04)  liefert die unsortierten Zeiten der jeweils
-                                letzten Aenderung in Sekunden seit dem
-                                01.01.1970.
-        GETDIR_ACCESS   (0x40)  liefert die unsortierten Zeiten des jeweils
-                                letzten Zugriffes in Sekunden seit dem
-                                01.01.1970.
-        GETDIR_MODES    (0x80)  liefert die Filemode-Maske
+        GETDIR_EMPTY    (0x00)  get_dir returns an empty array (not very
+                                useful).
+        GETDIR_NAMES    (0x01)  put the alphabetically sorted file names into
+                                the returned array.
+        GETDIR_SIZES    (0x02)  put the file sizes unsorted into the returned
+                                array. directories have size FSIZE_DIR (-2).
+        GETDIR_DATES    (0x04)  put the file modification dates (in seconds
+                                since 01/01/1970) unsorted into the
+                                returned array.
+        GETDIR_ACCESS   (0x40)  put the file access dates unsorted into
+                                the returned array.
+        GETDIR_MODES    (0x80)  put the unix file modes unsorted into
+                                the returned array.
 
-        GETDIR_ALL      (0xDF)  Liefert all Werte zurueck.
+        GETDIR_ALL      (0xDF)  Return all.
 
-        GETDIR_PATH     (0x10)  Dateinamen werden als volle Pfade geliefert.
-                                (ein ev. fehlendes GETDIR_NAMES wird als
-                                vorhanden angenommen).
-        GETDIR_UNSORTED (0x20)  Das Ergebnis wird nicht sortiert.
+        GETDIR_PATH     (0x10)  if this mask bit is set, the filenames with
+                                the full path will be returned
+                                (GETDIR_NAMES is implied).
+        GETDIR_UNSORTED (0x20)  if this mask bit is set, the result of will
+                                _not_ be sorted.
 
-        Wichtig: Man muss GETDIR_NAMES|GETDIR_UNSORTED verwenden, wenn man
-        die Eintraege in der selben Reihenfolge wie bei GETDIR_SIZES und
-        GETDIR_DATES haben moechte.
+        Note: You should use GETDIR_NAMES|GETDIR_UNSORTED to get the entries
+        in the same order as with GETDIR_SIZES and GETDIR_DATES.
 
-        Die Eintraege in der Bitmaske koennen miteinander kombiniert
-        werden.
+        The values of mask can be added together.
 
-ANMERKUNGEN
-        Der als Argument angegebene Pfad wird vor Benutzung von valid_read()
-        im Master der Mudlib verarbeitet. Hierbei kann die Mudlib eine
-        Normalisierung vornehmen (z.B. fuehrende und endstaendige "/"
-        entfernen). Dann fuehrt dann u.U. zu erwarteten Resultaten (z.B. dass
-        get_dir("/dir/", ...) nicht den Inhalt von /dir/ zurueckgibt).
-        Compat mode: GETDIR_PATH liefert die Pfade ohne fuehrenden /.
+NOTES
+        The path argument to this efun is processed by valid_read() in the
+        mudlib master before being used. The mudlib may normalize this path
+        (e.g. strip leading or trailing "/") and this may lead to expected
+        results (e.g. get_dir("/dir/", ...) not returning the contents
+        of /dir/).
+        COMPAT mode: GETDIR_PATH will return the paths without leading /.
 
-BEISPIELE
-        Funktion                         Rueckgabewert
+EXAMPLES
+        function                         returns
         -------------------------------------------------------------------
-        get_dir("/obj/.")                Alle Dateien, die im Verzeichnis
-                                         /obj enthalten sind.
-        get_dir("/obj/")                 Wie get_dir("/obj/").
+        get_dir("/obj/.")                all files contained in directory /obj.
+        get_dir("/obj/")                 the same as get_dir("/obj/")
 
-        get_dir("/obj/schwert.c")        ({ "schwert.c" }), sofern
-                                         /obj/schwert.c existiert (als
-                                         Datei oder Verzeichnis), ansonsten
-                                         ({}), sofern /obj ein Verzeichnis
-                                         ist, ansonsten 0.
+        get_dir("/obj/sword.c")          ({ "sword.c" }) if /obj/sword.c
+                                         exists (it may be a file or a
+                                         directory), otherwise ({ }) if
+                                         /obj is a directory,
+                                         otherwise 0.
 
-        get_dir("/obj/*")                ({ "*" }), sofern * existiert.
-                                         Ansonsten und normalerweise ein
-                                         alphabetisch sortiertes Feld mit
-                                         den Namen aller Dateien und
-                                         Verzeichnisse in /obj, sofern /obj
-                                         ein Verzeichnis ist, ansonsten 0.
+        get_dir("/obj/*")                ({ "*" }) if * exists.
+                                         otherwise and normally an
+                                         alphabetically sorted array with all
+                                         names of files and directories in
+                                         /obj if /obj is a directory,
+                                         otherwise 0.
 
-        get_dir("/obj/schwert.c", GETDIR_SIZES)
-                                         ({ <Groesse von /obj/schwert.c> }),
-                                         sofern /obj/schwert.c existiert.
-        get_dir("/obj/.", GETDIR_NAMES)  Wie get_dir("/obj/.").
-        get_dir("/obj/.", GETDIR_SIZES)  Ein unsortiertes Feld mit den
-                                         Groessen der Dateien in /obj.
-        get_dir("/obj/.", GETDIR_NAMES|GETDIR_SIZES|GETDIR_DATES)
-            oder kuerzer
-        get_dir("/obj/.", GETDIR_ALL)    Ein eindimensionales und nach
-                                         Namen sortiertes Feld, das fuer
-                                         jede Datei in /obj den Namen, die
-                                         Groesse und den Zeitpunkt der
-                                         letzten Aenderung enthaelt, z.B.
+        get_dir("/obj/sword.c", GETDIR_SIZES)  ({ <size of /obj/sword.c> })
+                                         if that file exists.
+        get_dir("/obj/.", GETDIR_NAMES)  the same as get_dir("/obj/.").
+        get_dir("/obj/.", GETDIR_SIZES)  an array with the sizes of the files
+                                         in /obj, not sorted by names.
+        get_dir("/obj/.", GETDIR_NAMES|GETDIR_SIZES|GETDIR_DATES) or shorter
+        get_dir("/obj/.", GETDIR_ALL)    an one-dimensional array that
+                                         contains for each file in /obj its
+                                         name, its size and its modification
+                                         date, sorted by names, for example
                                            ({
-                                              "axt.c"    ,  927, 994539583,
-                                              "schwert.c", 1283, 998153903,
+                                              "axe.c"  ,  927, 994539583,
+                                              "sword.c", 1283, 998153903,
                                            }).
 
-        get_dir("/obj/schwert.c", GETDIR_NAMES|GETDIR_PATH)
-                                         ({ "/obj/sword.c" }), sofern
-                                         vorhanden.
-        get_dir("/obj/schwert.c", GETDIR_PATH)  Kurzform dafuer.
+        get_dir("/obj/sword.c", GETDIR_NAMES|GETDIR_PATH)
+                                         ({ "/obj/sword.c" }) if applicable.
+        get_dir("/obj/sword.c", GETDIR_PATH)  Short form of the same query.
+
 
         transpose_array(({ get_dir(str, GETDIR_NAMES|GETDIR_UNSORTED)
                          , get_dir(str, GETDIR_SIZES)
                          , get_dir(str, GETDIR_DATES) }));
-        Liefert ein unsortiertes Feld mit Feldern, von denen ein jedes
-        Name, Groesse und Zeit einer Datei enthaelt, z. B.
+        This returns an array of arrays, with filename, size and
+        filetime as elements, not sorted by names, for example
           ({
-             ({ "schwert.c", 1283, 998153903 }),
-             ({ "axt.c"    ,  927, 994539583 }),
+             ({ "sword.c", 1283, 998153903 }),
+             ({ "axe.c"  ,  927, 994539583 }),
           }).
 
-GESCHICHTE
-        LDMud 3.2.9: GETDIR_PATH eingefuehrt.
-        LDMud 3.2.11: GETDIR_ACCESS und GETDIR_MODES eingefuehrt.
 
-SIEHE AUCH
+HISTORY
+        LDMud 3.2.9 added GETDIR_PATH.
+        LDMud 3.2.11/3.3.648 added GETDIR_ACCESS and GETDIR_MODES.
+
+SEE ALSO
         mkdir(E), rmdir(E), file_size(E), write_file(E), write_bytes(E),
         read_file(E), read_bytes(E)
