/*
 * Uninstaller resources
 *
 * Copyright 2005 Jonathan Ernst
 *
 * 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 "resource.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE {
     IDS_APPNAME, "Wine Application Uninstaller"
     IDS_UNINSTALLFAILED, "Execution of uninstall command '%s' failed, perhaps due to missing executable.\nDo you want to remove the uninstall entry from the registry?"
     STRING_NO_APP_MATCH, "uninstaller: The application with GUID '%1' was not found\n"
     STRING_PARAMETER_REQUIRED, "uninstaller: The option '--remove' must be followed by an application GUID\n"
     STRING_INVALID_OPTION, "uninstaller: Invalid option [%1]\n"
     STRING_HEADER, "Wine Application Uninstaller\n\n\
\Uninstall applications from the current Wine prefix.\n\n"
     STRING_USAGE, "Usage:\n\
\  uninstaller [options]\n\n\
\Options:\n\
\  --help\t    Display this information.\n\
\  --list\t    List all applications installed in this Wine prefix.\n\
\  --remove {GUID}   Uninstall the specified application.\n\
\t\t    Use '--list' to determine the application GUID.\n\
\  [no option]       Launch the graphical version of this program.\n\n"
}
