/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/



#define __RSC
#include <svtools/svtools.hrc>
#include <svtools/sfxecode.hxx>

// pragma ----------------------------------------------------------------
Resource RID_ERRCTX
{
	String ERRCTX_ERROR
	{
		Text [ en-US ] = "Error" ;
	};
	String ERRCTX_WARNING
	{
		Text [ en-US ] = "Warning" ;
	};
	String ERRCTX_SFX_LOADTEMPLATE
	{
		Text [ en-US ] = "$(ERR) loading the template $(ARG1)" ;
	};
	String ERRCTX_SFX_SAVEDOC
	{
		Text [ en-US ] = "$(ERR) saving the document $(ARG1)" ;
	};
	String ERRCTX_SFX_SAVEASDOC
	{
		Text [ en-US ] = "$(ERR) saving the document $(ARG1)" ;
	};
	String ERRCTX_SFX_DOCINFO
	{
		Text [ en-US ] = "$(ERR) displaying doc. information for document $(ARG1)" ;
	};
	String ERRCTX_SFX_DOCTEMPLATE
	{
		Text [ en-US ] = "$(ERR) writing document $(ARG1) as template" ;
	};
	String ERRCTX_SFX_MOVEORCOPYCONTENTS
	{
		Text [ en-US ] = "$(ERR) copying or moving document contents" ;
	};
	String ERRCTX_SFX_DOCMANAGER
	{
		Text [ en-US ] = "$(ERR) starting the Document Manager" ;
	};
	String ERRCTX_SFX_OPENDOC
	{
		Text [ en-US ] = "$(ERR) loading document $(ARG1)" ;
	};
	String ERRCTX_SFX_NEWDOCDIRECT
	{
		Text [ en-US ] = "$(ERR) creating a new document" ;
	};
	String ERRCTX_SFX_NEWDOC
	{
		Text [ en-US ] = "$(ERR) creating a new document" ;
	};
	String ERRCTX_SFX_CREATEOBJSH
	{
		Text [ en-US ] = "$(ERR) expanding entry" ;
	};
	String ERRCTX_SFX_LOADBASIC
	{
		Text [ en-US ] = "$(ERR) loading BASIC of document $(ARG1)" ;
	};
	String ERRCTX_SFX_SEARCHADDRESS
	{
		Text [ en-US ] = "$(ERR) searching for an address" ;
	};
};
Resource RID_ERRHDL
{
	String ERRCODE_CLASS_ABORT
	{
		Text [ en-US ] = "Abort" ;
	};
	String ERRCODE_CLASS_NOTEXISTS
	{
		Text [ en-US ] = "Nonexistent object" ;
	};
	String ERRCODE_CLASS_ALREADYEXISTS
	{
		Text [ en-US ] = "Object already exists" ;
	};
	String ERRCODE_CLASS_ACCESS
	{
		Text [ en-US ] = "Object not accessible" ;
	};
	String ERRCODE_CLASS_PATH
	{
		Text [ en-US ] = "Inadmissible path" ;
	};
	String ERRCODE_CLASS_LOCKING
	{
		Text [ en-US ] = "Locking problem" ;
	};
	String ERRCODE_CLASS_PARAMETER
	{
		Text [ en-US ] = "Wrong parameter" ;
	};
	String ERRCODE_CLASS_SPACE
	{
		Text [ en-US ] = "Resource exhausted" ;
	};
	String ERRCODE_CLASS_NOTSUPPORTED
	{
		Text [ en-US ] = "Action not supported" ;
	};
	String ERRCODE_CLASS_READ
	{
		Text [ en-US ] = "Read-Error" ;
	};
	String ERRCODE_CLASS_WRITE
	{
		Text [ en-US ] = "Write Error" ;
	};
	String ERRCODE_CLASS_UNKNOWN
	{
		Text [ en-US ] = "unknown" ;
	};
	String ERRCODE_CLASS_VERSION
	{
		Text [ en-US ] = "Version Incompatibility" ;
	};
	String ERRCODE_CLASS_GENERAL
	{
		Text [ en-US ] = "General Error" ;
	};
	String ERRCODE_CLASS_FORMAT
	{
		Text [ en-US ] = "Incorrect format" ;
	};
	String ERRCODE_CLASS_CREATE
	{
		Text [ en-US ] = "Error creating object" ;
	};
	String ERRCODE_CLASS_SBX
	{
		Text [ en-US ] = "Inadmissible value or data type" ;
	};
	String ERRCODE_CLASS_RUNTIME
	{
		Text [ en-US ] = "BASIC runtime error" ;
	};
	String ERRCODE_CLASS_COMPILER
	{
		Text [ en-US ] = "BASIC syntax error" ;
	};
	String 1
	{
		Text [ en-US ] = "General Error" ;
	};
	String ERRCODE_IO_GENERAL
	{
		Text [ en-US ] = "General input/output error." ;
	};
	String ERRCODE_IO_MISPLACEDCHAR
	{
		Text [ en-US ] = "Invalid file name." ;
	};
	String ERRCODE_IO_NOTEXISTS
	{
		Text [ en-US ] = "Nonexistent file." ;
	};
	String ERRCODE_IO_ALREADYEXISTS
	{
		Text [ en-US ] = "File already exists." ;
	};
	String ERRCODE_IO_NOTADIRECTORY
	{
		Text [ en-US ] = "The object is not a directory." ;
	};
	String ERRCODE_IO_NOTAFILE
	{
		Text [ en-US ] = "The object is not a file." ;
	};
	String ERRCODE_IO_INVALIDDEVICE
	{
		Text [ en-US ] = "The specified device is invalid." ;
	};
	String ERRCODE_IO_ACCESSDENIED
	{
		Text [ en-US ] = "The object cannot be accessed\ndue to insufficient user rights." ;
	};
	String ERRCODE_IO_LOCKVIOLATION
	{
		Text [ en-US ] = "Sharing violation while accessing the object." ;
	};
	String ERRCODE_IO_OUTOFSPACE
	{
		Text [ en-US ] = "No more space on device." ;
	};
	String ERRCODE_IO_ISWILDCARD
	{
		Text [ en-US ] = "This operation cannot be run on\nfiles containing wildcards." ;
	};
	String ERRCODE_IO_NOTSUPPORTED
	{
		Text [ en-US ] = "This operation is not supported on this operating system." ;
	};
	String ERRCODE_IO_TOOMANYOPENFILES
	{
		Text [ en-US ] = "There are too many files open." ;
	};
	String ERRCODE_IO_CANTREAD
	{
		Text [ en-US ] = "Data could not be read from the file." ;
	};
	String ERRCODE_IO_CANTWRITE
	{
		Text [ en-US ] = "The file could not be written." ;
	};
	String ERRCODE_IO_OUTOFMEMORY
	{
		Text [ en-US ] = "The operation could not be run due to insufficient memory." ;
	};
	String ERRCODE_IO_CANTSEEK
	{
		Text [ en-US ] = "The seek operation could not be run." ;
	};
	String ERRCODE_IO_CANTTELL
	{
		Text [ en-US ] = "The tell operation could not be run." ;
	};
	String ERRCODE_IO_WRONGVERSION
	{
		Text [ en-US ] = "Incorrect file version." ;
	};
	String ERRCODE_IO_WRONGFORMAT
	{
		Text [ en-US ] = "Incorrect file format." ;
	};
	String ERRCODE_IO_INVALIDCHAR
	{
		Text [ en-US ] = "The file name contains invalid characters." ;
	};
	String ERRCODE_IO_UNKNOWN
	{
		Text [ en-US ] = "An unknown I/O error has occurred." ;
	};
	String ERRCODE_IO_INVALIDACCESS
	{
		Text [ en-US ] = "An invalid attempt was made to access the file." ;
	};
	String ERRCODE_IO_CANTCREATE
	{
		Text [ en-US ] = "The file could not be created." ;
	};
	String ERRCODE_IO_INVALIDPARAMETER
	{
		Text [ en-US ] = "The operation was started under an invalid parameter." ;
	};
	String ERRCODE_IO_ABORT
	{
		Text [ en-US ] = "The operation on the file was aborted." ;
	};
	String ERRCODE_IO_NOTEXISTSPATH
	{
		Text [ en-US ] = "Path to the file does not exist." ;
	};
	String ERRCODE_IO_RECURSIVE
	{
		Text [ en-US ] = "An object cannot be copied into itself." ;
	};
	String ERRCODE_SFX_NOSTDTEMPLATE
	{
		Text [ en-US ] = "The default template could not be opened." ;
	};
	String ERRCODE_SFX_TEMPLATENOTFOUND
	{
		Text [ en-US ] = "The specified template could not be found." ;
	};
	String ERRCODE_SFX_NOTATEMPLATE
	{
		Text [ en-US ] = "The file cannot be used as template." ;
	};
	String ERRCODE_SFX_CANTREADDOCINFO
	{
		Text [ en-US ] = "Document information could not be read from the file because\nthe document information format is unknown or because document information does not\nexist." ;
	};
	String ERRCODE_SFX_ALREADYOPEN
	{
		Text [ en-US ] = "This document has already been opened for editing." ;
	};
	String ERRCODE_SFX_WRONGPASSWORD
	{
		Text [ en-US ] = "The wrong password has been entered." ;
	};
	String ERRCODE_SFX_DOLOADFAILED
	{
		Text [ en-US ] = "Error reading file." ;
	};
	String ERRCODE_SFX_DOCUMENTREADONLY
	{
		Text [ en-US ] = "The document was opened as read-only." ;
	};
	String ERRCODE_SFX_OLEGENERAL
	{
		Text [ en-US ] = "General OLE Error." ;
	};
	String ERRCODE_INET_NAME_RESOLVE
	{
		Text [ en-US ] = "The host name $(ARG1) could not be resolved." ;
	};
	String ERRCODE_INET_CONNECT
	{
		Text [ en-US ] = "Could not establish Internet connection to $(ARG1)." ;
	};
	String ERRCODE_INET_READ
	{
		Text [ en-US ] = "Error reading data from the Internet.\nServer error message: $(ARG1)." ;
	};
	String ERRCODE_INET_WRITE
	{
		Text [ en-US ] = "Error transferring data to the Internet.\nServer error message: $(ARG1)." ;
	};
	String ERRCODE_INET_GENERAL
	{
		Text [ en-US ] = "General Internet error has occurred." ;
	};
	String ERRCODE_INET_OFFLINE
	{
		Text [ en-US ] = "The requested Internet data is not available in the cache and cannot be transmitted as the Online mode has not been activated." ;
	};
	String ERRCODE_SFXMSG_STYLEREPLACE
	{
		ExtraData = ERRCODE_MSG_ERROR | ERRCODE_BUTTON_OK_CANCEL ;
		Text [ en-US ] = "Should the $(ARG1) Style be replaced?" ;
	};
	String ERRCODE_SFX_NOFILTER
	{
		Text [ en-US ] = "A filter has not been found." ;
	};
	String ERRCODE_SFX_CANTFINDORIGINAL
	{
		Text [ en-US ] = "The original could not be determined." ;
	};
	String ERRCODE_SFX_CANTCREATECONTENT
	{
		Text [ en-US ] = "The contents could not be created." ;
	};
	String ERRCODE_SFX_CANTCREATELINK
	{
		Text [ en-US ] = "The link could not be created." ;
	};
	String ERRCODE_SFX_WRONGBMKFORMAT
	{
		Text [ en-US ] = "The link format is invalid." ;
	};
	String ERRCODE_SFX_WRONGICONFILE
	{
		Text [ en-US ] = "The configuration of the icon display is invalid." ;
	};
	String ERRCODE_SFX_CANTWRITEICONFILE
	{
		Text [ en-US ] = "The configuration of the icon display can not be saved." ;
	};
	String ERRCODE_SFX_CANTDELICONFILE
	{
		Text [ en-US ] = "The configuration of the icon display could not be deleted." ;
	};
	String ERRCODE_SFX_CANTRENAMECONTENT
	{
		Text [ en-US ] = "Contents cannot be renamed." ;
	};
	String ERRCODE_SFX_INVALIDBMKPATH
	{
		Text [ en-US ] = "The bookmark folder is invalid." ;
	};
	String ERRCODE_SFX_CANTWRITEURLCFGFILE
	{
		Text [ en-US ] = "The configuration of the URLs to be saved locally could not be saved." ;
	};
	String ERRCODE_SFX_WRONGURLCFGFORMAT
	{
		Text [ en-US ] = "The configuration format of the URLs to be saved locally is invalid." ;
	};
	String ERRCODE_SFX_NODOCUMENT
	{
		Text [ en-US ] = "This action cannot be applied to a document that does not exist." ;
	};
	String ERRCODE_SFX_INVALIDLINK
	{
		Text [ en-US ] = "The link refers to an invalid target." ;
	};
	String ERRCODE_SFX_INVALIDTRASHPATH
	{
		Text [ en-US ] = "The Recycle Bin path is invalid." ;
	};
	String ERRCODE_SFX_NOTRESTORABLE
	{
		Text [ en-US ] = "The entry could not be restored." ;
	};
	String ERRCODE_IO_NAMETOOLONG
	{
		Text [ en-US ] = "The file name is too long for the target file system." ;
	};
	String ERRCODE_SFX_CONSULTUSER
	{
		Text [ en-US ] = "The details for running the function are incomplete." ;
	};
	String ERRCODE_SFX_INVALIDSYNTAX
	{
		Text [ en-US ] = "The input syntax is invalid." ;
	};
	String ERRCODE_SFX_CANTCREATEFOLDER
	{
		Text [ en-US ] = "The input syntax is invalid." ;
	};
	String ERRCODE_SFX_CANTRENAMEFOLDER
	{
		Text [ en-US ] = "The input syntax is invalid." ;
	};
	String ERRCODE_SFX_WRONG_CDF_FORMAT
	{
		Text [ en-US ] = "The channel document has an invalid format." ;
	};
	String ERRCODE_SFX_EMPTY_SERVER
	{
		Text [ en-US ] = "The server must not be empty." ;
	};
	String ERRCODE_SFX_NO_ABOBOX
	{
		Text [ en-US ] = "A subscription folder is required to install a Channel." ;
	};
	String ERRCODE_IO_NOTSTORABLEINBINARYFORMAT
	{
		Text [ en-US ] = "This document contains attributes that cannot be saved in the selected format.\nPlease save the document in a %PRODUCTNAME %PRODUCTVERSION file format." ;
	};
	String ERRCODE_SFX_TARGETFILECORRUPTED
	{
		Text [ en-US ] = "The file $(FILENAME) cannot be saved. Please check your system settings. You can find an automatically generated backup copy of this file in folder $(PATH) named $(BACKUPNAME)." ;
	};
	String ERRCODE_SFX_NOMOREDOCUMENTSALLOWED
	{
		Text [ en-US ] = "The maximum number of documents that can be opened at the same time has been reached. You need to close one or more documents before you can open a new document." ;
	};
	String ERRCODE_SFX_CANTCREATEBACKUP
	{
		Text [ en-US ] = "Could not create backup copy." ;
	};
	String ERRCODE_SFX_MACROS_SUPPORT_DISABLED
	{
		Text [ en-US ] = "An attempt was made to execute a macro.\nFor security reasons, macro support is disabled." ;
	};
	String ERRCODE_SFX_DOCUMENT_MACRO_DISABLED
	{
		Text [ en-US ] = "This document contains macros.\n\nMacros may contain viruses. Execution of macros is disabled due to the current macro security setting in Tools - Options - %PRODUCTNAME - Security.\n\nTherefore, some functionality may not be available." ;
	};
	String ERRCODE_SFX_BROKENSIGNATURE
	{
		Text [ en-US ] = "The digitally signed document content and/or macros do not match the current document signature.\n\nThis could be the result of document manipulation or of structural document damage due to data transmission.\n\nWe recommend that you do not trust the content of the current document.\nExecution of macros is disabled for this document.\n " ;
	};
	String ERRCODE_SFX_INCOMPLETE_ENCRYPTION
	{
		Text [ en-US ] = "The encrypted document contains unexpected non-encrypted streams.\n\nThis could be the result of document manipulation.\n\nWe recommend that you do not trust the content of the current document.\nExecution of macros is disabled for this document.\n " ;
	};

	String ERRCODE_IO_INVALIDLENGTH
	{
		Text [ en-US ] = "Invalid data length." ;
	};
	String ERRCODE_IO_CURRENTDIR
	{
		Text [ en-US ] = "Function not possible: path contains current directory." ;
	};
	String ERRCODE_IO_NOTSAMEDEVICE
	{
		Text [ en-US ] = "Function not possible: device (drive) not identical." ;
	};
	String ERRCODE_IO_DEVICENOTREADY
	{
		Text [ en-US ] = "Device (drive) not ready." ;
	};
	String ERRCODE_IO_BADCRC
	{
		Text [ en-US ] = "Wrong check amount." ;
	};
	String ERRCODE_IO_WRITEPROTECTED
	{
		Text [ en-US ] = "Function not possible: write protected." ;
	};
	String ERRCODE_SFX_SHARED_NOPASSWORDCHANGE
	{
		Text [ en-US ] = "The password of a shared spreadsheet cannot be set or changed.\nDeactivate sharing mode first." ;
	};
};

// ********************************************************************** EOF
