<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
tt
        {mso-style-priority:99;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:531381566;
        mso-list-type:hybrid;
        mso-list-template-ids:390778176 -751957496 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:16;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:27.0pt;
        text-indent:-.25in;
        font-family:"Calibri","sans-serif";
        mso-fareast-font-family:Calibri;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:63.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:99.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:135.0pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:171.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:207.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:243.0pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:279.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:315.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">At present I am simply trying out various tools to see what it takes to integrate into them, and how they would work for both individual projects and OpenStack
 as a whole. Nothing I’m doing is official yet, so don’t get too worked up. There were several options thrown out for translation platforms at the summit, and narrowing them down isn’t a trivial task.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I’ll report back next week with more information. In general I look forward to kick-starting a more concerted translation process for OpenStack.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">All the best,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left:27.0pt;text-indent:-.25in;mso-list:l0 level1 lfo1">
<![if !supportLists]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman"">         
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Gabriel Hurley<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net [mailto:openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net]
<b>On Behalf Of </b>Ying Chun Guo<br>
<b>Sent:</b> Saturday, April 28, 2012 2:35 AM<br>
<b>To:</b> Anne Gentle<br>
<b>Cc:</b> annegentle@justwriteclick.com; openstack@lists.launchpad.net<br>
<b>Subject:</b> Re: [Openstack] Proposal for manuals translation process<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p><span style="font-size:10.0pt;font-family:"Arial","sans-serif"">Hi, Anne</span><br>
<br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">Thank you for your comments. I'm glad to know that you are working for a larger "goal". I don't know
</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">Launchpad is broken with code strings now. What do you mean when you said "Launchpad to be
</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">broken with code strings now"? I take a look at Horizon in Transifex. Gabriel Hurley is the coordinator.
</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">Can I know the reason why Dashboard turn to Transifex other than Launchpad?</span><br>
<br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">Pootle will be a good open source project to look into. It supports a very powerful "Terminology matching" feature,</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">which can match and list the relevant terminologies at real time. The translation memory feature is not so powerful.</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">Suggested translations from a translation memory must be generated before translation, while Transifex can list
</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">suggested translations at real time. I will add the third column in our wiki page.</span><br>
<br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">There is a major issue for Pootle that we need to consider. Although Pootle has its official server to host the translation</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">of Pootle UI and related projects, the policy for selecting projects on our official server are not finalised yet.
</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">I cannot find a way to register our projects in that official server. So we might need to host our</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">own Pootle server if we use it. Are we able to host our own translation server? I'm not clear whether Pootle
</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">supports OpenID. If we are going to host our own Pootle server, maybe we can enhance it and enable</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">the OpenID authentication.</span><br>
<br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">Both Launchpad and Transifex, even Pootle, manage the translation review process by their own. I think, the translation quality</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">review shall be done using the translation tool. Gerrit and Jenkins will play an important role in Generating step.
</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">I'm not familiar with Gerrit and Jenkins. If my description is wrong, feel free to correct me. After the fourth step "Converging",
</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">DocBooks in different languages will be generated and submitted to Gerrit for review. Jenkins will run Maven build and upload the
</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">generated sources to server. The reviewer ( translation coordinator ) will accept the changes.</span><br>
<br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">When I propose the five steps, I only think of manuals translation. Code strings may be a little different. Are there any globalization</span><br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">test in Jenkins? If there is no, we may need to add globalization test.
</span><br>
<br>
<span style="font-size:10.0pt;font-family:"Arial","sans-serif"">Regards<br>
Daisy<br>
</span><br>
<tt><span style="font-size:10.0pt"><a href="mailto:annegentle@justwriteclick.com">annegentle@justwriteclick.com</a> wrote on 04/28/2012 03:21:07 AM:</span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<br>
<tt>> Anne Gentle <<a href="mailto:anne@openstack.org">anne@openstack.org</a>> </tt>
</span><br>
<tt><span style="font-size:10.0pt">> Sent by: <a href="mailto:annegentle@justwriteclick.com">
annegentle@justwriteclick.com</a></span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> </tt></span><br>
<tt><span style="font-size:10.0pt">> 04/28/2012 03:21 AM</span></tt><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> To</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Ying Chun Guo/China/IBM@IBMCN, </tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> cc</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a></tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Subject</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Re: [Openstack] Proposal for manuals translation process</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Hi Daisy, </tt><br>
<tt>> </tt><br>
<tt>> Thanks so much for this detailed proposal. I'd like you to put it on</tt><br>
<tt>> the OpenStack wiki, at <a href="http://wiki.openstack.org/Translations">http://wiki.openstack.org/Translations</a>.
</tt><br>
<tt>> </tt><br>
<tt>> My first read-through and discussion with the CI team brings up a </tt><br>
<tt>> few comments:</tt><br>
<tt>> - Whatever we do for docs, we should also do for code strings. So </tt><br>
<tt>> unfortunately the scope for the "Goal" probably cannot be so narrow.</tt><br>
<tt>> We know Launchpad to be broken with code strings now, that data </tt><br>
<tt>> point should be reflected in this point-in-time analysis.</tt><br>
<tt>> </tt><br>
<tt>> - Dashboard uses Transifex now (while the other projects </tt><br>
<tt>> unsuccessfully use Launchpad). Tres Henry, can you comment on the </tt><br>
<tt>> number of translators of Dashboard strings you have on the Transifex</tt><br>
<tt>> side already? </tt><br>
<tt>> </tt><br>
<tt>> - Not that I want analysis paralysis, but, we may need to add a </tt><br>
<tt>> third column of a crowd-sourced translation option like Pootle that </tt><br>
<tt>> is familiar to open-source translators. Also, the lack of a </tt><br>
<tt>> translation memory/dictionary (and having to hold such a valuable </tt><br>
<tt>> asset in a wiki page) is troubling, can we also analyze an option </tt><br>
<tt>> that offers a translation dictionary? So much re-use would be </tt><br>
<tt>> available to all the projects.</tt><br>
<tt>> </tt><br>
<tt>> - There seems to be assumptions that Jenkins and Gerrit will "just </tt><br>
<tt>> work" with out much description of the role those two crucial tools </tt><br>
<tt>> play. Can you further describe the workflow for those in the </tt><br>
<tt>> Slicing, Uploading, Downloading, Converging, and Generating steps? </tt><br>
<tt>> </tt><br>
<tt>> I appreciate all the hard work I _know_ went into this proposal. </tt><br>
<tt>> Let's get it on the wiki, discuss more, and keep adding details. I'd</tt><br>
<tt>> like to make this a blueprint, could be for openstack-manuals, could</tt><br>
<tt>> be for horizon, I don't know yet. Thanks for stepping up and </tt><br>
<tt>> embracing our international community's needs!</tt><br>
<tt>> </tt><br>
<tt>> Thanks,</tt><br>
<tt>> Anne</tt><br>
<tt>> </tt><br>
<tt>> </tt><br>
<tt>> </tt><br>
<tt>> </tt><br>
</span><br>
<tt><span style="font-size:10.0pt">> On Fri, Apr 27, 2012 at 3:45 AM, Ying Chun Guo <<a href="mailto:guoyingc@cn.ibm.com">guoyingc@cn.ibm.com</a>> wrote:</span></tt><br>
<tt><span style="font-size:10.0pt">> Hi, all</span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> </tt><br>
<tt>> During the "I18N in OpenStack" discussion in design summit, it is </tt><br>
<tt>> mentioned that documents need to I18N. I also noticed some requests </tt><br>
<tt>> for a Chinese version manuals from China users. But unlike Gettext </tt><br>
<tt>> strings in the codes,  there is no process for DocBook translation </tt><br>
<tt>> yet. Translators, who want to help translation, have to take a </tt><br>
<tt>> DocBook into a tool and perform a translation on a copy which will </tt><br>
<tt>> be saved as a new file. This traditional translation model is not </tt><br>
<tt>> good for collaboration. Usually, the open source translation depends</tt><br>
<tt>> on volunteers. It's better to use the crowd translation model, which</tt><br>
<tt>> enables a mass of translators to work on the same job, just like the</tt><br>
<tt>> Launchpad Web UI for Gettext strings translation, any people can </tt><br>
<tt>> jump in at any time and contribute to any part of the translatable contents.</tt><br>
<tt>> </tt><br>
<tt>> In order to facilitate the manuals translation, I investigated </tt><br>
<tt>> several translation websites and several open source projects. I </tt><br>
<tt>> composed this proposal. Now it's open for suggestions and comments.</tt><br>
<tt>> </tt><br>
<tt>> Goal</tt><br>
<tt>> ------------</tt><br>
<tt>> A process for manuals translation</tt><br>
<tt>> </tt><br>
<tt>> Background</tt><br>
<tt>> --------------</tt><br>
<tt>> OpenStack Manuals are in DocBook format. The source is on GitHub: </tt><br>
<tt>> <a href="http://github.com/openstack/openstack-manuals">http://github.com/openstack/openstack-manuals</a></tt><br>
<tt>> Launchpad and Transifex are free web based tools used for crowd </tt><br>
<tt>> translation. Both of them provide a simple web interface in which </tt><br>
<tt>> non-technical people can help translation. They don't support </tt><br>
<tt>> DocBook format, but support the popular GNU Gettext file formats (PO</tt><br>
<tt>> Template or PO).</tt><br>
<tt>> </tt><br>
<tt>> Translation Process</tt><br>
<tt>> -------------------</tt><br>
<tt>> In order to translate OpenStack Manuals to multiple languages, which</tt><br>
<tt>> are in DocBook format, we can slice the documents into short </tt><br>
<tt>> statements, then use a web based translation management tool to </tt><br>
<tt>> manage the translation process, and finally converge the translated </tt><br>
<tt>> content into a new copy of DocBook. </tt><br>
<tt>> </tt><br>
<tt>> Here are the five steps of the translation process:</tt><br>
<tt>> Step #1 Slicing - extract translatable content from DocBooks and </tt><br>
<tt>> generate Gettext compatible POT files (PO Template or PO);</tt><br>
<tt>> Step #2 Uploading - upload the POT (or PO) files to a web based </tt><br>
<tt>> translation management tool;</tt><br>
<tt>> Step #3 Downloading - download PO (or MO) files from the web tool </tt><br>
<tt>> after translation and review;</tt><br>
<tt>> Step #4 Converging - converge the translated contents into new </tt><br>
<tt>> copies of DocBook, create DocBooks in multiple languages</tt><br>
<tt>> Step #5 Generating - generate HTML/PDF in multiple languages from </tt><br>
<tt>> DocBooks in multiple languages</tt><br>
<tt>> </tt><br>
<tt>> The picture in the attachment describes these steps. </tt><br>
<tt>> (See attached file: DocBook translation process.png)</tt><br>
<tt>> </tt><br>
<tt>> Compare of Launchpad and Transifex</tt><br>
<tt>> -------------------</tt><br>
<tt>> Launchpad (<a href="https://launchpad.net/">https://launchpad.net/</a>) and Transifex (<a href="https://www.transifex.net/">https://www.transifex.net/</a></tt><br>
<tt>> ) are similar web based tools used for crowd translation. The goal </tt><br>
<tt>> of the compare is to find the most appropriate tool for this </tt><br>
<tt>> scenario. The compare are made between Launchpad and Transifex free </tt><br>
<tt>> version for open sources. (Refer to <a href="https://www.transifex.net/plans/">
https://www.transifex.net/plans/</a></tt><br>
<tt>>  to get details of “Transifex free version for open sources”)</tt><br>
<tt>> </tt><br>
<tt>> After considering the requirements for manuals translation,  below </tt><br>
<tt>> perspectives are taking into consideration:</tt><br>
<tt>> *Supported format</tt><br>
<tt>> *DocBook slicing support</tt><br>
<tt>> *Converging support</tt><br>
<tt>> *Source uploading method</tt><br>
<tt>> *Output downloading method</tt><br>
<tt>> *Translation Memory support</tt><br>
<tt>> *Translation history support</tt><br>
<tt>> *Change management</tt><br>
<tt>> *Translation Dictionary</tt><br>
<tt>> Refer to Table 1 for detail information of the compare.</tt><br>
<tt>> </tt><br>
<tt>> Another important measurement to compare is the workload. Having the</tt><br>
<tt>> five steps in the process execute automatically as much as possible </tt><br>
<tt>> will decrease the workload of translation coordinators. </tt><br>
<tt>> Refer to Table 2 for the detail of workload compare when using </tt><br>
<tt>> Launchpad or Transifex for DocBook translation.</tt><br>
<tt>> </tt><br>
<tt>> Here are the conclusions after the compare, </tt><br>
<tt>> (1) the workload using Transifex is similar with using Launchpad. </tt><br>
<tt>> (2) The advantages of Launchpad are:</tt><br>
<tt>> * Leverage the same user id and user group of developers, users, </tt><br>
<tt>> translators of Gettext strings.</tt><br>
<tt>> * Leverage the same contribution calculating method "Karma", with </tt><br>
<tt>> fixing bugs, answering questions and Gettext strings translation.</tt><br>
<tt>> (3) The advantage of Transifex is better translation memory support. </tt><br>
<tt>> The disadvantage of Transifex is having different user registration </tt><br>
<tt>> and user interfaces. Both the translators and the coordinators need </tt><br>
<tt>> to register in a new website and get familiar with a new user </tt><br>
<tt>> interfaces before translation.</tt><br>
<tt>> </tt><br>
<tt>> Based on these analysis, I think, using Launchpad to do the manuals </tt><br>
<tt>> translation is a good choice.</tt><br>
<tt>> </tt><br>
<tt>> Other considerations</tt><br>
<tt>> -------------------</tt><br>
<tt>> *Translation Dictionary</tt><br>
<tt>> Translation Dictionary here means terminology translation. It is </tt><br>
<tt>> very helpful to ensure the translation quality. Unfortunately, both </tt><br>
<tt>> Launchpad and Transifex don't support Translation Dictionary. I </tt><br>
<tt>> suggest to use wiki pages to document the terminology translation </tt><br>
<tt>> for translators reference. </tt><br>
<tt>> Here is a sample wiki page for Eclipse globalization: <a href="http://">http://</a></tt><br>
<tt>> wiki.eclipse.org/French_Glossary. </tt><br>
<tt>> </tt><br>
<tt>> *Change Management</tt><br>
<tt>> Launchpad and Transifex support the synchronize of old PO files and </tt><br>
<tt>> new PO files in their own ways. They will compare the new po and the</tt><br>
<tt>> existing po and handle the changes automatically. But new PO files </tt><br>
<tt>> won't be generated automatically after DocBooks are changed. </tt><br>
<tt>> Translation coordinators need to generate new PO files by running a </tt><br>
<tt>> Python program manually. </tt><br>
<tt>> I will suggest to develop a program in future, to monitor the update</tt><br>
<tt>> of manuals GitHub repository. When a DocBook is updated, a new PO </tt><br>
<tt>> file will be generated and synchronized with the old one in the </tt><br>
<tt>> Launchpad server.</tt><br>
<tt>> </tt><br>
<tt>> *Machine translation</tt><br>
<tt>> Is it necessary to include machine translation?  Machine translation</tt><br>
<tt>> can be executed before human beings review. Then translators won't </tt><br>
<tt>> need to translate from scratch. Translators can review the result of</tt><br>
<tt>> machine translation and correct them.</tt><br>
<tt>> But after investigation, I found the quality of free machine </tt><br>
<tt>> translations, which have API exported, are not so good. I doubt </tt><br>
<tt>> whether a poor quality machine translation is helpful.</tt><br>
<tt>> Anyway, if most of the community members want to include machine </tt><br>
<tt>> translation, it is possible to improve the slicing program, to </tt><br>
<tt>> generate a PO file with the results of machine translation.</tt><br>
<tt>> </tt><br>
<tt>> Reference </tt><br>
<tt>> -------------------</tt><br>
<tt>> Table 1 - Compare of Launchpad and Transifex </tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> [image removed] </tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Launchpad</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Transifex</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Supported format</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> pot file (.pot), </tt><br>
<tt>> po file (.po)</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> android string resources (.xml), </tt><br>
<tt>> po file (.po), </tt><br>
<tt>> html (.html), </tt><br>
<tt>> WIKI file (.wiki), etc.</tt><br>
<tt>> (Note, DocBook is not a supported file format; OpenStack Wiki format</tt><br>
<tt>> is not a supported wiki format.)</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> DocBook Slicing support</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> No</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> No </tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Converging support</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> No</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> No</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Source uploading method</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Two methods:</tt><br>
<tt>> a> Automatic template imports from Bazaar branch</tt><br>
<tt>> b> Manually upload template (or an archive) through Launchpad's web interface.</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Two methods:</tt><br>
<tt>> a> Use a command tool “Transifex Client” to synchronize the server </tt><br>
<tt>> with local repository (local folder) by typing several commands.</tt><br>
<tt>> b> Manually upload a source translation file from web interface;</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Output downloading method</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Two methods:</tt><br>
<tt>> a> Automatic save output files to Bazaar branch;</tt><br>
<tt>> b> Manually download output files through web interface.</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Two methods:</tt><br>
<tt>> a> Use “Transifex Client” to download the latest translations from </tt><br>
<tt>> the server by typing one command.</tt><br>
<tt>> b> Manually download through web interface.</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Translation Memory support</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> The exact same translation items in other projects can be listed as </tt><br>
<tt>> a reference.</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> The similar translation items will be listed as a reference. </tt><br>
<tt>> Translation memory can be shared within two and more projects. </tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Translation history support</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Yes</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Yes</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Change management</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Launchpad will automatically update its data every time you push a </tt><br>
<tt>> new revision to the Bazaar branch.</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> When you push some local updates to server, Transifex will overwrite</tt><br>
<tt>> the existing source strings and translations with the updated version. </tt>
<br>
<tt>> (Note: This may lead to loss of translations. So users need to make </tt><br>
<tt>> sure the local repository contains the latest translation results in</tt><br>
<tt>> the server.)</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Translation Dictionary</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> No</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> No</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> </tt><br>
<tt>> Table 2 - Workload compare when using Launchpad or Transifex for </tt><br>
<tt>> DocBook translation </tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> [image removed] </tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Using Launchpad</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Using Transifex</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Step 1: Slicing</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Python program [1] can be used to slice all the DocBook together in </tt><br>
<tt>> one command</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Same with Launchpad</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Step 2: Uploading</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> If the source code is synchronized with Bazaar, the uploading can be</tt><br>
<tt>> automatically handled by Launchpad.</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Use “Transifex Client” to upload resources to Transifex server from </tt><br>
<tt>> local repository (local folder) by typing several commands.</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Step 3: Downloading</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Launchpad can commit daily snapshots of the translations to a Bazaar</tt><br>
<tt>> branch in a specific folder.</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Use “Transifex Client” to download the latest translations from the </tt><br>
<tt>> server by typing one command.</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Step 4: Converging</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Python program [2] can be used to coverge all the po files back to DocBooks</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Same with Launchpad</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Step 5: Generating</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Maven command can be used to generate HTML/PDF from DocBooks</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> Same with Launchpad</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> [1] The Python program can be written based on “xml2po” to slice all</tt><br>
<tt>> DocBooks of the manuals project to translatable strings in batch. </tt><br>
<tt>> “xml2po” is an existing Python program in GNOME gnome-doc-utils </tt><br>
<tt>> package which can extracts translatable content from free-form XML </tt><br>
<tt>> documents and outputs gettext compatible POT files.</tt><br>
<tt>> [2] The Python program can be written based on “xml2po”, to converge</tt><br>
<tt>> the translated strings back to copies of DocBooks in batch.</tt><br>
<tt>> </tt><br>
<tt>> </tt><br>
<tt>> Regards</tt><br>
<tt>> Daisy Guo</tt></span><br>
<tt><span style="font-size:10.0pt">> </span></tt><span style="font-size:10.0pt;font-family:"Courier New""><br>
<tt>> _______________________________________________</tt><br>
<tt>> Mailing list: <a href="https://launchpad.net/~openstack">https://launchpad.net/~openstack</a></tt><br>
<tt>> Post to     : <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a></tt><br>
<tt>> Unsubscribe : <a href="https://launchpad.net/~openstack">https://launchpad.net/~openstack</a></tt><br>
<tt>> More help   : <a href="https://help.launchpad.net/ListHelp">https://help.launchpad.net/ListHelp</a></tt></span><o:p></o:p></p>
</div>
</div>
</body>
</html>