/*
 * Russian Language Support
 *
 * Copyright 2009 Vladimir Pankratov
 *
 * 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"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

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
