/xx/java/java.txt 0.0.0               UTF-8                      2015-01-27

                          JAVA AND APACHE OPENOFFICE
                          ==========================

                   ENGLISH LANGUAGE BASE LOCALIZATION MATERIALS
                   --------------------------------------------

    The folder OpenOffice.org/xx/java/ provides the web content for
    the main OpenOffice.org/java/ folder.  It is the base from which
    the localized versions are prepared.  Different localizations
    can be found through links on the web.  Exception messages in the
    Apache OpenOffice software also refer to the main or localized
    Java information depending on the language being used in the
    AOO interface.

    This text document is a place for description of how the folder
    is maintained, how it is localized, and for capture of work items
    in one place near the material itself.  It is not intended for
    linking from anywhere in the site content.

    The current upgrade and localization of the Java information and
    messages in the software is proposed to happen in several stages.

STAGING

 1. INITIAL CONTENT PAGES FOR UPDATED EXPLANATION OF JAVA DEPENDENCY

    * A provisional index.html is completed.
    * The xx/java/ content is made the /java/ content for confirmation
      that both accesses work properly.  (No linking from other pages
      happens yet.
    * Screen capture images in the content will demonstrate the current
      messages and not the new ones.
    * The SVN trunk/main message titles and message texts are updated to
      refer to /java or xx/java as appropriate.
    * Review for suitability is conducted before there is any investment
      in localization.

 2. AVAILABILITY AND LOCALIZATION

    * Any time after localization starts on the web site, the page at
      /download/common/java.html can be redirected to /java/.  Previous links
      about the Java integration can be changed to refer to /java/.
    * Localization of xx/java/ to yy/java/ can proceed.
    * For a localized folder the images from xx/java/ can be taken over
      first and replaced by images of yy-localized UI as needed.
    * As localization happens on the web pages, the changed message titles and
      message text for the product can also be changed, The "Details" link
      can be changed from http://openoffice.org/java/ to
      http://openoffice.org/yy/java/.

 3. ALIGNMENT WITH NEW MESSAGES

    * When there are builds using the new titles and messages, some might
      be replaced in some of the examples OR some might be added to the
      example messages where it would be helpful to preserve the older forms
      for those who will continue operating older versions of Apache
      OpenOffice.



 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      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.

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 TODO

  * Confirm having images here that are meant to be part of the localizable
    material and replaced with ones that match the localized software
    messages and link to the localized Java information.

  * Find out whether message numbers can be included in the messages so that
    the messages can be identified in testing and troubleshooting and it
    doesn't matter which localization is being observed or captured in a
    screen shot.

  * Find out the fewest places where the "Details http:openoffice.org/java"
    addition can be placed in messages so that it shows up but not repeatedly
    in how the software combines messages together into one presentation.

  * Sketch the staging in a way where it is whittled away as the stages are
    carried out, and replaced by maintenance information.

  * Is a README.txt required or can it all be done in this one text file?

  * The localized pages that are on the current site are served up with the
    default language being English.  That apparently impedes browsers
    identifying the language correctly and it does not assist in-browser
    text translation services.  It will also help with Internet searching.
        o Add the correct content-language coding to the header of the
          index.html here.
        o Verify that it passes through to browsers correctly.
        o Ensure that localization touches that metadata information for
          the page.
        o Make a bugzilla issue about this?

  * Use identification against the bugzilla issue for this work and for the
    the messages in the code.  Maybe two different issues.

  * Add an outline of what is to be covered in the updated index.html, with
    possibly with any drill-down in linked-to pages within the folder when
    needed.


VERSION

 0.0.0 2015-01-27T22:35Z Create initial placeholder to start an account
       and TODO items for updating of the java information folder.  Add
       explicit versioning so folks can easily tell they've seen the latest
       without having access to the SVN and knowing how to check histories.

                       *** end of java.txt ***