/*
 * Russian resources for MSI
 *
 * Copyright 2006 Vitaly Lipatov
 *
 * 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 "windef.h"

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

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
{
	4 "Указанный пакет не может быть открыт. Проверьте файл и повторите попытку."
	5 "путь %s не найден"
	9 "вставьте диск %s"
	10 "неверные параметры"
	11 "укажите каталог, содержащий %s"
	12 "источник установки данной возможности не указан"
	13 "сетевой диск для данной возможности не указан"
	14 "возможность из:"
	15 "выберите каталог, содержащий %s"
}
