<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en">
    <head>
        <META http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
        <title>Apache JMeter
          -
          JMeter Localisation (Translator's Guide)</title>
        <meta name="author" value="Apache JMeter developers">
        <meta name="email" value="dev@jmeter.apache.org">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link href="https://fonts.googleapis.com/css?family=Merriweather:400normal" rel="stylesheet" type="text/css">
        <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css">
        <link rel="stylesheet" type="text/css" href="../css/new-style.css">
        <link rel="apple-touch-icon-precomposed" href="../images/apple-touch-icon.png">
        <link rel="icon" href="../images/favicon.png">
        <meta name="msapplication-TileColor" content="#ffffff">
        <meta name="msapplication-TileImage" content="../images/mstile-144x144.png">
        <meta name="theme-color" content="#ffffff">
    </head>
    <body role="document">
        <a href="#content" class="hidden">Main content</a>
        <div class="header">
            <!--
            APACHE LOGO
          -->
            <div>
                <a href="https://www.apache.org"><img title="Apache Software Foundation" class="asf-logo logo" src="../images/asf-logo.svg" alt="Logo ASF"></a>
            </div>
            <!--
              PROJECT LOGO
            -->
            <div>
                <a href="https://jmeter.apache.org/"><img class="logo" src="../images/logo.svg" alt="Apache JMeter"></a>
            </div>
            <div class="banner">
                <a href="https://www.apache.org/events/current-event.html"><img src="https://www.apache.org/events/current-event-234x60.png" alt="Current Apache event teaser"></a>
                <div class="clear"></div>
            </div>
        </div>
        <div class="nav">
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">About</div>
                    <ul>
                        <li>
                            <a href="../index.html">Overview</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/licenses/">License</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Download</div>
                    <ul>
                        <li>
                            <a href="../download_jmeter.cgi">Download Releases</a>
                        </li>
                        <li>
                            <a href="../changes.html">Release Notes</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Documentation</div>
                    <ul>
                        <li>
                            <a href="../usermanual/get-started.html">Get Started</a>
                        </li>
                        <li>
                            <a href="../usermanual/index.html">User Manual</a>
                        </li>
                        <li>
                            <a href="../usermanual/best-practices.html">Best Practices</a>
                        </li>
                        <li>
                            <a href="../usermanual/component_reference.html">Component Reference</a>
                        </li>
                        <li>
                            <a href="../usermanual/functions.html">Functions Reference</a>
                        </li>
                        <li>
                            <a href="../usermanual/properties_reference.html">Properties Reference</a>
                        </li>
                        <li>
                            <a href="../changes_history.html">Change History</a>
                        </li>
                        <li>
                            <a href="../api/index.html">Javadocs</a>
                        </li>
                        <li>
                            <a href="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>
                        </li>
                        <li>
                            <a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterFAQ">FAQ (Wiki)</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Tutorials</div>
                    <ul>
                        <li>
                            <a href="../usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a>
                        </li>
                        <li>
                            <a href="../usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a>
                        </li>
                        <li>
                            <a href="../usermanual/junitsampler_tutorial.html">JUnit Sampler</a>
                        </li>
                        <li>
                            <a href="../usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a>
                        </li>
                        <li>
                            <a href="../usermanual/jmeter_tutorial.html">Extending JMeter</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Community</div>
                    <ul>
                        <li>
                            <a href="../issues.html">Issue Tracking</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/security/">Security</a>
                        </li>
                        <li>
                            <a href="../mail.html">Mailing Lists</a>
                        </li>
                        <li>
                            <a href="../svnindex.html">Source Repositories</a>
                        </li>
                        <li>
                            <a href="../building.html">Building and Contributing</a>
                        </li>
                        <li>
                            <a href="https://projects.apache.org/project.html?jmeter">Project info at Apache</a>
                        </li>
                        <li>
                            <a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterCommitters">Contributors</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Foundation</div>
                    <ul>
                        <li>
                            <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
        <div class="main" id="content">
            <div class="social-media">
                <ul class="social-media-links">
                    <li class="twitter">
                        <a href="https://twitter.com/ApacheJMeter" title="Follow us on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i>Twitter</a>
                    </li>
                    <li class="github">
                        <a href="https://github.com/apache/jmeter" title="Fork us on github"><i class="fa fa-github" aria-hidden="true"></i>github</a>
                    </li>
                </ul>
            </div>
            <div class="section">
                <h1 id="intro">
                    Introduction<a class="sectionlink" href="#intro" title="Link to here">&para;</a>
                </h1>
                
                <p>
                    This document describes the process of creating and maintaining translated texts for JMeter in languages
other than English. English has been tacitly chosen as the project's primary (or "default") language &ndash; despite its
obvious inadequacy for reasonably unambiguous communication &ndash; as a tribute to the Power of the Empire :-)
                    <br>
                    The metropolitan language texts are thus maintained by the software developers, while other project contributors
(called "translators" in this document) take care of maintaining the texts in the languages of the
provinces. The process of producing and maintaining the later is called "translation" in this document.
                </p>
                
                <p>
                    This document assumes you'll be using i18nEdit as your tool to edit properties files, and instructions will
be specific to this software, but this is not mandatory: the process should mostly work also if you prefer to use
another tool, such as or <b>vi</b> or <b>Emacs</b>.

                </p>
                
                <p>This document describes 6 processes:</p>
                
                <ol>
                    
                    <li>Obtaining the current texts [translators].</li>
                    
                    <li>Providing the current texts to translators [developers].</li>
                    
                    <li>Downloading and running i18nEdit [everyone].</li>
                    
                    <li>Translating [translators].</li>
                    
                    <li>Submitting your translations to the project [translators].</li>
                    
                    <li>Merging in new translations [committers].</li>
                    
                </ol>
                
            </div>
            <div class="section">
                <h1 id="obtain">
                    Obtaining the current texts<a class="sectionlink" href="#obtain" title="Link to here">&para;</a>
                </h1>
                
                <p>
                    If you want to help with JMeter's translation process, start by reading this document. Then
send a message to <a href="mailto:dev@jmeter.apache.org">dev@jmeter.apache.org</a>
stating your intention. The files you need (*.properties and *.metaprop) are included in the source archive.
But if you are having any difficulty, one of the project contributors will be able to grab the current texts
from SVN and send them to you. You'll receive a jar, zip, tar or tgz file that you'll need to unpack in your
local disk.
                </p>
                
                <p>
                    If you are familiar with SVN or you're brave, feel free to anonymously connect to the Apache SVN server
and obtain the JMeter source yourself, as described in
<a href="http://jmeter.apache.org/svnindex.html">http://jmeter.apache.org/svnindex.html</a>
&ndash; the files necessary to the translation process are all under the <span class="code">jmeter/src</span> directory.

                </p>
                
                <p>
                    Once you've unpacked or checked out the files, make sure to find file <span class="code">src/i18nedit.properties</span> in there:
you'll need to know where it is to start working with i18nEdit.
                </p>
                
            </div>
            <div class="section">
                <h1 id="provide">
                    Providing the current texts to translators<a class="sectionlink" href="#provide" title="Link to here">&para;</a>
                </h1>
                
                <p>If you have access to JMeter's SVN repository and you want to pack the files necessary for localisation
for sending to a translator, just go to the directory above the project root and issue the following command:
</p>
                
                <pre class="source">
tar czf jmeter-localisation.tgz `find jmeter/src -name "*.properties" -o -name "*.metaprops"`
</pre>
                
                <p>
Of course you could also send the translator the whole jmeter directory, but this will make their life easier.
</p>
                
            </div>
            <div class="section">
                <h1 id="i18nEdit">
                    Downloading and running i18nEdit<a class="sectionlink" href="#i18nEdit" title="Link to here">&para;</a>
                </h1>
                
                <p>
                    The runtime for i18nEdit can be obtained from
<a href="https://sourceforge.net/projects/i18nedit/">https://sourceforge.net/projects/i18nedit/</a>.
Download the binary distribution (i18nedit-1.2.2.jar) and save it locally.
                </p>
                
                <p>To run i18nEdit, just make sure to have a reasonably modern Java Runtime Environment in your PATH, change
to the directory where you saved i18nedit-1.2.2.jar, then issue the following command:</p>
                
                <pre class="source">
java -jar i18nedit-1.2.2.jar
</pre>
                Then:

                <ol>
                    
                    <li>If you've never run i18nEdit before, choose a language. The rest of this document assumes you chose UK English.</li>
                    
                    <li>
                        Select the "<span class="code">Projects</span>" menu, then "<span class="code">Open project&hellip;</span>".
                    </li>
                    
                    <li>
                        Navigate to <span class="code">jmeter/src/</span>, select <span class="code">i18nedit.properties</span>, and press the "<span class="code">Open</span>" button.
                    </li>
                    
                    <li>
                        In the window that opens, select the "<span class="code">Project</span>" menu, then "<span class="code">Project settings</span>". Check that your target language
appears in the list in field "<span class="code">Additional locales (ISO codes)</span>". Otherwise, add it now. Press "<span class="code">Save</span>".
                    </li>
                    
                </ol>
                You're now ready to start translating.


            </div>
            <div class="section">
                <h1 id="translating">
                    Translating<a class="sectionlink" href="#translating" title="Link to here">&para;</a>
                </h1>
                
                <p>
                    Before you start translating, select the "<span class="code">Project</span>" menu, then "<span class="code">Translation settings</span>". Choose work mode
"<span class="code">Directed translation (source to target)</span>". Enter "<span class="code">en</span>" (without the quotes) in the "<span class="code">Source localization</span>" field. Enter
the ISO code of your target language in the "<span class="code">Target localization field</span>".
                </p>
                
                <p>
                    Click on one of the editable fields in the right panel ("<span class="code">Comment</span>" or "<span class="code">Content</span>" for your language). Press <span class="keycombo"><span class="keysym">F2</span></span>.
i18nEdit will bring you to the first property that requires your attention, either because a translation does not yet
exist for it or because the English text has changed since the translation was provided. Enter or fix the text if
necessary, then press <span class="keycombo"><span class="keysym">F2</span></span> again to repeat the process.
                </p>
                
                <p>i18nEdit's on-line help is excellent: read through it for more information and tips.</p>
                
            </div>
            <div class="section">
                <h1 id="submitting">
                    Submitting your translations to the project<a class="sectionlink" href="#submitting" title="Link to here">&para;</a>
                </h1>
                
                <p>
                    Once you're done translating, just pack up the whole set of files in <span class="code">jmeter/src</span> in a jar, zip, tar,
tgz, or alike and attach them to a JMeter bug report
(follow link to "Known bugs" in <a href="http://jmeter.apache.org/">JMeter's home page</a> for that).
                </p>
                
            </div>
            <div class="section">
                <h1 id="merging">
                    Merging in new translations<a class="sectionlink" href="#merging" title="Link to here">&para;</a>
                </h1>
                If you're a committer receiving text files from a translator, follow this steps to merge them into
the project:

                <ol>
                    
                    <li>Unpack the files submitted by the translator in a separate directory.</li>
                    
                    <li>
                        Start i18nEdit as described in <a href="#i18nEdit">Downloading and running i18nEdit</a> above.
                    </li>
                    
                    <li>If the translator worked in a new language, make sure it is listed in the Additional locales field in the Project Settings.</li>
                    
                    <li>
                        Open the "<span class="code">Team</span>" menu and select "<span class="code">Merge changes as integrator</span>".
                    </li>
                    
                    <li>
                        Enter the path to the <span class="code">src</span> directory in the files submitted by the translator.
                    </li>
                    
                    <li>Select the translator's target language.</li>
                    
                    <li>
                        Press "<span class="code">Perform merge</span>".
                    </li>
                    
                    <li>Close i18nEdit and commit to SVN as usual (remember to Refresh your project if you're using Eclipse).</li>
                    
                </ol>
                
            </div>
            <div class="share-links">
                      Share this page:
      
                <ul>
                    <li class="fb">
                        <a data-social-url="https://facebook.com/sharer/sharer.php?u=" title="Share on facebook"><i class="fa fa-facebook" aria-hidden="true"></i>share</a>
                    </li>
                    <li class="twitter">
                        <a data-social-url="https://twitter.com/intent/tweet?url=" title="Tweet on twitter"><i class="fa fa-twitter" aria-hidden="true"></i>tweet</a>
                    </li>
                </ul>
            </div>
            <a href="#top" id="topButton">Go to top</a>
        </div>
        <div class="footer">
            <div class="copyright">
            Copyright &copy;
            1999 &ndash;
            2022
            , Apache Software Foundation
          </div>
            <div class="trademarks">Apache, Apache JMeter, JMeter, the Apache
            feather, and the Apache JMeter logo are
            trademarks of the
            Apache Software Foundation.
          </div>
        </div>
        <script>(function(){
            "use strict";
            // enable 'go to top' button functionality
            document.addEventListener('scroll', function() {
                if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
                    document.getElementById("topButton").style.display = "block";
                } else {
                    document.getElementById("topButton").style.display = "none";
                }
            });
            // fill in the current location into social links on this page.
            var as = document.getElementsByTagName('a');
            var loc = document.location.href;
            if (!loc.toLowerCase().startsWith('http')) {
                return;
            }
            for (var i=0; i<as.length; i++) {
                var href = as[i].getAttribute('data-social-url');
                if (href !== null) {
                    as[i].href = href + encodeURIComponent(loc);
                }
            }
        })();</script>
    </body>
</html>
