<?xml version="1.0"?>
<!--
 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.
-->
<document>
  <properties>
    <title>Fulcrum Localization</title>
    <author email="epugh@upstate.com">Eric Pugh</author>
  </properties>

  <body>
    <release version="1.0.8" date="in SVN">
    </release>
    <release version="1.0.7" date="2019-01-23">
	  <action dev="painter" type="update">
        Moved changes.xml location for inclusion in report generation
      </action>
      <action dev="painter" type="update">
        Update to Java 8
      </action>
      <action dev="painter" type="update">
        Added commons-lang3
      </action>
      <action dev="painter" type="update">
        Update unit tests to BaseUnit5Test
      </action>
      <action dev="painter" type="update">
        Update to yaafi-1.0.8 and testcontainer 1.0.8
      </action>    
    </release>
    <release version="1.0.6" date="2009-06-18">
      <action dev="tv" type="add">
        Added a Maven-2 build.
      </action>
      <action dev="tv" type="add">
        Split the service into a simple one that does not depend on servlet-api
        and an extended one that does. This allows to use the service in non-web
        environments without hassles.
      </action>
      <action dev="epugh" type="update" due-to="Kostyantyn Shchekotykhin">
        Fix unit tests to run properly in non US english environments.
      </action>
    </release>
    <release version="1.0.5" date="2004-11-24">
      <action dev="epugh" type="update" due-to="Kostyantyn Shchekotykhin">
        Merge api and impl jars into one project.
      </action>
      <action dev="epugh" type="remove">
        Remove Localization, it was a facade that shouldn't be here.
        Facade's of this nature are specific to the user...
      </action>
      <action dev="epugh" type="update">
        Tweak dependencies to build under gump.
      </action>
      <action dev="epugh" type="update">
        Bump versions, clean up dependencies
      </action>
    </release>
    <release version="1.0.4" date="">
      <action dev="epugh" type="update">
        Use inherited getLogger() instead of Log in classes
        extending AbstractLogEnabled.
      </action>
      <action dev="epugh" type="update">
        Update to use Merlin 3.3.0
      </action>
      <action dev="epugh" type="add">
                Merlinized code with input from Stephen
      </action>
    </release>
    <release version="1.0-alpha-3" date="">
      <action dev="epugh" type="add">
        New Localization class that is a facade to the underlying service.
      </action>
    </release>

  </body>
</document>

