/*
 * cryptdlg dll resources
 *
 * Copyright 2010 Andras Kovacs
 *
 * 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 "cryptres.h"

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

LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
{
    IDS_CERT_POLICY "Tanusítvány szabályok"
    IDS_POLICY_ID "Szabály azonosító: "
    IDS_POLICY_QUALIFIER_INFO "Szabály minősítő információ"
    IDS_POLICY_QUALIFIER_ID "Szabály minősítő Id="
    IDS_CPS "CPS" /* Certification Practice Statement */
    IDS_USER_NOTICE "Felhasználó figyelmeztetés"
    IDS_QUALIFIER "Minősítő"
    IDS_NOTICE_REF "Megjegyzési referencia"
    IDS_ORGANIZATION "Szervezet="
    IDS_NOTICE_NUM "Megjegyzés száma="
    IDS_NOTICE_TEXT "Megjegyzés szövege="
}
