/*
 * Serbian Language Support
 *
 * 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_CYRILLIC

IDD_CRASH_DLG DIALOGEX 100, 100, 273, 175
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Програмска грешка"
FONT 8, "Tahoma"
BEGIN
    LTEXT           "",IDC_STATIC_BG,0,0,273,52,WS_BORDER,0
    LTEXT           "Програм %s је наишао на озбиљан проблем и мора \
                    бити затворен. Извињавамо се због непријатности.",
                    IDC_STATIC_TXT1,27,10,224,30
    LTEXT           "Узрок овоме може бити проблем у програму или недостатак у Wine-у. \
                    Проверите http://appdb.winehq.org за савете о покретању \
                    овог програма.\n\n\
                    Ако овај проблем није присутан под Windows-ом и још увек није \
                    пријављен, пријавите га на http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100
    DEFPUSHBUTTON   "Затвори", IDOK, 205, 151, 60, 16, WS_TABSTOP
END

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN

IDD_CRASH_DLG DIALOGEX 100, 100, 273, 175
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Programska greška"
FONT 8, "Tahoma"
BEGIN
    LTEXT           "",IDC_STATIC_BG,0,0,273,52,WS_BORDER,0
    LTEXT           "Program %s je naišao na ozbiljan problem i mora \
                    biti zatvoren. Izvinjavamo se zbog neprijatnosti.",
                    IDC_STATIC_TXT1,27,10,224,30
    LTEXT           "Uzrok ovome može biti problem u programu ili nedostatak u Wine-u. \
                    Proverite http://appdb.winehq.org za savete o pokretanju \
                    ovog programa.\n\n\
                    Ako ovaj problem nije prisutan pod Windows-om i još uvek nije \
                    prijavljen, prijavite ga na http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100
    DEFPUSHBUTTON   "Zatvori", IDOK, 205, 151, 60, 16, WS_TABSTOP
END
