/*
 * Japanese resources for the Internet control panel applet
 *
 * Copyright 2010 Detlef Riekenberg
 * Copyright 2010 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 "inetcpl.h"

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

LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT

/* "General" propsheet */
IDD_GENERAL DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "全般"
BEGIN

    GROUPBOX    " ホーム ページ ", IDC_STATIC, 4, 4, 312, 52
    LTEXT       "ホーム ページとして使われるアドレスを選べます。",
                IDC_STATIC, 58, 10, 252, 10
    EDITTEXT    IDC_HOME_EDIT, 58, 22, 252, 12, WS_VISIBLE | ES_AUTOHSCROLL
    PUSHBUTTON  "現在のページ(&C)", IDC_HOME_CURRENT, 58, 36, 80, 14
    PUSHBUTTON  "デフォルト(&D)", IDC_HOME_DEFAULT, 144, 36, 80, 14
    PUSHBUTTON  "空白(&B)", IDC_HOME_BLANK, 230, 36, 80, 14
    GROUPBOX    " 閲覧履歴 ", IDC_STATIC, 4, 60, 312, 46
    LTEXT       "キャッシュされたページやクッキー、その他のデータを削除できます。",
                IDC_STATIC, 58, 72, 252, 10
    PUSHBUTTON  "ファイルを削除(&F)...", IDC_HISTORY_DELETE, 144, 86, 80, 14
    PUSHBUTTON  "設定(&S)...", IDC_HISTORY_SETTINGS, 230, 86, 80, 14

END

/* "Content" propsheet */
IDD_CONTENT DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "コンテンツ"
BEGIN

    GROUPBOX    " 証明書 ", IDC_STATIC, 4, 4, 312, 50
    LTEXT       "証明書は個人認証、証明書の権限と発行元を確認するために使われます。",
                IDC_STATIC, 58, 14, 252, 18
    PUSHBUTTON  "証明書...", IDC_CERT, 146, 34, 80, 14
    PUSHBUTTON	"発行元...", IDC_CERT_PUBLISHER, 230, 34, 80, 14

END
