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

WarningBox WARNINGBOX_JAVANOTFOUND
{
	Buttons = WB_OK ;
	DefButton = WB_DEF_OK ;
	Message [ en-US ] ="%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task. Please install a JRE and restart %PRODUCTNAME." ;
};

WarningBox WARNINGBOX_INVALIDJAVASETTINGS
{
	Buttons = WB_OK ;
	DefButton = WB_DEF_OK ;
	Message [ en-US ] ="The %PRODUCTNAME configuration has been changed. Under Tools - Options - %PRODUCTNAME - Java, select the Java runtime environment you want to have used by %PRODUCTNAME." ;
};

QueryBox QBX_JAVADISABLED
{
	Buttons = WB_YES_NO_CANCEL ;
	DefButton = WB_DEF_YES ;
	Message [ en-US ] = "%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task. However, use of a JRE has been disabled. Do you want to enable the use of a JRE now?" ;
};

ErrorBox ERRORBOX_JVMCREATIONFAILED
{
	Buttons = WB_OK ;
	DefButton = WB_DEF_OK ;
	Message [ en-US ] = "%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task. The selected JRE is defective. Please select another version or install a new JRE and select it under Tools - Options - %PRODUCTNAME - Java." ;
};

ErrorBox ERRORBOX_RESTARTREQUIRED
{
	Buttons = WB_OK ;
	DefButton = WB_DEF_OK ;
	Message [ en-US ] = "For the selected Java runtime environment to work properly, %PRODUCTNAME must be restarted. Please restart %PRODUCTNAME now." ;
};


String STR_WARNING_JAVANOTFOUND
{
	Text [ en-US ] = "JRE Required" ;
};

String STR_WARNING_INVALIDJAVASETTINGS
{
	Text [ en-US ] = "Select JRE" ;
};

String STR_ERROR_RESTARTREQUIRED
{
	Text [ en-US ] = "Restart Required" ;
};

String STR_QUESTION_JAVADISABLED
{
	Text [ en-US ] = "Enable JRE" ;
};


String STR_ERROR_JVMCREATIONFAILED
{
	Text [ en-US ] = "JRE is Defective" ;
};

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