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

STRINGTABLE DISCARDABLE
BEGIN
    IDS_CPL_NAME        "インターネット設定"
    IDS_CPL_INFO        "Wine インターネット ブラウザや関連する設定を構成します"
END

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

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
