/*
 * 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 "reg.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    STRING_USAGE, "Usage:\n\
\  REG [operation] [parameters]\n\n\
\Supported operations:\n\
\  ADD | DELETE | 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)"
}
