/**************************************************************
 *
 * 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.
 *
 *************************************************************/



#include "svtools/sores.hxx"
#define __RSC
#include <svtools/soerr.hxx>
#define S_MAX	0x7fff

Resource RID_SO_ERROR_HANDLER
{
	String ERRCODE_SO_GENERALERROR&S_MAX
	{
		Text [ en-US ] = "General OLE error." ;
	};
	String ERRCODE_SO_CANT_BINDTOSOURCE&S_MAX
	{
		Text [ en-US ] = "The connection to the object cannot be established." ;
	};
	String ERRCODE_SO_NOCACHE_UPDATED&S_MAX
	{
		Text [ en-US ] = "No cache files were updated." ;
	};
	String ERRCODE_SO_SOMECACHES_NOTUPDATED&S_MAX
	{
		Text [ en-US ] = "Some cache files were not updated." ;
	};
	String ERRCODE_SO_MK_UNAVAILABLE&S_MAX
	{
		Text [ en-US ] = "Status of object cannot be determined in a timely manner." ;
	};
	String ERRCODE_SO_E_CLASSDIFF&S_MAX
	{
		Text [ en-US ] = "Source of the OLE link has been converted." ;
	};
	String ERRCODE_SO_MK_NO_OBJECT&S_MAX
	{
		Text [ en-US ] = "The object could not be found." ;
	};
	String ERRCODE_SO_MK_EXCEEDED_DEADLINE&S_MAX
	{
		Text [ en-US ] = "The process could not be completed within the specified time period." ;
	};
	String ERRCODE_SO_MK_CONNECT_MANUALLY&S_MAX
	{
		Text [ en-US ] = "OLE could not connect to a network device (server)." ;
	};
	String ERRCODE_SO_MK_INTERMEDIATE_INTERFACE_NOT_SUPPORTED&S_MAX
	{
		Text [ en-US ] = "The object found does not support the interface required for the desired operation." ;
	};
	String ERRCODE_SO_NO_INTERFACE&S_MAX
	{
		Text [ en-US ] = "Interface not supported." ;
	};
	String ERRCODE_SO_OUT_OF_MEMORY&S_MAX
	{
		Text [ en-US ] = "Insufficient memory." ;
	};
	String ERRCODE_SO_MK_SYNTAX&S_MAX
	{
		Text [ en-US ] = "The connection name could not be processed." ;
	};
	String ERRCODE_SO_MK_REDUCED_TO_SELF&S_MAX
	{
		Text [ en-US ] = "The connection name could not be reduced further." ;
	};
	String ERRCODE_SO_MK_NO_INVERSE&S_MAX
	{
		Text [ en-US ] = "The connection name has no inverse." ;
	};
	String ERRCODE_SO_MK_NO_PREFIX&S_MAX
	{
		Text [ en-US ] = "No common prefix exists." ;
	};
	String ERRCODE_SO_MK_HIM&S_MAX
	{
		Text [ en-US ] = "The connection name is contained in the other one." ;
	};
	String ERRCODE_SO_MK_US&S_MAX
	{
		Text [ en-US ] = "The connection names (the receiver and the other moniker) are identical." ;
	};
	String ERRCODE_SO_MK_ME&S_MAX
	{
		Text [ en-US ] = "The connection name is contained in the other one." ;
	};
	String ERRCODE_SO_MK_NOT_BINDABLE&S_MAX
	{
		Text [ en-US ] = "The connection name cannot be connected. This is a relative name." ;
	};
	String ERRCODE_SO_NOT_IMPLEMENTED&S_MAX
	{
		Text [ en-US ] = "Operation not implemented." ;
	};
	String ERRCODE_SO_MK_NO_STORAGE&S_MAX
	{
		Text [ en-US ] = "No storage." ;
	};
	String ERRCODE_SO_FALSE&S_MAX
	{
		Text [ en-US ] = "False." ;
	};
	String ERRCODE_SO_MK_NEED_GENERIC&S_MAX
	{
		Text [ en-US ] = "Monikers must be composed generically." ;
	};
	String ERRCODE_SO_PENDING&S_MAX
	{
		Text [ en-US ] = "Data not available at this time." ;
	};
	String ERRCODE_SO_NOT_INPLACEACTIVE & S_MAX
	{
		Text [ en-US ] = "Object could not be activated InPlace." ;
	};
	String ERRCODE_SO_LINDEX & S_MAX
	{
		Text [ en-US ] = "Invalid index." ;
	};
	String ERRCODE_SO_CANNOT_DOVERB_NOW & S_MAX
	{
		Text [ en-US ] = "The action cannot be executed in the object's current state." ;
	};
	String ERRCODE_SO_OLEOBJ_INVALIDHWND & S_MAX
	{
		Text [ en-US ] = "An invalid window was passed when activated." ;
	};
	String ERRCODE_SO_NOVERBS & S_MAX
	{
		Text [ en-US ] = "The object does not support any actions." ;
	};
	String ERRCODE_SO_INVALIDVERB & S_MAX
	{
		Text [ en-US ] = "The action is not defined. The default action will be executed." ;
	};
	String ERRCODE_SO_MK_CONNECT & S_MAX
	{
		Text [ en-US ] = "A link to the network could not be re-established." ;
	};
	String ERRCODE_SO_NOTIMPL & S_MAX
	{
		Text [ en-US ] = "Object does not support this action." ;
	};
	String ERRCODE_SO_MK_CANTOPENFILE & S_MAX
	{
		Text [ en-US ] = "The specified file could not be opened." ;
	};
	/*
	String	& S_MAX
	{
		Text = "" ;
	};
*/
};
Resource RID_SO_ERRCTX
{
	String ERRCTX_SO_DOVERB
	{
		Text [ en-US ] = "$(ERR) activating object" ;
	};
};
String STR_INS_OBJECT
{
	Text [ en-US ] = "Inserts a new %1-Object into your document." ;
};
String STR_INS_OBJECT_ICON
{
	Text [ en-US ] = "Inserts a new %1-Object into your document as a symbol." ;
};
String STR_INS_FILE
{
	Text [ en-US ] = "Inserts the contents of the file into your document to enable later editing in the original application." ;
};
String STR_INS_PLUGIN
{
	Text [ en-US ] = "Inserts a plug-in object into your document with a reference to the plug-in data. When the object is activated, the plug-in is automatically executed." ;
};
String STR_INS_APPLET
{
	Text [ en-US ] = "Inserts an applet object into your document. When the object is activated, the applet is automatically executed." ;
};
String STR_INS_FILE_ICON
{
	Text [ en-US ] = "Inserts the contents of the file as an icon into your document." ;
};
String STR_INS_FILE_LINK
{
	Text [ en-US ] = "Inserts the contents of the file into your document and creates a link to the source file. Changes made to the source file will be reflected in your document." ;
};
String STR_INS_FILE_ICON_LINK
{
	Text [ en-US ] = "Inserts an icon into your document representing the file. Changes made to the source file will be reflected in your document." ;
};
String STR_PASTE
{
	Text [ en-US ] = "Pastes the contents of the clipboard as %1 in your document." ;
};
String STR_CONVERT_TO
{
	Text [ en-US ] = "Converts the selected %1 object to the object type %2." ;
};
String STR_ACTIVATE_AS
{
	Text [ en-US ] = "All objects of type %1 are activated as %2, but not converted" ;
};
String STR_VERB_OPEN
{
	Text [ en-US ] = "~Open" ;
};
String STR_VERB_PROPS
{
	Text [ en-US ] = "~Properties" ;
};
String STR_PLUGIN_CANT_SHOW
{
	Text [ en-US ] = "Plug-in % cannot be displayed." ;
};
String STR_ERROR_DDE
{
	Text [ en-US ] = "DDE link to % for % area % are not available." ;
};
String STR_ERROR_OBJNOCREATE
{
	Text [ en-US ] = "Object % could not be inserted." ;
};
String STR_ERROR_OBJNOCREATE_FROM_FILE
{
	Text [ en-US ] = "Object from file % could not be inserted." ;
};
String STR_ERROR_OBJNOCREATE_PLUGIN
{
	Text [ en-US ] = "Plug-in from document % could not be inserted." ;
};
String STR_QUERYUPDATELINKS
{
	Text [ en-US ] = "Update all links?" ;
};
String STR_FURTHER_OBJECT
{
	Text [ en-US ] = "Further objects" ;
};
String STR_EDIT_APPLET
{
	Text [ en-US ] = "Edit Applet" ;
};

Bitmap BMP_PLUGIN
{
	File = "plugin.png" ;
};
Bitmap BMP_OLEOBJ
{
	File = "oleobj.png" ;
};
Menu MB_PLUGIN
{
	ItemList =
	{
		MenuItem MI_PLUGIN ;
	};
	ExtraData = { 1 ; 0 ; 0 ; }; // Um InPlace Menu zu benutzen
};
MenuItem MI_PLUGIN
{
	Identifier = MI_PLUGIN ;
	SubMenu = Menu
	{
		ItemList =
		{
			MenuItem
			{
				Identifier = MI_PLUGIN_DEACTIVATE ;
				Text [ en-US ] = "Deactivate" ;
			};
		};
	};
};
String STR_UNKNOWN_SOURCE
{
	Text [ en-US ] = "Unknown source" ;
};

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