/*
 *  Notepad (German resources)
 *
 *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
 *  Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 *
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "notepad_res.h"

#pragma code_page(65001)

LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL

MAIN_MENU MENU
{
 POPUP "&Datei" {
  MENUITEM "&Neu\tStrg+N",           CMD_NEW
  MENUITEM "Ö&ffnen...\tStrg+O",        CMD_OPEN
  MENUITEM "&Speichern\tStrg+S",        CMD_SAVE
  MENUITEM "Speichern &unter...",       CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "&Drucken...\tStrg+P",          CMD_PRINT
  MENUITEM "Seite ein&richten...",      CMD_PAGE_SETUP
  MENUITEM "Drucker&einrichtung...",    CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "&Beenden",          CMD_EXIT
 }
POPUP "&Bearbeiten" {
  MENUITEM "&Rückgängig\tStrg+Z",       CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "&Ausschneiden\tStrg+X",     CMD_CUT
  MENUITEM "&Kopieren\tStrg+C",         CMD_COPY
  MENUITEM "&Einfügen\tStrg+V",         CMD_PASTE
  MENUITEM "&Löschen\tEntf",    CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "Alles &markieren\tStrg+A",  CMD_SELECT_ALL
  MENUITEM "&Uhrzeit/Datum\tF5",        CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "&Zeilenumbruch",    CMD_WRAP
  MENUITEM "&Schriftarten...",	CMD_FONT
 }
POPUP "&Suchen" {
  MENUITEM "Suchen...\tStrg+F", CMD_SEARCH
  MENUITEM "&Weitersuchen\tF3", CMD_SEARCH_NEXT
  MENUITEM "&Ersetzen...\tStrg+H", CMD_REPLACE
 }
POPUP "&Hilfe" {
  MENUITEM "&Inhalt",           CMD_HELP_CONTENTS
  MENUITEM "&Suchen...",        CMD_HELP_SEARCH
  MENUITEM "&Hilfe benutzen",   CMD_HELP_ON_HELP
  MENUITEM SEPARATOR
  MENUITEM "Ü&ber Notepad", CMD_HELP_ABOUT_NOTEPAD
 }
}

/* Dialog `Page setup' */

DIALOG_PAGESETUP DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Seite einrichten"
{
LTEXT    "&Kopfzeile:",  0x140,   10, 07, 40, 15
EDITTEXT IDC_PAGESETUP_HEADERVALUE,   60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "&Fußzeile:",  0x142,   10, 24, 40, 15
EDITTEXT IDC_PAGESETUP_FOOTERVALUE,   60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "Ränder (Millimeter)",  0x144,  10, 43,160, 45
LTEXT    "&Links:",        0x145,   20, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_LEFTVALUE,     50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Oben:",         0x148,    20, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_TOPVALUE,      50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Rechts:",       0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_RIGHTVALUE,   130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Unten:",      0x14E,100, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_BOTTOMVALUE,  130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON "OK",         IDOK,                   180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    "Abbrechen",     IDCANCEL,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "&Hilfe",       IDHELP,                180, 39, 40, 15, WS_TABSTOP
}

IDD_OFN_TEMPLATE  DIALOG 50,50,300,15
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER
FONT 8, "MS Shell Dlg"
BEGIN
  LTEXT "Kodierung:", -1, 5,0, 50,12
  COMBOBOX IDC_OFN_ENCCOMBO, 53,0, 156,48, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST
END

STRINGTABLE
{
STRING_PAGESETUP_HEADERVALUE,   "&f"
STRING_PAGESETUP_FOOTERVALUE,   "Seite &p"

STRING_NOTEPAD,                                 "Editor"
STRING_ERROR,                                   "Fehler"
STRING_WARNING,                                 "Achtung"
STRING_INFO,                                    "Information"

STRING_UNTITLED,                                "(unbenannt)"

STRING_ALL_FILES,                               "Alle Dateien (*.*)"
STRING_TEXT_FILES_TXT,                  "Textdateien (*.txt)"

STRING_TOOLARGE,                                "Die Datei '%s' ist zu groß für den Editor\n \
Benutzen Sie bitte einen anderen Editor, um diese Datei zu bearbeiten."
STRING_NOTEXT,                                  "Sie haben keinen Text eingegeben, der \
gespeichert\n werden könnte. Geben Sie Text ein, und versuchen Sie es \
\nerneut."
STRING_DOESNOTEXIST,                            "Die Datei '%s'\nexistiert nicht.\n\n \
Möchten Sie eine neue Datei erstellen ?"
STRING_NOTSAVED,                                "Datei %s\n wurde geändert.\n\n \
Möchten Sie die Änderungen speichern ?"
STRING_NOTFOUND,                                        "'%s' kann nicht gefunden werden."
STRING_OUT_OF_MEMORY,                   "Nicht genügend Arbeitsspeicher, \
um diese Funktion\nabzuschließen. Beenden Sie eine oder mehrere \
\nAnwendungen, um den verfügbaren Arbeitsspeicher zu\nerhöhen."

STRING_UNICODE_LE,     "Unicode (UTF-16)"
STRING_UNICODE_BE,     "Unicode (UTF-16 Big-Endian)"

STRING_LOSS_OF_UNICODE_CHARACTERS,         "%s\n\
Diese Datei enthält Unicode-Zeichen, die verloren gehen, wenn\n\
Sie die Datei mit %s-Zeichenkodierung speichern.\n\
Um die Zeichen beizubehalten, klicken Sie Abbrechen und wählen\n\
Sie eine der Unicode-Optionen in der Liste.\n\
Möchten Sie fortfahren?"
}
