Index: lang/en.php
===================================================================
--- lang/en.php	(wersja 439)
+++ lang/en.php	(kopia robocza)
@@ -2,10 +2,25 @@
 $translations = array(
 	'General_Unknown' => 'Unknown',
 	'General_Required' => '%s required',
-
-	'Login_LoginPasswordNotCorrect' => 'Username & Password not correct',
-	'Login_Login' => 'Username',
-	'Login_Password' => 'Password',
-	'Login_LogIn' => 'Log in',
-	
-);
\ brakuje znaku końca linii na końcu pliku 
+	'General_Error' => 'Error',
+	'General_Warning' => 'Warning',
+	'General_BackToHomepage' => 'Back to Piwik homepage',
+	'General_Yes' => 'Yes',
+	'General_No' => 'No',
+	'General_Delete' => 'Delete',
+	'General_Edit' => 'Edit',
+	'General_Ok' => 'Ok',
+	'General_Close' => 'Close',
+	'General_Logout' => 'Logout',
+	'General_Done' => 'Done',
+	'General_LoadingData' => 'Loading data...',
+	'General_ErrorRequest' => 'Oops&hellip; problem during the request, please try again.',
+	'General_Next' => 'Next',
+	'General_Previous' => 'Previous',
+	'General_Table' => 'Table',
+	'General_Piechart' => 'Piechart',
+	'General_TagCloud' => 'Tag Cloud',
+	'General_VBarGraph' => 'Vertial bar graph',
+	'General_GraphData' => 'Graph data',
+	'General_Refresh' => 'Refresh the page',
+);
Index: lang/fr.php
===================================================================
--- lang/fr.php	(wersja 439)
+++ lang/fr.php	(kopia robocza)
@@ -2,10 +2,4 @@
 $translations = array(
 	'General_Unknown' => 'Inconnu',
 	'General_Required' => '%s requis',
-
-	'Login_LoginPasswordNotCorrect' => 'Utilisateur & Mot de passe not correct',
-	'Login_Login' => 'Utilisateur',
-	'Login_Password' => 'Mot de passe',
-	'Login_LogIn' => 'Log in',
-	
 );
Index: plugins/VisitFrequency/lang/en.php
===================================================================
--- plugins/VisitFrequency/lang/en.php	(wersja 0)
+++ plugins/VisitFrequency/lang/en.php	(wersja 0)
@@ -0,0 +1,11 @@
+<?php
+$translations = array(
+	'VisitFrequency_Evolution' => 'Evolution over the period',
+	'VisitFrequency_ReturnVisits' => '%s returning visits',
+	'VisitFrequency_ReturnActions' => '%s actions by the returning visits',
+	'VisitFrequency_ReturnMaxActions' => '%s maximum actions by a returning visit',
+	'VisitFrequency_ReturnTotalTime' => '%s total time spent by returning visits',
+	'VisitFrequency_ReturnBounces' => '%s times that a returning visit has bounced (left the site after one page)',
+
+);
+
Index: plugins/VisitFrequency/index.tpl
===================================================================
--- plugins/VisitFrequency/index.tpl	(wersja 439)
+++ plugins/VisitFrequency/index.tpl	(kopia robocza)
@@ -2,9 +2,9 @@
 <script type="text/javascript" src="plugins/Home/templates/sparkline.js"></script>
 
 <a name="evolutionGraph" graphId="VisitFrequencygetLastVisitsReturningGraph"></a>
-<h2>Evolution over the period</h2>
+<h2>{'VisitFrequency_Evolution'|translate}</h2>
 {$graphEvolutionVisitFrequency}
 
 {include file=VisitFrequency/sparklines.tpl}
 	
-{postEvent name="template_footerVisitsFrequency"}
\ brakuje znaku końca linii na końcu pliku 
+{postEvent name="template_footerVisitsFrequency"}
Index: plugins/VisitFrequency/VisitFrequency.php
===================================================================
--- plugins/VisitFrequency/VisitFrequency.php	(wersja 439)
+++ plugins/VisitFrequency/VisitFrequency.php	(kopia robocza)
@@ -18,11 +18,12 @@
 	public function getInformation()
 	{
 		$info = array(
-			'name' => 'VisitorFrequency',
+			'name' => 'VisitFrequency',
 			'description' => 'VisitorFrequency',
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
+			'translationAvailable' => true
 		);
 		
 		return $info;
Index: plugins/VisitFrequency/sparklines.tpl
===================================================================
--- plugins/VisitFrequency/sparklines.tpl	(wersja 439)
+++ plugins/VisitFrequency/sparklines.tpl	(kopia robocza)
@@ -1,6 +1,12 @@
 
-	<p><img class="sparkline" src="{$urlSparklineNbVisitsReturning}" /> <span><strong>{$nbVisitsReturning} </strong> returning visits</span></p>
-	<p><img class="sparkline" src="{$urlSparklineNbActionsReturning}" /> <span><strong>{$nbActionsReturning} </strong> actions by the returning visits</span></p>
-	<p><img class="sparkline" src="{$urlSparklineMaxActionsReturning}" /> <span><strong>{$maxActionsReturning} </strong> maximum actions by a returning visit</span></p>
-	<p><img class="sparkline" src="{$urlSparklineSumVisitLengthReturning}" /> <span><strong>{$sumVisitLengthReturning|sumtime} </strong> total time spent by returning visits</span></p>
-	<p><img class="sparkline" src="{$urlSparklineBounceCountReturning}" /> <span><strong>{$bounceCountReturning} </strong> times that a returning visit has bounced (left the site after one page) </span></p>
+	<p><img class="sparkline" src="{$urlSparklineNbVisitsReturning}" /> <span>
+	{'VisitFrequency_ReturnVisits'|translate:"<strong>$nbVisitsReturning</strong>"}</span></p>
+	<p><img class="sparkline" src="{$urlSparklineNbActionsReturning}" /> <span>
+	{'VisitFrequency_ReturnActions'|translate:"<strong>$nbActionsReturning</strong>"}</span></p>
+	<p><img class="sparkline" src="{$urlSparklineMaxActionsReturning}" /> <span>
+	 {'VisitFrequency_ReturnMaxActions'|translate:"<strong>$maxActionsReturning</strong>"}</span></p>
+	<p><img class="sparkline" src="{$urlSparklineSumVisitLengthReturning}" /> <span>
+	 {assign var=sumtimeVisitLengthReturning value=$sumVisitLengthReturning|sumtime}
+	 {'VisitFrequency_ReturnTotalTime'|translate:"<strong>$sumtimeVisitLengthReturning</strong>"}</span></p>
+	<p><img class="sparkline" src="{$urlSparklineBounceCountReturning}" /> <span>
+	 {'VisitFrequency_ReturnBounces'|translate:"<strong>$bounceCountReturning</strong>"} </span></p>
Index: plugins/SitesManager/API.php
===================================================================
--- plugins/SitesManager/API.php	(wersja 439)
+++ plugins/SitesManager/API.php	(kopia robocza)
@@ -270,8 +270,7 @@
 
 		if($nbSites == 1)
 		{
-			throw new Exception("It is not possible to delete this website as it is the only registered website. 
-			Add a new website first, then delete this one.");
+			throw new Exception(Piwik_TranslateException("SitesManager_ExceptionDeleteSite"));
 		}
 		
 		$db = Zend_Registry::get('db');
@@ -300,7 +299,7 @@
 		if(!is_array($urls)
 			|| count($urls) == 0)
 		{
-			throw new Exception("You must specify at least one URL for the site.");
+			throw new Exception(Piwik_TranslateException("SitesManager_ExceptionNoUrl"));
 		}
 	}
 
@@ -477,7 +476,7 @@
 	{
 		if(empty($siteName))
 		{
-			throw new Exception("The site name can't be empty.");
+			throw new Exception(Piwik_TranslateException("SitesManager_ExceptionEmptyName"));
 		}
 	}
 
@@ -493,7 +492,7 @@
 		{			
 			if(!self::isValidUrl($url))
 			{
-				throw new Exception("The url '$url' is not a valid URL.");
+				throw new Exception(sprintf(Piwik_TranslateException("SitesManager_ExceptionInvalidUrl"),$url));
 			}
 		}
 	}
Index: plugins/SitesManager/lang/en.php
===================================================================
--- plugins/SitesManager/lang/en.php	(wersja 0)
+++ plugins/SitesManager/lang/en.php	(wersja 0)
@@ -0,0 +1,19 @@
+<?php
+$translations = array(
+	'SitesManager_Sites' => 'Sites',
+	'SitesManager_JsCode' => 'Javascript code',
+	'SitesManager_JsCodeHelp' => 'Here is the javascript code to include on all your pages',
+	'SitesManager_ShowJsCode' => 'show code',
+	'SitesManager_NoWebsites' => 'You don\'t have any website to administrate.',
+	'SitesManager_AddSite' => 'Add a new Site',
+	'SitesManager_Id' => 'Id',
+	'SitesManager_Name' => 'Name',
+	'SitesManager_Urls' => 'URLs',
+
+	'SitesManager_DeleteConfirm_js' => 'Are you sure you want to delete the website %s?',
+	
+	'SitesManager_ExceptionDeleteSite' => 'It is not possible to delete this website as it is the only registered website. Add a new website first, then delete this one.',
+	'SitesManager_ExceptionNoUrl' => 'You must specify at least one URL for the site.',
+	'SitesManager_ExceptionEmptyName' => 'The site name can\'t be empty.',
+	'SitesManager_ExceptionInvalidUrl' => 'The url \'%s\' is not a valid URL.',
+);
Index: plugins/SitesManager/SitesManager.php
===================================================================
--- plugins/SitesManager/SitesManager.php	(wersja 439)
+++ plugins/SitesManager/SitesManager.php	(kopia robocza)
@@ -24,7 +24,7 @@
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
-			'translationAvailable' => false,
+			'translationAvailable' => true,
 		);
 		
 		return $info;
Index: plugins/SitesManager/Controller.php
===================================================================
--- plugins/SitesManager/Controller.php	(wersja 439)
+++ plugins/SitesManager/Controller.php	(kopia robocza)
@@ -39,4 +39,4 @@
 		
 		echo $view->render();
 	}
-}
\ brakuje znaku końca linii na końcu pliku 
+}
Index: plugins/SitesManager/templates/SitesManager.tpl
===================================================================
--- plugins/SitesManager/templates/SitesManager.tpl	(wersja 439)
+++ plugins/SitesManager/templates/SitesManager.tpl	(kopia robocza)
@@ -1,21 +1,23 @@
+{loadJavascriptTranslations modules='SitesManager'}
+
 <script type="text/javascript" src="plugins/SitesManager/templates/SitesManager.js"></script>
 
-<h2>Sites</h2>
+<h2>{'SitesManager_Sites'|translate}</h2>
 <div id="ajaxError" style="display:none"></div>
-<div id="ajaxLoading" style="display:none">Loading... <img src="themes/default/loading.gif"></div>
+<div id="ajaxLoading" style="display:none">{'General_LoadingData'|translate} <img src="themes/default/loading.gif"></div>
 
 {if $sites|@count == 0}
-	You don't have any website to administrate.
+	{'SitesManager_NoWebsites'|translate}
 {else}
 	<table id="editSites" border=1 cellpadding="10">
 		<thead>
 			<tr>
-			<th>Id</th>
-			<th>Name</th>
-			<th>URLs</th>
+			<th>{'SitesManager_Id'|translate}</th>
+			<th>{'SitesManager_Name'|translate}</th>
+			<th>{'SitesManager_Urls'|translate}</th>
 			<th> </th>
 			<th> </th>
-			<th> Javascript code </th>
+			<th> {'SitesManager_JsCode'|translate} </th>
 			</tr>
 		</thead>
 		<tbody>
@@ -25,13 +27,13 @@
 				<td id="siteName" class="editableSite">{$site.name}</td>
 				<td id="urls" class="editableSite">{foreach from=$site.alias_urls item=url}{$url}<br>{/foreach}</td>       
 				<td><img src='plugins/UsersManager/images/edit.png' class="editSite" id="row{$i}" href='#'></td>
-				<td><img src='plugins/UsersManager/images/remove.png' class="deleteSite" id="row{$i}" value="Delete"></td>
-				<td><a href='{url actionToLoad=displayJavascriptCode idsite=$site.idsite}'>Show Code</a></td>
+				<td><img src='plugins/UsersManager/images/remove.png' class="deleteSite" id="row{$i}" value="{'General_Delete'|translate}"></td>
+				<td><a href='{url actionToLoad=displayJavascriptCode idsite=$site.idsite}'>{'SitesManager_ShowJsCode'|translate}</a></td>
 			</tr>
 			{/foreach}
 			
 		</tbody>
 	</table>
-	<div id="addRowSite"><img src='plugins/UsersManager/images/add.png'> <a href="#">Add a new Site</a></div>
+	<div id="addRowSite"><img src='plugins/UsersManager/images/add.png'> <a href="#">{'SitesManager_AddSite'|translate}</a></div>
 {/if}
 
Index: plugins/SitesManager/templates/DisplayJavascriptCode.tpl
===================================================================
--- plugins/SitesManager/templates/DisplayJavascriptCode.tpl	(wersja 439)
+++ plugins/SitesManager/templates/DisplayJavascriptCode.tpl	(kopia robocza)
@@ -1,4 +1,4 @@
-<p>Here is the javascript code to include on all your pages:</p>
+<p>{'SitesManager_JsCodeHelp'|translate}:</p>
 
 <code>
 {$jsTag}
Index: plugins/SitesManager/templates/SitesManager.js
===================================================================
--- plugins/SitesManager/templates/SitesManager.js	(wersja 439)
+++ plugins/SitesManager/templates/SitesManager.js	(kopia robocza)
@@ -108,7 +108,7 @@
 			var idRow = $(this).attr('id');
 			var nameToDelete = $(this).parent().parent().find('#siteName').html();
 			var idsiteToDelete = $(this).parent().parent().find('#idSite').html();
-			if(confirm('Are you sure you want to delete the website "'+nameToDelete+'" (idSite = '+idsiteToDelete+')?'))
+			if(confirm(_pk_translate('SitesManager_DeleteConfirm','Are you sure you want to delete the website %s','"'+nameToDelete+'" (idSite = '+idsiteToDelete+')')) )
 			{
 				$.ajax( getDeleteSiteAJAX( idsiteToDelete ) );
 			}
Index: plugins/Dashboard/lang/en.php
===================================================================
--- plugins/Dashboard/lang/en.php	(wersja 0)
+++ plugins/Dashboard/lang/en.php	(wersja 0)
@@ -0,0 +1,14 @@
+<?php
+$translations = array(
+	'Dashboard_AddWidget' => 'Add a widget...',
+	'Dashboard_DeleteWidgetConfirm' => 'Are you sure you want to delete this widget from the dashboard?',
+	'Dashboard_SelectWidget' => 'Select the widget to add in the dashboard',
+	'Dashboard_AddPreviewedWidget' => 'Add previewed widget to the dashboard',
+	'Dashboard_WidgetPreview' => 'Widget preview',	
+
+	'Dashboard_TitleWidgetInDashboard_js' => 'Widget already in dashboard',
+	'Dashboard_TitleClickToAdd_js' => 'Click to add to dashboard',
+	'Dashboard_LoadingPreview_js' => 'Loading preview, please wait...',
+	'Dashboard_LoadingWidget_js' => 'Loading widget, please wait...',
+	'Dashboard_WidgetNotFound_js' => 'Widget not found',
+);
Index: plugins/Dashboard/Dashboard.php
===================================================================
--- plugins/Dashboard/Dashboard.php	(wersja 439)
+++ plugins/Dashboard/Dashboard.php	(kopia robocza)
@@ -20,6 +20,7 @@
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
+			'translationAvailable' => true,
 		);
 	}
 
Index: plugins/Dashboard/templates/Dashboard.js
===================================================================
--- plugins/Dashboard/templates/Dashboard.js	(wersja 439)
+++ plugins/Dashboard/templates/Dashboard.js	(kopia robocza)
@@ -1,18 +1,3 @@
-
-
-//label and string used in the javascript
-//overide this object for dataTable_translation
-if(typeof dashboard_translation == "undefined")
-{
-	var dashboard_translation = {
-		titleWidgetInDashboard: 	'Widget already in dashboard',
-		titleClickToAdd: 			'Click to add to dashboard',
-		loadingPreview: 			'Loading preview, please wait...',
-		loadingWidget: 				'Loading widget, please wait...',
-		widgetNotFound: 			'Widget not found'
-	};
-}
-
 //there is a problem with loop for-in when we extends javascript Array
 //so I prefer using a separate function to do this
 function contains(array, searchElem) {
@@ -158,7 +143,7 @@
 						//format the div for upcomming ajax loading and set a temporary content
 						$(this)	.attr('plugin', plugin)
 								.attr('id', action)
-								.html('<div id="previewLoading"><img src="themes/default/loading.gif" />'+ dashboard_translation.loadingPreview +'</div>').show();
+								.html('<div id="previewLoading"><img src="themes/default/loading.gif" />'+ _pk_translate('Dashboard_LoadingPreview','Loading preview, please wait...') +'</div>').show();
 						self.dashboard.ajaxLoading(plugin, action);
 					}
 				});
@@ -208,12 +193,12 @@
 			if(contains(widgets, plugin+'.'+action))
 			{
 				$(this).addClass('menuDisabled');
-				$(this).attr('title', dashboard_translation.titleWidgetInDashboard);
+				$(this).attr('title', _pk_translate('Dashboard_TitleWidgetInDashboard','Widget already in dashboard'));
 			}
 			else
 			{
 				$(this).removeClass('menuDisabled');
-				$(this).attr('title', dashboard_translation.titleClickToAdd);
+				$(this).attr('title', _pk_translate('Dashboard_TitleClickToAdd','Click to add to dashboard'));
 			}
 		});
 	},
@@ -343,7 +328,7 @@
 		if(typeof onTop == "undefined")
 			onTop = false;
 		
-		var item = '<div class="items"><div class="widget"><div class="widgetLoading">'+dashboard_translation.loadingWidget+'</div><div plugin="'+plugin+'"'+' id="'+action+'" class="widgetDiv"></div></div></div>';
+		var item = '<div class="items"><div class="widget"><div class="widgetLoading">'+ _pk_translate('Dashboard_LoadingWidget','Loading widget, please wait...') +'</div><div plugin="'+plugin+'"'+' id="'+action+'" class="widgetDiv"></div></div></div>';
 	
 		if(onTop)
 		{
@@ -390,7 +375,7 @@
 	{
 		var self = this;
 		
-		var title = dashboard_translation.widgetNotFound;
+		var title = _pk_translate('Dashboard_WidgetNotFound','Widget not found');
 		var widgets = piwik.availableWidgets[plugin];
 		for(var i in widgets)
 		{
Index: plugins/Dashboard/templates/index.tpl
===================================================================
--- plugins/Dashboard/templates/index.tpl	(wersja 439)
+++ plugins/Dashboard/templates/index.tpl	(kopia robocza)
@@ -1,3 +1,5 @@
+{loadJavascriptTranslations modules='Dashboard'}
+
 <script type="text/javascript">
 	{* define some global constants for the following javascript includes *}
 	var piwik = new Object;
@@ -22,18 +24,18 @@
  
 	<div class="dialog" id="confirm"> 
 	        <img src="themes/default/images/delete.png" style="padding: 10px; position: relative; margin-top: 10%; float: left;"/>
-	        <p>Are you sure you want to delete this widget from the dashboard ?</p>
-			<input id="yes" type="button" value="Yes"/>
-			<input id="no" type="button" value="No"/>
+	        <p>{'Dashboard_DeleteWidgetConfirm'|translate}</p>
+			<input id="yes" type="button" value="{'General_Yes'|translate}"/>
+			<input id="no" type="button" value="{'General_No'|translate}"/>
 	</div> 
 
 	<div class="button" id="addWidget">
-		Add a widget...
+		{'Dashboard_AddWidget'|translate}
 	</div>
 	
 	<div class="menu" id="widgetChooser">
-		<div id="closeMenuIcon"><img src="themes/default/images/close_medium.png" title="Close this menu"/></div>
-		<div id="menuTitleBar">Select the widget to add in the dashboard</div>
+		<div id="closeMenuIcon"><img src="themes/default/images/close_medium.png" title="{'General_Close'|translate}"/></div>
+		<div id="menuTitleBar">{'Dashboard_SelectWidget'|translate}</div>
 		<div class="subMenu" id="sub1">
 		</div>
 		
@@ -42,11 +44,11 @@
 		
 		<div class="subMenu" id="sub3">
 			<div class="widget">
-				<div class="handle" title="Add previewed widget to the dashboard">
+				<div class="handle" title="{'Dashboard_AddPreviewedWidget'|translate}">
 					<div class="button" id="close">
-						<img src="themes/default/images/close.png" />
+						<img src="themes/default/images/close.png" title="{'General_Close'|translate}"/>
 					</div>
-					<div class="widgetTitle">Widget preview</div>
+					<div class="widgetTitle">{'Dashboard_WidgetPreview'|translate}</div>
 				</div>
 				<div class="widgetDiv previewDiv"></div>
 			</div>
Index: plugins/Dashboard/templates/header.tpl
===================================================================
--- plugins/Dashboard/templates/header.tpl	(wersja 439)
+++ plugins/Dashboard/templates/header.tpl	(kopia robocza)
@@ -1,6 +1,8 @@
 {* This header is for loading the dashboard in stand alone mode*}
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
 
+{loadJavascriptTranslations modules='Home Dashboard'}
+
 <script type="text/javascript" src="libs/jquery/jquery.js"></script>
 
 <script type="text/javascript" src="themes/default/common.js"></script>
@@ -20,4 +22,4 @@
 <script type="text/javascript" src="libs/jquery/ui.sortable_modif.js"></script>
 
 <link rel="stylesheet" href="plugins/Home/templates/datatable.css">
-<link rel="stylesheet" href="plugins/Dashboard/templates/dashboard.css">
\ brakuje znaku końca linii na końcu pliku 
+<link rel="stylesheet" href="plugins/Dashboard/templates/dashboard.css">
Index: plugins/Home/lang/en.php
===================================================================
--- plugins/Home/lang/en.php	(wersja 0)
+++ plugins/Home/lang/en.php	(wersja 0)
@@ -0,0 +1,17 @@
+<?php
+$translations = array(
+	'Home_NoPrivileges' => "You are logged in as '%s' but it seems you don't have any permission set in Piwik.".
+		"<br />Ask your Piwik administrator to give you 'view' access to a website.",
+	'Home_JavascriptDisabled' => "JavaScript must be enabled in order for you to use Piwik in standard view.<br>".
+		"However, it seems JavaScript is either disabled or not supported by your browser.<br>".
+		"To use standard view, enable JavaScript by changing your browser options, then %1stry again%2s.<br>",
+	'Home_TableNoData' => 'No data for this table.',
+	'Home_CategoryNoData' => 'No data in this category. Try to "Include all population".',
+	'Home_ShowJSCode' => 'Show the javascript code to insert',
+	
+	'Home_IncludeAllPopulation_js' => 'Include all population',
+	'Home_ExcludeLowPopulation_js' => 'Exclude low population',
+	'Home_PageOf_js' => '%s of %s',
+	'Home_Loading_js' => 'Loading...',
+	
+);
Index: plugins/Home/Controller.php
===================================================================
--- plugins/Home/Controller.php	(wersja 439)
+++ plugins/Home/Controller.php	(kopia robocza)
@@ -37,9 +37,8 @@
 		{
 			if(($currentLogin = Piwik::getCurrentUserLogin()) != 'anonymous')
 			{
-				Piwik_ExitWithMessage( "You are logged in as '$currentLogin' but it seems you don't have any permission set in Piwik.
-				<br />Ask your Piwik administrator to give you 'view' access to a website.
-				<br /><br />&nbsp;&nbsp;&nbsp;<b><a href='?module=Login&action=logout'>&rsaquo; Logout from Piwik</a></b><br />");
+				Piwik_ExitWithMessage( sprintf(Piwik_Translate('Home_NoPrivileges'),$currentLogin).
+				"<br /><br />&nbsp;&nbsp;&nbsp;<b><a href='?module=Login&action=logout'>&rsaquo; ".Piwik_Translate('General_Logout')."</a></b><br />");
 			}
 			else
 			{
@@ -117,4 +116,4 @@
 
 	
 
-}
\ brakuje znaku końca linii na końcu pliku 
+}
Index: plugins/Home/templates/datatable.tpl
===================================================================
--- plugins/Home/templates/datatable.tpl	(wersja 439)
+++ plugins/Home/templates/datatable.tpl	(kopia robocza)
@@ -3,7 +3,7 @@
 		{$arrayDataTable.message} 
 	{else}
 		{if count($arrayDataTable) == 0}
-		<div id="emptyDatatable">No data for this table.</div>
+		<div id="emptyDatatable">{'Home_TableNoData'|translate}</div>
 		{else}
 			<a name="{$id}"></a>
 			<table cellspacing="0" class="dataTable"> 
Index: plugins/Home/templates/datatable_actions_subdatable.tpl
===================================================================
--- plugins/Home/templates/datatable_actions_subdatable.tpl	(wersja 439)
+++ plugins/Home/templates/datatable_actions_subdatable.tpl	(kopia robocza)
@@ -3,7 +3,7 @@
 	{$arrayDataTable.message} 
 {else}
 	{if count($arrayDataTable) == 0}
-	<tr><td colspan="{$nbColumns}">No data in this category. Try to "Include all population".</td></tr>
+	<tr><td colspan="{$nbColumns}">{'Home_CategoryNoData'|translate}</td></tr>
 	{else}
 		{foreach from=$arrayDataTable item=row}
 		<tr {if $row.idsubdatatable}class="subActionsDataTable" id="{$row.idsubdatatable}"{else}class="actionsDataTable"{/if}>
@@ -16,4 +16,4 @@
 		</tr>
 		{/foreach}
 	{/if}		
-{/if}
\ brakuje znaku końca linii na końcu pliku 
+{/if}
Index: plugins/Home/templates/datatable_actions_recursive.tpl
===================================================================
--- plugins/Home/templates/datatable_actions_recursive.tpl	(wersja 439)
+++ plugins/Home/templates/datatable_actions_recursive.tpl	(kopia robocza)
@@ -3,7 +3,7 @@
 	{$arrayDataTable.message} 
 {else}
 	{if count($arrayDataTable) == 0}
-		<div id="emptyDatatable">No data for this table.</div>
+		<div id="emptyDatatable">{'Home_TableNoData'|translate}</div>
 	{else}
 		<table cellspacing="0" class="dataTable dataTableActions"> 
 		<thead>
@@ -41,4 +41,4 @@
 	{include file="Home/templates/datatable_actions_js.tpl"}
 	
 	{/if}
-</div>
\ brakuje znaku końca linii na końcu pliku 
+</div>
Index: plugins/Home/templates/datatable.js
===================================================================
--- plugins/Home/templates/datatable.js	(wersja 439)
+++ plugins/Home/templates/datatable.js	(kopia robocza)
@@ -1,16 +1,3 @@
-
-//label and string used in the javascript
-//overide this object for dataTable_translation
-if(typeof dataTable_translation == "undefined")
-{
-	var dataTable_translation = {
-		includeLowPop: 		'Include all population',
-		excludeLowPop: 		'Exclude low population',
-		pageOf: 			' of ',						//like in 1-10 _of_ 42
-		loading: 			'Loading...'
-	};
-}
-
 //-----------------------------------------------------------------------------
 //								Data Table
 //-----------------------------------------------------------------------------
@@ -281,11 +268,11 @@
 					{
 						if(Number(self.param.filter_excludelowpop) != 0)
 						{
-							string = dataTable_translation.includeLowPop;
+							string = _pk_translate('Home_IncludeAllPopulation','Include all population');
 						}
 						else
 						{
-							string = dataTable_translation.excludeLowPop;
+							string = _pk_translate('Home_ExcludeLowPopulation','Exclude low population');
 						}
 						$(this).html(string);
 					} 
@@ -423,7 +410,7 @@
 					// only show this string if there is some rows in the datatable
 					if(totalRows != 0)
 					{
-						var str = offset + '-' + offsetEndDisp + dataTable_translation.pageOf + totalRows;
+						var str = _pk_translate('Home_PageOf','%s of %s',offset + '-' + offsetEndDisp,totalRows);
 						$(this).text(str);
 					}
 				}
@@ -631,7 +618,7 @@
 					<tr>\
 						<td colspan="'+numberOfColumns+'" class="cellSubDataTable">\
 							<div id="'+divIdToReplaceWithSubTable+'">\
-								<span id="loadingDataTable" style="display:inline"><img src="themes/default/images/loading-blue.gif" />'+ dataTable_translation.loading +'</span>\
+								<span id="loadingDataTable" style="display:inline"><img src="themes/default/images/loading-blue.gif" />'+ _pk_translate('Home_Loading','Loading...') +'</span>\
 							</div>\
 						</td>\
 					</tr>\
@@ -999,4 +986,4 @@
 	$('img',domElem).attr('src', 'themes/default/images/plus.png');
 }
 
-	
\ brakuje znaku końca linii na końcu pliku 
+	
Index: plugins/Home/templates/datatable_footer.tpl
===================================================================
--- plugins/Home/templates/datatable_footer.tpl	(wersja 439)
+++ plugins/Home/templates/datatable_footer.tpl	(kopia robocza)
@@ -7,8 +7,8 @@
 	</span>
 	
 	<span id="dataTablePages"></span>
-	<span id="dataTablePrevious">&lt; Previous</span>
-	<span id="dataTableNext">Next &gt;</span>
+	<span id="dataTablePrevious">&lt; {'General_Previous'|translate}</span>
+	<span id="dataTableNext">{'General_Next'|translate} &gt;</span>
 	<div>
 		<span id="exportDataTable">
 			<span id="exportToFormat" style="display:none">
@@ -19,17 +19,17 @@
 					<a target="_blank" class="exportToFormat" methodToCall="{$method}" format="JSON" filter_limit="100">Json</a> |
 					<a target="_blank" class="exportToFormat" methodToCall="{$method}" format="PHP" filter_limit="100">Php</a>
 				</span>
-				<a class="viewDataTable" format="table"><img width="16" height="16" src="themes/default/images/table.png" title="Table" /></a>
-				<a class="viewDataTable" format="cloud"><img width="16" height="16" src="themes/default/images/tagcloud.png" title="Tag Cloud" /></a>
-				<a class="viewDataTable" format="graphVerticalBar"><img width="16" height="16" src="themes/default/images/chart_bar.png" title="Vertical bar graph" /></a>
-				<a class="viewDataTable" format="graphPie"><img width="16" height="16" src="themes/default/images/chart_pie.png" title="Pie chart" /></a>
+				<a class="viewDataTable" format="table"><img width="16" height="16" src="themes/default/images/table.png" title="{'General_Table'|translate}" /></a>
+				<a class="viewDataTable" format="cloud"><img width="16" height="16" src="themes/default/images/tagcloud.png" title="{'General_TagCloud'|translate}" /></a>
+				<a class="viewDataTable" format="graphVerticalBar"><img width="16" height="16" src="themes/default/images/chart_bar.png" title="{'General_VBarGraph'|translate}" /></a>
+				<a class="viewDataTable" format="graphPie"><img width="16" height="16" src="themes/default/images/chart_pie.png" title="{'General_Piechart'|translate}" /></a>
 			</span>
 			<span id="exportDataTableShow" style="display:none">
 				<img src="plugins/Home/templates/images/more.png" />
 			</span>
 		</span>
 
-		<span id="loadingDataTable"><img src="themes/default/images/loading-blue.gif" /> Loading...</span>
+		<span id="loadingDataTable"><img src="themes/default/images/loading-blue.gif" /> {'General_LoadingData'|translate}</span>
 	</div>
 </div>
 
Index: plugins/Home/templates/graph.tpl
===================================================================
--- plugins/Home/templates/graph.tpl	(wersja 439)
+++ plugins/Home/templates/graph.tpl	(kopia robocza)
@@ -6,7 +6,7 @@
 	<form class="formEmbedCode" id="{$formId}">
 	Embed <input name="embed_code" value="{$codeEmbed}" onclick="javascript:document.getElementById('{$formId}').embed_code.focus();document.getElementById('{$formId}').embed_code.select();" readonly="true" type="text">
 	
-	| <a target="_blank" href="{$urlData}">Graph data</a>
+	| <a target="_blank" href="{$urlData}">{'General_GraphData'|translate}</a>
 	</form>
 	
 	{include file="Home/templates/datatable_footer.tpl"}
Index: plugins/Home/templates/datatable_actions.tpl
===================================================================
--- plugins/Home/templates/datatable_actions.tpl	(wersja 439)
+++ plugins/Home/templates/datatable_actions.tpl	(kopia robocza)
@@ -3,7 +3,7 @@
 	{$arrayDataTable.message} 
 {else}
 	{if count($arrayDataTable) == 0}
-		<div id="emptyDatatable">No data for this table.</div>
+		<div id="emptyDatatable">{'Home_TableNoData'|translate}</div>
 	{else}
 		<table cellspacing="0" class="dataTable dataTableActions"> 
 		<thead>
Index: plugins/Home/templates/index.tpl
===================================================================
--- plugins/Home/templates/index.tpl	(wersja 439)
+++ plugins/Home/templates/index.tpl	(kopia robocza)
@@ -4,6 +4,7 @@
 </head>
 <body>
 
+{loadJavascriptTranslations modules='Home'}
 
 <script type="text/javascript">
 var period = "{$period}";
@@ -282,7 +283,7 @@
 	   {/foreach}
 	</optgroup>
 </select>
-</span> | {if $userLogin=='anonymous'}<a href='?module=Login'>Login</a>{else}<a href='?module=Login&action=logout'>Logout</a>{/if}</a>
+</span> | {if $userLogin=='anonymous'}<a href='?module=Login'>{'Login_LogIn'|translate}</a>{else}<a href='?module=Login&action=logout'>{'Login_Logout'|translate}</a>{/if}</a>
 </small>
 </form>
 </span>
@@ -299,9 +300,7 @@
 
 <noscript>
 <span id="javascriptDisable">
-JavaScript must be enabled in order for you to use Piwik in standard view.<br> 
-However, it seems JavaScript is either disabled or not supported by your browser.<br> 
-To use standard view, enable JavaScript by changing your browser options, then <a href=''>try again</a>.<br>
+{'Home_JavascriptDisabled'|translate:'<a href="">':'</a>'}
 </span>
 </noscript>
 {include file="Home/templates/period_select.tpl"}
@@ -311,8 +310,8 @@
 
 <div style='clear:both'></div>
 
-<div id="loadingPiwik" {if $basicHtmlView}style="display:none"{/if}><img src="themes/default/images/loading-blue.gif"> Loading data...</div>
-<div id="loadingError">Oops&hellip; problem during the request, please try again.</div>
+<div id="loadingPiwik" {if $basicHtmlView}style="display:none"{/if}><img src="themes/default/images/loading-blue.gif"> {'General_LoadingData'|translate}</div>
+<div id="loadingError">{'General_ErrorRequest'|translate}</div>
 <div id='content'>
 {if $content}{$content}{/if}
 </div>
Index: plugins/Home/templates/datatable_js.tpl
===================================================================
--- plugins/Home/templates/datatable_js.tpl	(wersja 439)
+++ plugins/Home/templates/datatable_js.tpl	(kopia robocza)
@@ -1,4 +1,3 @@
-
 <script type="text/javascript" defer="defer">
 $(document).ready(function(){literal}{{/literal} 
 	dataTables['{$id}'] = new dataTable();
Index: plugins/Home/Home.php
===================================================================
--- plugins/Home/Home.php	(wersja 439)
+++ plugins/Home/Home.php	(kopia robocza)
@@ -20,7 +20,7 @@
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
-			'translationAvailable' => false,
+			'translationAvailable' => true,
 		);
 	}
 }
Index: plugins/PluginsAdmin/PluginsAdmin.php
===================================================================
--- plugins/PluginsAdmin/PluginsAdmin.php	(wersja 439)
+++ plugins/PluginsAdmin/PluginsAdmin.php	(kopia robocza)
@@ -15,12 +15,12 @@
 	{
 		return array(
 			// name must be the className prefix!
-			'name' => 'Plugins administration',
+			'name' => 'PluginsAdmin',
 			'description' => '',
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
-			'translationAvailable' => false,
+			'translationAvailable' => true,
 		);
 	}
 }
Index: plugins/PluginsAdmin/lang/en.php
===================================================================
--- plugins/PluginsAdmin/lang/en.php	(wersja 0)
+++ plugins/PluginsAdmin/lang/en.php	(wersja 0)
@@ -0,0 +1,8 @@
+<?php
+$translations = array(
+	'PluginsAdmin_Plugins' => 'Plugins',
+	'PluginsAdmin_Activated' => 'Activated',
+	'PluginsAdmin_ActivatedHelp' => 'This plugin cannot be deactivated',
+	'PluginsAdmin_Deactivate' => 'Deactivate',
+	'PluginsAdmin_Activate' => 'Activate',	
+);
Index: plugins/PluginsAdmin/templates/manage.tpl
===================================================================
--- plugins/PluginsAdmin/templates/manage.tpl	(wersja 439)
+++ plugins/PluginsAdmin/templates/manage.tpl	(kopia robocza)
@@ -20,8 +20,8 @@
 	<td>{$plugin.info.description}&nbsp;</td>
 	<td class="center"><a href="{$plugin.info.homepage}">{$plugin.info.author}</a></td>
 	<td>{$plugin.info.version}</td>
-	<td class="switch">{if $plugin.alwaysActivated}<span title="This plugin cannot be deactivated">Activated</span>{elseif $plugin.activated}<a href=?module=PluginsAdmin&action=deactivate&pluginName={$name}>Deactivate</a>
-{else}<a href=?module=PluginsAdmin&action=activate&pluginName={$name}>Activate</a>{/if}</td>
+	<td class="switch">{if $plugin.alwaysActivated}<span title="{'PluginsAdmin_ActivatedHelp'|translate}">{'PluginsAdmin_Activated'|translate}</span>{elseif $plugin.activated}<a href=?module=PluginsAdmin&action=deactivate&pluginName={$name}>{'PluginsAdmin_Deactivate'|translate}</a>
+{else}<a href=?module=PluginsAdmin&action=activate&pluginName={$name}>{'PluginsAdmin_Activate'|translate}</a>{/if}</td>
 	</tr>
 {/foreach}
 
Index: plugins/Widgetize/templates/iframe.tpl
===================================================================
--- plugins/Widgetize/templates/iframe.tpl	(wersja 439)
+++ plugins/Widgetize/templates/iframe.tpl	(kopia robocza)
@@ -1,6 +1,8 @@
 <html>
 <body>
 
+{loadJavascriptTranslations modules='Home'}
+
 <script type="text/javascript" src="libs/jquery/jquery.js"></script>
 <script type="text/javascript" src="themes/default/common.js"></script>
 <script type="text/javascript" src="libs/jquery/jquery.dimensions.js"></script>
@@ -16,4 +18,4 @@
 {$content}
 
 </body>
-</html>
\ brakuje znaku końca linii na końcu pliku 
+</html>
Index: plugins/Widgetize/templates/js.tpl
===================================================================
--- plugins/Widgetize/templates/js.tpl	(wersja 439)
+++ plugins/Widgetize/templates/js.tpl	(kopia robocza)
@@ -1,3 +1,5 @@
+{loadJavascriptTranslations modules='Home'}
+
 document.write('<scr'+'ipt language="javascript" src="{$piwikUrl}libs/jquery/jquery.js"><\/scr'+'ipt>');
 document.write('<scr'+'ipt language="javascript" src="{$piwikUrl}themes/default/common.js"><\/scr'+'ipt>');
 document.write('<scr'+'ipt language="javascript" src="{$piwikUrl}libs/jquery/jquery.dimensions.js"><\/scr'+'ipt>');
@@ -11,4 +13,4 @@
 document.write('<link rel="stylesheet" href="{$piwikUrl}plugins/Home/templates/datatable.css">');
 
 var content = '{$content|escape:'javascript'}';
-document.write(content);
\ brakuje znaku końca linii na końcu pliku 
+document.write(content);
Index: plugins/UsersManager/API.php
===================================================================
--- plugins/UsersManager/API.php	(wersja 439)
+++ plugins/UsersManager/API.php	(kopia robocza)
@@ -189,12 +189,12 @@
 	{
 		if(self::userExists($userLogin))
 		{
-			throw new Exception("Login $userLogin already exists.");
+			throw new Exception(sprintf(Piwik_TranslateException('UsersManager_ExceptionLoginExists'),$userLogin));
 		}
 		
 		if(!self::isValidLoginString($userLogin))
 		{
-			throw new Exception("The login must contain only letters, numbers, or the characters '_' or '-' or '.'");
+			throw new Exception(Piwik_TranslateException('UsersManager_ExceptionInvalidLogin'));
 		}
 	}
 		
@@ -202,7 +202,7 @@
 	{
 		if(!self::isValidPasswordString($password))
 		{
-			throw new Exception("The password length must be between 6 and 26 characters.");
+			throw new Exception(Piwik_TranslateException('UsersManager_ExceptionInvalidPassword'));
 		}
 	}
 	
@@ -210,7 +210,7 @@
 	{
 		if(!Piwik::isValidEmailString($email))
 		{
-			throw new Exception("The email doesn't have a valid format.");
+			throw new Exception(Piwik_TranslateException('UsersManager_ExceptionInvalidEmail'));
 		}
 	}
 		
@@ -343,7 +343,7 @@
 		
 		if(!self::userExists($userLogin))
 		{
-			throw new Exception("User '$userLogin' doesn't exist therefore it can't be deleted.");
+			throw new Exception(sprintf(Piwik_TranslateException("UsersManager_ExceptionDeleteDoesNotExist"),$userLogin));
 		}
 		
 		
@@ -389,7 +389,7 @@
 		if($userLogin == 'anonymous'
 			&& $access == 'admin')
 		{
-			throw new Exception("You cannot grant 'admin' access to the 'anonymous' user.");
+			throw new Exception(Piwik_TranslateException("UsersManager_ExceptionAdminAnonymous"));
 		}
 		
 		// in case idSites is null we grant access to all the websites on which the current connected user
@@ -441,7 +441,7 @@
 	{
 		if(!self::userExists($userLogin))
 		{
-			throw new Exception("User '$userLogin' doesn't exist.");
+			throw new Exception(sprintf(Piwik_TranslateException("UsersManager_ExceptionUserDoesNotExist"),$userLogin));
 		}
 	}
 	
@@ -449,7 +449,7 @@
 	{
 		if($userLogin == 'anonymous')
 		{
-			throw new Exception("The anonymous user cannot be edited or deleted. It is used by Piwik to define a user that has not loggued in yet. For example, you can make your statistics public by granting the 'view' access to the 'anonymous' user.");
+			throw new Exception(Piwik_TranslateException("UsersManager_ExceptionEditAnonymous"));
 		}
 	}
 	
@@ -462,7 +462,7 @@
 		
 		if(!in_array($access,$accessList))
 		{
-			throw new Exception("The parameter access must have one of the following values : [ ". implode(", ", $accessList)." ]");
+			throw new Exception(sprintf(Piwik_TranslateException("UsersManager_ExceptionAccessValues"),implode(", ", $accessList)));
 		}
 	}
 	
@@ -550,4 +550,4 @@
 		return $l >= 6 && $l <= 26;
 	}
 
-}
\ brakuje znaku końca linii na końcu pliku 
+}
Index: plugins/UsersManager/lang/en.php
===================================================================
--- plugins/UsersManager/lang/en.php	(wersja 0)
+++ plugins/UsersManager/lang/en.php	(wersja 0)
@@ -0,0 +1,32 @@
+<?php
+$translations = array(
+	'UsersManager_ManageAccess' => 'Manage access',
+	'UsersManager_Sites' => 'Sites',
+	'UsersManager_AllWebsites' => 'All websites',
+	'UsersManager_ApplyToAllWebsites' => 'Apply to all websites',
+	'UsersManager_User' => 'User',
+	'UsersManager_PrivNone' => 'No access',
+	'UsersManager_PrivView' => 'View',
+	'UsersManager_PrivAdmin' => 'Admin',
+	'UsersManager_ChangeAllConfirm' => 'Are you sure you want to change \'%s\' permissions on all the websites?',
+	'UsersManager_Login' => 'Login',
+	'UsersManager_Password' => 'Password',
+	'UsersManager_Email' => 'Email',
+	'UsersManager_Alias' => 'Alias',
+	'UsersManager_Token' => 'token_auth',
+	'UsersManager_Edit' => 'Edit',
+	'UsersManager_AddUser' => 'Add a new user',
+
+	'UsersManager_DeleteConfirm_js' => 'Are you sure you want to delete the user %s?',
+	
+	'UsersManager_ExceptionLoginExists' => "Login '%s' already exists.",
+	'UsersManager_ExceptionInvalidLogin' => "The login must contain only letters, numbers, or the characters '_' or '-' or '.'",
+	'UsersManager_ExceptionInvalidPassword' => "The password length must be between 6 and 26 characters.",
+	'UsersManager_ExceptionInvalidEmail' => "The email doesn't have a valid format.",
+	'UsersManager_ExceptionDeleteDoesNotExist' => "User '%s' doesn't exist therefore it can't be deleted.",
+	'UsersManager_ExceptionAdminAnonymous' => "You cannot grant 'admin' access to the 'anonymous' user.",
+	'UsersManager_ExceptionEditAnonymous' => "The anonymous user cannot be edited or deleted. It is used by Piwik to define a user that has not logged in yet. For example, you can make your statistics public by granting the 'view' access to the 'anonymous' user.",
+	'UsersManager_ExceptionUserDoesNotExist' => "User '%s' doesn't exist.",
+	'UsersManager_ExceptionAccessValues' => "The parameter access must have one of the following values : [ %s ]",
+
+);
Index: plugins/UsersManager/UsersManager.php
===================================================================
--- plugins/UsersManager/UsersManager.php	(wersja 439)
+++ plugins/UsersManager/UsersManager.php	(kopia robocza)
@@ -19,12 +19,12 @@
 	{
 		$info = array(
 			// name must be the className prefix!
-			'name' => 'UserManager',
+			'name' => 'UsersManager',
 			'description' => 'Description',
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
-			'translationAvailable' => false,
+			'translationAvailable' => true,
 		);
 		
 		return $info;
Index: plugins/UsersManager/templates/UsersManager.js
===================================================================
--- plugins/UsersManager/templates/UsersManager.js	(wersja 439)
+++ plugins/UsersManager/templates/UsersManager.js	(kopia robocza)
@@ -222,7 +222,7 @@
 			ajaxHideError();
 			var idRow = $(this).attr('id');
 			var loginToDelete = $(this).parent().parent().find('#userLogin').html();
-			if(confirm('Are you sure you want to delete the user "'+loginToDelete+'"?'))
+			if(confirm(_pk_translate('UsersManager_DeleteConfirm','Are you sure you want to delete the user %s','"'+loginToDelete+'"')))
 			{
 				$.ajax( getDeleteUserAJAX( loginToDelete ) );
 			}
Index: plugins/UsersManager/templates/UsersManager.tpl
===================================================================
--- plugins/UsersManager/templates/UsersManager.tpl	(wersja 439)
+++ plugins/UsersManager/templates/UsersManager.tpl	(kopia robocza)
@@ -1,3 +1,4 @@
+{loadJavascriptTranslations modules='UsersManager'}
 <script type="text/javascript" src="libs/jquery/jquery.js"></script>
 <script type="text/javascript" src="themes/default/common.js"></script>
 <link rel="stylesheet" href="themes/default/common-admin.css">
@@ -18,16 +19,16 @@
 </style>
 {/literal}
 
-<h2>Manage access</h2>
+<h2>{'UsersManager_ManageAccess'|translate}</h2>
 
 <div id="sites">
 <form method="post" action="{url actionToLoad=index}" id="accessSites">
-	<p>Sites: <select id="selectIdsite" name="idsite" onchange="this.form.submit()">
+	<p>{'UsersManager_Sites'|translate}: <select id="selectIdsite" name="idsite" onchange="this.form.submit()">
 	
-	<optgroup label="All websites">
-		<option label="All websites" value="-1" {if $idSiteSelected==-1} selected="selected"{/if}>Apply to all websites</option>
+	<optgroup label="{'UsersManager_AllWebsites'|translate}">
+		<option label="{'UsersManager_AllWebsites'|translate}" value="-1" {if $idSiteSelected==-1} selected="selected"{/if}>{'UsersManager_ApplyToAllWebsites'|translate}</option>
 	</optgroup>
-	<optgroup label="Sites">
+	<optgroup label="{'UsersManager_Sites'|translate}">
 		{foreach from=$websites item=info}
 			<option value="{$info.idsite}" {if $idSiteSelected==$info.idsite} selected="selected"{/if}>{$info.name}</option>
 		{/foreach}
@@ -40,10 +41,10 @@
 <table id="access">
 <thead>
 <tr>
-	<th>User</th>
-	<th>No access</th>
-	<th>View</th>
-	<th>Admin</th>
+	<th>{'UsersManager_User'|translate}</th>
+	<th>{'UsersManager_PrivNone'|translate}</th>
+	<th>{'UsersManager_PrivView'|translate}</th>
+	<th>{'UsersManager_PrivAdmin'|translate}</th>
 </tr>
 </thead>
 
@@ -61,28 +62,28 @@
 </tbody>
 </table>
 
-<div id="accessUpdated">Done!</div>
+<div id="accessUpdated">{'General_Done'|translate}!</div>
 
 <div class="dialog" id="confirm"> 
-	<p>Are you sure you want to change '<span id='login'></span>' permissions on all the websites?</p>
-	<input id="yes" type="button" value="Yes"/>
-	<input id="no" type="button" value="No"/>
+	<p>{'UsersManager_ChangeAllConfirm'|translate:"<span id='login'></span>"}</p>
+	<input id="yes" type="button" value="{'General_Yes'|translate}"/>
+	<input id="no" type="button" value="{'General_No'|translate}"/>
 </div> 
 
 <h2>Manage users</h2>
 
 <div id="ajaxError" style="display:none"></div>
-<div id="ajaxLoading" style="display:none">Loading... <img src="themes/default/loading.gif"></div>
+<div id="ajaxLoading" style="display:none">{'General_LoadingData'|translate} <img src="themes/default/loading.gif"></div>
 <table id="users">
 	<thead>
 		<tr>
-			<th>Login</th>
-			<th>Password</th>
-			<th>Email</th>
-			<th>Alias</th>
-			<th>token_auth</th>
-			<th>Edit</th>
-			<th>Delete</th>
+			<th>{'UsersManager_Login'|translate}</th>
+			<th>{'UsersManager_Password'|translate}</th>
+			<th>{'UsersManager_Email'|translate}</th>
+			<th>{'UsersManager_Alias'|translate}</th>
+			<th>{'UsersManager_Token'|translate}</th>
+			<th>{'General_Edit'|translate}</th>
+			<th>{'General_Delete'|translate}</th>
 		</tr>
 	</thead>
 	
@@ -103,5 +104,5 @@
 	</tbody>
 </table>
 
-<div id="addrow"><img src='plugins/UsersManager/images/add.png'> Add a new user</div>
+<div id="addrow"><img src='plugins/UsersManager/images/add.png'> {'UsersManager_AddUser'|translate}</div>
 <script type="text/javascript" src="plugins/UsersManager/templates/UsersManager.js"></script>
Index: plugins/UserSettings/lang/en.php
===================================================================
--- plugins/UserSettings/lang/en.php	(wersja 0)
+++ plugins/UserSettings/lang/en.php	(wersja 0)
@@ -0,0 +1,10 @@
+<?php
+$translations = array(
+	'UserSettings_BrowserFamilies' => 'Browser families',
+	'UserSettings_Browsers' => 'Browsers',
+	'UserSettings_Plugins' => 'Plugins',
+	'UserSettings_Configurations' => 'Configurations',
+	'UserSettings_OperatinsSystems' => 'Operating systems',
+	'UserSettings_Resolutions' => 'Resolutions',
+	'UserSettings_WideScreen' => 'Wide Screen',
+);
Index: plugins/UserSettings/UserSettings.php
===================================================================
--- plugins/UserSettings/UserSettings.php	(wersja 439)
+++ plugins/UserSettings/UserSettings.php	(kopia robocza)
@@ -38,6 +38,7 @@
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
+			'translationAvailable' => true,
 		);
 		
 		return $info;
Index: plugins/UserSettings/index.tpl
===================================================================
--- plugins/UserSettings/index.tpl	(wersja 439)
+++ plugins/UserSettings/index.tpl	(kopia robocza)
@@ -1,25 +1,25 @@
 <div id='leftcolumn'>
-	<h2>Browser families</h2>
+	<h2>{'UserSettings_BrowserFamilies'|translate}</h2>
 	{$dataTableBrowserType}
 	
-	<h2>Browsers</h2>
+	<h2>{'UserSettings_Browsers'|translate}</h2>
 	{$dataTableBrowser}
 	
-	<h2>Plugins</h2>
+	<h2>{'UserSettings_Plugins'|translate}</h2>
 	{$dataTablePlugin}
 </div>
 
 <div id='rightcolumn'>
-	<h2>Configurations</h2>
+	<h2>{'UserSettings_Configurations'|translate}</h2>
 	{$dataTableConfiguration}
 	
-	<h2>Operating systems</h2>
+	<h2>{'UserSettings_OperatinsSystems'|translate}</h2>
 	{$dataTableOS}
 	
-	<h2>Resolutions</h2>
+	<h2>{'UserSettings_Resolutions'|translate}</h2>
 	{$dataTableResolution}
 	
-	<h2>Wide Screen</h2>
+	<h2>{'UserSettings_WideScreen'|translate}</h2>
 	{$dataTableWideScreen}
 </div>	
 
Index: plugins/VisitsSummary/lang/en.php
===================================================================
--- plugins/VisitsSummary/lang/en.php	(wersja 0)
+++ plugins/VisitsSummary/lang/en.php	(wersja 0)
@@ -0,0 +1,14 @@
+<?php
+$translations = array(
+	'VisitsSummary_NbVisits' => '%s visits',
+	'VisitsSummary_NbUniqueVisitors' => '%s unique visitors',
+	'VisitsSummary_NbActions' => '%s actions (page views)',
+	'VisitsSummary_TotalTime' => '%s total time spent by the visitors',
+	'VisitsSummary_MaxNbActions' => '%s max actions in one visit',
+	'VisitsSummary_NbBounced' => '%s visitors have bounced (left the site after one page)',
+	'VisitsSummary_Evolution' => 'Evolution on the last 30 %ss',
+	'VisitsSummary_Report' => 'Report',
+	'VisitsSummary_GenerateTime' => '%s seconds to generate the page',
+	'VisitsSummary_GenerateQueries' => '%s queries executed',
+
+);
Index: plugins/VisitsSummary/VisitsSummary.php
===================================================================
--- plugins/VisitsSummary/VisitsSummary.php	(wersja 439)
+++ plugins/VisitsSummary/VisitsSummary.php	(kopia robocza)
@@ -19,12 +19,12 @@
 	{
 		$info = array(
 			// name must be the className prefix!
-			'name' => 'Piwik_VisitsSummary',
+			'name' => 'VisitsSummary',
 			'description' => 'Description',
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
-			'translationAvailable' => false,
+			'translationAvailable' => true,
 		);
 		
 		return $info;
@@ -129,4 +129,4 @@
 Piwik_AddWidget( 'VisitsSummary', 'getLastUniqueVisitorsGraph', 'Last unique visitors graph');
 Piwik_AddWidget( 'VisitsSummary', 'index', 'Overview with graph');
 
-Piwik_AddMenu('Visitors', 'Overview', array('module' => 'VisitsSummary'), true);
\ brakuje znaku końca linii na końcu pliku 
+Piwik_AddMenu('Visitors', 'Overview', array('module' => 'VisitsSummary'), true);
Index: plugins/VisitsSummary/index.tpl
===================================================================
--- plugins/VisitsSummary/index.tpl	(wersja 439)
+++ plugins/VisitsSummary/index.tpl	(kopia robocza)
@@ -2,12 +2,15 @@
 <script type="text/javascript" src="plugins/Home/templates/sparkline.js"></script>
 
 <a name="evolutionGraph" graphId="VisitsSummarygetLastVisitsGraph"></a>
-<h2>Evolution on the last 30 {$period}s</h2>
+<h2>{'VisitsSummary_Evolution'|translate:$period}</h2>
 {$graphEvolutionVisitsSummary}
 
-<h2>Report</h2>
+<h2>{'VisitsSummary_Report'|translate}</h2>
 {include file=VisitsSummary/sparklines.tpl}
 
 
 <br><br><br>
-<p style='color:lightgrey; size:0.8em;'>{$totalTimeGeneration} seconds {if $totalNumberOfQueries != 0}/ {$totalNumberOfQueries}  queries{/if} to generate the page</p>
+<p style='color:lightgrey; size:0.8em;'>
+{'VisitsSummary_GenerateTime'|translate:$totalTimeGeneration:$totalNumberOfQueries}
+{if $totalNumberOfQueries != 0}, {'VisitsSummary_GenerateQueries'|translate:$totalNumberOfQueries}{/if}
+</p>
Index: plugins/VisitsSummary/sparklines.tpl
===================================================================
--- plugins/VisitsSummary/sparklines.tpl	(wersja 439)
+++ plugins/VisitsSummary/sparklines.tpl	(kopia robocza)
@@ -1,9 +1,15 @@
 <div id="to remove this div" class="parentDiv">
-<p><img class="sparkline" src="{$urlSparklineNbVisits}" /> <span><strong>{$nbVisits} </strong>visits</span></p>
-<p><img class="sparkline" src="{$urlSparklineNbUniqVisitors}" /> <span><strong>{$nbUniqVisitors}</strong> unique visitors</span></p>
-<p><img class="sparkline" src="{$urlSparklineNbActions}" /> <span><strong>{$nbActions}</strong> actions (page views)</span></p>
-<p><img class="sparkline" src="{$urlSparklineSumVisitLength}" /> <span><strong>{$sumVisitLength|sumtime}</strong> total time spent by the visitors</span></p>
-<p><img class="sparkline" src="{$urlSparklineMaxActions}" /> <span><strong>{$maxActions}</strong> max actions in one visit</span></p>
-<p><img class="sparkline" src="{$urlSparklineBounceCount}" /> <span><strong>{$bounceCount} </strong>visitors have bounced (left the site after one page)</span></p>
-
-</div>
\ brakuje znaku końca linii na końcu pliku 
+<p><img class="sparkline" src="{$urlSparklineNbVisits}" /> <span>
+	{'VisitsSummary_NbVisits'|translate:"<strong>$nbVisits</strong>"}</span></p>
+<p><img class="sparkline" src="{$urlSparklineNbUniqVisitors}" /> <span>
+	{'VisitsSummary_NbUniqueVisitors'|translate:"<strong>$nbUniqVisitors</strong>"}</span></p>
+<p><img class="sparkline" src="{$urlSparklineNbActions}" /> <span>
+	{'VisitsSummary_NbActions'|translate:"<strong>$nbActions</strong>"}</span></p>
+<p><img class="sparkline" src="{$urlSparklineSumVisitLength}" /> <span>
+	{assign var=sumtimeVisitLength value=$sumVisitLength|sumtime}
+	{'VisitsSummary_TotalTime'|translate:"<strong>$sumtimeVisitLength</strong>"}</span></p>
+<p><img class="sparkline" src="{$urlSparklineMaxActions}" /> <span>
+	{'VisitsSummary_MaxNbActions'|translate:"<strong>$maxActions</strong>"}</span></p>
+<p><img class="sparkline" src="{$urlSparklineBounceCount}" /> <span>
+	{'VisitsSummary_NbBounced'|translate:"<strong>$bounceCount</strong>"}</span></p>
+</div>
Index: plugins/Actions/API.php
===================================================================
--- plugins/Actions/API.php	(wersja 439)
+++ plugins/Actions/API.php	(kopia robocza)
@@ -66,7 +66,7 @@
 	public function getDownloads( $idSite, $period, $date, $expanded = false, $idSubtable = false )
 	{
 		$dataTable = $this->getDataTable('Actions_downloads', $idSite, $period, $date, $expanded, $idSubtable );
-		$dataTable->queueFilter('Piwik_DataTable_Filter_ColumnCallbackAddDetail', array('label', 'url', create_function('$url', 'return $url;')));
+		$dataTable->queueFilter('Piwik_DataTable_Filter_ColumnCallbackAddDetail', array('full_url', 'url', create_function('$url', 'return $url;')));
 		$dataTable->queueFilter('Piwik_DataTable_Filter_ColumnCallbackReplace', array('label', 'Piwik_getPathFromActionsUrl'));
 		$dataTable->queueFilter('Piwik_DataTable_Filter_ColumnCallbackReplace', array('label', 'Piwik_truncateActionsPath'));
 		
@@ -76,7 +76,7 @@
 	public function getOutlinks( $idSite, $period, $date, $expanded = false, $idSubtable = false )
 	{
 		$dataTable = $this->getDataTable('Actions_outlink', $idSite, $period, $date, $expanded, $idSubtable );
-		$dataTable->queueFilter('Piwik_DataTable_Filter_ColumnCallbackAddDetail', array('label', 'url', create_function('$url', 'return $url;')));
+		$dataTable->queueFilter('Piwik_DataTable_Filter_ColumnCallbackAddDetail', array('full_url', 'url', create_function('$url', 'return $url;')));
 		$dataTable->queueFilter('Piwik_DataTable_Filter_ColumnCallbackReplace', array('label', 'Piwik_getPathFromActionsUrl'));
 		$dataTable->queueFilter('Piwik_DataTable_Filter_ColumnCallbackReplace', array('label', 'Piwik_truncateActionsPath'));
 		return $dataTable;
Index: plugins/Actions/Actions.php
===================================================================
--- plugins/Actions/Actions.php	(wersja 439)
+++ plugins/Actions/Actions.php	(kopia robocza)
@@ -37,6 +37,7 @@
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
+			'translationAvailable' => false
 		);
 		
 		return $info;
@@ -282,6 +283,7 @@
 				$currentTable = new Piwik_DataTable_Row(
 					array(	Piwik_DataTable_Row::COLUMNS => 
 							array(	'label' => (string)$actionName,
+									'full_url' => (string)$row['name'],
 								)
 						)
 					);
Index: plugins/Installation/lang/en.php
===================================================================
--- plugins/Installation/lang/en.php	(wersja 0)
+++ plugins/Installation/lang/en.php	(wersja 0)
@@ -0,0 +1,74 @@
+<?php
+$translations = array(
+	'Installation_Installation' => 'Installation',
+	'Installation_InstallationStatus' => 'Installation status',
+	'Installation_PercentDone' => '%s %% Done',
+		
+	'Installation_NoConfigFound' => 
+		"The Piwik configuration file couldn't be found and you are trying to access a Piwik page.<br>".
+		"<b>&nbsp;&nbsp;&raquo; You can <a href='index.php'>install Piwik now</a></b>".
+		"<br><small>If you installed Piwik before and have some tables in your DB, don't worry,".
+		"you can reuse the same tables and keep your existing data!</small>",
+
+	'Installation_MysqlSetup' => 'Mysql database setup',
+	'Installation_MysqlErrorConnect' => 'Error while trying to connect to the Mysql database',
+
+	'Installation_JsTag' => 'Javascript tag',	
+	'Installation_JsTagHelp' => 
+		'<p>To count all visitors, you must insert the javascript code on all of your pages.</p>'.
+		'<p>Your pages do not have to be made with PHP, Piwik will work on all kinds of pages (whether it is HTML, ASP, Perl or any other languages).</p>'.
+		'<p>Here is the code you have to insert: (copy and paste on all your pages) </p>',
+
+	'Installation_Congratulations' => 'Congratulations',
+	'Installation_ContratulationsHelp' => 
+		'<p>Congratulations! Your Piwik installation is complete.</p>'.
+		'<p>Make sure your javascript code is entered on your pages, and wait for your first visitors!</p>',
+	'Installation_GoToPiwik' => 'Go to Piwik',
+
+	'Installation_SetupWebsite' => 'Setup a website',
+	'Installation_SetupWebsiteError' => 'There was an error when adding the website',
+
+	'Installation_GeneralSetup' => 'General Setup',
+	'Installation_GeneralSetupSuccess' => 'General Setup configured with success',
+
+	'Installation_SystemCheck' => 'System check',
+	'Installation_SystemCheckPhp' => 'PHP version',
+	'Installation_SystemCheckPdo' => 'Pdo extension',				
+	'Installation_SystemCheckPdoMysql' => 'Pdo_Mysql extension',
+	'Installation_SystemCheckPdoError' => 'You need to enable the <code>php_pdo</code> and <code>php_pdo_mysql</code> extensions in your php.ini file.',			
+	'Installation_SystemCheckPdoErrorHelp' => 
+		"On a windows server you can add the lines 	<code>extension=php_pdo.dll\nextension=php_pdo_mysql.dll</code> in your php.ini".
+		'<br><br>On a Linux server you can compile php with the following option <code>--with-pdo-mysql </code>'.
+		'<br><br>More information on the <a style="color:red" href="http://php.net/pdo">PHP website</a>.',
+	'Installation_SystemCheckPhpXml' => 'PHP-XML extension',
+	'Installation_SystemCheckWriteDirs' => 'Directories with write access',
+	'Installation_SystemCheckWriteDirsHelp' => 'To fix this error on your Linux system, try typing in the following command(s)',
+	'Installation_SystemCheckMemoryLimit' => 'Memory limit',	
+	'Installation_SystemCheckMemoryLimitHelp' => 
+		'On a high traffic website, the archiving process may require more memory than currently allowed.'.
+		'<br>See the directive memory_limit in your php.ini file if necessary.',
+	'Installation_SystemCheckGD' => 'GD &gt; 2.x (graphics)',
+	'Installation_SystemCheckGDHelp' => 'The sparklines (small graphs) will not work.',
+	'Installation_SystemCheckTimeLimit' => 'set_time_limit() allowed',
+	'Installation_SystemCheckTimeLimitHelp' => 
+		'On a high traffic website, executing the archiving process may require more time than currently allowed.'.
+		'<br>See the directive max_execution_time  in your php.ini file if necessary',
+	'Installation_SystemCheckMail' => 'mail() allowed',
+	'Installation_SystemCheckError' => 'An error occured - must be fixed before you proceed',
+	'Installation_SystemCheckWarning' => 'Piwik will work normally but some features may be missing',
+	
+	'Installation_Tables' => 'Creating the tables',
+	'Installation_TablesWarning' => 'Some <span id="linkToggle">Piwik tables</span> are already installed in the DB',
+	'Installation_TablesFound' => 'The following tables have been found in the database',
+	'Installation_TablesWarningHelp' => 'Either choose to reuse the existing database tables or select a clean install to erase all existing data in the database.',
+	'Installation_TablesReuse' => 'Reuse the existing tables',
+	'Installation_TablesDelete' => 'Delete the detected tables',
+	'Installation_TablesDeletedSuccess' => 'Existing Piwik tables deleted with success',
+	'Installation_TablesCreatedSuccess' => 'Tables created with success!',
+	'Installation_TablesDeleteConfirm' => 'Are you sure you want to delete all the Piwik tables from this database?',
+
+	'Installation_Welcome' => 'Welcome!',
+	'Installation_WelcomeHelp' => 
+		'<p>Piwik is an open source web analytics software that makes it easy to get the information you want from your visitors.</p>'.
+		'<p>This process is split up into %s easy steps and will take around 5 minutes.</p>',	
+);
Index: plugins/Installation/Installation.php
===================================================================
--- plugins/Installation/Installation.php	(wersja 439)
+++ plugins/Installation/Installation.php	(kopia robocza)
@@ -29,7 +29,7 @@
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
-			'translationAvailable' => false,
+			'translationAvailable' => true,
 		);
 		
 		return $info;
@@ -67,12 +67,8 @@
 		}
 		else
 		{
-			Piwik::exitWithErrorMessage("
-				The Piwik configuration file couldn't be found and you are trying to access a Piwik page.<br>
-				<b>&nbsp;&nbsp;&raquo; You can <a href='index.php'>install Piwik now</a></b>
-				<br><small>If you installed Piwik before and have some tables in your DB, don't worry, 
-				you can reuse the same tables and keep your existing data!</small>");
+			Piwik::exitWithErrorMessage(Piwik_Translate('Installation_NoConfigFound'));
 		}
 		exit;
 	}	
-}
\ brakuje znaku końca linii na końcu pliku 
+}
Index: plugins/Installation/templates/systemCheck.tpl
===================================================================
--- plugins/Installation/templates/systemCheck.tpl	(wersja 439)
+++ plugins/Installation/templates/systemCheck.tpl	(kopia robocza)
@@ -2,37 +2,30 @@
 {assign var=error value="<img src='themes/default/images/error.png' />"}
 {assign var=warning value="<img src='themes/default/images/warning.png' />"}
 
-<h1>System check</h1>
+<h1>{'Installation_SystemCheck'|translate}</h1>
 
 
 <table class="infosServer">
 	<tr>
-		<td class="label">PHP version &gt; {$infos.phpVersion_minimum}</td>
+		<td class="label">{'Installation_SystemCheckPhp'|translate} &gt; {$infos.phpVersion_minimum}</td>
 		<td>{if $infos.phpVersion_ok}{$ok}{else}{$error}{/if}</td>
 	</tr><tr>
-		<td class="label">Pdo extension</td>
+		<td class="label">{'Installation_SystemCheckPdo'|translate}</td>
 		<td>{if $infos.pdo_ok}{$ok}
 		{else}{$error}{/if}	
 		</td>
 	</tr>  
 	<tr>
-		<td class="label">Pdo_Mysql extension</td>
+		<td class="label">{'Installation_SystemCheckPdoMysql'|translate}</td>
 		<td>{if $infos.pdo_mysql_ok}{$ok}
 		{else}{$error}
 		{/if}
 		
 		{if !$infos.pdo_mysql_ok || !$infos.pdo_ok}
-			<p class="error" style="width:80%">You need to enable the <code>php_pdo</code> and <code>php_pdo_mysql</code> extensions in your 
-			php.ini file.
+			<p class="error" style="width:80%">{'Installation_SystemCheckPdoError'|translate}
 			<small>
-			<br><br>On a windows server you can add the lines 
-			<code>extension=php_pdo.dll
-				extension=php_pdo_mysql.dll</code> in your php.ini 
-			
-			<br><br>On a Linux server you can compile php with the following option
-			<code>--with-pdo-mysql </code> 
-			
-			<br><br>More information on the <a style="color:red" href='http://php.net/pdo'>PHP website</a>.
+			<br><br>
+			{'Installation_SystemCheckPdoErrorHelp'|translate}
 			</small>
 			</p>
 		{/if}
@@ -42,13 +35,13 @@
 	
 	{* We don't use utf8_encode currently but I think we will soon so I leave the code here
 	<tr>
-		<td class="label">PHP-XML extension <br> (utf8_decode function)</td>
+		<td class="label">{'Installation_SystemCheckPhpXml'|translate} <br> (utf8_decode function)</td>
 	    <td>{if $infos.phpXml_ok}{$ok}{else}{$error}{/if}</td>
 	</tr>
 	*}
 	<tr>
 		<td valign="top">
-			Directories with write access
+			{'Installation_SystemCheckWriteDirs'|translate}
 		</td>
 		<td>
 			{foreach from=$infos.directories key=dir item=bool}
@@ -64,7 +57,7 @@
 {if $problemWithSomeDirectories}
 	<br>
 	<div class="error">
-		To fix this error on your Linux system, try typing in the following command(s):
+			{'Installation_SystemCheckWriteDirsHelp'|translate}:
 	{foreach from=$infos.directories key=dir item=bool}
 		<ul>{if !$bool}
 			<li>chmod a+w {$basePath}{$dir}</li>
@@ -77,42 +70,40 @@
 <h1>Optional</h1>
 <table class="infos">
 	<tr>
-		<td class="label">Memory limit</td>
+		<td class="label">{'Installation_SystemCheckMemoryLimit'|translate}</td>
 		<td>
 			{$infos.memoryCurrent}
 			{if $infos.memory_ok}{$ok}{else}{$warning} 
-				<br><i>On a high traffic website, the archiving process may require more memory than currently allowed.
-				<br>See the directive memory_limit in your php.ini file if necessary.</i>{/if}	
+				<br><i>{'Installation_SystemCheckMemoryLimitHelp'|translate}</i>{/if}	
 		</td>
 	</tr>
 	<tr>
-		<td class="label">GD &gt; 2.x (graphics)</td>
+		<td class="label">{'Installation_SystemCheckGD'|translate}</td>
 		<td>
-			{if $infos.gd_ok}{$ok}{else}{$warning} <br><i>The sparklines (small graphs) will not work.</i>{/if}
+			{if $infos.gd_ok}{$ok}{else}{$warning} <br><i>{'Installation_SystemCheckGDHelp'|translate}</i>{/if}
 		</td>
 	</tr>
 	<tr>
-		<td class="label">set_time_limit() allowed</td>
+		<td class="label">{'Installation_SystemCheckTimeLimit'|translate}</td>
 		<td>{if $infos.setTimeLimit_ok}{$ok}{else}{$warning}
-			<br><i>On a high traffic website, executing the archiving process may require more time than currently allowed.
-				<br>See the directive max_execution_time  in your php.ini file if necessary.</i>{/if}</td>
+			<br><i>{'Installation_SystemCheckTimeLimitHelp'|translate}</i>{/if}</td>
 	</tr>
 	<tr>
-		<td class="label">mail() allowed</td>
+		<td class="label">{'Installation_SystemCheckMail'|translate}</td>
 		<td>{if $infos.mail_ok}{$ok}{else}{$warning}{/if}</td>
 	</tr>
 </table>
 <p><small>
 Legend:
 <br>
-{$ok} Ok<br>
-{$error} Error to be fixed<br>
-{$warning} Warning: Piwik will work normally but some features may be missing<br>
+{$ok} {'General_Ok'|translate}<br>
+{$error} {'General_Error'|translate}: {'Installation_SystemCheckError'|translate} <br>
+{$warning} {'General_Warning'|translate}: {'Installation_SystemCheckWarning'|translate} <br>
 </small></p>
 
 {if !$showNextStep}
 <p class="nextStep">
-	<a href="{url}">Refresh the page &raquo;</a>
+	<a href="{url}">{'General_Refresh'|translate} &raquo;</a>
 </p>
 
 {/if}
Index: plugins/Installation/templates/databaseSetup.tpl
===================================================================
--- plugins/Installation/templates/databaseSetup.tpl	(wersja 439)
+++ plugins/Installation/templates/databaseSetup.tpl	(kopia robocza)
@@ -1,9 +1,9 @@
-<h1>Mysql database setup</h1>
+<h1>{'Installation_MysqlSetup'|translate}</h1>
 
 {if isset($errorMessage)}
 	<div class="error">
 		<img src="themes/default/images/error_medium.png">
-		Error while trying to connect to the Mysql database:
+		{'Installation_MysqlErrorConnect'|translate}:
 		<br>{$errorMessage}
 		
 	</div>
@@ -11,4 +11,4 @@
 
 {if isset($form_data)}
 	{include file=default/genericForm.tpl}
-{/if}
\ brakuje znaku końca linii na końcu pliku 
+{/if}
Index: plugins/Installation/templates/displayJavascriptCode.tpl
===================================================================
--- plugins/Installation/templates/displayJavascriptCode.tpl	(wersja 439)
+++ plugins/Installation/templates/displayJavascriptCode.tpl	(kopia robocza)
@@ -31,10 +31,8 @@
 	<img src="themes/default/images/success_medium.png">
 </span>
 {/if}
-<h1>Javascript tag</h1>
-<p>To count all visitors, you must insert the javascript code on all of your pages.</p>
-<p>Your pages do not have to be made with PHP, Piwik will work on all kinds of pages (whether it is HTML, ASP, Perl or any other languages).</p>
-<p>Here is the code you have to insert: (copy and paste on all your pages) </P>
+<h1>{'Installation_JsTag'|translate}</h1>
+{'Installation_JsTagHelp'|translate}
 <code>
 {$javascriptTag}
 </code>
Index: plugins/Installation/templates/finished.tpl
===================================================================
--- plugins/Installation/templates/finished.tpl	(wersja 439)
+++ plugins/Installation/templates/finished.tpl	(kopia robocza)
@@ -1,11 +1,8 @@
-<h1>Congratulations</h1>
+<h1>{'Installation_Congratulations'|translate}</h1>
 
-<p>Congratulations! Your Piwik installation is complete.</p>
+{'Installation_ContratulationsHelp'|translate}
 
-<p>Make sure your javascript code is entered on your pages, 
-and wait for your first visitors!</p>
 
-
 <p class="nextStep">
-	<a href="{url module='' action=''}">Go to Piwik &raquo;</a>
+	<a href="{url module='' action=''}">{'Installation_GoToPiwik'|translate} &raquo;</a>
 </p>
Index: plugins/Installation/templates/firstWebsiteSetup.tpl
===================================================================
--- plugins/Installation/templates/firstWebsiteSetup.tpl	(wersja 439)
+++ plugins/Installation/templates/firstWebsiteSetup.tpl	(kopia robocza)
@@ -2,19 +2,19 @@
 
 {if isset($displayGeneralSetupSuccess)}
 <span id="toFade" class="success">
-	General Setup configured with success
+	{'Installation_GeneralSetupSuccess'|translate}
 	<img src="themes/default/images/success_medium.png">
 </span>
 {/if}
 
-<h1>Setup a website</h1>
+<h1>{'Installation_SetupWebsite'|translate}</h1>
 
 
 
 {if isset($errorMessage)}
 	<div class="error">
 		<img src="themes/default/images/error_medium.png">
-		There was an error when adding the website:
+		{'Installation_SetupWebsiteError'|translate}:
 		<br>- {$errorMessage}
 		
 	</div>
@@ -23,4 +23,4 @@
 
 {if isset($form_data)}
 	{include file=default/genericForm.tpl}
-{/if}
\ brakuje znaku końca linii na końcu pliku 
+{/if}
Index: plugins/Installation/templates/welcome.tpl
===================================================================
--- plugins/Installation/templates/welcome.tpl	(wersja 439)
+++ plugins/Installation/templates/welcome.tpl	(kopia robocza)
@@ -1,4 +1,3 @@
-<h1>Welcome!</h1>
-<p>Piwik is an open source web analytics software that makes it easy to get the information you want from your visitors.</p>
+<h1>{'Installation_Welcome'|translate}</h1>
 
-<p>This process is split up into {$totalNumberOfSteps} easy steps and will take around 5 minutes.</p>
\ brakuje znaku końca linii na końcu pliku 
+{'Installation_WelcomeHelp'|translate:$totalNumberOfSteps}
Index: plugins/Installation/templates/generalSetup.tpl
===================================================================
--- plugins/Installation/templates/generalSetup.tpl	(wersja 439)
+++ plugins/Installation/templates/generalSetup.tpl	(kopia robocza)
@@ -1,5 +1,5 @@
-<h1>General Setup</h1>
+<h1>{'Installation_GeneralSetup'|translate}</h1>
 
 {if isset($form_data)}
 	{include file=default/genericForm.tpl}
-{/if}
\ brakuje znaku końca linii na końcu pliku 
+{/if}
Index: plugins/Installation/templates/tablesCreation.tpl
===================================================================
--- plugins/Installation/templates/tablesCreation.tpl	(wersja 439)
+++ plugins/Installation/templates/tablesCreation.tpl	(kopia robocza)
@@ -1,27 +1,26 @@
-<h1>Creating the tables</h1>
+<h1>{'Installation_Tables'|translate}</h1>
 {if isset($someTablesInstalled)}
-	<div class="warning">Some <span id="linkToggle">Piwik tables</span> are already installed in the DB
+	<div class="warning">{'Installation_TablesWarning'|translate}
 	<img src="themes/default/images/warning_medium.png">
 	</div>
-	<div id="toggle" style="display:none;color:#4F2410"><small><i>The following tables have been found in the database: 
+	<div id="toggle" style="display:none;color:#4F2410"><small><i>{'Installation_TablesFound'|translate}:
 		<br>{$tablesInstalled} </i></small></div>
 
-	<p>Either choose to reuse the existing database tables or select a clean install 
-	to erase all existing data in the database.</p>
+	<p>{'Installation_TablesWarningHelp'|translate}</p>
 	
-	<p class="nextStep"><a href="{url action=$nextModuleName}">Reuse the existing tables &raquo;</a></p>
-	<p class="nextStep" id="eraseAllTables"><a href="{url deleteTables=1}">Delete the detected tables &raquo;</a></p>
+	<p class="nextStep"><a href="{url action=$nextModuleName}">{'Installation_TablesReuse'|translate} &raquo;</a></p>
+	<p class="nextStep" id="eraseAllTables"><a href="{url deleteTables=1}">{'Installation_TablesDelete'|translate} &raquo;</a></p>
 				
 {/if}
 
 {if isset($existingTablesDeleted)}
-	<div class="success"> Existing Piwik tables deleted with success
+	<div class="success"> {'Installation_TablesDeletedSuccess'|translate} 
 	<img src="themes/default/images/success_medium.png"></div>
 {/if}
 
 
 {if isset($tablesCreated)}
-	<div class="success"> Tables created with success! 
+	<div class="success"> {'Installation_TablesCreatedSuccess'|translate} 
 	<img src="themes/default/images/success_medium.png"></div>
 {/if}
 
@@ -32,7 +31,9 @@
 {literal}
 <script>
 $(document).ready( function(){
-	var strConfirmEraseTables = "Are you sure you want to delete all the Piwik tables from this database?";
+	{/literal}
+	var strConfirmEraseTables = "{'Installation_TablesDeleteConfirm'|translate} ";
+	{literal}	
 	
 	// toggle the display of the tables detected during the installation when clicking
 	// on the span "linkToggle"
@@ -64,4 +65,4 @@
 	;
 });
 </script>
-{/literal}
\ brakuje znaku końca linii na końcu pliku 
+{/literal}
Index: plugins/Installation/templates/structure.tpl
===================================================================
--- plugins/Installation/templates/structure.tpl	(wersja 439)
+++ plugins/Installation/templates/structure.tpl	(kopia robocza)
@@ -1,7 +1,7 @@
 
 <html>
 <head>
-<title>Piwik &raquo; Installation</title>
+<title>Piwik &raquo; {'Installation_Installation'|translate}</title>
 </head>
 <body>
 
@@ -194,18 +194,18 @@
 			{include file="$subTemplateToLoad"}
 			{if $showNextStep}
 				<p class="nextStep">
-					<a href="{url action=$nextModuleName}">Next &raquo;</a>
+					<a href="{url action=$nextModuleName}">{'General_Next'|translate} &raquo;</a>
 				</p>
 			{/if}
 		</div>
 		
 		<div class="both"></div>
 		
-		<h3>Installation status</h3>
+		<h3>{'Installation_InstallationStatus'|translate}</h3>
 		
 		<div id="installPercent">
 		<p style="width: {$percentDone}%;"></p>
 	</div>
 	
-	{$percentDone}% Done
+	{'Installation_PercentDone'|translate:$percentDone} 
 </div>
Index: plugins/AdminHome/templates/index.tpl
===================================================================
--- plugins/AdminHome/templates/index.tpl	(wersja 439)
+++ plugins/AdminHome/templates/index.tpl	(kopia robocza)
@@ -42,6 +42,6 @@
 </div>
 
 <div id="footer" style="border-top:1px solid gray; margin-top:20px;padding-top:10px;">
-<a href='?module=Home'>Back to Piwik homepage</a>
+<a href='?module=Home'>{'General_BackToHomepage'|translate}</a>
 
 </div>
Index: plugins/UserCountry/lang/en.php
===================================================================
--- plugins/UserCountry/lang/en.php	(wersja 439)
+++ plugins/UserCountry/lang/en.php	(kopia robocza)
@@ -1,6 +1,10 @@
 <?php
 $translations = array (
 
+	'UserCountry_Country' => 'Country',
+	'UserCountry_Continent' => 'Continent',
+	'UserCountry_DistinctCountries' => '%s distinct countries',
+	
 	// Countries
 	'country_ac' => 'Ascension Islands',
 	'country_ad' => 'Andorra',
Index: plugins/UserCountry/index.tpl
===================================================================
--- plugins/UserCountry/index.tpl	(wersja 439)
+++ plugins/UserCountry/index.tpl	(kopia robocza)
@@ -2,12 +2,13 @@
 
 <script type="text/javascript" src="plugins/Home/templates/sparkline.js"></script>
 
-<h2>Country</h2>
+<h2>{'UserCountry_Country'|translate}</h2>
 {$dataTableCountry}
 
-<h2>Continent</h2>
+<h2>{'UserCountry_Continent'|translate}</h2>
 {$dataTableContinent}
 
-<p><img class="sparkline" src="{$urlSparklineCountries}" /> <span><strong>{$numberDistinctCountries} </strong> distinct countries</span></p>	
+<p><img class="sparkline" src="{$urlSparklineCountries}" /> <span>
+{'UserCountry_DistinctCountries'|translate:"<strong>$numberDistinctCountries</strong>"} </span></p>	
 
-{postEvent name="template_footerUserCountry"}
\ brakuje znaku końca linii na końcu pliku 
+{postEvent name="template_footerUserCountry"}
Index: plugins/Login/lang/en.php
===================================================================
--- plugins/Login/lang/en.php	(wersja 0)
+++ plugins/Login/lang/en.php	(wersja 0)
@@ -0,0 +1,10 @@
+<?php
+$translations = array(
+	'Login_PluginDescription' => 'Login screen, gives credentials to users',
+	'Login_LoginPasswordNotCorrect' => 'Username & Password not correct',
+	'Login_Login' => 'Username',
+	'Login_Password' => 'Password',
+	'Login_LogIn' => 'Log in',
+	'Login_Logout' => 'Logout',
+	'Login_LostYourPassword' => 'Lost your password?',	
+);
Index: plugins/Login/lang/fr.php
===================================================================
--- plugins/Login/lang/fr.php	(wersja 0)
+++ plugins/Login/lang/fr.php	(wersja 0)
@@ -0,0 +1,7 @@
+<?php
+$translations = array(
+	'Login_LoginPasswordNotCorrect' => 'Utilisateur & Mot de passe not correct',
+	'Login_Login' => 'Utilisateur',
+	'Login_Password' => 'Mot de passe',
+	'Login_LogIn' => 'Log in',	
+);
Index: plugins/Login/templates/login.tpl
===================================================================
--- plugins/Login/templates/login.tpl	(wersja 439)
+++ plugins/Login/templates/login.tpl	(kopia robocza)
@@ -27,13 +27,13 @@
 {if $form_data.errors}
 <div id="login_error">	
 	{foreach from=$form_data.errors item=data}
-		<strong>ERROR</strong>: {$data}<br />
+		<strong>{'General_Error'|translate}</strong>: {$data}<br />
 	{/foreach}
 </div>
 {/if}
 
 {if $AccessErrorString}
-<div id="login_error"><strong>ERROR</strong>: {$AccessErrorString}<br /></div>
+<div id="login_error"><strong>{'General_Error'|translate}</strong>: {$AccessErrorString}<br /></div>
 {/if}
 
 <form {$form_data.attributes}>
@@ -57,7 +57,7 @@
 
 {*
 <p id="nav">
-<a href="" title="Password Lost and Found">Lost your password?</a>
+<a href="" title="Password Lost and Found">{'Login_LostYourPassword'|translate}</a>
 </p>
 *}
 </div>
Index: plugins/Login/Login.php
===================================================================
--- plugins/Login/Login.php	(wersja 439)
+++ plugins/Login/Login.php	(kopia robocza)
@@ -27,7 +27,7 @@
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
-			'translationAvailable' => false,
+			'translationAvailable' => true,
 		);
 		
 		return $info;
Index: plugins/API/API.php
===================================================================
--- plugins/API/API.php	(wersja 439)
+++ plugins/API/API.php	(kopia robocza)
@@ -20,7 +20,7 @@
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
-			'translationAvailable' => false,
+			'translationAvailable' => true,
 		);
 	}
 }
Index: plugins/API/lang/en.php
===================================================================
--- plugins/API/lang/en.php	(wersja 0)
+++ plugins/API/lang/en.php	(wersja 0)
@@ -0,0 +1,12 @@
+<?php
+$translations = array(
+	'API_QuickDocumentation' => 
+		"<h1>API quick documentation</h1>".
+		"<p>If you don't have data for today you can first <a href='misc/generateVisits.php' target=_blank>generate some data</a> using the Visits Generator script.</p>".
+		"<p>You can try the different formats available for every method. It is very easy to extract any data you want from piwik!</p>".
+		"<p>If you want to <b>request the data without being logged in to Piwik</b> you need to add the parameter <code><u>&token_auth=%s</u></code> to the API calls URLs that require authentication.</p>".
+		"<p><b>For more information have a look at the <a href='http://dev.piwik.org/trac/wiki/API'>official API Documentation</a> or the <a href='http://dev.piwik.org/trac/wiki/API/Reference'>API Reference</a>.</b></P>",
+	'API_LoadedAPIs' => 'Loaded successfully %s APIs',
+	
+
+);
Index: plugins/API/Controller.php
===================================================================
--- plugins/API/Controller.php	(wersja 439)
+++ plugins/API/Controller.php	(kopia robocza)
@@ -55,18 +55,15 @@
 	function listAllAPI()
 	{
 		$token_auth = Zend_Registry::get('auth')->getTokenAuth();
-		echo "<style>body{ font-family:georgia,arial; font-size:0.95em;} </style>";
-		echo "<h1>API quick documentation</h1>";
-		echo "<p>If you don't have data for today you can first <a href='misc/generateVisits.php' target=_blank>generate some data</a> using the Visits Generator script.</p>";
-		echo "<p>You can try the different formats available for every method. It is very easy to extract any data you want from piwik!</p>";
-		echo "<p>If you want to <b>request the data without being logged in to Piwik</b> you need to add the parameter <code><u>&token_auth=$token_auth</u></code> to the API calls URLs that require authentication.</p>";
-		echo "<p><b>For more information have a look at the <a href='http://dev.piwik.org/trac/wiki/API'>official API Documentation</a> or the <a href='http://dev.piwik.org/trac/wiki/API/Reference'>API Reference</a>.</b></P>";
+		echo "<style>body{ font-family:georgia,arial; font-size:0.95em;} </style>";
+		echo sprintf(Piwik_Translate('API_QuickDocumentation'),$token_auth);
+
 
 		$loaded = $this->init();
-		echo "<p><i> Loaded successfully $loaded APIs</i></p>\n";
+		echo "<p><i> ".sprintf(Piwik_Translate('API_LoadedAPIs'),$loaded)."</i></p>\n";
 		
 		echo Piwik_API_Proxy::getInstance()->getAllInterfaceString();
-		echo "<p><a href='?module=Home'>Back to Piwik homepage</a></p>";
+		echo "<p><a href='?module=Home'>".Piwik_Translate('General_BackToHomepage')."</a></p>";
 	}
 	
 }
Index: plugins/Referers/lang/en.php
===================================================================
--- plugins/Referers/lang/en.php	(wersja 439)
+++ plugins/Referers/lang/en.php	(kopia robocza)
@@ -1,10 +1,27 @@
 <?php
 $translations = array(
-	'Referers_DirectEntry' => 'Direct Entry',
 	'Referers_SearchEngines' => 'Search Engines',
-	'Referers_Websites' => 'Websites',
-	'Referers_Partners' => 'Partners',
-	'Referers_Newsletters' => 'Newsletters',
-	'Referers_Campaigns' => 'Campaigns',
+	
+	'Referers_Keywords' => 'Keywords',
+	
+	'Referers_Evolution' => 'Evolution over the period',
+	
+	'Referers_Type' => 'Referer Type',	
+	'Referers_TypeDirectEntries' => '%s direct entries',
+	'Referers_TypeSearchEngines' => '%s from search engines',
+	'Referers_TypePartners' => '%s from partners',
+	'Referers_TypeWebsites' => '%s from websites',
+	'Referers_TypeNewsletters' => '%s from newsletters',
+	'Referers_TypeCampaigns' => '%s from campaigns',
+	
+	'Referers_Other' => 'Other',
+	'Referers_OtherDistinctSearchEngines' => '%s distinct search engines',
+	'Referers_OtherDistinctKeywords' => '%s distinct keywords',
+	'Referers_OtherDistinctWebsites' => '%1s distinct websites (using %2s distinct urls)',
+	'Referers_OtherDistinctPartners' => '%1s distinct partners (using %2s distinct urls)',
+	'Referers_OtherDistinctCampaigns' => '%s distinct campaigns',
+	
+	'Referers_TagCloud' => 'Tag cloud output',
+
 );
  
Index: plugins/Referers/searchEngines_Keywords.tpl
===================================================================
--- plugins/Referers/searchEngines_Keywords.tpl	(wersja 439)
+++ plugins/Referers/searchEngines_Keywords.tpl	(kopia robocza)
@@ -1,9 +1,9 @@
 <div id='leftcolumn'>
-	<h2>Search engines</h2>
+	<h2>{'Referers_SearchEngines'|translate}</h2>
 	{$searchEngines}
 </div>
 
 <div id='rightcolumn'>
-	<h2>Keywords</h2>
+	<h2>{'Referers_Keywords'|translate}</h2>
 	{$keywords}
 </div>
Index: plugins/Referers/index.tpl
===================================================================
--- plugins/Referers/index.tpl	(wersja 439)
+++ plugins/Referers/index.tpl	(kopia robocza)
@@ -1,33 +1,44 @@
 <script type="text/javascript" src="plugins/Home/templates/sparkline.js"></script>
 
 	<a name="evolutionGraph" graphId="{$nameGraphEvolutionReferers}"></a>
-	<h2>Evolution over the period</h2>
+	<h2>{'Referers_Evolution'|translate}</h2>
 	{$graphEvolutionReferers}
 	
-	<h2>Referer Type</h2>
+	<h2>{'Referers_Type'|translate}</h2>
 	<table>
 		<tr><td>
-			<p><img class="sparkline" src="{$urlSparklineDirectEntry}" /> <span><strong>{$visitorsFromDirectEntry} </strong> direct entries</span></p>
-			<p><img class="sparkline" src="{$urlSparklineSearchEngines}" /> <span><strong>{$visitorsFromSearchEngines} </strong>  from search engines</span></p>
-			<p><img class="sparkline" src="{$urlSparklinePartners}" /> <span><strong>{$visitorsFromPartners} </strong> from partners</span></p>
+			<p><img class="sparkline" src="{$urlSparklineDirectEntry}" /> <span>
+			{'Referers_TypeDirectEntries'|translate:"<strong>$visitorsFromDirectEntry</strong>"}</span></p>
+			<p><img class="sparkline" src="{$urlSparklineSearchEngines}" /> <span>
+			{'Referers_TypeSearchEngines'|translate:"<strong>$visitorsFromSearchEngines</strong>"}</span></p>
+			<p><img class="sparkline" src="{$urlSparklinePartners}" /> <span>
+			{'Referers_TypePartners'|translate:"<strong>$visitorsFromPartners</strong>"}</span></p>
 		</td><td>
-			<p><img class="sparkline" src="{$urlSparklineWebsites}" /> <span><strong>{$visitorsFromWebsites} </strong> from websites</span></p>
-			<p><img class="sparkline" src="{$urlSparklineNewsletters}" /> <span><strong>{$visitorsFromNewsletters} </strong>  from newsletters</span></p>
-			<p><img class="sparkline" src="{$urlSparklineCampaigns}" /> <span><strong>{$visitorsFromCampaigns} </strong>  from campaigns</span></p>
+			<p><img class="sparkline" src="{$urlSparklineWebsites}" /> <span>
+			{'Referers_TypeWebsites'|translate:"<strong>$visitorsFromWebsites</strong>"}</span></p>
+			<p><img class="sparkline" src="{$urlSparklineNewsletters}" /> <span>
+			{'Referers_TypeNewsletters'|translate:"<strong>$visitorsFromNewsletters</strong>"}</span></p>
+			<p><img class="sparkline" src="{$urlSparklineCampaigns}" /> <span>
+			{'Referers_TypeCampaigns'|translate:"<strong>$visitorsFromCampaigns</strong>"}</span></p>
 		</td></tr>
 	</table>
 	
-	<h2>Other</h2>
+	<h2>{'Referers_Other'|translate}</h2>
 	<table>
 		<tr><td>
-			<p><img class="sparkline" src="{$urlSparklineDistinctSearchEngines}" /> <span><strong>{$numberDistinctSearchEngines} </strong>  distinct search engines</span></p>
-			<p><img class="sparkline" src="{$urlSparklineDistinctKeywords}" /> <span><strong>{$numberDistinctKeywords} </strong> distinct keywords</span></p>
+			<p><img class="sparkline" src="{$urlSparklineDistinctSearchEngines}" /> <span>
+			{'Referers_OtherDistinctSearchEngines'|translate:"<strong>$numberDistinctSearchEngines</strong>"}</span></p>
+			<p><img class="sparkline" src="{$urlSparklineDistinctKeywords}" /> <span>
+			{'Referers_OtherDistinctKeywords'|translate:"<strong>$numberDistinctKeywords</strong>"}</span></p>
 		</td><td>
-			<p><img class="sparkline" src="{$urlSparklineDistinctWebsites}" /> <span><strong>{$numberDistinctWebsites} </strong>  distinct websites (using <strong>{$numberDistinctWebsitesUrls}</strong> distinct urls)</span></p>
-			<p><img class="sparkline" src="{$urlSparklineDistinctPartners}" /> <span><strong>{$numberDistinctPartners} </strong>   distinct partners (using <strong>{$numberDistinctPartnersUrls}</strong> distinct urls)</span></p>
-			<p><img class="sparkline" src="{$urlSparklineDistinctCampaigns}" /> <span><strong>{$numberDistinctCampaigns} </strong>  distinct campaigns</span></p>
+			<p><img class="sparkline" src="{$urlSparklineDistinctWebsites}" /> <span>
+			{'Referers_OtherDistinctWebsites'|translate:"<strong>$numberDistinctWebsites</strong>":"<strong>$numberDistinctWebsitesUrls</strong>"}</span></p>
+			<p><img class="sparkline" src="{$urlSparklineDistinctPartners}" /> <span>
+			{'Referers_OtherDistinctPartners'|translate:"<strong>$numberDistinctPartners</strong>":"<strong>$numberDistinctPartnersUrls</strong>"}</span></p>
+			<p><img class="sparkline" src="{$urlSparklineDistinctCampaigns}" /> <span> 
+			{'Referers_OtherDistinctCampaigns'|translate:"<strong>$numberDistinctCampaigns</strong>"}</span></p>
 			</td></tr>
 	</table>
 	
-	<p>Tag cloud output</p>
-	{$dataTableRefererType}
\ brakuje znaku końca linii na końcu pliku 
+	<p>{'Referers_TagCloud'|translate}</p>
+	{$dataTableRefererType}
Index: plugins/VisitTime/lang/en.php
===================================================================
--- plugins/VisitTime/lang/en.php	(wersja 0)
+++ plugins/VisitTime/lang/en.php	(wersja 0)
@@ -0,0 +1,5 @@
+<?php
+$translations = array(
+	'VisitTime_LocalTime' => 'Visit per local time',
+	'VisitTime_ServerTime' => 'Visit per server time',
+);
Index: plugins/VisitTime/VisitTime.php
===================================================================
--- plugins/VisitTime/VisitTime.php	(wersja 439)
+++ plugins/VisitTime/VisitTime.php	(kopia robocza)
@@ -29,6 +29,7 @@
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
+			'translationAvailable' => true
 		);
 		
 		return $info;
Index: plugins/VisitTime/index.tpl
===================================================================
--- plugins/VisitTime/index.tpl	(wersja 439)
+++ plugins/VisitTime/index.tpl	(kopia robocza)
@@ -1,9 +1,9 @@
 <div id='leftcolumn'>
-<h2>Visit per local time</h2>
+<h2>{'VisitTime_LocalTime'|translate}</h2>
 {$dataTableVisitInformationPerLocalTime}
 </div>
 
 <div id='rightcolumn'>
-<h2>Visit per server time</h2>
+<h2>{'VisitTime_ServerTime'|translate}</h2>
 {$dataTableVisitInformationPerServerTime}
-</div>
\ brakuje znaku końca linii na końcu pliku 
+</div>
Index: plugins/VisitorInterest/lang/en.php
===================================================================
--- plugins/VisitorInterest/lang/en.php	(wersja 0)
+++ plugins/VisitorInterest/lang/en.php	(wersja 0)
@@ -0,0 +1,5 @@
+<?php
+$translations = array(
+	'VisitorInterest_VisitsPerDuration' => 'Visits per visit duration',
+	'VisitorInterest_VisitsPerNbOfPages' => 'Visits per number of pages',
+);
Index: plugins/VisitorInterest/VisitorInterest.php
===================================================================
--- plugins/VisitorInterest/VisitorInterest.php	(wersja 439)
+++ plugins/VisitorInterest/VisitorInterest.php	(kopia robocza)
@@ -49,6 +49,7 @@
 			'author' => 'Piwik',
 			'homepage' => 'http://piwik.org/',
 			'version' => '0.1',
+			'translationAvailable' => true
 		);
 		
 		return $info;
Index: plugins/VisitorInterest/index.tpl
===================================================================
--- plugins/VisitorInterest/index.tpl	(wersja 439)
+++ plugins/VisitorInterest/index.tpl	(kopia robocza)
@@ -1,5 +1,5 @@
 
-	<h2>Visits per visit duration</h2>
+	<h2>{'VisitorInterest_VisitsPerDuration'|translate}</h2>
 	{$dataTableNumberOfVisitsPerVisitDuration}
-	<h2>Visits per number of pages</h2>
-	{$dataTableNumberOfVisitsPerPage}
\ brakuje znaku końca linii na końcu pliku 
+	<h2>{'VisitorInterest_VisitsPerNbOfPages'|translate}</h2>
+	{$dataTableNumberOfVisitsPerPage}
Index: libs/javascript/sprintf.js
===================================================================
--- libs/javascript/sprintf.js	(wersja 0)
+++ libs/javascript/sprintf.js	(wersja 0)
@@ -0,0 +1,55 @@
+/**
+ * sprintf() for JavaScript v.0.4
+ *
+ * Copyright (c) 2007 Alexandru Marasteanu <http://alexei.417.ro/>
+ * Thanks to David Baird (unit test and patch).
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); }
+
+function sprintf () {
+  var i = 0, a, f = arguments[i++], o = [], m, p, c, x;
+  while (f) {
+    if (m = /^[^\x25]+/.exec(f)) o.push(m[0]);
+    else if (m = /^\x25{2}/.exec(f)) o.push('%');
+    else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
+      if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments.");
+      if (/[^s]/.test(m[7]) && (typeof(a) != 'number'))
+        throw("Expecting number but found " + typeof(a));
+      switch (m[7]) {
+        case 'b': a = a.toString(2); break;
+        case 'c': a = String.fromCharCode(a); break;
+        case 'd': a = parseInt(a); break;
+        case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
+        case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
+        case 'o': a = a.toString(8); break;
+        case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
+        case 'u': a = Math.abs(a); break;
+        case 'x': a = a.toString(16); break;
+        case 'X': a = a.toString(16).toUpperCase(); break;
+      }
+      a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);
+      c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
+      x = m[5] - String(a).length;
+      p = m[5] ? str_repeat(c, x) : '';
+      o.push(m[4] ? a + p : p + a);
+    }
+    else throw ("Huh ?!");
+    f = f.substring(m[0].length);
+  }
+  return o.join('');
+}
Index: modules/SmartyPlugins/modifier.translate.php
===================================================================
--- modules/SmartyPlugins/modifier.translate.php	(wersja 439)
+++ modules/SmartyPlugins/modifier.translate.php	(kopia robocza)
@@ -18,15 +18,16 @@
  * 
  * @return string The translated string
  */
-function smarty_modifier_translate($string, $aValues = null)
+function smarty_modifier_translate($string)
 {
-	if(is_null($aValues))
+	if(func_num_args() <= 1)
 	{
 		$aValues = array();
 	}
-	if(!is_array($aValues))
+	else
 	{
-		$aValues = array( $aValues);
+		$aValues = func_get_args();
+		array_shift($aValues);
 	}
 	return vsprintf(Piwik_Translate($string), $aValues);
-}
\ brakuje znaku końca linii na końcu pliku 
+}
Index: modules/SmartyPlugins/function.loadJavascriptTranslations.php
===================================================================
--- modules/SmartyPlugins/function.loadJavascriptTranslations.php	(wersja 0)
+++ modules/SmartyPlugins/function.loadJavascriptTranslations.php	(wersja 0)
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ *	inserts javascript translation array into the template from given modules
+ *  must be called with 'modules' argument which consists of space-separated module names (i.e. plugins)
+ *
+ *
+ *  Example (use in template):
+ *
+ *  {loadJavascriptTranslations modules='SitesManager Home General'}
+ *
+ *  loads javascript array translations from main translation file ('General')
+ *  and both 'Home' and 'SitesManager' plugins translations
+ * 
+ *  only translations with '_fs' suffix will be loaded
+ *
+ *  in order to use translation in your javascript use _pk_translate function
+ *  (it is always loaded with translations):
+ *
+ *  <script type="text/javascript">
+ *     alert(_pk_translate('MY_TRANSLATION_STRING','Default string in English'))
+ *  </script>
+ *
+ *  Note: Use translation string from your translation file WITHOUT '_js' suffix.
+ * 
+ * _pk_translate function supports printf() arguments, so you can call:
+ *
+ *   _pk_translate('_NB_OF_EGGS','There is %s eggs on the table','ten')
+ */
+
+function smarty_function_loadJavascriptTranslations($params, &$smarty) 
+{
+	if(!isset($params['modules']))
+	{
+		throw new Exception("The smarty function loadJavascriptTranslations needs a 'modules' parameter.");
+	}
+	$translate = Piwik_Translate::getInstance();
+	
+	return $translate->getJavascriptTranslations(explode(' ',$params['modules']));
+}
Index: modules/TranslateException.php
===================================================================
--- modules/TranslateException.php	(wersja 0)
+++ modules/TranslateException.php	(wersja 0)
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ * 
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later
+ * @version $Id$
+ * 
+ * @package Piwik_Helper
+ */
+
+require_once "Translate.php";
+
+/**
+ * Returns translated string or given message if translation is not found.
+ * This function does not throw any exception. Use it to translate exceptions.
+ *
+ * @return string
+ */
+function Piwik_TranslateException($message)
+{
+	$s = null;
+	
+	try 
+	{
+		$s = Piwik_Translate($message);
+	}
+	catch(Exception $e)
+	{
+		$s = null;
+	}
+	
+	if( $s == null )
+	{
+		$s = $message;
+	}
+	
+	return $s;		
+}
Index: modules/FrontController.php
===================================================================
--- modules/FrontController.php	(wersja 439)
+++ modules/FrontController.php	(kopia robocza)
@@ -29,6 +29,7 @@
 require_once "API/Proxy.php";
 require_once "Site.php";
 require_once "Translate.php";
+require_once "TranslateException.php";
 require_once "Url.php";
 require_once "Controller.php";
 
Index: modules/Translate.php
===================================================================
--- modules/Translate.php	(wersja 439)
+++ modules/Translate.php	(kopia robocza)
@@ -69,6 +69,54 @@
 			throw new Exception("The language selected ('$language') is not a valid language file ");
 		}
 	}
+	
+	/**
+	 * Generate javascript translations array
+	 * 
+	 * @return string containing javascript code with translations array (including <script> tag)
+	 *
+	 */
+	public function getJavascriptTranslations($moduleList)
+	{
+		if( !$moduleList )
+		{
+			return '';
+		}
+		// TODO: add {$PiwikUrl} to the following js include:
+		$js = '<script type="text/javascript" src="libs/javascript/sprintf.js" /></script>';
+		
+		$js .= '<script type="text/javascript">var translations = {';
+					
+		$moduleRegex = '#^(';
+		foreach($moduleList as $module)
+		{
+			$moduleRegex .= $module.'|'; 
+		}
+		$moduleRegex = substr($moduleRegex, 0, -1);
+		$moduleRegex .= ')_([^_]+)_js$#i';
+		
+		foreach($GLOBALS['Piwik_translations'] as $key => $value)
+		{
+			$matches = array();
+			
+			if( preg_match($moduleRegex,$key,$matches) ) {
+				$varName = $matches[1].'_'.$matches[2];
+				$varValue = $value;
+				
+				$js .= $varName. ": '".str_replace("'","\\'",$varValue)."',";
+			}
+			
+			$matches = null;
+		}
+		
+		$js .= '};';
+		$js .= 'function _pk_translate(tvar, str) { '.
+			'var s = translations[tvar] ? translations[tvar] : str;'.
+			'return sprintf(s, Array.prototype.slice.call(arguments).slice(2)); }';
+		$js .= '</script>';
+		
+		return $js;
+	}
 }
 
 function Piwik_Translate($index)

