/*
 * Serbian resources for winspool
 *
 * Copyright 2005  Huw Davies
 * Copyright 2010  Đorđe Vasiljević
 *
 * 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 "wspool.h"

#pragma code_page(65001)

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC

FILENAME_DIALOG DIALOG 6, 18, 245, 47
STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
CAPTION "Штампање на датотеку"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT "&Назив одредишне датотеке:", -1, 7, 13, 194, 13, WS_VISIBLE
    EDITTEXT EDITBOX, 6, 28, 174, 12, WS_VISIBLE | ES_AUTOHSCROLL
    DEFPUSHBUTTON "У реду", IDOK, 199, 10, 40, 14, WS_VISIBLE
    PUSHBUTTON "Откажи", IDCANCEL, 199, 27, 40, 14, WS_VISIBLE
END

STRINGTABLE
{
    IDS_CAPTION "Локални порт"
    IDS_FILE_EXISTS "Одредишна датотека већ постоји.  Кликните на дугме „У реду“ да је замените."
    IDS_CANNOT_OPEN "Прављење одредишне датотеке није успело."
}

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN

FILENAME_DIALOG DIALOG 6, 18, 245, 47
STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
CAPTION "Štampanje na datoteku"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT "&Naziv odredišne datoteke:", -1, 7, 13, 194, 13, WS_VISIBLE
    EDITTEXT EDITBOX, 6, 28, 174, 12, WS_VISIBLE | ES_AUTOHSCROLL
    DEFPUSHBUTTON "U redu", IDOK, 199, 10, 40, 14, WS_VISIBLE
    PUSHBUTTON "Otkaži", IDCANCEL, 199, 27, 40, 14, WS_VISIBLE
END

STRINGTABLE
{
    IDS_CAPTION "Lokalni port"
    IDS_FILE_EXISTS "Odredišna datoteka već postoji.  Kliknite na dugme „U redu“ da je zamenite."
    IDS_CANNOT_OPEN "Pravljenje odredišne datoteke nije uspelo."
}
