/**************************************************************
 * 
 * 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 "scerrors.hxx"
#include "sc.hrc"

Resource RID_ERRHDLSC
{
	 //------------------------------------------------------------
	 // ERRORS -----------------------------------------------------
	 //------------------------------------------------------------
    String SCERR_IMPORT_CONNECT & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Impossible to connect to the file." ;
	};
    String SCERR_IMPORT_OPEN & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "File could not be opened." ;
	};
    String SCERR_IMPORT_UNKNOWN & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "An unknown error has occurred." ;
	};
    String SCERR_IMPORT_OUTOFMEM & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Not enough memory while importing." ;
	};
    String SCERR_IMPORT_UNKNOWN_WK & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Unknown Lotus1-2-3 file format." ;
	};
    String SCERR_IMPORT_FORMAT & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Error in file structure while importing." ;
	};
    String SCERR_IMPORT_NI & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "There is no filter available for this file type." ;
	};
    String SCERR_IMPORT_UNKNOWN_BIFF & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Unknown or unsupported Excel file format." ;
	};
    String SCERR_IMPORT_NI_BIFF & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Excel file format not yet implemented." ;
	};
    String SCERR_IMPORT_FILEPASSWD & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "This file is password-protected." ;
	};
    String SCERR_IMPORT_INTERNAL & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Internal import error." ;
	};
    String SCERR_IMPORT_8K_LIMIT & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The file contains data after row 8192 and therefore can not be read." ;
	};
    String SCERR_IMPORT_FILE_ROWCOL & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Format error discovered in the file in sub-document $(ARG1) at $(ARG2)(row,col).";
	};
    String SCERR_IMPORT_FORMAT_ROWCOL & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "File format error found at $(ARG1)(row,col)." ;
	};

	 // Export ----------------------------------------------------
    String SCERR_EXPORT_CONNECT & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Connection to the file could not be established." ;
	};
    String SCERR_EXPORT_DATA & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Data could not be written." ;
	};
    String SCERR_EXPORT_SQLEXCEPTION & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "$(ARG1)" ;
	};
    String SCERR_EXPORT_ENCODING & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Cell $(ARG1) contains characters that are not representable in the selected target character set \"$(ARG2)\"." ;
	};
    String SCERR_EXPORT_FIELDWIDTH & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Cell $(ARG1) contains a string that is longer in the selected target character set \"$(ARG2)\" than the given field width." ;
	};
	 //------------------------------------------------------------
	 // WARNINGS ---------------------------------------------------
	 //------------------------------------------------------------
    String SCWARN_EXPORT_ASCII & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Only the active sheet was saved." ;
	};
    String SCWARN_IMPORT_RANGE_OVERFLOW & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The maximum number of rows has been exceeded. Excess rows were not imported!" ;
	};
    String SCWARN_IMPORT_ROW_OVERFLOW & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded." ;
	};
    String SCWARN_IMPORT_COLUMN_OVERFLOW & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded." ;
	};
    String SCWARN_IMPORT_SHEET_OVERFLOW & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded." ;
	};
    String SCWARN_IMPORT_OPEN_FM3 & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Corresponding FM3-File could not be opened." ;
	};
    String SCWARN_IMPORT_WRONG_FM3 & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Error in file structure of corresponding FM3-File." ;
	};
    String SCWARN_CORE_HARD_RECALC & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Document too complex for automatic calculation. Press F9 to recalculate." ;
	};
    String SCWARN_EXPORT_MAXROW & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The document contains more rows than supported in the selected format.\nAdditional rows were not saved." ;
	};
    String SCWARN_IMPORT_INFOLOST & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "The document contains information not recognized by this program version.\nResaving the document will delete this information!" ;
	};
    String SCWARN_EXPORT_DATALOST & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Not all cell contents could be saved in the specified format." ;
	};
    String SCWARN_EXPORT_NONCONVERTIBLE_CHARS & ERRCODE_RES_MASK
	{
        Text [ en-US ] = "The following characters could not be converted to the selected character set\nand were written as &#1234; surrogates:\n\n$(ARG1)";
	};
    String SCWARN_IMPORT_FILE_ROWCOL & ERRCODE_RES_MASK
	{
		Text [ en-US ] = "Format error discovered in the file in sub-document $(ARG1) at $(ARG2)(row,col).";
	};
    String SCWARN_IMPORT_FEATURES_LOST & ERRCODE_RES_MASK
    {
        Text [ en-US] = "Not all attributes could be read." ;
    };
};

