/**************************************************************
 *
 * 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 "minimizer.hrc"

Bitmap IMAGE_MINIMIZER_ROADMAP
{
	File = "minimizer/minimizepresi_80.png" ;
};

Bitmap IMAGE_MINIMIZER_ROADMAP_HC
{
	File = "minimizer/minimizepresi_80_h.png" ;
};

String STR_PRESENTATION_MINIMIZER
{
	Text [ en-US ] = "Presentation Minimizer" ;
};

String STR_INFO_DIALOG
{
	Text [ en-US ] = "Presentation Minimizer - Result" ;
};

String STR_STEPS
{
	Text [ en-US ] = "Steps" ;
};

String STR_HELP
{
	Text [ en-US ] = "~Help" ;
};

String STR_BACK
{
	Text [ en-US ] = "< ~Back" ;
};

String STR_NEXT
{
	Text [ en-US ] = "~Next >" ;
};

String STR_FINISH
{
	Text [ en-US ] = "~Finish" ;
};

String STR_CANCEL
{
	Text [ en-US ] = "Cancel" ;
};

String STR_INTRODUCTION
{
	Text [ en-US ] = "Introduction" ;
};

String STR_INTRODUCTION_T
{
	Text [ en-US ] = "The Presentation Minimizer is used to reduce the "
		"file size of the current presentation. Images will be compressed and "
		"data, that is no longer needed, will be removed.\n"
		"At the last step of the wizard you can choose to apply the changes "
		"to the current presentation or to create an optimized new version of "
		"the presentation." ;
};

String STR_CHOOSE_SETTINGS
{
	Text [ en-US ] = "~Choose settings for Presentation Minimizer" ;
};

String STR_REMOVE
{
	Text [ en-US ] = "~Delete" ;
};

String STR_GRAPHIC_OPTIMIZATION
{
	Text [ en-US ] = "Choose settings for optimizing pictures and graphics" ;
};

String STR_IMAGE_OPTIMIZATION
{
	Text [ en-US ] = "Graphics" ;
};

String STR_LOSSLESS_COMPRESSION
{
	Text [ en-US ] = "~Lossless compression" ;
};

String STR_JPEG_COMPRESSION
{
	Text [ en-US ] = "~JPEG compression" ;
};

String STR_QUALITY
{
	Text [ en-US ] = "~Quality in %" ;
};

String STR_REMOVE_CROP_AREA
{
	Text [ en-US ] = "~Delete cropped graphic areas" ;
};

String STR_IMAGE_RESOLUTION
{
	Text [ en-US ] = "Reduce ~image resolution" ;
};

String STR_IMAGE_RESOLUTION_0
{
	Text [ en-US ] = "<no change>" ;
};

String STR_IMAGE_RESOLUTION_1
{
	Text [ en-US ] = "90;90 DPI (screen resolution)" ;
};

String STR_IMAGE_RESOLUTION_2
{
	Text [ en-US ] = "150;150 DPI (projector resolution)" ;
};

String STR_IMAGE_RESOLUTION_3
{
	Text [ en-US ] = "300;300 DPI (print resolution)" ;
};

String STR_EMBED_LINKED_GRAPHICS
{
	Text [ en-US ] = "~Break links to external graphics" ;
};

String STR_OLE_OBJECTS
{
	Text [ en-US ] = "OLE Objects" ;
};

String STR_OLE_OPTIMIZATION
{
	Text [ en-US ] = "Choose settings for replacing OLE objects" ;
};

String STR_OLE_REPLACE
{
	Text [ en-US ] = "Create static replacement graphics for OLE objects" ;
};

String STR_ALL_OLE_OBJECTS
{
	Text [ en-US ] = "For ~all OLE objects" ;
};

String STR_ALIEN_OLE_OBJECTS_ONLY
{
	Text [ en-US ] = "~For OLE objects not based on OpenDocument format" ;
};

String STR_OLE_OBJECTS_DESC
{
	Text [ en-US ] = "Object Linking and Embedding (OLE) is a technology that "
		"allows embedding and linking to documents and other objects.\n"
		"The current presentation contains OLE objects." ;
};

String STR_NO_OLE_OBJECTS_DESC
{
	Text [ en-US ] = "Object Linking and Embedding (OLE) is a technology that "
		"allows embedding and linking to documents and other objects.\n"
		"The current presentation contains no OLE objects." ;
};

String STR_SLIDES
{
	Text [ en-US ] = "Slides" ;
};

String STR_CHOOSE_SLIDES
{
	Text [ en-US ] = "Choose which slides to delete" ;
};

String STR_MASTER_PAGES
{
	Text [ en-US ] = "Master Pages" ;
};

String STR_DELETE_MASTER_PAGES
{
	Text [ en-US ] = "Delete unused ~master pages" ;
};

String STR_DELETE_NOTES_PAGES
{
	Text [ en-US ] = "~Clear notes" ;
};

String STR_DELETE_HIDDEN_SLIDES
{
	Text [ en-US ] = "Delete hidden ~slides" ;
};

String STR_CUSTOM_SHOW
{
	Text [ en-US ] = "Delete slides that are not used for the ~custom slide show" ;
};

String STR_SUMMARY
{
	Text [ en-US ] = "Summary" ;
};

String STR_SUMMARY_TITLE
{
	Text [ en-US ] = "Choose where to apply the following changes" ;
};

String STR_PROGRESS
{
	Text [ en-US ] = "Progress" ;
};

String STR_OBJECTS_OPTIMIZED
{
	Text [ en-US ] = "Objects optimized" ;
};

String STR_APPLY_TO_CURRENT
{
	Text [ en-US ] = "~Apply changes to current presentation" ;
};

String STR_AUTOMATICALLY_OPEN
{
	Text [ en-US ] = "~Open newly created presentation" ;
};

String STR_SAVE_SETTINGS
{
	Text [ en-US ] = "~Save settings as" ;
};

String STR_SAVE_AS
{
	Text [ en-US ] = "~Duplicate presentation before applying changes" ;
};

String STR_DELETE_SLIDES
{
	Text [ en-US ] = "Delete %SLIDES slides." ;
};

String STR_OPTIMIZE_IMAGES
{
	Text [ en-US ] = "Optimize %IMAGES graphics to %QUALITY% JPEG quality at %RESOLUTION DPI." ;
};

String STR_CREATE_REPLACEMENT
{
	Text [ en-US ] = "Create replacement graphics for %OLE objects." ;
};

String STR_CURRENT_FILESIZE
{
	Text [ en-US ] = "Current file size:" ;
};

String STR_ESTIMATED_FILESIZE
{
	Text [ en-US ] = "Estimated new file size:" ;
};

String STR_MB
{
	Text [ en-US ] = "%1 MB" ;
};

String STR_MY_SETTINGS
{
	Text [ en-US ] = "My Settings " ;
};

String STR_DEFAULT_SESSION
{
	Text [ en-US ] = "default session" ;
};

String STR_MODIFY_WARNING
{
	Text [ en-US ] = "The optimization will modify the current document. Do you want to continue?" ;
};

String STR_YES
{
	Text [ en-US ] = "~Yes" ;
};

String STR_OK
{
	Text [ en-US ] = "OK" ;
};

String STR_INFO_1
{
	Text [ en-US ] = "The Presentation Minimizer has successfully updated the "
		"presentation '%TITLE'. The file size has changed "
		"from %OLDFILESIZE MB to %NEWFILESIZE MB." ;
};

String STR_INFO_2
{
	Text [ en-US ] = "The Presentation Minimizer has successfully updated the "
		"presentation '%TITLE'. The file size has changed "
		"from %OLDFILESIZE MB to approximated %NEWFILESIZE MB." ;
};

String STR_INFO_3
{
	Text [ en-US ] = "The Presentation Minimizer has successfully updated the "
		"presentation '%TITLE'. The file size has changed to %NEWFILESIZE MB." ;
};

String STR_INFO_4
{
	Text [ en-US ] = "The Presentation Minimizer has successfully updated the "
		"presentation '%TITLE'. "
		"The file size has changed to approximated %NEWFILESIZE MB." ;
};

String STR_DUPLICATING_PRESENTATION
{
	Text [ en-US ] = "Duplicating presentation..." ;
};

String STR_DELETING_SLIDES
{
	Text [ en-US ] = "Deleting slides..." ;
};

String STR_OPTIMIZING_GRAPHICS
{
	Text [ en-US ] = "Optimizing graphics..." ;
};

String STR_CREATING_OLE_REPLACEMENTS
{
	Text [ en-US ] = "Creating replacement graphics for OLE objects..." ;
};

String STR_FILESIZESEPARATOR
{
	Text [ en-US ] = "." ;
};

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