<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- linguist-manual.qdoc --> <title>Qt Linguist Manual: TS File Format | Qt Linguist Manual</title> <link rel="stylesheet" type="text/css" href="style/offline-simple.css" /> <script type="text/javascript"> document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css"); // loading style sheet breaks anchors that were jumped to before // so force jumping to anchor again setTimeout(function() { var anchor = location.hash; // need to jump to different anchor first (e.g. none) location.hash = "#"; setTimeout(function() { location.hash = anchor; }, 0); }, 0); </script> </head> <body> <div class="header" id="qtdocheader"> <div class="main"> <div class="main-rounded"> <div class="navigationbar"> <table><tr> <td >Qt 5.9</td><td ><a href="qtlinguist-index.html">Qt Linguist Manual</a></td><td >Qt Linguist Manual: TS File Format</td></tr></table><table class="buildversion"><tr> <td id="buildversion" width="100%" align="right">Qt 5.9.4 Reference Documentation</td> </tr></table> </div> </div> <div class="content"> <div class="line"> <div class="content mainContent"> <link rel="prev" href="linguist-programmers.html" /> <link rel="next" href="linguist-id-based-i18n.html" /> <p class="naviNextPrevious headerNavi"> <a class="prevPage" href="linguist-programmers.html">Qt Linguist Manual: Developers</a> <span class="naviSeparator"> ◦ </span> <a class="nextPage" href="linguist-id-based-i18n.html">Qt Linguist Manual: Text ID Based Translations</a> </p><p/> <div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div> <h1 class="title">Qt Linguist Manual: TS File Format</h1> <span class="subtitle"></span> <!-- $$$linguist-ts-file-format.html-description --> <div class="descr"> <a name="details"></a> <p>The TS file format used by <i>Qt Linguist</i> is described by the <a href="http://www.w3.org/TR/1998/REC-xml-19980210">DTD</a> presented below, which we include for your convenience. Be aware that the format may change in future Qt releases.</p> <pre class="cpp"> <!-- ! ! Some notes to the DTD: ! ! The location element is set as optional since it was introduced first in Qt 4.2. ! The userdata element is set as optional since it was introduced first in Qt 4.4. ! The vanished message type was introduced first in Qt 5.2. ! --> <!-- ! Macro used in order to escape byte entities not allowed in an xml document ! for instance, only #x9, #xA and #xD are allowed characters below #x20. --> <!ENTITY % evilstring '(#PCDATA | byte)*' > <!ELEMENT byte EMPTY> <!-- value contains decimal (e.g. 1000) or hex (e.g. x3e8) unicode encoding of one char --> <!ATTLIST byte value CDATA #REQUIRED> <!-- ! This element wildcard is no valid DTD. No better solution available. ! extra elements may appear in TS and message elements. Each element may appear ! only once within each scope. The contents are preserved verbatim; any ! attributes are dropped. Currently recognized extra tags include: ! extra-po-msgid_plural, extra-po-old_msgid_plural ! extra-po-flags (comma-space separated list) ! extra-loc-layout_id ! extra-loc-feature ! extra-loc-blank --> <!ELEMENT extra-* %evilstring; > <!ELEMENT TS (defaultcodec?, extra-**, dependencies?, (context|message)+) > <!ATTLIST TS version CDATA #IMPLIED sourcelanguage CDATA #IMPLIED language CDATA #IMPLIED> <!-- The encoding to use in the QM file by default. Default is ISO-8859-1. --> <!ELEMENT defaultcodec (#PCDATA) > <!ELEMENT context (name, comment?, (context|message)+) > <!ATTLIST context encoding CDATA #IMPLIED> <!ELEMENT dependencies (dependency+) > <!ATTLIST dependency catalog CDATA #IMPLIED> <!ELEMENT name %evilstring; > <!-- This is "disambiguation" in the (new) API, or "msgctxt" in gettext speak --> <!ELEMENT comment %evilstring; > <!-- Previous content of comment (result of merge) --> <!ELEMENT oldcomment %evilstring; > <!-- The real comment (added by developer/designer) --> <!ELEMENT extracomment %evilstring; > <!-- Comment added by translator --> <!ELEMENT translatorcomment %evilstring; > <!ELEMENT message (location*, source?, oldsource?, comment?, oldcomment?, extracomment?, translatorcomment?, translation?, userdata?, extra-**) > <!-- ! If utf8 is "true", the defaultcodec is overridden and the message is encoded ! in UTF-8 in the QM file. If it is "both", both source encodings are stored ! in the QM file. --> <!ATTLIST message id CDATA #IMPLIED utf8 (true|false|both) "false" numerus (yes|no) "no"> <!ELEMENT location EMPTY> <!-- ! If the line is omitted, the location specifies only a file. ! ! location supports relative specifications as well. Line numbers are ! relative (explicitly positive or negative) to the last reference to a ! given filename; each file starts with current line 0. If the filename ! is omitted, the "current" one is used. For the 1st location in a message, ! "current" is the filename used for the 1st location of the previous message. ! For subsequent locations, it is the filename used for the previous location. ! A single TS file has either all absolute or all relative locations. --> <!ATTLIST location filename CDATA #IMPLIED line CDATA #IMPLIED> <!ELEMENT source %evilstring;> <!-- Previous content of source (result of merge) --> <!ELEMENT oldsource %evilstring;> <!-- ! The following should really say one evilstring macro or several ! numerusform or lengthvariant elements, but the DTD can't express this. --> <!ELEMENT translation (#PCDATA|byte|numerusform|lengthvariant)* > <!-- ! If no type is set, the message is "finished". ! Length variants must be ordered by falling display length. ! variants may not be yes if the message has numerus yes. --> <!ATTLIST translation type (unfinished|vanished|obsolete) #IMPLIED variants (yes|no) "no"> <!-- Deprecated. Use extra-* --> <!ELEMENT userdata (#PCDATA)* > <!-- ! The following should really say one evilstring macro or several ! lengthvariant elements, but the DTD can't express this. ! Length variants must be ordered by falling display length. --> <!ELEMENT numerusform (#PCDATA|byte|lengthvariant)* > <!ATTLIST numerusform variants (yes|no) "no"> <!ELEMENT lengthvariant %evilstring; > </pre> </div> <!-- @@@linguist-ts-file-format.html --> <p class="naviNextPrevious footerNavi"> <a class="prevPage" href="linguist-programmers.html">Qt Linguist Manual: Developers</a> <span class="naviSeparator"> ◦ </span> <a class="nextPage" href="linguist-id-based-i18n.html">Qt Linguist Manual: Text ID Based Translations</a> </p> </div> </div> </div> </div> </div> <div class="footer"> <p> <acronym title="Copyright">©</acronym> 2017 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners.<br> The documentation provided herein is licensed under the terms of the <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation License version 1.3</a> as published by the Free Software Foundation.<br> Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners. </p> </div> </body> </html>