/*
 * English resources for MSI
 *
 * Copyright 2005 Mike McCormack
 * Copyright 2010 Detlef Riekenberg
 *
 * 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"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
{
	4 "The specified installation package could not be opened.  Please check the file path and try again."
	5 "path %s not found"
	9 "insert disk %s"
	10 "Windows Installer %s\n\n" \
	"Usage:\n" \
	"msiexec command {required parameter} [optional parameter]\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 "enter which folder contains %s"
	12 "install source for feature missing"
	13 "network drive for feature missing"
	14 "feature from:"
	15 "choose which folder contains %s"
}
