=====================================
Welcome to the new Pootle 2.7.0 final
=====================================

*Released on 4 August 2015*

This is the first release of Pootle that combines the work of Evernote and
Translate.

Changes in Requirements
=======================
- Django >= 1.7, < 1.8
- `Translate Toolkit <http://toolkit.translatehouse.org/download.html>`_ >=
  1.13.0
- Python >= 2.7, < 3.0
- Redis >= 2.8
- Unix-based operating system.


Major Changes
=============

- Switched license from GPLv2 to GPLv3.
- The `Evernote Pootle fork <https://github.com/evernote/>`_ and Translate
  Pootle are now merged into the same code base and are being actively
  developed together.
- Major UI revamp - browsing pages are consistent across all views.  Navigation
  is now much easier, more consistent and more powerful.  The editor is cleaner
  and works to prevent errors early.
- Backgrounding statistics calculations - so Pootle and its users are never
  bogged down or delayed by real time stats calculations.  Instead these are
  backgrounded and updated when available.
- A number of features have been :ref:`removed <270-removed-features>` and will
  be recovered in future releases.


Below we provide much more detail.  These are by no means exhaustive, view the
`git log
<https://github.com/translate/pootle/compare/stable%2F2.5.1...master>`_ for
complete information.

Details of changes
==================

Major user interface revamp
---------------------------

Browsing
~~~~~~~~

- Pootle browsing pages now have a single column and wide stats table that shows
  the same data in the different views. This create a consistent look while
  browsing through languages and projects.
- No home page. Users are redirected to their preferred language pages
  instead, falling back to the project listings page.
- Critical errors and pending suggestions are prominently displayed on the
  browsing page and not hidden.
- New navigation scheme:

  + All directories/files for a project are displayed in a new drop-down.
  + Directories/files can be navigated and translated across multiple languages
    in a project.
  + Tabs have been replaced in favor of drop-down menus.
  + The editor search box is now displayed in the action links section, keeping
    its positioning consistent with the browsing page.
  + A new action link in the editor, *Go back to browsing*, allows users to go
    back to the same place they entered translation mode from.

- When there are failing checks, browsing tables now display the number of
  units which have failing checks, not the total number of failing checks.
- Table sorting is now remembered across browsing pages, and not separately in
  project, language and translation project pages.
- User actionable items in the navbar have been moved to a drop-down.
- When selecting languages, redirect logic is now smarter.
- Different last activity messages for new translations and edits.
- Filters allow sorting units according to their last action date.
- Implemented project specific announcements in a sidebar.  These make use of
  static pages. Notifications are per-project and are displayed across
  languages (automatically adapting any hyperlinks).
- Announcements for language and translation project have been also
  implemented.
- Major speed improvements when calculating last action information.


Editor
~~~~~~

- New features:

  - Added context search URL prefix for projects, which allow integrating
    screenshots for units. This is the ability to provide a search URL (link to
    a search engine) where to look up the text of the current unit in.
  - Translation similarities are calculated in the client and sent to the
    server to calculate the user's score. The score changes are logged over
    time. Along with this, the best matches are highlighted in the editor.

- Navigation:

  - The editor now displays the numbering for units, not pages.
  - When going through all units in the translation editor, users will be
    automatically redirected back to browsing.
  - If the currently-submitted unit has failing checks then the editor won't
    advance to the next unit and it will be updated displaying the unresolved
    checks. The same behavior applies when a suggestion is accepted.
  - The *Submit*/*Suggest* button is disabled until a change, over the initial
    state of the unit, is detected.

- Checks:

  - Quality checks are always displayed and can be individually muted/unmuted.
  - When a users mutes or unmutes a quality check, the action will be recorded
    in the unit's timeline.
  - A custom set of new quality checks has been incorporated. It is still
    possible to instead use the old quality checks.
  - It is possible filter the strings using the checks categories.

- Usability improvements and other fixes:

  - Location comments are always displayed, providing a shortcut link to
    display the same source unit across languages.
  - The same string can't be suggested more than once at the same time,
    avoiding duplicated suggestions pending review.
  - TM diffs now display what has been removed and what's being added.
  - Latest translator comments can be "removed" or, in other words, can be
    blanked. The action is recorded in the timeline.


Users
~~~~~

- New welcome page for anonymous users, which displays the top scorers over the
  last 30 days.
- User score is displayed in the header and dynamically updated when
  translation actions are made.
- Revamped user profile pages. These now display user's latest activity and
  their personal properties.


Miscellaneous
~~~~~~~~~~~~~

- Rewritten contact form. It used to both contact the site owners from any page
  as well as to report any issues with strings.
- Support for old web browsers has been dropped, despite this change Pootle
  might work on such browsers. More information on Pootle's :ref:`supported
  browsers <browsers>`.
- Several layout improvements that take into account different screen sizes.
- Implemented export view for cross-language and cross-project views.
- Implemented global search. This allows to perform searches and edit units in
  collections that span multiple projects across languages, multiple languages
  across projects, or even the whole server.
- Timeline tracks all changes done to units.
- Uploads and downloads have been changed slightly.  There are no options to
  overwrite or suggest.  Your files will be accepted if no changes have been
  made online while you you translated offline.  If changes were made while
  offline then the upload will be rejected.  In such case download a the file
  again, use your offline tools or TM to retranslate and try another upload.
- Added the initial implementation of virtual folders. This feature is meant to
  replace the now gone goals.


Statistics calculations
-----------------------

- Statistics handling has received a major rewrite (in fact 3 rewrites). `RQ
  <http://python-rq.org/>`_ is used to queue and manage the calculation of
  invalidated statistics.  On the frontend, stats are now loaded
  asynchronously, thus any pending calculations no longer block page loads.
  This results in a major usability improvement for Pootle users.
- :setting:`POOTLE_WORDCOUNT_FUNC` allows a custom word counting method to
  be used.
- A new counter ``pootle.core.utils.wordcount.wordcount`` has been incorporated
  (it omits placeholders and words that shouldn't be translated). Non-empty
  units with 0 words are immediately translated and marked as fuzzy.
- Browsing pages now report the last time a unit was added to a store/project.
  In the browsing tables a *Last Updated* column is displayed and in the
  extended stats *Created* and *Last Updated* dates.
- Statistics are also available for the *All Projects* view.


Administrators
--------------

- Only admins can set the fuzzy flag on the unit. Non-admin users are not shown
  the fuzzy checkbox by default, but in case it's displayed (because the unit
  was already fuzzy, or some other action turned it fuzzy, such as using MT),
  they are always forced to clear the flag.
- Projects can be disabled from the administration page, allowing them to
  be hidden temporarily while retaining statistics.
- The ``view`` permission is now project-centric, it can be set server-wide or
  for projects, but not for individual language-project combinations.


Sysadmins
---------

- Direct upgrade is now only possible from 2.6.0.  Thus to upgrade from older
  releases first upgrade to 2.6.0
- The ability to deploy using Fabric has been dropped. We advise to use the
  recommended upgrade and install instructions in the documentation.
- Redis is now required for all caching, memcached and other alternatives will
  not work.
- Exports no longer work if they are directly served by the web server. Apache
  users can refer to :ref:`Apache and mod_wsgi <apache#mod_wsgi>` for a
  suggested configuration.
- Registration and authentication is now handled by `django-allauth
  <https://readthedocs.org/projects/django-allauth/>`_.  gives Pootle
  implicit support for OpenID, OAuth, OAuth2 and Persona sign-in
  protocols. Check out the :ref:`documentation on users auth <auth>` for
  further details.
- Integrated ElasticSearch-based local TM server into Pootle. Unit submissions
  update the index instantly.  To configure adjust :setting:`POOTLE_TM_SERVER`
  and to load the TM use the :djadmin:`update_tmserver` management command.
- The report target for reporting string errors has been dropped in favor of a
  report email address. The report is now sent using an automatically
  pre-filled  contact form. If the project doesn't have a report email then the
  reports are sent to :setting:`POOTLE_CONTACT_REPORT_EMAIL`.
- Using the Django :djadmin:`dumpdata` and :djadmin:`loaddata` commands to move
  between databases is no longer supported.  If you need to move, please use
  proper SQL scripts instead.
- Captcha implementation details have been refined.
- Yandex.Translate is now available as a Machine Translation backend.
- :setting:`POOTLE_QUALITY_CHECKER` can be used to point to a custom
  quality check handler.
- Xapian and Lucene are no longer required for searching and Pootle will not
  make use of them.  You can safely remove supporting libraries and packages if
  these services were used only for Pootle.
- :setting:`POOTLE_REPORTS_MARK_FUNC` allows a site wide function to provide
  marks to user graphs.
- Pootle no longer runs on Windows.  Pootle uses RQ which makes use of
  ``fork()`` therefore Pootle will only run on systems that implement
  ``fork()``.  Importantly that means that Pootle is no longer supported on
  Windows.  It would be possible to run Pootle on Windows if the rqworkers are
  run on a system that supports ``fork()``.


Command changes and additions
-----------------------------

- Improved the way :djadmin:`update_stores` inserts and deletes units in the
  store (:issue:`3802`).
- In :djadmin:`update_stores` if a directory doesn't exist while running the
  command, the project will be disabled. Thus the
  ``update_translation_projects`` command has been removed, it's functionality
  has been merged into :djadmin:`update_stores` with this change.
- Added the :djadmin:`changed_languages` management command.
- Individual quality checks can now be recalculated via the :option:`--check`
  flag passed to the :djadmin:`refresh_stats` management command.
- Added :option:`--calculate-checks` parameter to the :djadmin:`refresh_stats`
  command.
- :djadmin:`refresh_stats_rq` was added to allow statistics to be refresh when
  running with multiple RQ workers.
- Added a new ``system`` user to attribute changes done by the management
  commands.
- Added command and store action logging.
- Added :djadmin:`test_checks` management command.
- Removed :option:`--directory` and :option:`--path-prefix` parameters from
  management commands. :option:`--project` and :option:`--language` should be
  used instead to reduce the scope of commands.
- Removed the :option:`--modified-since` flag. Optimizations will automatically
  be done based on the latest sync revision.
- New management commands: :djadmin:`revision`, :djadmin:`refresh_scores`,
  :djadmin:`retry_failed_jobs`, :djadmin:`import`, :djadmin:`export`,
  :djadmin:`dump` and :djadmin:`calculate_checks`.


Deprecated settings
-------------------

- All Pootle specific settings have been renamed and prefixed with ``POOTLE_``.
  The following settings are impacted and should be renamed accordingly in your
  settings file:

  - ``TITLE`` -> :setting:`POOTLE_TITLE`
  - ``CAN_CONTACT`` -> :setting:`POOTLE_CONTACT_ENABLED`
  - ``CAN_REGISTER`` -> :setting:`POOTLE_SIGNUP_ENABLED`
  - ``CONTACT_EMAIL`` -> :setting:`POOTLE_CONTACT_EMAIL`
  - ``PODIRECTORY`` -> :setting:`POOTLE_TRANSLATION_DIRECTORY`
  - ``MARKUP_FILTER`` -> :setting:`POOTLE_MARKUP_FILTER`
  - ``USE_CAPTCHA`` -> :setting:`POOTLE_CAPTCHA_ENABLED`
  - ``MT_BACKENDS`` -> :setting:`POOTLE_MT_BACKENDS`
  - ``POOTLE_CONTACT_REPORT_EMAIL`` -> :setting:`POOTLE_REPORT_STRING_ERRORS_EMAIL`
  - ``EXPORTED_FILE_MODE`` -> :setting:`POOTLE_SYNC_FILE_MODE`
  - ``OBJECT_CACHE_TIMEOUT`` -> :setting:`POOTLE_CACHE_TIMEOUT`
  - ``LEGALPAGE_NOCHECK_PREFIXES`` -> :setting:`POOTLE_LEGALPAGE_NOCHECK_PREFIXES`
  - ``CUSTOM_TEMPLATE_CONTEXT`` -> :setting:`POOTLE_CUSTOM_TEMPLATE_CONTEXT`

- :setting:`POOTLE_TOP_STATS_CACHE_TIMEOUT` has been removed with the old top
  stats rendering and is replaced by the new browsing UI.
- :setting:`VCS_DIRECTORY` is now deprecated as the integrated Version Control
  feature has been removed to come back at a later date.
- :setting:`CONTRIBUTORS_EXCLUDED_PROJECT_NAMES` and
  :setting:`CONTRIBUTORS_EXCLUDED_NAMES` have been removed along with the
  contributors' page.
- :setting:`DESCRIPTION` has been removed, use :doc:`static pages
  </features/staticpages>` instead.
- ``ENABLE_ALT_SRC`` has been removed
- ``MIN_AUTOTERMS`` has been removed
- ``MAX_AUTOTERMS`` has been removed
- ``FUZZY_MATCH_MAX_LENGTH`` has been removed
- ``FUZZY_MATCH_MIN_SIMILARITY`` has been removed
- ``EXPORTED_DIRECTORY_MODE`` has been removed


Internal changes
----------------

- Switched to a custom user model. This merges the data and functionality
  available in ``auth.User`` and ``PootleProfile`` before, and has allowed to
  remove the dependency on deprecated third party apps that were bundled in the
  code.
- The multiple ``Suggestion`` models have been merged into a single model.
- Changed the way units needing to be sync'ed to disk is determined. Units now
  have a unique revision number within the store they belong to and they'll be
  synchronized based on the ``last_sync_revision`` field of the store.
- Tests have been resurrected.
- Upgraded jQuery to 2.x and applied a bunch of fixes to the Tipsy plugin,
  avoiding ad-hoc hacks to remove dangling tips.
- Translation projects now have a ``creation_time`` field.
- Dropped code for several external apps from Pootle codebase. Also upgraded to
  newer versions of those apps.
- Fixed and avoided any inconsistencies in the unit's submitter information.
- URLs have been unified and all follow the same scheme. URLs ending in *.html*
  have been removed altogether. ``reverse()`` and ``{% url %}`` are used almost
  everywhere.
- All templates are gathered in a single location (*pootle/templates*),
  and have been reorganized and sorted.
- Targetting modern browsers has allowed some CSS prefixes to be removed.
- Ability to list top scorers over a period of time.



Infrastructure
--------------
- All bugs have moved from Bugzilla to `Github issues
  <https://github.com/translate/pootle/issues>`_.


.. _270-removed-features:

Removed features
================

There are two groups of features that have been dropped:

1. Those removed that we will likely recover in future Pootle releases.
2. Legacy features that will not be comming back


Recoverable features
--------------------

The following features are removed from Pootle since 2.5.1.3 and will be
recovered at some time.  Where possible we provide alternate approaches that
can be used.

.. note:: sysadmins should take note of these changes and determine if this
   prevents use of Pootle within their environment.  Essentially you will need
   to evaluate the use and need for each missing feature.


- Extension actions.
- Tags and Goals.
- Placeables support in the editor
- SQLite support.
- LDAP support.
- Monolingual file format support - perform file conversion to and from
  bilingual files outside of Pootle.
- Support for Version Control Systems - automate your version control
  integration outside of Pootle.
- News, notifications and RSS feeds - make use of announcement pages or use
  other channels of communication.
- Update against templates - do template updates outside of Pootle and use
  :djadmin:`update_stores` to load the changed files.
- Public API.
- The Wikipedia lookup backend
- No *Top Contributors* tables - user scores likely provide the information you
  are looking for.
- Project/Language/Translation Project descriptions - these are migrated to
  announcements.


Legacy features
---------------

We have dropped these features, some of which have been kept around to allow
easy upgrades in the past:

.. note:: The removal of some of these feature required extensive changes to
   the upgrading code, which means that upgrading directly from very old Pootle
   versions is no longer possible. In case you are trying to upgrade you must
   first upgrade to 2.6 before continuing the upgrade process.

- .pending and .tm files support: Not necessary since the ``updatetm`` tool was
  removed in Pootle 2.5.0.
- Live translation: Rarely enabled, and its use was actively discouraged.
- Autosync: It was recommended to never use it. The files can be synced using
  :djadmin:`sync_stores` instead.
- The voting feature for terminology suggestions has also been removed, due to
  its low popularity and high maintenance cost.
- Removed the zoom feature. Users should use their browsers zooming features.
- Hooks.
- Automatic terminology extraction. It's encouraged to use an external tool to
  generate any glossaries, then load them up on Pootle.
- Management commands: ``update_translation_projects``, ``updatedb``,
  ``upgrade``, ``setup``, ``assign_permissions``.


...and lots of refactoring, upgrades of upstream code, cleanups to remove old
Django versions specifics, improved documentation and of course, loads of bugs
were fixed.



Credits
=======

This release was made possible by the following people:

Julen Ruiz Aizpuru, Taras Semenenko, Dwayne Bailey, Leandro Regueiro, Igor
Afanasyev, Jerome Leclanche, Khaled Hosny, pfennig59, Zahim Anass,
Trejkaz (pen name), safaalfulaij, Peter Bengtsson, msaad, Mikhail Paulyshka,
Miha Vrhovnik, Kevin Scannell, Edmund Huber, Dídac Rios, Andras Timar.

And to all our bug finders, testers and translators, a Very BIG Thank You.
