<!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 his 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;
            2019
            , 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>
