/*
 * REG.EXE - Wine-compatible reg program.
 *
 * Copyright 2008 Andrew Riedi
 *
 * 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
{
    STRING_USAGE, "Usage:\n\
\  REG [operation] [parameters]\n\n\
\Supported operations:\n\
\  ADD | DELETE | IMPORT | QUERY\n\n\
\For help on a specific operation, type:\n\
\  REG [operation] /?\n\n"
    STRING_ADD_USAGE, "REG ADD key_name [/v value_name | /ve] [/t type] [/s separator] [/d data] [/f]\n"
    STRING_DELETE_USAGE, "REG DELETE key_name [/v value_name | /ve | /va] [/f]\n"
    STRING_QUERY_USAGE, "REG QUERY key_name [/v value_name | /ve] [/s]\n"
    STRING_SUCCESS, "The operation completed successfully\n"
    STRING_INVALID_KEY, "reg: Invalid key name\n"
    STRING_INVALID_CMDLINE, "reg: Invalid command line parameters\n"
    STRING_NO_REMOTE, "reg: Unable to access remote machine\n"
    STRING_CANNOT_FIND, "reg: The system was unable to find the specified registry key or value\n"
    STRING_UNSUPPORTED_TYPE, "reg: Unsupported registry data type [%1]\n"
    STRING_MISSING_INTEGER, "reg: The option [/d] must be followed by a valid integer\n"
    STRING_MISSING_HEXDATA, "reg: The option [/d] must be followed by a valid hexadecimal value\n"
    STRING_UNHANDLED_TYPE, "reg: Unhandled registry data type [/t 0x%1!x!, /d %2]\n"
    STRING_OVERWRITE_VALUE, "The registry value '%1' already exists. Do you want to overwrite it?"
    STRING_YESNO, " (Yes|No)"
    STRING_YES, "#msgctxt#Yes key#Y"
    STRING_NO, "#msgctxt#No key#N"
    STRING_CANCELLED, "The registry operation was cancelled\n"
    STRING_DEFAULT_VALUE, "(Default)"
    STRING_DELETE_VALUE, "Are you sure you want to delete the registry value '%1'?"
    STRING_DELETE_VALUEALL, "Are you sure you want to delete all registry values in '%1'?"
    STRING_DELETE_SUBKEY, "Are you sure you want to delete the registry key '%1'?"
    STRING_INVALID_STRING, "reg: The option [/d] must be followed by a valid string\n"
    STRING_VALUEALL_FAILED, "reg: Unable to delete all registry values in '%1'. An unexpected error occurred.\n"
    STRING_GENERAL_FAILURE, "reg: Unable to complete the specified operation. An unexpected error occurred.\n"
    STRING_MATCHES_FOUND, "Search complete. Number of matches found: %1!d!\n"
    STRING_INVALID_SYNTAX, "reg: Invalid syntax. "
    STRING_INVALID_OPTION, "reg: Invalid option [%1]. "
    STRING_REG_HELP, "Type \"REG /?\" for help.\n"
    STRING_FUNC_HELP, "Type \"REG %1 /?\" for help.\n"
    STRING_VALUE_NOT_SET, "(value not set)"
    STRING_IMPORT_USAGE, "REG IMPORT file.reg\n"
    STRING_FILE_NOT_FOUND, "reg: The file '%1' was not found.\n"
    STRING_OPEN_KEY_FAILED, "reg: Unable to open the registry key '%1'.\n"
    STRING_ESCAPE_SEQUENCE, "reg: Unrecognized escape sequence [\\%1!c!]\n"
}
