<!DOCTYPE html>
<html>
<head>
	<meta name="copyright" content="Copyright (c) 2013 IBM Corporation and others.">
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>Babel Orion UI Language Pack Plugin in [language]</title>
	<script type="text/javascript" src="lib/plugin.js"></script>
	<script type="text/javascript" src="lib/require.js"></script>
	<script>
		window.onload = function() {
			var headers = {
				name: "Babel Orion UI Language Pack Plugin in [language]",
				version: "[build_id]",
				description: "Babel community translations for Orion UI in [language]."
			};
			var provider = new orion.PluginProvider(headers);
			var messages = [
				//The list of message files
				'orion/compare/nls/[locale]/messages',
				'orion/content/nls/[locale]/messages',
				'orion/crawler/nls/[locale]/messages',
				'orion/edit/nls/[locale]/messages',
				'orion/mixloginstatic/nls/[locale]/messages',
				'orion/navigate/nls/[locale]/messages',
				'orion/nls/[locale]/messages',
				'orion/operations/nls/[locale]/messages',
				'orion/problems/nls/[locale]/messages',
				'orion/search/nls/[locale]/messages',
				'orion/settings/nls/[locale]/messages',
				'orion/shell/nls/[locale]/messages',
				'orion/sites/nls/[locale]/messages',
				'orion/stringexternalizer/nls/[locale]/messages',
				'orion/terminal/nls/[locale]/messages',
				'orion/widgets/nls/[locale]/messages'
			];
			
			require({baseUrl: 'org.eclipse.orion.client.ui'});
			
			require(['../lib/Deferred'], function(Deferred){
			
				function defineMessages(msg){
					provider.registerServiceProvider("orion.i18n.message", {
						getMessageBundle: function() {
						var deferred = new Deferred();
							require([msg], function(messages){
									deferred.resolve(messages);
								});
							return deferred;
						}
					}, {
						name: msg
					});
				};
				
				for(var i=0; i<messages.length; i++){
					defineMessages(messages[i]);
				}
				
				provider.connect();
			
			});
		};
		
	</script>
</head>
<body>
<h1>Babel Orion UI Language Pack Plugin in [language]</h1>
<h2>Build ID: [build_id]</h2>
<p>This Babel language pack plugin is based on the community translations entered into the <a href='http://babel.eclipse.org/'>Babel Translation Tool</a>, and may not be complete or entirely accurate.
If you find missing or incorrect translations, please use the <a href='http://babel.eclipse.org/'>Babel Translation Tool</a> to update them.
All downloads are provided under the terms and conditions of the <a href='http://www.eclipse.org/legal/epl/notice.php'>Eclipse Foundation Software User Agreement</a> unless otherwise specified.</p>
<h2>Installation</h2>
<p>See <a href='http://wiki.eclipse.org/Orion/How_Tos/Installing_A_Plugin'>Installing A Plugin</a> for instructions on how to install this Babel language pack plugin.</p>
</body>
</html>
