blob: d22565f3c36aeb7d89970e80f3dee03ab483fde3 [file] [log] [blame]
Translation File Format: Qt Linguist
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. contents:: Table of Contents
Introduction
============
The ezcTranslationTsBackend reads its data from Qt's Linguist files - an XML
based format for storing original text and translated text. This document
describes how those files are formatted.
File Format
===========
Root
----
The format is an XML file containing different contexts, which contain
translatable strings. The XML doctype is TS. Each file starts with the
following header::
<!DOCTYPE TS>
The root element of the file is also TS::
<TS>
... contexts come here ...
</TS>
The XML header is not present, and thus there is no character set definition
either. However, it is *required* to use UTF-8 for all texts (source and
translations) in this file.
Contexts
--------
Each context consists of two or more child elements. The first element should
always be the "name" element. After this follow one or more "message"
elements::
<context>
<name>design/admin/class/classlist</name>
... messages come here ...
</context>
The context's name indicates where in an (web-) application a specific
translatable string is used. This helps translators translate all the strings
properly.
Messages
--------
Each message contains one translatable string and its translation. The
translatable string is stored in the "source" element, and the translation in
the "translation" element. The translation has an optional attribute "type"
that can either contain "obsolete" or "unfinished" as value. A simple example
of a message is here::
<message>
<source>Approval</source>
<translation>Goedkeuring</translation>
</message>
This message defines that the translation for "Approval" is "Goedkeuring".
Unfinished
``````````
The "unfinished" value for the "type" attribute of the "translation" element is
a specifier that tells the `Qt Linguist`_ tool that this specific translatable
string has not been (correctly/fully) translated yet. Unfinished entries are
created by scripts that pull out translatable strings from applications and
templates. The future eZ Components's TemplateTranslationTiein package will
contain scripts like this as well. An example on how an unfinished translation
might look like is below::
<message>
<source>Create a copy of the &lt;%class_name&gt; class.</source>
<translation type="unfinished"></translation>
</message>
.. _Qt Linguist: http://www.trolltech.com/products/qt/features/internationalization
Obsolete
````````
Obsolete translations are translations of strings that were previously
contained in your application and that contained a translation in the
translation file. When the script was run to compare the TS file with the
strings in the application it finds out the strings are no longer used. When
they are no longer used the script sets the "type" attribute of the
"translation" element to "obsolete"::
<message>
<source>Groups</source>
<translation type="obsolete">Groepen</translation>
</message>
Parameters
``````````
Translatable strings can contain parameters that are `filled in`__ with user
supplied data. The Translation component supports both positional parameters as
well as named parameters. A positional parameter has the form "%" <digit> and a
named parameter the form "%" <string>. Parameters to translated strings are
filled in by the application, and in some cases the order in the translated
strings differ from the order as they appear in the host language (often
English) like in the following example::
<message>
<source>Search for &lt;%1&gt; returned %2 matches</source>
<translation>Er zijn %2 items gevonden bij het zoeken naar &lt;%1&gt;</translation>
</message>
Another example shows how named parameters are contained in the TS file::
<message>
<source>Translations for &lt;%object_name&gt; [%translation_count]</source>
<translation>Vertalingen voor &lt;%object_name&gt; [%translation_count]</translation>
</message>
__ http://ez.no/doc/components/view/latest/(file)/Translation/ezcTranslation.html#getTranslation
Example
=======
A full example of an TS file can be found here__.
__ https://svn.apache.org/repos/asf/incubator/zetacomponents/trunk/Translation/tests/files/translations/nl-nl.xml
..
Local Variables:
mode: rst
fill-column: 79
End:
vim: et syn=rst tw=79