# MessagesBundle.properties -- English language messages
# Copyright (C) 2004, 2006  Free Software Foundation, Inc.
#
# This file is part of GNU Classpath.
#
# GNU Classpath is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# GNU Classpath is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Classpath; see the file COPYING.  If not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA.
#
# Linking this library statically or dynamically with other modules is
# making a combined work based on this library.  Thus, the terms and
# conditions of the GNU General Public License cover the whole
# combination.
#
# As a special exception, the copyright holders of this library give you
# permission to link this library with independent modules to produce an
# executable, regardless of the license terms of these independent
# modules, and to copy and distribute the resulting executable under
# terms of your choice, provided that you also meet, for each linked
# independent module, the terms and conditions of the license of that
# module.  An independent module is a module which is not derived from
# or based on this library.  If you modify this library, you may extend
# this exception to your version of the library, but you are not
# obligated to do so.  If you do not wish to do so, delete this
# exception statement from your version.

gcjwebplugin.code_description=specify the code attribute
gcjwebplugin.codebase_description=specify the codebase attribute
gcjwebplugin.archive_description=specify the archive attribute
gcjwebplugin.width_description=specify the width attribute
gcjwebplugin.height_description=specify the height attribute
gcjwebplugin.param_description=specify the parameter arguments
gcjwebplugin.plugin_description=enable plugin mode
gcjwebplugin.verbose_description=enable verbose mode
gcjwebplugin.debug_description=enable debugging mode (not implemented)
gcjwebplugin.encoding_description=specify the HTML character encoding

gcjwebplugin.no_input_files=appletviewer: no input files

gcjwebplugin.menu_title=Applet
gcjwebplugin.menu_reload=Reload
gcjwebplugin.menu_restart=Restart
gcjwebplugin.menu_start=Start
gcjwebplugin.menu_stop=Stop
gcjwebplugin.menu_clone=Clone ...
gcjwebplugin.menu_quit=Quit
gcjwebplugin.menu_close=Close
gcjwebplugin.menu_tag=Tag ...
gcjwebplugin.menu_info=Info ...
gcjwebplugin.menu_edit=Edit
gcjwebplugin.menu_encoding=Character Encoding
gcjwebplugin.menu_print=Print ...
gcjwebplugin.menu_properties=Properties ...
gcjwebplugin.menu_cancel=Cancel
gcjwebplugin.menu_save=Save ...

gcjwebplugin.console_title=GCJ web plugin console
gcjwebplugin.console_clear=Clear
gcjwebplugin.console_hide=Hide
