<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html;
      charset=windows-1252">
    <title>NetBeans Localization</title>
    <meta name="description" content="Help translate the NetBeans IDE
      and netbeans.org website into your native language">
    <link rel="stylesheet" type="text/css" href="../../netbeans.css">
    <meta name="NAV_LINK" content="Localization">
  </head>
  <body>
    <a name="website">
      <h1>Translating NetBeans.org Web Content</h1>
    </a>
    <p>Getting important NetBeans.org web content translated into
      different languages is a high priority for the NetBeans community.
      The NetBeans Documentation and Web teams have put together a list
      of pages that would be of great use to many if translated. The
      list includes key product and feature pages, as well as tutorials
      and other educational resources.</p>
    <p>Are you interested in translating for NetBeans? You are very
      welcome to use the instructions below to get started. Even a
      single translated page is of great help to the NetBeans community.<br>
    </p>
    <p>Thank you for your support!<br>
    </p>
    <h3><a name="start">How to Get Started</a></h3>
    <ol>
      <li><b>Check the <a href="localisation-status.html"><b>Localization


              Status Page</b></a>.</b> Find out what page needs updating
        (indicated by the red or yellow table cells). Pick a page or
        pages you'd like to work on. </li>
      <li><b>Find the Language-Specific Page.</b> Note that the status
        page lists only the most frequently-used languages. If your
        language is missing from status page, you're still welcome to
        contribute a translation. Follow these steps:<br>
      </li>
      <ol type="a">
        <li>Select and open the English version of the page you would
          like to translate.</li>
        <li>It is possible that an obsolete translation of the page
          exists in your language. To find out, use the "Choose page
          language" drop-down box in the very top right corner of the
          page. <br>
        </li>
        <ol type="i">
          <li>If an old translation exists you can download that page
            and update the content.</li>
          <li>If your language is missing from the drop-down list, it
            means the page has not been translated to your language yet.
            At this point, you can decide to create a fresh translation
            in your language by downloading the English version.<br>
          </li>
        </ol>
      </ol>
      <li><b>Download the Page for Translation.</b> Save the page from
        the web browser to your computer and then open it using an
        editor of your choice, e.g., NetBeans IDE. Translate the
        content.</li>
      <li><b>Contact NetBeans About Your Translation.</b> Write to the <a
href="/about/contact_form.html?to=14&amp;subject=interested%20in%20NetBeans.org%20translation">NetBeans

          Web team</a> to let us know that you are working or will be
        working on that page. It's very <b>important</b> that you do
        this so that we can update <a href="localisation-status.html">the
          status page</a>--this lets other volunteers see that work is
        being done on that page and prevents duplication or double work.
        Also, once we are in touch with you, we can assist you if
        questions arise.</li>
      <li> <b>Send in the Translated Page.</b> Once you are done with
        the translation, please ZIP the translated file and send it to
        the NetBeans web team. We will do a quick sanity-check
        (broken/misdirected links or empty images, etc.) and then
        publish the translated page for you. Please note that we do not
        have the resources to carry out content review of community
        translations, therefore as a volunteer translator you are
        responsible for the accuracy of your content. </li>
    </ol>
    <br>
    <h1>Translating NetBeans IDE<br>
    </h1>
    <p> Currently community translation of NetBeans IDE (the product) is
      on hold. Nevertheless, if you are interested in helping to
      translate the IDE to your own language, write to the <a
href="/about/contact_form.html?to=14&amp;subject=interested%20in%20NetBeans%20IDE%20translation">NetBeans


        web team</a> so we know who you are and we can contact you when
      this aspect of the community localization project is revived. </p>
  </body>
</html>
