/*
 *  Copyright 1997,98 Marcel Baur
 *  Copyright 2002 Sylvain Petreolle
 *  Copyright 2008 Michael Stefaniuc
 *
 * 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"

LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL

#pragma code_page(65001)

MAIN_MENU MENU
{
 POPUP "&Fișier" {
  MENUITEM "&Nou\tCtrl+N",              CMD_NEW
  MENUITEM "&Deschide...\tCtrl+O",      CMD_OPEN
  MENUITEM "&Salvează\tCtrl+S",         CMD_SAVE
  MENUITEM "Salvează &ca...",           CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "&Tipărește...\tCtrl+P",     CMD_PRINT
  MENUITEM "S&etare pagină...",         CMD_PAGE_SETUP
  MENUITEM "Setare im&primantă...",     CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "&Ieșire",                   CMD_EXIT
 }
POPUP "&Editează" {
  MENUITEM "&Refă\tCtrl+Z",             CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "&Taie\tCtrl+X",             CMD_CUT
  MENUITEM "&Copiază\tCtrl+C",          CMD_COPY
  MENUITEM "&Lipește\tCtrl+V",          CMD_PASTE
  MENUITEM "&Șterge\tDel",              CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "S&electeză tot\tCtrl+A",    CMD_SELECT_ALL
  MENUITEM "&Ora/data\tF5",             CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "&Desparte liniile lungi",   CMD_WRAP
  MENUITEM "&Font...",                  CMD_FONT
 }
POPUP "&Caută" {
  MENUITEM "&Caută...\tCtrl+F",         CMD_SEARCH
  MENUITEM "Caută &următorul\tF3",      CMD_SEARCH_NEXT
  MENUITEM "&Înlocuiește...\tCtrl+H",   CMD_REPLACE
 }
POPUP "&Ajutor" {
  MENUITEM "C&onținut",                 CMD_HELP_CONTENTS
  MENUITEM "&Caută...",                 CMD_HELP_SEARCH
  MENUITEM "&Ajutor la ajutor",         CMD_HELP_ON_HELP
  MENUITEM SEPARATOR
  MENUITEM "&Despre 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 "Setare pagină"
{
LTEXT    "Colon&titlu:",  0x140,  10, 07, 40, 15
EDITTEXT IDC_PAGESETUP_HEADERVALUE,   60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "&Coloncifru:",  0x142,  10, 24, 40, 15
EDITTEXT IDC_PAGESETUP_FOOTERVALUE,  60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "&Margini (milimetri):",  0x144, 10, 43,160, 45
LTEXT    "&Stânga:",  0x145, 20, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_LEFTVALUE,  50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "S&us:",  0x148, 20, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_TOPVALUE,      50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Dreapta:",  0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_RIGHTVALUE,  130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Jos:",  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    "Renunță", IDCANCEL, 180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "&Ajutor", 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 "Codificare:", -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,   "Pagina &p"

STRING_NOTEPAD,                 "Notepad"
STRING_ERROR,                   "EROARE"
STRING_WARNING,                 "ATENȚIE"
STRING_INFO,                    "Informație"

STRING_UNTITLED,                "(fără titlu)"

STRING_ALL_FILES,               "Toate fișierele (*.*)"
STRING_TEXT_FILES_TXT,          "Toate fișierele text (*.txt)"

STRING_TOOLARGE,                "Fișierul '%s' este prea mare pentru notepad.\n Folosoți un alt editor."
STRING_NOTEXT,                  "Nu ați introdus nici un text.\nIntroduceți ceva și încercați din nou."
STRING_DOESNOTEXIST,            "Fișierul '%s'\nnu există\n\n Vreți să creați un fișier nou?"
STRING_NOTSAVED,                "Fișierul '%s'\na fost modificat\n\nVreți să salvați modificările?"
STRING_NOTFOUND,                "'%s' nu a fost găsit."
STRING_OUT_OF_MEMORY,           "Nu este destulă memorie pentru a completa această sarcină.\nÎnchideți una sau mai multe aplicații pentru a mări memoria liberă."

STRING_UNICODE_LE,              "Unicode (UTF-16)"
STRING_UNICODE_BE,              "Unicode (UTF-16 big-endian)"

STRING_LOSS_OF_UNICODE_CHARACTERS,      "%s\n\
Acest document conține caractere unicode care se v-or pierde\n\
dacă salvați acest fișier în codificarea %s.\n\
Pentru a reține aceste caractere dați clic pe „Renunță” și apoi\n\
alegeți una din opțiunile unicode din lista de selecție a codificării.\n\
Continuă?"
}
