/*
 * 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

IDM_DEBUG_POPUP MENU
BEGIN
    POPUP ""
    BEGIN
        MENUITEM "&Отладка", ID_DEBUG
    END
END

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

STRINGTABLE
BEGIN
    IDS_AUTO_CAPTION     "Ошибка Wine"
    IDS_INVALID_PARAMS   "Внутренние ошибки - получены неверные параметры"
    IDS_UNIDENTIFIED     "(неопределено)"
END
