/*
 * Ukrainian resources for MSI
 *
 * Copyright 2005 Mike McCormack
 * Copyright 2007 Artem Reznikov
 * Copyright 2010 Igor Paliychuk
 *
 * 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_UKRAINIAN, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
{
	4 "Не вдалося відкрити вказаний пакет інсталяції.  Перевірте шлях до файлу та спробуйте знов."
	5 "шлях %s не знайдено"
	9 "вставте диск %s"
	10 "Windows Installer %s\n\n" \
	"Usage:\n" \
	"msiexec command {required parameter} [optional parammeter]\n\n" \
	"Install a product:\n" \
	"\t/i {package|productcode} [property]\n" \
	"\t/package {package|productcode} [property]\n" \
	"\t/a package [property]\n" \
	"Repair an installation:\n" \
	"\t/f[p|o|e|d|c|a|u|m|s|v] {package|productcode}\n" \
	"Uninstall a product:\n" \
	"\t/uninstall {package|productcode} [property]\n" \
	"\t/x {package|productcode} [property]\n" \
	"Advertise a product:\n" \
	"\t/j[u|m] package [/t transform] [/g languageid]\n" \
	"Apply a patch:\n" \
	"\t/p patchpackage [property]\n" \
	"\t/p patchpackage /a package [property]\n" \
	"Log and UI Modifiers for above commands:\n" \
	"\t/l[*][i|w|e|a|r|u|c|m|o|p|v|][+|!] logfile\n" \
	"\t/q{|n|b|r|f|n+|b+|b-}\n" \
	"Register MSI Service:\n" \
	"\t/y\n" \
	"Unregister MSI Service:\n" \
	"\t/z\n" \
	"Display this help:\n" \
	"\t/help\n" \
	"\t/?\n"
	11 "вкажіть папку, що містить %s"
	12 "джерело встановлення даної можливості не вказане"
	13 "мережевий диск для даної можливості не вказаний"
	14 "можливість з:"
	15 "виберіть папку, що містить %s"
}
