/**************************************************************
 *
 * 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 ---------------------------------------------------------------
#define __RSC
#include "svx/svxerr.hxx"
#include <svx/dialogs.hrc>
#include <editeng/editerr.hxx>


// Error-Context ---------------------------------------------------------
Resource RID_SVXERRCTX
{
	String ERRCTX_SVX_LINGU_THESAURUS&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "$(ERR) executing the thesaurus." ;
	};
	String ERRCTX_SVX_LINGU_SPELLING&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "$(ERR) executing the spellcheck." ;
	};
	String ERRCTX_SVX_LINGU_HYPHENATION&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "$(ERR) executing the hyphenation." ;
	};
	String ERRCTX_SVX_LINGU_DICTIONARY&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "$(ERR) creating a dictionary." ;
	};
	String ERRCTX_SVX_BACKGROUND&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "$(ERR) setting background attribute." ;
	};
	String ERRCTX_SVX_IMPORT_GRAPHIC&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "$(ERR) loading the graphics." ;
	};
};

// Error-Code ------------------------------------------------------------
Resource RID_SVXERRCODE
{
	String ERRCODE_SVX_LINGU_THESAURUSNOTEXISTS&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "No thesaurus available for the current language.\nPlease check your installation and install the desired language." ;
	};
	String ERRCODE_SVX_LINGU_LANGUAGENOTEXISTS&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "$(ARG1) is not supported by the spellcheck function or is not presently active.\nPlease check your installation and, if necessary, install the required language module\nor activate it under 'Tools - Options - Language Settings - Writing Aids'." ;
	};
	String ERRCODE_SVX_LINGU_LINGUNOTEXISTS&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Spellcheck is not available." ;
	};
	String ERRCODE_SVX_LINGU_HYPHENNOTEXISTS&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Hyphenation not available." ;
	};
	String ERRCODE_SVX_LINGU_DICT_NOTREADABLE&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The custom dictionary $(ARG1) cannot be read." ;
	};
	String ERRCODE_SVX_LINGU_DICT_NOTWRITEABLE&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The custom dictionary $(ARG1) cannot be created." ;
	};
	String ERRCODE_SVX_GRAPHIC_NOTREADABLE&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The graphic $(ARG1) could not be found." ;
	};
	String ERRCODE_SVX_GRAPHIC_WRONG_FILEFORMAT&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "An unlinked graphic could not be loaded." ;
	};
	String ERRCODE_SVX_LINGU_NOLANGUAGE&ERRCODE_RES_MASK
	{
		Text [ en-US ] = "A language has not been fixed for the selected term." ;
	};
	String (ERRCODE_SVX_FORMS_NOIOSERVICES | ERRCODE_CLASS_READ) & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The form layer wasn't loaded as the required IO-services (stardiv.uno.io.*) could not be instantiated." ;
	};
	String (ERRCODE_SVX_FORMS_NOIOSERVICES | ERRCODE_CLASS_WRITE) & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The form layer wasn't written as the required IO services (stardiv.uno.io.*) could not be instantiated." ;
	};
	String (ERRCODE_SVX_FORMS_READWRITEFAILED | ERRCODE_CLASS_READ) & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "An error occurred while reading the form controls. The form layer has not been loaded." ;
	};
	String (ERRCODE_SVX_FORMS_READWRITEFAILED | ERRCODE_CLASS_WRITE) & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "An error occurred while writing the form controls. The form layer has not been saved." ;
	};
	String (ERRCODE_SVX_BULLETITEM_NOBULLET | ERRCODE_CLASS_READ) & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "An error occurred while reading one of the bullets. Not all of the bullets were loaded." ;
	};
	String ERRCODE_SVX_MODIFIED_VBASIC_STORAGE & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "All changes to the Basic Code are lost. The original VBA Macro Code is saved instead." ;
	};

	String ERRCODE_SVX_VBASIC_STORAGE_EXIST & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The original VBA Basic Code contained in the document will not be saved." ;
	};

	String ERRCODE_SVX_WRONGPASS & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The password is incorrect. The document cannot be opened." ;
	};

	String ERRCODE_SVX_READ_FILTER_CRYPT & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The encryption method used in this document is not supported. Only Microsoft Office 97/2000 compatible password encryption is supported." ;
	};

	String ERRCODE_SVX_READ_FILTER_PPOINT & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The loading of password-encrypted Microsoft PowerPoint presentations is not supported." ;
	};

	String ERRCODE_SVX_EXPORT_FILTER_CRYPT & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Password protection is not supported when documents are saved in a Microsoft Office format.\nDo you want to save the document without password protection?" ;
	};
};

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