/*
 * cryptdlg dll Serbian resources
 *
 * Copyright 2008 Juan Lang
 * Copyright 2010 Đorđe Vasiljević
 *
 * 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"

#pragma code_page(65001)

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC

STRINGTABLE
{
    IDS_CERT_POLICY "Смерница сертификата"
    IDS_POLICY_ID "Смерница идентификатора: "
    IDS_POLICY_QUALIFIER_INFO "Смерница квалификатора"
    IDS_POLICY_QUALIFIER_ID "Смерница ID квалификатора="
    IDS_CPS "CPS" /* Certification Practice Statement */
    IDS_USER_NOTICE "Корисничко обавештење"
    IDS_QUALIFIER "Квалификатор"
    IDS_NOTICE_REF "Референца обавештења"
    IDS_ORGANIZATION "Организација="
    IDS_NOTICE_NUM "Број обавештења="
    IDS_NOTICE_TEXT "Текст обавештења="
}

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN

STRINGTABLE
{
    IDS_CERT_POLICY "Smernica sertifikata"
    IDS_POLICY_ID "Smernica identifikatora: "
    IDS_POLICY_QUALIFIER_INFO "Smernica kvalifikatora"
    IDS_POLICY_QUALIFIER_ID "Smernica ID kvalifikatora="
    IDS_CPS "CPS" /* Certification Practice Statement */
    IDS_USER_NOTICE "Korisničko obaveštenje"
    IDS_QUALIFIER "Kvalifikator"
    IDS_NOTICE_REF "Referenca obaveštenja"
    IDS_ORGANIZATION "Organizacija="
    IDS_NOTICE_NUM "Broj obaveštenja="
    IDS_NOTICE_TEXT "Tekst obaveštenja="
}
