/**************************************************************
 *
 * 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 <svx/svxids.hrc>
#include <svx/globlmn.hrc>
#include "toolbox.hrc"
#include "helpid.h"
InfoBox MSG_NO_RULER
{
	BUTTONS = WB_OK ;
	DEFBUTTON = WB_DEF_OK ;
	Message [ en-US ] = "There are no bitmaps in the Gallery theme 'Rulers'." ;
};
String STR_GRFILTER_OPENERROR
{
	Text [ en-US ] = "Graphics file cannot be opened" ;
};
String STR_GRFILTER_IOERROR
{
	Text [ en-US ] = "Graphics file cannot be read" ;
};
String STR_GRFILTER_FORMATERROR
{
	Text [ en-US ] = "Unknown graphic format" ;
};
String STR_GRFILTER_VERSIONERROR
{
	Text [ en-US ] = "This graphic file version is not supported" ;
};
String STR_GRFILTER_FILTERERROR
{
	Text [ en-US ] = "Graphics filter not found" ;
};
String STR_GRFILTER_TOOBIG
{
	Text [ en-US ] = "Not enough memory to insert the picture." ;
};
String STR_INSERT_GRAPHIC
{
	Text [ en-US ] = "Insert picture" ;
};
String STR_NO_ADDRESSBOOK
{
	Text [ en-US ] = "An Address Book does not exist" ;
};
String STR_NOTIZ_INSERT
{
	Text [ en-US ] = "Insert Note" ;
};
String STR_REDLINE_COMMENT
{
	Text [ en-US ] = "Comment: " ;
};
String STR_REDLINE_INSERTED
{
	Text [ en-US ] = "Insertion" ;
};
String STR_REDLINE_DELETED
{
	Text [ en-US ] = "Deletion" ;
};
String STR_REDLINE_AUTOFMT
{
	Text [ en-US ] = "AutoCorrect" ;
};
String STR_REDLINE_FORMATED
{
	Text [ en-US ] = "Formats" ;
};
String STR_REDLINE_TABLECHG
{
	Text [ en-US ] = "Table Changes" ;
};
String STR_REDLINE_FMTCOLLSET
{
	Text [ en-US ] = "Applied Paragraph Styles" ;
};
String STR_REDLINE_TITLE
{
	Text [ en-US ] = "AutoCorrect" ;
};
String STR_REDLINE_MSG
{
	Text [ en-US ] = "AutoCorrect completed.\nYou can accept or reject all changes,\nor accept or reject particular changes." ;
};
String STR_REDLINE_ACCEPT_ALL
{
	Text [ en-US ] = "Accept All" ;
};
String STR_REDLINE_REJECT_ALL
{
	Text [ en-US ] = "Reject All" ;
};
String STR_REDLINE_EDIT
{
	Text [ en-US ] = "Edit Changes" ;
};
QueryBox DLG_IMPORT_DBNAME
{
	BUTTONS = WB_YES_NO ;
	DEFBUTTON = WB_DEF_NO ;
	Message [ en-US ] = "Use database name as default database for the document?" ;
};
String STR_PAGE
{
	Text [ en-US ] = "Page " ;
};
String RID_TEXT_TOOLBOX
{
	Text [ en-US ] = "Text Object Bar" ;
};
String RID_TABLE_TOOLBOX
{
	Text [ en-US ] = "Table Object Bar" ;
};
String RID_FRAME_TOOLBOX
{
	Text [ en-US ] = "Frame Object Bar" ;
};
String RID_GRAFIK_TOOLBOX
{
	Text [ en-US ] = "Graphics Object Bar" ;
};
String RID_OLE_TOOLBOX
{
	Text [ en-US ] = "Object" ;
};
String RID_DRAW_TOOLBOX
{
	Text [ en-US ] = "Draw Object Bar" ;
};
String RID_BEZIER_TOOLBOX
{
	Text [ en-US ] = "Bézier Object Bar" ;
};
String RID_DRAW_TEXT_TOOLBOX
{
    Text [ en-US ] = "Text Object Bar/Graphics" ;
};
String RID_NUM_TOOLBOX
{
	Text [ en-US ] = "Numbering Object Bar" ;
};
String STR_SHELLNAME_TEXT
{
	Text [ en-US ] = "Text" ;
};
String STR_SHELLNAME_TABLE
{
	Text [ en-US ] = "Table" ;
};
String STR_SHELLNAME_FRAME
{
	Text [ en-US ] = "Frame" ;
};
String STR_SHELLNAME_GRAPHIC
{
	Text [ en-US ] = "Graphics" ;
};
String STR_SHELLNAME_OBJECT
{
	Text [ en-US ] = "Object" ;
};
String STR_SHELLNAME_LIST
{
	Text [ en-US ] = "List" ;
};
String STR_SHELLNAME_DRAW
{
	Text [ en-US ] = "Drawing" ;
};
String STR_SHELLNAME_DRAWFORM
{
	Text [ en-US ] = "Forms" ;
};
String STR_SHELLNAME_BEZIER
{
	Text [ en-US ] = "Bézier" ;
};
String STR_SHELLNAME_DRAW_TEXT
{
	Text [ en-US ] = "Draw text" ;
};
// Strings for Gallery/Background
String STR_SWBG_PARAGRAPH
{
	Text [ en-US ] = "Paragraph" ;
};
String STR_SWBG_GRAPHIC
{
	Text [ en-US ] = "Graphics" ;
};
String STR_SWBG_OLE
{
	Text [ en-US ] = "OLE object" ;
};
String STR_SWBG_FRAME
{
	Text [ en-US ] = "Frame" ;
};
String STR_SWBG_TABLE
{
	Text [ en-US ] = "Table" ;
};
String STR_SWBG_TABLE_ROW
{
	Text [ en-US ] = "Table row" ;
};
String STR_SWBG_TABLE_CELL
{
	Text [ en-US ] = "Table cell" ;
};
String STR_SWBG_PAGE
{
	Text [ en-US ] = "Page" ;
};
String STR_SWBG_HEADER
{
	Text [ en-US ] = "Header" ;
};
String STR_SWBG_FOOTER
{
	Text [ en-US ] = "Footer" ;
};
// End: Strings for Gallery/Background

// #i68101# no longer needed:
// String STR_NAME_SHAPE_LABEL {// String STR_NAME_SHAPE_DIALOG { Text [ de ] = "Objekt benennen" ; Text [ en-US ] = "Name Object" ; };

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