/*
 * Serbian WineBoot resources
 *
 * Copyright 2010 Nenad Vujic
 *                Paul Vriens
 * 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 "resource.h"

#pragma code_page(65001)

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN

IDD_ENDTASK DIALOG  0, 0, 186, 71
STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Čekanje programa"
FONT 8, "MS Shell Dlg"
BEGIN
    DEFPUSHBUTTON   "Otkaži",IDCANCEL,129,49,50,15
    PUSHBUTTON      "Okončaj proces",IDOK,51,49,71,15
    LTEXT           "Oponašanje odjave ili gašenja računara je u toku, ali ovaj program ne odgovara.",
                    IDC_STATIC,7,7,172,19
    LTEXT           "Ako okončate proces, sve nesačuvane radnje će biti izgubljene.",
                    IDC_STATIC,7,28,172,15
END

IDD_WAITDLG DIALOG 0, 0, 200, 50
STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_DISABLED
CAPTION "Wine"
FONT 8, "MS Shell Dlg"
BEGIN
    ICON "", IDC_WAITICON, 3, 3, 10, 10
    LTEXT "Wine postavke u %s se ažuriraju. Molimo, sačekajte...",
          IDC_WAITTEXT, 40, 5, 150, 40, SS_NOPREFIX
END

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC

IDD_ENDTASK DIALOG  0, 0, 186, 71
STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Чекање програма"
FONT 8, "MS Shell Dlg"
BEGIN
    DEFPUSHBUTTON   "Откажи",IDCANCEL,129,49,50,15
    PUSHBUTTON      "Окончај процес",IDOK,51,49,71,15
    LTEXT           "Опонашање одјаве или гашења рачунара је у току, али овај програм не одговара.",
                    IDC_STATIC,7,7,172,19
    LTEXT           "Ако окончате процес, све несачуване радње ће бити изгубљене.",
                    IDC_STATIC,7,28,172,15
END

IDD_WAITDLG DIALOG 0, 0, 200, 50
STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_DISABLED
CAPTION "Wine"
FONT 8, "MS Shell Dlg"
BEGIN
    ICON "", IDC_WAITICON, 3, 3, 10, 10
    LTEXT "Wine поставке у %s се ажурирају. Молимо, сачекајте...",
          IDC_WAITTEXT, 40, 5, 150, 40, SS_NOPREFIX
END
