Welcome to Transifex 0.9, codenamed Mojo_.
-Transifex 0.9 'Mojo' is a production release, [featuring a
-multitude of collaboration features. It is targeted for new installations of
-Transifex and parties who choose to migrate to a new major version and enjoy
+Transifex 0.9 'Mojo' is a production release of Transifex. It is targeted for
+new installations of Transifex and parties who choose to migrate to a new major
+version and enjoy the new features.
+Transifex 0.9 is an interim release, sorts of. It does ship a number of new
+features and a multitude of important bugfixes. It also prepares the ground for
+the next major release, which will include some huge changes in Transifex's
+codebase. Stay tuned for more, but until then, let's enjoy the fresh air
+Transifex 0.9 brings to our daily multilingual life.
Here's a 40K-foot view of the release major features and numbers:
+- More i18n directory structures
+- Improved file ownership
+- More pre-submit checks
+- Improved handling of VCS Exceptions
Transifex 0.9 is a release of the open-source, community-powered Transifex
-flavor. It is suitable for very large pro
ejcts with their own existing
+flavor. It is suitable for very large projcts with their own existing
translation community, such as the Fedora Project, the GNOME Desktop etc.
Transifex is also offered as another flavor: Software-as-a-Service, at
independent projects and businesses which don't want to worry about deploying
isfex.net is managed by Indifex_, the company sponsoring the development
+Transfex.net is managed by Indifex_, the company sponsoring the development
.. figure:: ../../screenshots/transifex.net/frontpage.png
What's new in Transifex 0.9
-Let's see what's fresh
-Transifex 0.9 sports a brand-new extension engine, allowing developers to
-write plugins which extend or override parts of the functionality.
+Transifex 0.9 sports a brand-new extension engine called django-addons_, which
+allows developers to write plug-and-play extensions (or plug-ins) which extend
+or override parts of the core functionality. django-addons_ was developed by
+the Transifex team and is now shipped as a reusable Django application.
-This support was developed as a reusable application called 'django-addons'.
-Here are some of the changesets recorderd:
+.. _django-addons: http://bitbucket.org/indifex/django-addons/
-- Added django-addons support
-- Use STATIC_URL instead of MEDIA_URL
-- Raising some signals through the projects app
-- Bunch of fixes around templates related to the addonizations
-- Fixed some issues around the presubmit_checks addon
-- Settings changes due django-addons improvements
+Here are some of the benefits of this support:
+- **Extensibility**: By creating hooks and connectors in the Transifex core code,
+ extra code can be decoupled and stored in separate directories. This allows
+ more functionality to be added when needed with less hassle.
+- **Reduced code complexity**: By storing code in more and smaller files, the code
+ is more readable and manageable.
+- **Scalability**: Addons can be enabled and disabled on the production web-server,
+ and the addons which fully support this functionality can simply be
+ deactivated if needed (for example, when high traffic hits your site).
+- **Friendlier code**: New developers are more free to experiment with new features
+ without having to mess with Transifex internals which might seem complex in
-Project Team Outsourcing
+A number of Transifex applications have been converted to addons, which may be
+disabled if needed. Here's a list of them::
-In reality, a number of projects, upstream or not, belong to bigger collections
-of software. A great example of such collections are desktop environments or
-distributions. These projects have repeatedly requested the ability to re-use
-the collection's translation teams instead of managing their own.
+ * charts - Google Charts for Transifex
+ * locks - Locking mechanism for Transifex
+ * repowatch - Repository watching
+ * timeline - Timeline for Transifex
+ * txcron - Transifex Cronjobs
+ * widgets - Transifex Widgets
+Finally, for the Django developers out there, here are some of the features
+supported by django-addons:
-For example, the Anaconda project may choose to use Fedora's translation teams,
+- Automatic URL discovery of addons: No need to tweak your main project's
+- Automatic signal connecting of addons
+- Support for 'default settings' per addon
+- Template hooking system (inject code from addons to your main project)
+- Support for 'django-staticfiles' to serve site media from each addon
+- Automatic registration of 'django-notification_' notice types
+- Support for storing and loading localization from inside each addon
+- Disable addons using a management command: ``./manage.py addons``
+- Addons overview page, allowing admins to learn what addons are currently
-Permission and Team views are disabled once the project outsources its access
+For a full list of features and code examples, please refer to the
+`django-addons documentation`_ itself.
+.. figure:: ../../screenshots/0.9/addons.png
+A great new feature is the ability to share translation teams between projects.
+A Transifex project can now 'outsource' its language teams to another one,
+effectively trusting and re-using the other project's community to translate
+Why is this useful? Open source software projects tend to group together in
+larger communities. Good examples of such project collections are desktop
+environments, such as GNOME and KDE, or distributions, such as Fedora and
+Moblin. Since Transifex supports per-project translation teams, these
+communities requested the ability to re-use the collection's translation teams
+instead of managing their own.
+This control can accessed by Project Maintainers under the tab "Access Control".
+Note that this project's fine-grained permission and team controls are disabled
+once the project outsources its access control.
+.. figure:: ../../screenshots/0.9/outsource.png
+The Teams Outsourcing feature is the major lever behind the very influential
+website http://meego.transifex.net/. There, the MeeGo project, a common effort
+between Intel, Nokia and the Linux Foundation, hosts the translations of a large
+number of projects, all being translated by the same community: The MeeGo
+Starting with this version, each Transifex project now has its own Widgets.
+You may now display your project's translation statistics on your website
+as a simple image. Perfect for embedding in wiki pages, Trac instances, emails.
+The chart will always reflect your live Transifex numbers.
+Widgets are publicly accessible from a tab on the Project Details page.
+Additional widgets may be available in the next releases in the same place.
+.. figure:: ../../screenshots/0.9/chart.png
+The file locking feature has been greatly improved in this version. The new
+functionality more closely resembles "file ownership". Here's a list of the
+improvements which have taken place:
+- The download button has been replaced with the message "Download for viewing",
+ indicating that this action will not also assign the translation to the person
+- Submit access has been restricted to the person holding the lock.
+- Editing in Lotte now automatically assigns the file to the user.
+- Users are only allowed to lock 2 files and locks expire by default in 2 days,
+ signifying the importance of the file ownerships. Both these settings are
+ configurable by the Transifex administrator.
+- When a file ownership is about to expire (e.g. 12 hours before), a
+ notification is sent to the owner.
+- Users can submit part of their job and continue working on their files by
+ extending the lock upon file submission.
+- The owner of a file is allowed to “Extend lock for 2 more days” by clicking
+ the related icon next to the file.
+- Language coordinators are able to remove ownership from other people's files
+ for the language files they are responsible for.
+.. figure:: ../../screenshots/0.9/lock.png
More i18n directory structures
Transifex 0.9 introduces an overhaul of the ``guess_language`` method using
-regular expressions. This addresses tickets #541, #542.
+regular expressions (tickets #541, #542), adding support for a number of i18n
+directory structures and shows improved extensibility.
-The new method takes 0.1 millisecond more when hitting 'Refresh Stats'
-and for the 'txstatsfresh' on Txn, when run against 30K files, it takes
-0.30s, compared to 0.14s it took before. This is a penalty of appx.
+This method is run whenever the statistics are refreshed, so approximately once
+per day. The new code has no visible overhead (when run against 30.000 files, it
+takes 0.30 seconds, compared to 0.14 seconds it took before).
+The standard directory structures supported now are the following:
+#. PO files inside a po directory named with the language code
+ (``/po/<lang>.po``). Depending on the i18n method, a POT file might be
-Note: To have your widget code viewable from outside your transifex instance
-you have to set your ``STATIC_URL`` variable to an absolute URL (by using
-relative paths you can still view the widgets on your own installation).
+#. The LC_MESSAGES locale standard (``/<lang>/LC_MESSAGES/something.po``).
+#. Grouped language files (``/po/el/foo.po``)
-Improved handling of VCS Exceptions
+#. Suffixed language files (``/po/foo.el.po``)
+#. The Publican standard structure. The languages are discovered by the
+ presence of the 'pot' directory in the tree. A 'pot' directory is needed to
+ allow the language discovery.
+Transifex now supports more validation checks for a submission. This helps
+avoiding wrong submissions and can reduce the maintenance overhead for the
+developer and Transifex administrator. Here is a list of the checks added:
+- Reject empty files (0% translations) (empty files)
+- Reject access to POT files
+- Warn in the presence of DOS language endings in the file
+- Option to disallow anything other than UTF-8 header encoding
+- Check the existence of a 'Plurals-Form' header in a file
+Various improvements and bugfixes
+The search box now also crawls in project names and descriptions, components,
+repository URLs. Now, users can search for projects having specific keywords
+in their description, projects hosted on a particular hosting website such as
+Improved handling of VCS Errors
Transifex now shows in the UI what's going on with the related VCS backend
whenever something goes wrong. This will allow project developers to better
-Various improvements and bugfixes
Allow local repo s URIs on DEBUG mode
+- ocal repo URIs on DEBUG mode
- Added ':pserver:' as a prefix for CVS repos
-- Do not delete POFiles when cleaning cache
- - The problem was when cleaning and refreshing the component cache.
- Due the fact that it deletes all the POFiles from the database
- and creates them again, Tx was losing 'locks' and possibly 'watches'
- of users, because of the db cascade mechanism.
- - This patch allows TX to continue cleaning/refresh the component cache,
- however without deleting the POFiles. It sets them as enabled=False
- and hide them from the UI.
- - Deleting a project or a component thought, still deletes the POFiles
- that belong to it, as expected.
-Added Tx repository revision into the footer. Helpful to identify the exactly
-revision used to run a Tx instance using a devel branch.
+- Do not delete POFiles when cleaning cache. This fixes a problem when cleaning
+ and refreshing the component cache. This patch allows Tx to continue
+ cleaning/refresh the component cache but without deleting the POFiles. They are
+ set as enabled=False and hidden from the UI. A project or component deletion
+ still removes the POFiles that belong to it.
+- Added Tx repository revision into the footer. Helpful to identify the exactly
+ revision used to run a Tx instance using a devel branch.
Improved Mercurial Backend
-- Mercurial backend needs to 'update' whenever a pull is done
-- Setting default mercurial branches as 'tip' instead of 'default'
-- Mercurial dual head saga
-Setting default mercurial branches as 'tip' instead of 'default'
-- We need to update always to the latest changeset when closing or
- pulling a repository. For doing it, nothing better that use 'tip',
+- Mercurial backend now updates whenever a pull is done, avoiding the creation
+ of local new heads in the repo history
- After some scrutiny tests we realized that using 'tip'
- as the default branch might be trouble for repos that have
- branches (inside). The 'tip' might alternate among the branches,
- as it's always the last changeset committed in the repo. This way,
- we could have commits from Tx on different branches for the same
- component, which is NOT expected. Reverted it back to 'default'.
+ as the default branch might be troublesome for repos that have
+ named branches, so it was reverted back to 'default'.
- The 'commands.push' command doesn't use a 'revs' argument, so
we turned it into 'branch' argument.
-- Somehow (don't ask me why) the _clean_dir() method was causing
- troubles, whenever trying to get a repo updated. As we already use
- 'update=True' in the 'pull', excluding it seems to fix the problem. The
- other way around didn't work.
- Fixed issues with Dutch language (#537)
-- Delete file watches whenever a component has its cache cleaned
- - Whenever a component has its cache cleaned, all the related POFile objects
- are deleted. This way other objects that use those POfiles are also deleted
- in cascade. The repowatch app does not use the POFile object. Instead it uses
- the 'component' and the 'file_path' to identify the POFiles that the users are
- watching/following. It means that the 'cascade' is not applied here and it
- needs to be done manually.
- - It fixes the "DoesNotExist: ObservedItem matching query does not exist."
-- Fixed permission check for components with multiple po files
+- Fix for the "DoesNotExist: ObservedItem matching query does not exist."
+ exception. Whenever a component has its cache cleaned, all the related POFile
+ objects are now deleted. This way, other objects that use those POfiles are
+ also deleted in cascade. The repowatch app does not use the POFile object and
+ 'cascade' is not applied.
+- Fixed permission check for components with multiple PO files
- Calling correct method on the component get_stats method
- Fixed Lotte data session wizard craziness when changing pages (#552)
-- Fixed url for components with multiple po files per language
-- Handling user object on the svn lib with more property (#565)
-- Fixed registration problem, occured after merging.
+- Fixed URL for components with multiple po files per language
+- Handling user object on the svn lib with more properties (#565)
+- Fixed registration problem, occurring after merging.
- Added a dependency into a projects app migration script
- Fixed permission check for team coordinators
- Converted exception output into a string before using it
- Missing JS lib for the component multiple POFiles page
-- Missing 'Send for Review' button after locks addonization
- Fix wrapping of multi-line messages on top of page.
- Made form errors more visible
- Fixed get_or_none method for the Team class (#531)
- Fixed some permission checks on the component_submit_file view
-- Dropped adding permissions from fixtures
- Fixed multiple copies of same event on timeline lists (#528)
- Fix an issue in run commands where no env was passed via kwargs.
-- Bugfix: the rev kwarg should not be passed to hg pull cause we donot pull specific revision numbers!
+- Bugfix: the rev kwarg should not be passed to hg pull cause we do not pull
+ specific revision numbers!
- Improved get_log templatetag for the actionlog app
- Fix SITE_URL_PREIFX generation with request.build_absolute_uri("") call
-- Added option for enabling/disabling django-contact app URL
-- Added option for setting up the Django admin panel URL
+- Added option to enable django-contact app URL
+- Added option to setup up the Django admin panel URL
- BUGFix: Variable intialization was missing in settings file.
- Fix initializers of test_svn.
- Minor cleanup on the bzr repositories.
* The Transifex.org Download section: http://transifex.org/files/
* The Python Packaging Index (Cheeseshop): http://pypi.python.org/pypi/transifex/
-RPM packages for the latest versions of Fedora
are or will soon be available
+RPM packages for the latest versions of Fedora soon be available
via yum. The same applies for RHEL 5, CentOS 5, and Scientific Linux 5, from
the `Fedora EPEL`_ yum repository::
The following dependencies were *added* in this version:
- django-threadedcomments >= 0.9
Please refer to the full `Transifex 0.9 changelog`_ for more information on
what has changed between the development releases and final one.
.. _Transifex.net: http://www.transifex.net/
.. _www.transifex.net: http://www.transifex.net/
.. _Indifex: http://www.indifex.com/
+.. _Fedora EPEL: https://fedoraproject.org/wiki/EPEL
+.. _Mojo: http://en.wikipedia.org/wiki/Mojo_(comics)
.. _Transifex 0.9 changelog: http://code.transifex.org/0.9.x/shortlog
-.. _Fedora EPEL: https://fedoraproject.org/wiki/EPEL
-.. _Moblin Project: http://translate.moblin.org/
-.. _XFCE Project: http://wiki.xfce.org/translations
-.. _Mojo: http://en.wikipedia.org/wiki/Mojo_(comics)
+.. _`django-notification`: http://github.com/jtauber/django-notification/
+.. _`django-addons documentation`: http://bitbucket.org/indifex/django-addons/src/tip/docs/index.rst