/*
 * 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, "The syntax of this command is:\n\nREG [ ADD | DELETE | QUERY ]\nREG command /?\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"
}
