/*
 * Japanese Language Support
 *
 * Copyright 2008 Mikolaj Zalewski
 * Copyright 2011 Akihiro Sagawa
 *
 * 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_JAPANESE, 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, "MS Shell Dlg"
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
