<?php

/* used for sidebar entry */
$NLpacks = array(
	"2.0.x" => "NLS2.0.x",
	"1.1.x" => "NLS1.1.x",
	"1.0.x" => "NLS1.0.x"
);

$oldrels = array(
	"5.4.0" => "201806041153",
	"5.2.3" => "201702270935",
	"5.2.2" => "201611140827",
	"5.2.1" => "201608220739",
	"5.2.0" => "201605160939",
	"5.1.1" => "201509061225",
	"5.1.0" => "201506010733",
	"5.0.1" => "201409101354",
	"5.0.0" => "201406020749",
	"4.1.2" => "201402022055",
	"4.1.1" => "201309020826",
	"4.1.0" => "201306100712",
	"4.0.2" => "201301140902",
	"4.0.1" => "201209131441",
	"4.0.0" => "201206040919",
	"3.2.1" => "201109132310",
	"3.2.0" => "201106061107",
	"3.1.2" => "201101311648",
	"3.1.1" => "201009141451",
	"3.1.0" => "201006071241",
	"3.0.1" => "200908281428",
	"3.0.0" => "200906151558",
	"2.2.2" => "200902101440",
	"2.2.1" => "200808261340",
	"2.2.0" => "200806091546",
	"2.1.1" => "200708301304",
	"2.1.0" => "200706251652",
	"2.0.4" => "200707131442",
	"2.0.3" => "200702141227",
	"2.0.2" => "200610251409",
	"2.0.0" => "200606221411",
	"1.1.1" => "200509282050",
	"1.1.0" => "200507070914",
	"1.0.3" => "200506221634",
	"1.0.2" => "200503231914",
	"1.0.1" => "200409171820",
	"1.0.0" => "200406281334"
);

function doLanguagePacks()
{
	global $downloadScript, $downloadPre;
	
?>
<div class="homeitem3col">
	<a name="NLS"></a>
	
	<h3>Language Packs</h3>

	<p>IBM is pleased to contribute translations for the Eclipse Modeling Development Tools subcomponent UML2.</p>
	<ul>
		<li>
			<a href="javascript:toggle('lang2_0')">2.0.x Language Packs</a><a name="NLS2.0.x"></a>
			<ul id="lang2_0">
				<?php 
					$packs = array(
						"2.0.x NLS Translation Packs" => "NLpacks-",
					);
					$cols = array(
						"UML2" => "uml2"
					);
					$subcols = array(
         				"2.0.1 SDK" => "SDK-2.0.1",
         				"2.0.1 Runtime" => "runtime-2.0.1",
         				"2.0.0 SDK" => "SDK-2.0.0",
         				"2.0.0 Runtime" => "runtime-2.0.0"
					);
					$packSuf = ".zip";
				    $folder = "NLS/2.0/";
				doNLSLinksList($packs, $cols, $subcols, $packSuf, $folder); ?>
				<li>
					<p>The language packs contain the following translations:</p>
					<ul>
						<li>NLpack1 - German, Spanish, French, Italian, Japanese, Korean, Portuguese (Brazil), Traditional Chinese, Simplified Chinese</li>
						<li>NLpack2 - Czech, Hungarian, Polish, Russian</li>
						<li>NLpack2a - Danish, Dutch, Finnish, Greek, Norwegian, Portuguese, Swedish and Turkish</li>
						<li>NLpackBidi - Arabic, Hebrew (EMF runtime only)</li>
					</ul>
					<p>Each language pack zip contains 4 other zips (one for each of the language groups above). Unpack these zips into your Eclipse directory before starting Eclipse.</p>
					<p> These translations are based on UML2 2.0.1 and 2.0.0, respectively. The NLS translation fragment packs should work with all subsequent 2.0.x maintenance releases, with any new strings remaining untranslated.</p>
				</li>
			</ul>
		</li>

		<li>
			<a href="javascript:toggle('lang1_1')">1.1.x Language Packs</a><a name="NLS1.1.x"></a>
			<ul id="lang1_1" style="display: none">
					<?php
					$packs = array(
						"1.1.x NLS Translation Packs" => "NLpacks-"
					);
					$cols = array(
						"UML2" => "uml2"
					);
					$subcols = array(
						"SDK" => "SDK-1.1.1",
						"Runtime" => "runtime-1.1.1"
					);
					$packSuf = ".zip";
        			$folder = "NLS/1.1/";
					doNLSLinksList($packs, $cols, $subcols, $packSuf, $folder, true); ?>
				<li>
					<p>The language packs contain the following translations:</p>
					<ul>
						<li>NLpack1 - German, Spanish, French, Italian, Japanese, Korean, Portuguese (Brazil), Traditional Chinese, Simplified Chinese</li>
						<li>NLpack2 - Czech, Hungarian, Polish, Russian</li>
						<li>NLpackBidi - Arabic</li>
					</ul>
					<p>Each language pack zip contains 6 other zips (two for each of the language groups above: an NLS translation fragment pack and a feature overlay). Unpack both these zips (for every language group you need) into your Eclipse directory before starting Eclipse. In particular, the feature overlay must actually write into the existing feature directories.</p>
					<p>These translations are based on UML2 1.1.1. The NLS translation fragment packs should work with all subsequent 1.1 maintenance releases, with any new strings remaining untranslated. The feature overlays will need to be reissued for each subsequent release.</p>
				</li>
			</ul>
		</li>

		<li>
			<a href="javascript:toggle('lang1_0')">1.0.x Language Packs</a><a name="NLS1.0.x"></a>
			<ul id="lang1_0" style="display: none">
					<?php
					$packs = array(
						"1.0.x NLS Translation Packs" => "NLpacks-",
					);
					$cols = array(
						"UML2" => "uml2"
					);
					$subcols = array(
						"SDK" => "SDK-1.0.2",
						"Runtime" => "runtime-1.0.2"
					);
					$packSuf = ".zip";
        			$folder = "NLS/1.0/";
					doNLSLinksList($packs, $cols, $subcols, $packSuf, $folder, true); ?>
				<li>
					<p>The language packs contain the following translations:</p>
					<ul>
						<li>NLpack1 - German, Spanish, French, Italian, Japanese, Korean, Portuguese (Brazil), Traditional Chinese, Simplified Chinese</li>
						<li>NLpack2 - Czech, Hungarian, Polish, Russian</li>
					</ul>
					<p>Each language pack zip contains 2 zips (one for each of the language groups above). Each language pack is distributed as a feature which you can install by downloading the zip file, unzipping it into your Eclipse directory and restarting Eclipse.</p>
					<p>These translations are based on UML2 1.0.2 but should work with all subsequent 1.0 maintenance releases. If new strings are added to UML2 after 1.0.2, they will not show up as translated in the 1.0.x stream when you install this language pack.</p>
				</li>
			</ul>
		</li>
	</ul>
</div>

<?php
}

function showNotes()
{
?>
	<div class="homeitem3col">
		<h3>Questions?</h3>
		<p>If you have problems downloading the drops, contact the <a href="mailto:webmaster@eclipse.org">webmaster</a>.</p>
		<p>These are the minimum required downloads for using UML2:</p>
		<ul>
			<li>To use UML2, you require both the UML2 &amp; <a href="/modeling/emf/downloads/?project=emf">EMF</a> Runtimes.</li>
			<li>To use UML2 with XSD models, you will also require the <a href="/modeling/mdt/downloads/?project=xsd">XSD</a> Runtime.</li>
		</ul>
		<p>All downloads are provided under the terms and conditions of the <a href="http://www.eclipse.org/legal/epl/notice.html">Eclipse Foundation Software User Agreement</a> unless otherwise specified.</p>
	</div>
<?php
}
?>
