<!--

    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.

-->

<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<BODY>
Creates a resource bundle (.properties) file suitable for
internationalizing applications by separating out all human-visible
text strings from your code. Resource bundle files can also be used
to collect other types of strings, such as properties for Ant scripts.
The created resource bundle contains only one locale, but you can add
additional locales from the created file's contextual menu. The bundle
can be edited in a text file (property-file format) for a specific locale or in a table that displays
information for all locales.
</BODY></HTML>
