<!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;
            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>
