Most of the l10n changes (locale detection/redirects and gettext calls). l10n
authorMark Hahnenberg <mhahnenberg@mozilla.com>
Wed, 29 Jul 2009 21:50:39 -0700
branchl10n
changeset 1114 117d9501f8675c03537e08e8a473e1feaf1d57e4
parent 1113 00a7d1614f82bd19da87aba02b6e34b5d5834132
child 1115 810282f5ebb67286fae94d93363057664f872d10
push id723
push usermhahnenberg@mozilla.com
push dateTue, 04 Aug 2009 17:32:53 +0000
Most of the l10n changes (locale detection/redirects and gettext calls).
server/change_password.php
server/delete_persona.php
server/demo_create.php
server/demo_create2.php
server/demo_create3.php
server/demo_create4.php
server/demo_install.php
server/faq.php
server/firstrun.php
server/index.php
server/lib/language.php
server/lib/user.php
server/locale/compile-mo.sh
server/locale/en_US/LC_MESSAGES/messages.po
server/locale/extract-po.sh
server/locale/merge-enus2all.sh
server/locale/merge-po.sh
server/locale/validate-compile-mo.sh
server/localhttpd.conf
server/personadetail.php
server/privacy.php
server/profile.php
server/reviewguidelines.php
server/signin.php
server/templates/change_user_details.php
server/templates/delete_persona_success_tmpl.php
server/templates/delete_persona_tmpl.php
server/templates/featured_designer.php
server/templates/featured_personas.php
server/templates/footer.php
server/templates/forgot_password_done_tmpl.php
server/templates/forgot_password_reset_tmpl.php
server/templates/forgot_password_thanks_tmpl.php
server/templates/forgot_password_tmpl.php
server/templates/gallery.php
server/templates/gallery_rss.php
server/templates/get_personas.php
server/templates/header.php
server/templates/login_form.php
server/templates/movers.php
server/templates/nav.php
server/templates/pagination.php
server/templates/persona_detail.php
server/templates/popular_personas.php
server/templates/signup_form.php
server/templates/upload_persona_tmpl.php
server/templates/upload_success_tmpl.php
server/templates/user_error.php
server/updated.php
server/upload_forms.php
server/viewpersonas.php
--- a/server/change_password.php
+++ b/server/change_password.php
@@ -10,76 +10,76 @@
 	#initial request page
 	if (array_key_exists('userreq', $_POST))
 	{
 		try
 		{
 			$username = array_key_exists('userreq', $_POST) ? (ini_get('magic_quotes_gpc') ? stripslashes($_POST['userreq']) : $_POST['userreq']) : null;
 			if (!$user->user_exists($username))
 			{
-				$error = "Oops!  We are unable to locate the username you entered.  Please try again, or <a href='https://www.getpersonas.com/upload'>create a new one</a>.";
+				$error = sprintf(_("Oops!  We are unable to locate the username you entered.  Please try again, or <a href=\"%s\">create a new one</a>."), $locale_conf->url('/update'));
 				include "templates/forgot_password_tmpl.php";
 				exit;
 			}
 			
 			$email = $user->get_email($username);
 			if (!$email)
 			{
-				$error = "We have no email address on file for you. Please contact personas-devel@mozilla.com";
+				$error = _("We have no email address on file for you. Please contact personas-devel@mozilla.com");
 				include "templates/forgot_password_tmpl.php";
 				exit;
 			}
 			
 			$code = $user->generate_password_change_code($username);
-			$mail_message = "So many passwords to remember! You asked to reset your personas password. To do so, please visit:\n\n";
-			$mail_message .= "https://www.getpersonas.com/forgot_password?username=$username&code=$code\n\n";
-			$mail_message .= "This link will let you change your password to something new. If you didn't ask for this, don't worry, we'll keep your password safe.\n\n";
-			$mail_message .= "Best Wishes,\n";
-			$mail_message .= "The Personas Team\n";
+			$mail_message = sprintf(_("So many passwords to remember! You asked to reset your personas password. To do so, please visit:\n\n
+						%s\n\n
+						This link will let you change your password to something new. If you didn't ask for this, don't worry, we'll keep your password safe.\n\n
+						Best Wishes,\n
+						The Personas Team\n"), $locale_conf->url("/forgot_password?username=$username&code=$code"));
 			
-			if (!mail($email, 'Resetting your personas password', $mail_message, "From: personas-devel@mozilla.com\r\n"))
+			if (!mail($email, _('Resetting your personas password'), $mail_message, "From: personas-devel@mozilla.com\r\n"))	// TODO
 			{
-				$error = "There was a problem with our mail server. Please try again in a few minutes. If it continues to not work, please contact personas-devel@mozilla.com";
+				$error = _("There was a problem with our mail server. Please try again in a few minutes. If it continues to not work, please contact personas-devel@mozilla.com");
 				include "templates/forgot_password_tmpl.php";
 				exit;
 			}
 			
 			include "templates/forgot_password_thanks_tmpl.php";
 			exit;
 		}
 		catch (Exception $e)
 		{
-			$error = "There was an internal error. Please contact personas-devel@mozilla.com";
+			$error = _("There was an internal error. Please contact personas-devel@mozilla.com");
 			error_log($e->getMessage());
 			include "templates/forgot_password_tmpl.php";
 			exit;
 		}
 	}
 	
 	#here's a code, so give the password form
 	if (array_key_exists('username', $_GET))
 	{
 		try
 		{
 			$username = array_key_exists('username', $_GET) ? (ini_get('magic_quotes_gpc') ? stripslashes($_GET['username']) : $_GET['username']) : null;
 			$code = array_key_exists('code', $_GET) ? (ini_get('magic_quotes_gpc') ? stripslashes($_GET['code']) : $_GET['code']) : null;
 	
 			if (!$user->check_password_change_code($username, $code))
 			{
-				$error = "The code you submitted is not valid for that username. Please request another one";
+				$error = _("The code you submitted is not valid for that username. Please request another one");
 				include "templates/forgot_password_tmpl.php";
 				exit;
 			}
 			
 			include "templates/forgot_password_reset_tmpl.php";
 			exit;
 		}
 		catch (Exception $e)
 		{
-			$error = "There was an internal error. Please contact personas-devel@mozilla.com";
+			$error = _("There was an internal error. Please contact personas-devel@mozilla.com");
 			error_log($e->getMessage());
 			include "templates/forgot_password_reset_tmpl.php";
 			exit;
 		}
 	}
 	
 	if (array_key_exists('user', $_POST))
 	{
@@ -92,52 +92,52 @@
 	
 			if (!$code)
 			{
 				include "templates/forgot_password_tmpl.php";
 				exit;
 			}
 			if (!$user->check_password_change_code($username, $code))
 			{
-				$error = "The code you submitted is not valid for that username. Please request another one";
+				$error = _("The code you submitted is not valid for that username. Please request another one");
 				include "templates/forgot_password_tmpl.php";
 				exit;
 			}
 	
 			if (strlen($password) < 6)
 			{
-				$error = "Password must be at least 6 characters long";
+				$error = _("Password must be at least 6 characters long");
 				include "templates/forgot_password_reset_tmpl.php";
 				exit;
 			}
 
 			if (!preg_match('/[A-Z]/i', $password) || !preg_match('/[^A-Z]/i', $password))
 			{
-				$error = "The password should contain at least one alphabetic character and at least one non-alphabetic character";
+				$error = _("The password should contain at least one alphabetic character and at least one non-alphabetic character");
 				include "templates/forgot_password_reset_tmpl.php";
 				exit;
 			}
 			
 			if ($password != $conf)
 			{
-				$error = "The password and confirmation do not match. Please try again";
+				$error = _("The password and confirmation do not match. Please try again");
 				include "templates/forgot_password_reset_tmpl.php";
 				exit;
 			}			
 	
 			$user->update_password($username, $password);
 			
 			include "templates/forgot_password_done_tmpl.php";
 			exit;			
 		}
 		catch (Exception $e)
 		{
-			$error = "There was an internal error. Please contact personas-devel@mozilla.com";
+			$error = _("There was an internal error. Please contact personas-devel@mozilla.com");
 			error_log($e->getMessage());
 			include "templates/forgot_password_reset_tmpl.php";
 			exit;			
 		}
 	}		
 
 	include "templates/forgot_password_tmpl.php";
 	exit;
 
-?>
\ No newline at end of file
+?>
--- a/server/delete_persona.php
+++ b/server/delete_persona.php
@@ -40,23 +40,23 @@
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/personas_functions.php';
 	require_once 'lib/storage.php';
 	require_once 'lib/user.php';
 
 	
 	function send_delete_email($address, $reason, $name)
 	{
-		$message = "We have had to remove your persona '$name' from the gallery for the following reason: $reason.\n\n"; 
-		$message .= "If you have any questions about this decision, please contact us at personas@mozilla.com. We look forward to seeing your contributions to the community in the future.\n\n";
-		$message .= "Best Wishes,\n";
-		$message .= "The Personas Team\n";
+		$message = sprintf(_("We have had to remove your persona '%s' from the gallery for the following reason: %s.\n\n
+		    If you have any questions about this decision, please contact us at personas@mozilla.com. We look forward to seeing your contributions to the community in the future.\n\n
+		    Best Wishes,\n
+		    The Personas Team\n"), $name, $reason);
 		
-		$header = "From: personas@mozilla.com\r\n";
-		return mail($address, 'Removing a persona', $message, $header);
+		$header = "From: personas@mozilla.com\r\n"; //TODO
+		return mail($address, _('Removing a persona'), $message, $header);
 	}
 
 
 	$path = array_key_exists('PATH_INFO', $_SERVER) ? $_SERVER['PATH_INFO'] : '/';
 	$path = substr($path, 1); #chop the lead slash
 	list($id) = explode('/', $path);
 	
 	$user = new PersonaUser();
@@ -71,28 +71,28 @@
 	{
 		$persona = null;
 		include 'templates/delete_persona_tmpl.php';
 		exit;
 	}
 	
 	if (!($user->has_admin_privs() || $persona['author'] == $auth_user))
 	{
-		$override_error = "You don't have permission to edit that";
+		$override_error = _("You don't have permission to edit that");
 		include 'templates/delete_persona_tmpl.php';
 		exit;
 	}
 	
 	if (array_key_exists('confirm', $_POST))
 	{
 		rename (make_persona_storage_path($persona['id']), make_persona_pending_path($persona['id']));
 		$db->reject_persona($persona['id']);
 		if ($persona['author'] != $auth_user)
 			send_delete_email($user->get_email($persona['author']), $_POST['dreason'], $persona['name']);
-		$db->log_action($user->get_username(), $persona['id'], "Pulled" . (array_key_exists('dreason', $_POST) ? " - " . $_POST['dreason'] : ""));
+		$db->log_action($user->get_username(), $persona['id'], "Pulled" . (array_key_exists('dreason', $_POST) ? " - " . $_POST['dreason'] : ""));  //TODO: localizing logs necessary?
 		include 'templates/delete_persona_success_tmpl.php';
 	}
 	else
 	{
 		$persona['json'] = htmlentities(json_encode(extract_record_data($persona)));
 		include 'templates/delete_persona_tmpl.php';
 	}
 	
--- a/server/demo_create.php
+++ b/server/demo_create.php
@@ -1,153 +1,152 @@
 <?php
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/user.php';	
-
-
+    require_once 'lib/language.php';
+ 
 	$user = new PersonaUser();
-	$title = "How to Create Personas"; 
+	$title = _("How to Create Personas"); 
 	include 'templates/header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
-                <h2>How To</h2>
-                <h3>Personas are lightweight, easy to install and easy to change “skins” for your Firefox web browser.</h3>
+                <h2><?= _("How To");?></h2>
+                <h3><?= _("Personas are lightweight, easy to install and easy to change \"skins\" for your Firefox web browser.");?></h3>
             </div>
             <div id="maincontent" class="demo">
                 <div id="breadcrumbs">
-                    <a href="http://www.getpersonas.com">Personas Home</a> : How to Create Personas
+                    <?printf(_("<a href=\"%s\">" . _("Personas Home") . "</a> : How to Create Personas"), $locale_conf->url('/'));?>, 
                 </div>
                 
 
                 
                 
                 
                 	<div id="tutorial">
 
-                		<div class="tut_Header">How to Create Personas</div>
+                		<div class="tut_Header"><?= _("How to Create Personas");?></div>
 
                 		<div class="tut_Copy">
 
-                		<p>Personas are made up of two graphic image files - a "header" image and a "footer" image - which skin
-                			the default Firefox UI background.
+                		<p><?= _("Personas are made up of two graphic image files - a \"header\" image and a \"footer\" image - which skin the default Firefox UI background.");?> <?//TODO shouln't there be a </p> tag here??>
 
                 		</div>
 
                 		<table class="tut_nav">
                 			<tr>
-                				<td class="tut_leftOFF">Step 1: Creating a Persona Header Image</td>
-                				<td class="tut_left"><a href="/demo_create_3">Step 3: Testing your Persona Images</a> &raquo;</td>
+                				<td class="tut_leftOFF"><?= _("Step 1: Creating a Persona Header Image");?></td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 3: Testing your Persona Images") . "</a> &raquo;", $locale_conf->url('/demo_create_3'));?></td>
                 			</tr>
                 			<tr>
-                				<td class="tut_left"><a href="/demo_create_2">Step 2: Creating a Persona Footer Image</a> &raquo;</td>
-                				<td class="tut_left"><a href="/demo_create_4">Step 4: Submit your Persona!</a> &raquo;</td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 2: Creating a Persona Footer Image") . "</a> &raquo;", $locale_conf->url('/demo_create_2'));?></td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 4: Submit your Persona!") . "</a> &raquo;", $locale_conf->url('/demo_create_4'));?></td>
                 			</tr>
                 		</table>
 
 
                 	<!-- STEP 1 -->
 
                 		<div class="tut_Box">
 
-                			<div class="tut_step"><span class="tut_Title">Step 1: Creating a Persona Header Image</span></div>
+                			<div class="tut_step"><span class="tut_Title"><?= _("Step 1: Creating a Persona Header Image");?></span></div>
 
                 			<div class="tut_Copy">
 
-                			<p>The header image is displayed as the background of the top of the browser window, nestling in behind the toolbars, address bar, search bar and the tab strip.  
-                			It will be <b>anchored to the top-right corner</b> of the browser window.
+                			<p><?= _("The header image is displayed as the background of the top of the browser window, nestling in behind the toolbars, address bar, search bar and the tab strip.  
+                			It will be <b>anchored to the top-right corner</b> of the browser window.");?>
 
                 			<img class="tut_Image centerImg" src="/static/img/tut_XPheader.jpg">
 
                 			<ul>
 
-                			<li>View a sample Persona Header <b><a href="/static/img/Persona_Header_LABS.jpg">here</a></b>.</li>
+                			<li><?= _("View a sample Persona Header <b><a href=\"/static/img/Persona_Header_LABS.jpg\">here</a></b>.");?></li>
 
-                			<li>View the sample Persona Header as seen in <b><a href="/static/img/tut_XPheader.jpg">XP</a></b>, <b><a href="/static/img/tut_VISTAheader.jpg">Vista</a></b>, and <b><a href="/static/img/tut_OSXheader.jpg">OSX</a></b>.</li>
+                			<li><?= _("View the sample Persona Header as seen in <b><a href=\"/static/img/tut_XPheader.jpg\">XP</a></b>, <b><a href=\"/static/img/tut_VISTAheader.jpg\">Vista</a></b>, and <b><a href=\"/static/img/tut_OSXheader.jpg\">OSX</a></b>.");?></li>
 
                 			</ul>
 
                 			<br>
 
                 			</div>
 
                 			<div class="tut_info"><img src="/static/img/do-64.png" class="tut_icon">
 
                 				<ul>
 
-                				<li>Dimensions should be <b>3000px wide x 200px high</b></li>
+                				<li><?= _("Dimensions should be <b>3000px wide x 200px high</b>");?></li>
 
-                				<li>PNG or JPG file format</li>
+                				<li><?= _("PNG or JPG file format");?></li>
 
-                				<li>subtle, soft contrast images and gradients work best</li>
+                				<li><?= _("subtle, soft contrast images and gradients work best");?></li>
 
                 				</ul>
 
                 			</div>
 
                 			<div class="tut_warning"><img src="/static/img/warning-64.png" class="tut_icon">
 
                 				<ul>
 
-                				<li>highly detailed images will compete with the browser UI</li>
+                				<li><?= _("highly detailed images will compete with the browser UI");?></li>
 
-                				<li>Firefox may reveal more of the lower portion of the image if it or an extension adds another toolbar or other UI
-                			element to the top of the window</li>
+                				<li><?= _("Firefox may reveal more of the lower portion of the image if it or an extension adds another toolbar or other UI
+                			element to the top of the window");?></li>
 
-                				<li>the right-hand side of the image should have the most important information - as a user
+                				<li><?= _("the right-hand side of the image should have the most important information - as a user
                 				increases the width of the browser window, the browser reveals more of the left-hand side of the
-                				image</li>
+                				image");?></li>
 
                 				</ul>
 
                 			</div>
 
                 			<div class="tut_alert"><img src="/static/img/donot-64.png" class="tut_icon">
 
                 				<ul>
 
-                				<li>images must be no larger than 300kb in filesize</li>
+                				<li><?= _("images must be no larger than 300kb in filesize");?></li>
 
-                				<li>images over 3000px x 200px will not be approved</li>
+                				<li><?= _("images over 3000px x 200px will not be approved");?></li>
 
-                				<li>never use artwork/logos/photography that you do not have the legal rights to use - you will have to prove you have the rights if the content is questioned</li>
+                				<li><?= _("never use artwork/logos/photography that you do not have the legal rights to use - you will have to prove you have the rights if the content is questioned");?></li>
 
                 				</ul>
 
                 			</div>
 
                 			<table class="tut_nav">
                 				<tr>
                 					<td></td>
                 					<td>
-                						<div class="tut_right"><b><a href="/demo_create_2">Continue to Step 2</a> &raquo;</b></div>
+                						<div class="tut_right"><?printf(_("<b><a href=\"%s\">Continue to Step 2</a> &raquo;</b>"), $locale_conf->url('/demo_create_2'));?></div>
                 					</td>
                 				</tr>
                 			</table>
 
                 		</div>
 
                 		<br><br>
 
                 <!-- RESOURCES -->
 
-                		<div class="tut_didyouknow"><img src="/static/img/question-64.png" class="tut_icon"><p>Did you know you can test a Persona before you submit it?  <b><a href="/demo_create_3#test">Find out how!</a>&raquo;</b></div>
+                		<div class="tut_didyouknow"><img src="/static/img/question-64.png" class="tut_icon"><p><?printf (_("Did you know you can test a Persona before you submit it?  <b><a href=\"%s\">Find out how!</a>&raquo;</b>"), $locale_conf->url('/demo_create_3#test'));?></div>
 
                 		<div class="tut_info"><img src="/static/img/information-64.png" class="tut_icon">
 
-                		<p><span class="tut_TitleInfo">Online Image Editor Resources</span><br><br>
+                		<p><span class="tut_TitleInfo"><?= _("Online Image Editor Resources");?></span><br><br>
 
                 		<ul>
 
-                		<li><a href="http://www.sumopaint.com">SUMOPaint</a> -  SUMO Paint offers professional and easy to use tools for creating and editing images within a browser. SUMO Paint is a free image editing software that gives you the opportunity to create, edit and comment images online with powerful tools and layer support. </li>
-                		<li><a href="http://www.photoshop.com">Photoshop.com</a> - Tweak, rotate and touch up photoswith Photoshop&reg; Express, your free online photo editor.</li>
-                		<li><a href="http://aviary.com/home">Aviary Phoenix</a> - All the Photoshop features you actually need, at a fraction of the price. Did we mention built-in collaboration? Create and edit with the world!</li>
+                		<li><a href="http://www.sumopaint.com">SUMOPaint</a> - <?= _("SUMO Paint offers professional and easy to use tools for creating and editing images within a browser. SUMO Paint is a free image editing software that gives you the opportunity to create, edit and comment images online with powerful tools and layer support.");?> </li>
+                		<li><a href="http://www.photoshop.com">Photoshop.com</a> - <?= _("Tweak, rotate and touch up photoswith Photoshop&reg; Express, your free online photo editor.");?></li>
+                		<li><a href="http://aviary.com/home">Aviary Phoenix</a> - <?= _("All the Photoshop features you actually need, at a fraction of the price. Did we mention built-in collaboration? Create and edit with the world!");?></li>
 
                 		</ul>
 
                 		</div>		</div>
 
                 
                 
          
--- a/server/demo_create2.php
+++ b/server/demo_create2.php
@@ -1,154 +1,152 @@
 <?php
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/user.php';	
-
+    require_once 'lib/language.php';
 
 	$user = new PersonaUser();
-	$title = "How to Create Personas"; 
+	$title = _("How to Create Personas"); 
 	include 'templates/header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
-                <h2>How To</h2>
-                <h3>Personas are lightweight, easy to install and easy to change “skins” for your Firefox web browser.</h3>
+                <h2><?= _("How To");?></h2>
+                <h3><?= _("Personas are lightweight, easy to install and easy to change \"skins\" for your Firefox web browser.");?></h3>
             </div>
             <div id="maincontent" class="demo">
                 <div id="breadcrumbs">
-                    <a href="http://www.getpersonas.com">Personas Home</a> : How to Create Personas
+                    <?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : " . _("How to Create Personas"), $locale_conf->url('/'));?>
                 </div>
                 
 
                 
                 
                 	<div id="tutorial">
 
-                		<div class="tut_Header">How to Create Personas</div>
+                		<div class="tut_Header"><?= _("How to Create Personas");?></div>
 
                 		<div class="tut_Copy">
 
-                		<p>Personas are made up of two graphic image files - a "header" image and a "footer" image - which skin
-                			the default Firefox UI background.
+                		<p><?= _("Personas are made up of two graphic image files - a \"header\" image and a \"footer\" image - which skin the default Firefox UI background.");?>
 
                 		</div>
 
                 		<table class="tut_nav">
                 			<tr>
-                				<td class="tut_left"><a href="/demo_create">Step 1: Creating a Persona Header Image</a> &raquo;</td>
-                				<td class="tut_left"><a href="/demo_create_3">Step 3: Testing your Persona Images</a> &raquo;</td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 1: Creating a Persona Header Image") . "</a> &raquo;", $locale_conf->url('/demo_create'));?></td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 3: Testing your Persona Images") . "</a> &raquo;", $locale_conf->url('/demo_create_3'));?></td>
                 			</tr>
                 			<tr>
-                				<td class="tut_leftOFF">Step 2: Creating a Persona Footer Image</td>
-                				<td class="tut_left"><a href="/demo_create_4">Step 4: Submit your Persona!</a> &raquo;</td>
+                				<td class="tut_leftOFF"><?= _("Step 2: Creating a Persona Footer Image");?></td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 4: Submit your Persona!") . "</a> &raquo;", $locale_conf->url('/demo_create_4'));?></td>
                 			</tr>
                 		</table>
 
                 <!-- STEP 2 -->
 
                 		<div class="tut_Box">
 
-                			<div class="tut_step"><span class="tut_Title">Step 2: Creating a Persona Footer Image</span></div>
+                			<div class="tut_step"><span class="tut_Title"><?= _("Step 2: Creating a Persona Footer Image");?></span></div>
 
                 			<div class="tut_Copy">
 
-                			<p>The footer image is displayed as the background of the bottom of the browser window, behind the
-                		status and find bars. It will be <b>anchored to the bottom-left corner</b> of the browser window.
+                			<p><?= _("The footer image is displayed as the background of the bottom of the browser window, behind the status and find bars. It will be <b>anchored to the bottom-left corner</b> of the browser window.");?>
 
                 			<img class="tut_Image centerImg" src="/static/img/tut_XPfooter.jpg">
 
                 			<ul>
 
-                			<li>View a sample Persona Footer <b><a href="/static/img/Persona_Footer_LABS.jpg">here</a></b>.</li>
+                			<li><?= _("View a sample Persona Footer <b><a href=\"/static/img/Persona_Footer_LABS.jpg\">here</a></b>.");?></li>
 
-                			<li>View the sample Persona Footer as seen in <b><a href="/static/img/tut_XPfooter.jpg">XP</a></b>, <b><a href="/static/img/tut_VISTAfooter.jpg">Vista</a></b>, and <b><a href="/static/img/tut_OSXfooter.jpg">OSX</a></b>.</li>
+                			<li><?= _("View the sample Persona Footer as seen in <b><a href=\"/static/img/tut_XPfooter.jpg\">XP</a></b>, <b><a href=\"/static/img/tut_VISTAfooter.jpg\">Vista</a></b>, and <b><a href=\"/static/img/tut_OSXfooter.jpg\">OSX</a></b>.");?></li>
 
                 			</ul>
 
                 			<br>
 
                 			</div>
 
                 			<div class="tut_info"><img src="/static/img/do-64.png" class="tut_icon">
 
                 				<ul>
 
-                				<li>Dimensions should be <b>3000px wide x 100px high</b></li>
+                				<li><?= _("Dimensions should be <b>3000px wide x 100px high</b>");?></li>
 
-                				<li>PNG or JPG file format</li>
+                				<li><?= _("PNG or JPG file format");?></li>
 
-                				<li>subtle, soft contrast images and gradients work best</li>
+                				<li><?= _("subtle, soft contrast images and gradients work best");?></li>
 
                 				</ul>
 
                 			</div>
 
                 			<div class="tut_warning"><img src="/static/img/warning-64.png" class="tut_icon">
 
                 				<ul>
 
-                				<li>highly detailed images will compete with the browser status bar UI</li>
+                				<li><?= _("highly detailed images will compete with the browser status bar UI");?></li>
 
-                				<li>Firefox may reveal more of the upper portion of the image if the find bar is open or if an extension adds more height to the bottom of the window</li>
+                				<li><?= _("Firefox may reveal more of the upper portion of the image if the find bar is open or if an extension adds more height to the bottom of the window");?></li>
 
-                				<li>the right-hand side of the header image should have the most important information - as a user
+                				<li><?= _("the right-hand side of the header image should have the most important information - as a user
                 				increases the width of the browser window, the browser reveals more of the left-hand side of the
-                				image</li>
+                				image");?></li>
 
                 				</ul>
 
                 			</div>
 
                 			<div class="tut_alert"><img src="/static/img/donot-64.png" class="tut_icon">
 
                 				<ul>
 
-                				<li>images must be no larger than 300kb in filesize</li>
+                				<li><?= _("images must be no larger than 300kb in filesize");?></li>
 
-                				<li>images over 3000px x 100px will not be approved</li>
+                				<li><?= _("images over 3000px x 100px will not be approved");?></li>
 
-                				<li>never use artwork/logos/photography that you do not have the legal rights to use - you will have to prove you have the rights if the content is questioned</li>
+                				<li><?= _("never use artwork/logos/photography that you do not have the legal rights to use - you will have to prove you have the rights if the content is questioned");?></li>
 
                 				</ul>
 
                 			</div>
 
                 		<table class="tut_nav">
                 				<tr>
                 					<td>
-                						<div class="tut_left"><b>&laquo; <a href="/demo_create">Back to Step 1</a></b></div>
+                						<div class="tut_left"><?printf("<b>&laquo; <a href=\"%s\">" . _("Back to Step 1") . "</a></b>", $locale_conf->url('/demo_create'));?></div>
                 					</td>
                 					<td>
-                						<div class="tut_right"><b><a href="/demo_create_3">Continue to Step 3</a> &raquo;</b></div>
+                						<div class="tut_right"><?printf("<b><a href=\"%s\">" . _("Continue to Step 3") . "</a> &raquo;</b>", $locale_conf->url('/demo_create_3'));?></div>
                 					</td>
                 				</tr>
                 		</table>
 
                 		</div>
 
 
                 		<br><br>
 
                 <!-- RESOURCES -->
 
-                		<div class="tut_didyouknow"><img src="/static/img/question-64.png" class="tut_icon"><p>Did you know you can test a Persona before you submit it?  <b><a href="/demo_create_3#test">Find out how!</a> &raquo;</b></div>
+                		<div class="tut_didyouknow"><img src="/static/img/question-64.png" class="tut_icon"><p><?printf(_("Did you know you can test a Persona before you submit it?") . "  <b><a href=\"%s\">" . _("Find out how!") . "</a> &raquo;</b>", $locale_conf->url('/demo_create_3#test'));?></div>
 
 
                 		<div class="tut_info"><img src="/static/img/information-64.png" class="tut_icon">
 
-                		<p><span class="tut_TitleInfo">Online Image Editor Resources</span><br><br>
+                		<p><span class="tut_TitleInfo"><?= _("Online Image Editor Resources");?></span><br><br>
 
                 		<ul>
 
-                		<li><a href="http://www.sumopaint.com">SUMOPaint</a> -  SUMO Paint offers professional and easy to use tools for creating and editing images within a browser. SUMO Paint is a free image editing software that gives you the opportunity to create, edit and comment images online with powerful tools and layer support. </li>
-                		<li><a href="http://www.photoshop.com">Photoshop.com</a> - Tweak, rotate and touch up photoswith Photoshop&reg; Express, your free online photo editor.</li>
-                		<li><a href="http://aviary.com/home">Aviary Phoenix</a> - All the Photoshop features you actually need, at a fraction of the price. Did we mention built-in collaboration? Create and edit with the world!</li>
+                		<li><a href="http://www.sumopaint.com">SUMOPaint</a> - <?= _("SUMO Paint offers professional and easy to use tools for creating and editing images within a browser. SUMO Paint is a free image editing software that gives you the opportunity to create, edit and comment images online with powerful tools and layer support.");?> </li>
+                		<li><a href="http://www.photoshop.com">Photoshop.com</a> - <?= _("Tweak, rotate and touch up photoswith Photoshop&reg; Express, your free online photo editor.");?></li>
+                		<li><a href="http://aviary.com/home">Aviary Phoenix</a> - <?= _("All the Photoshop features you actually need, at a fraction of the price. Did we mention built-in collaboration? Create and edit with the world!");?></li>
 
                 		</ul>
 
                 		</div>
                 
          </div>
          
             </div>
--- a/server/demo_create3.php
+++ b/server/demo_create3.php
@@ -1,185 +1,180 @@
 <?php
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/user.php';	
+	require_once "lib/language.php";
 
 
 	$user = new PersonaUser();
-	$title = "How to Create Personas"; 
+	$title = _("How to Create Personas"); 
 	include 'templates/header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
-                <h2>How To</h2>
-                <h3>Personas are lightweight, easy to install and easy to change “skins” for your Firefox web browser.</h3>
+                <h2><?= _("How To");?></h2>
+                <h3><?= _("Personas are lightweight, easy to install and easy to change \"skins\" for your Firefox web browser.");?></h3>
             </div>
             <div id="maincontent" class="demo">
                 <div id="breadcrumbs">
-                    <a href="http://www.getpersonas.com">Personas Home</a> : How to Create Personas
+                    <?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : " . _("How to Create Personas"), $locale_conf->url('/'));?>
                 </div>
-                
-
-                
-                
 
                 	<div id="tutorial">
 
-                		<div class="tut_Header">How to Create Personas</div>
+                		<div class="tut_Header"><?= _("How to Create Personas");?></div>
 
                 		<div class="tut_Copy">
 
-                		<p>Personas are made up of two graphic image files - a "header" image and a "footer" image - which skin
-                			the default Firefox UI background.
+                		<p><?= _("Personas are made up of two graphic image files - a \"header\" image and a \"footer\" image - which skin
+                			the default Firefox UI background.");?>
 
                 		</div>
 
                 		<table class="tut_nav">
                 			<tr>
-                				<td class="tut_left"><a href="/demo_create">Step 1: Creating a Persona Header Image</a> &raquo;</td>
-                				<td class="tut_leftOFF">Step 3: Testing your Persona Images</td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 1: Creating a Persona Header Image") . "</a> &raquo;", $locale_conf->url('/demo_create'));?></td>
+                				<td class="tut_leftOFF"><?= _("Step 3: Testing your Persona Images");?></td>
                 			</tr>
                 			<tr>
-                				<td class="tut_left"><a href="/demo_create_2">Step 2: Creating a Persona Footer Image</a> &raquo;</td>
-                				<td class="tut_left"><a href="/demo_create_4">Step 4: Submit your Persona!</a> &raquo;</td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 2: Creating a Persona Footer Image") . "</a> &raquo;", $locale_conf->url('/demo_create_2'));?></td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 4: Submit your Persona!") . "</a> &raquo;", $locale_conf->url('/demo_create_4'));?></td>
                 			</tr>
                 		</table>
 
                 	<!-- STEP 3 -->
 
                 		<a name="test"></a>
 
                 		<div class="tut_Box">
 
-                			<div class="tut_step"><span class="tut_Title">Step 3: Testing your Persona Images</span></div>
+                			<div class="tut_step"><span class="tut_Title"><?= _("Step 3: Testing your Persona Images");?></span></div>
 
                 			<div class="tut_Copy">
-
-                			<p>In general, designs that feature rich content areas in the top-right corner of the browser work
+                            <?//TODO close <p> tags?>
+                			<p><?= _("In general, designs that feature rich content areas in the top-right corner of the browser work
                 			best. Though that may be true, you should always check to see where the UI elements sit on top of
-                			your designs within the different platform versions of Firefox. <p>This may be a critical step in
+                			your designs within the different platform versions of Firefox.")?></p>
+                            <p><?= _("This may be a critical step in
                 			finalizing your image, depending on the importance of the visual information you are including in
-                			your designs.
+                			your designs.");?></p>
 
-                			<br><br><div class="tut_SubTitle">Option 1: Test on Your Own Computer</div> 
+                			<br><br><div class="tut_SubTitle"><?= _("Option 1: Test on Your Own Computer");?></div> 
 
-                			<p>Within the Personas menu in the bottom left of the browser's status bar, you can enable an "offline" Persona on your own personal computer by enabling a setting within Preferences.
-                			In doing this, you can test your Personas before submitting them to the online catalog.  
+                			<p><?= _("Within the Personas menu in the bottom left of the browser's status bar, you can enable an \"offline\" 
+                            Persona on your own personal computer by enabling a setting within Preferences.  In doing this, you can test your 
+                            Personas before submitting them to the online catalog.");?></p>
 
-                			<p>Follow these four steps to get the Custom Personas option up and running in your browser:
+                			<p><?= _("Follow these four steps to get the Custom Personas option up and running in your browser:");?></p>
 
                 			</div>
 
                 			<div class="tut_info"><img src="/static/img/information-64.png" class="tut_icon">
 
                 					<ol>
 
-                					<li>If you have Personas installed, click on the little fox on the bottom left
-                	of your computer screen and click on "Preferences"</li>
+                					<li><?= _("If you have Personas installed, click on the little fox on the bottom left of your computer screen and click on \"Preferences\"");?></li>
+
+                					<li><?= _("Ensure the box \"Show Custom Persona in Menu\" is checked and close the box.");?></li>
 
-                					<li>Ensure the box "Show Custom Persona in Menu" is
-                	checked and close the box.</li>
+                					<li><?= _("Click on the little fox again. Mouse over \"Custom\" in the menu and to the right find and click \"Edit\"");?></li>
 
-                					<li>Click on the little fox again. Mouse over "Custom" in the menu and to the
-                	right find and click "Edit"</li>
-
-                					<li>Build your Persona using the upload fields and additional settings.</li>
+                					<li><?= _("Build your Persona using the upload fields and additional settings.");?></li>
 
                 					</ol>
 
-
                 			</div>
 
 
                 			<div class="tut_Image"><img src="/static/img/tut_custom_1.jpg" border="0"><br>
                 			<div class="tut_Image"><img src="/static/img/tut_custom_2.jpg" border="0"><br>
 
                 			<div class="tut_warning"><img src="/static/img/warning-64.png" class="tut_icon">
 
                 					<ul>
 
-                					<li>Once your images are playing nice with the UI for all the OS flavors of Firefox, save final copies (PNG or JPG) -
-                			but be sure to check to ensure they don't exceed 300k in filesize!. (Note: This will only test your Persona on the platform you are currently using)</li>
+                					<li><?= _("Once your images are playing nice with the UI for all the OS flavors of Firefox, save final copies (PNG or JPG) -
+                			but be sure to check to ensure they don't exceed 300k in filesize!. (Note: This will only test your Persona on the platform you are currently using)");?></li>
 
                 					</ul>
 
                 			</div>		
 
-                			<br><br><div class="tut_SubTitle">Option 2: Cross-Platform Photoshop PSD Header Template</div> 
+                			<br><br><div class="tut_SubTitle"><?= _("Option 2: Cross-Platform Photoshop PSD Header Template");?></div> 
 
                 			<div class="tut_Copy">
 
-                			We've created a positioning template that can be used to help figure out placement of your
+                			<?= _("We've created a positioning template that can be used to help figure out placement of your
                 			artwork. The template is structured to allow testing of your Persona header within OSX, Windows XP and Windows Vista
-                			flavors of the browser. </div>
+                			flavors of the browser.");?> </div>
 
-                			<div class="link">Download the Personas Header Template:  <a
-                			href="/static/img/Persona_Header_TEMPLATE.psd"><img class="button" src="/static/img/tut_btn_download.gif"
+                			<div class="link"><?= _("Download the Personas Header Template:")?>  
+                            <a href="/static/img/Persona_Header_TEMPLATE.psd"><img class="button" src="/static/img/tut_btn_download.gif"
                 			border="0"></a></div>
 
                 			<div class="tut_Copy">
 
-                			The key to using this PSD template is to simply layer your Persona header image underneath one of
+                			<?= _("The key to using this PSD template is to simply layer your Persona header image underneath one of
                 			the three OS layers.  Be sure to turn off any of the OS layers you aren't using, as they will
-                			overlap each other due to their transparency.</div>
+                			overlap each other due to their transparency.");?></div>
 
                 			<div class="tut_Image center"><img src="/static/img/tut_PSpalette.jpg" border="0"><br><span
-                			class="caption">Photoshop overlay layerset</span></div>
+                			class="caption"><?= _("Photoshop overlay layerset");?></span></div>
 
                 			<div class="tut_warning"><img src="/static/img/warning-64.png" class="tut_icon">
 
                 					<ul>
 
-                					<li>Once you turn on an OS layer, you will be able to see where the UI elements will sit on top of
-                			your designs and you can flag any conflicts that may arise.</li>
+                					<li><?= _("Once you turn on an OS layer, you will be able to see where the UI elements will sit on top of
+                			your designs and you can flag any conflicts that may arise.");?></li>
 
-                					<li>Once your images are playing nice with the UI for all the OS flavors of Firefox, save final copies (PNG or JPG) -
-                			but be sure to check to ensure they don't exceed 300k in filesize!</li>
+                					<li><?= _("Once your images are playing nice with the UI for all the OS flavors of Firefox, save final copies (PNG or JPG) -
+                			but be sure to check to ensure they don't exceed 300k in filesize!");?></li>
 
                 					</ul>
 
                 			</div>
 
 
                 		</div>
 
                 	</div>
 
                 		<table class="tut_nav">
                 				<tr>
                 					<td>
-                						<div class="tut_left"><b>&laquo; <a href="/demo_create_2">Back to Step 2</a></b></div>
+                						<div class="tut_left"><?printf("<b>&laquo; <a href=\"%s\">" . _("Back to Step 2") . "</a></b>", $locale_conf->url('/demo_create_2'));?></div>
                 					</td>
                 					<td>
-                						<div class="tut_right"><b><a href="/demo_create_4">Continue to Step 4</a> &raquo;</b></div>
+                						<div class="tut_right"><?printf("<b><a href=\"/demo_create_4\">" . _("Continue to Step 4") . "</a> &raquo;</b>", $locale_conf->url('/demo_create_4'));?></div>
                 					</td>
                 				</tr>
                 		</table>
 
                 	</div>
 
                 		<br><br>
 
                 <!-- RESOURCES -->
 
-                		<div class="tut_didyouknow"><img src="/static/img/question-64.png" class="tut_icon"><p>Did you know you can test a Persona before you submit it?  <b><a href="/demo_create_3#test">Find out how!</a> &raquo;</b></div>
+                		<div class="tut_didyouknow"><img src="/static/img/question-64.png" class="tut_icon"><p><?printf(_("Did you know you can test a Persona before you submit it?") . "  <b><a href=\"%s\">" . _("Find out how!") . "</a> &raquo;</b>", $locale_conf->url('/demo_create_3#test'));?></div>
 
 
                 		<div class="tut_info"><img src="/static/img/information-64.png" class="tut_icon">
 
-                		<p><span class="tut_TitleInfo">Online Image Editor Resources</span><br><br>
+                		<p><span class="tut_TitleInfo"><?= _("Online Image Editor Resources");?></span><br><br>
 
                 		<ul>
 
-                		<li><a href="http://www.sumopaint.com">SUMOPaint</a> -  SUMO Paint offers professional and easy to use tools for creating and editing images within a browser. SUMO Paint is a free image editing software that gives you the opportunity to create, edit and comment images online with powerful tools and layer support. </li>
-                		<li><a href="http://www.photoshop.com">Photoshop.com</a> - Tweak, rotate and touch up photoswith Photoshop&reg; Express, your free online photo editor.</li>
-                		<li><a href="http://aviary.com/home">Aviary Phoenix</a> - All the Photoshop features you actually need, at a fraction of the price. Did we mention built-in collaboration? Create and edit with the world!</li>
+                		<li><a href="http://www.sumopaint.com">SUMOPaint</a> - <?= _("SUMO Paint offers professional and easy to use tools for creating and editing images within a browser. SUMO Paint is a free image editing software that gives you the opportunity to create, edit and comment images online with powerful tools and layer support.");?> </li>
+                		<li><a href="http://www.photoshop.com">Photoshop.com</a> - <?= _("Tweak, rotate and touch up photoswith Photoshop&reg; Express, your free online photo editor.")?></li>
+                		<li><a href="http://aviary.com/home">Aviary Phoenix</a> - <?= _("All the Photoshop features you actually need, at a fraction of the price. Did we mention built-in collaboration? Create and edit with the world!");?></li>
 
                 		</ul>
 
                 		</div>		
 
                 </div>
          
          
--- a/server/demo_create4.php
+++ b/server/demo_create4.php
@@ -1,106 +1,107 @@
 <?php
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/user.php';	
+	require_once "lib/language.php";
 
 
 	$user = new PersonaUser();
-	$title = "How to Create Personas"; 
+	$title = _("How to Create Personas"); 
 	include 'templates/header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
-                <h2>How To</h2>
-                <h3>Personas are lightweight, easy to install and easy to change “skins” for your Firefox web browser.</h3>
+                <h2><?= _("How To");?></h2>
+                <h3><?= _("Personas are lightweight, easy to install and easy to change \"skins\" for your Firefox web browser.");?></h3>
             </div>
             <div id="maincontent" class="demo">
                 <div id="breadcrumbs">
-                    <a href="http://www.getpersonas.com">Personas Home</a> : How to Create Personas
+                    <?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : " . _("How to Create Personas"), $locale_conf->url('/'));?>
                 </div>
                 
-
-                
                 	<div id="tutorial">
 
-                		<div class="tut_Header">How to Create Personas</div>
+                		<div class="tut_Header"><?= _("How to Create Personas");?></div>
 
                 		<div class="tut_Copy">
 
-                		<p>Personas are made up of two graphic image files - a "header" image and a "footer" image - which skin
-                			the default Firefox UI background.
+                		<p><?= _("Personas are made up of two graphic image files - a \"header\" image and a \"footer\" image - which skin
+                			the default Firefox UI background.");?>
 
                 		</div>
 
                 		<table class="tut_nav">
                 			<tr>
-                				<td class="tut_left"><a href="/demo_create">Step 1: Creating a Persona Header Image</a> &raquo;</td>
-                				<td class="tut_left"><a href="/demo_create_3">Step 3: Testing your Persona Images</a> &raquo;</td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 1: Creating a Persona Header Image") . "</a> &raquo;", $locale_conf->url('/demo_create'));?></td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 3: Testing your Persona Images") . "</a> &raquo;", $locale_conf->url('/demo_create_3'));?></td>
                 			</tr>
                 			<tr>
-                				<td class="tut_left"><a href="/demo_create_2">Step 2: Creating a Persona Footer Image</a> &raquo;</td>
-                				<td class="tut_leftOFF">Step 4: Submit your Persona!</td>
+                				<td class="tut_left"><?printf("<a href=\"%s\">" . _("Step 2: Creating a Persona Footer Image") . "</a> &raquo;", $locale_conf->url('/demo_create_2'));?></td>
+                				<td class="tut_leftOFF"><?= _("Step 4: Submit your Persona!");?></td>
                 			</tr>
                 		</table>
 
                 	<!-- STEP 4 -->
 
                 		<div class="tut_Box">
 
                 		<div class="tut_step"><span class="tut_Title">Step 4: Submit your Persona!</span></div>
 
                 		<div class="tut_Copy">
 
-                		<p>Now that you have finalized the artwork, it is time to share! One thing to note, please do be sure
+                		<p><?= _("Now that you have finalized the artwork, it is time to share! One thing to note, please do be sure
                 		that you have the rights to use whatever image or design you use in your Persona. (We don't want to
-                		get any nasty lawyer letters!)
+                		get any nasty lawyer letters!");?>)
 
-                		<p>Follow the link below to start the process and add your creations to the constantly growing
-                		catalog of Firefox Personas!</div>
+                		<p><?= _("Follow the link below to start the process and add your creations to the constantly growing
+                		catalog of Firefox Personas!");?></div>
 
-                		<div class="link">Go submit your first Persona:  <a href="/upload"><img
-                		class="button" src="/static/img/tut_btn_getStarted.gif" border="0"></a></div>
+                		<div class="link"><?printf(_("Go submit your first Persona:") . "  <a href=\"%s\">
+                        <img class=\"button\" src=\"/static/img/tut_btn_getStarted.gif\" border=\"0\"></a>", $locale_conf->url('/upload'));?></div>
 
                 		<table class="tut_nav">
                 				<tr>
                 					<td>
-                						<div class="tut_left"><b>&laquo; <a href="/demo_create_3">Back to Step 3</a></b></div>
+                						<div class="tut_left"><?printf("<b>&laquo; <a href=\"%s\">" . _("Back to Step 3") . "</a></b>", $locale_conf->url('/demo_create_3'));?></div>
                 					</td>
                 					<td></td>
                 				</tr>
                 		</table>
 
                 		</div>
 
                 		<br><br>
 
 
                 <!-- RESOURCES -->
-
-                		<div class="tut_didyouknow"><img src="/static/img/question-64.png" class="tut_icon"><p>Did you know you can test a Persona before you submit it?  <b><a href="demo_create_3#test">Find out how!</a> &raquo;</b></div>
-
+                		<div class="tut_didyouknow"><img src="/static/img/question-64.png" class="tut_icon"><p><?printf (_("Did you know you can test a Persona before you submit it?  <b><a href=\"%s\">Find out how!</a>&raquo;</b>"), $locale_conf->url('/demo_create_3#test'));?></div>
 
                 		<div class="tut_info"><img src="/static/img/information-64.png" class="tut_icon">
 
-                		<p><span class="tut_TitleInfo">Online Image Editor Resources</span><br><br>
+                		<p><span class="tut_TitleInfo"><?= _("Online Image Editor Resources");?></span><br><br>
 
                 		<ul>
 
-                		<li><a href="http://www.sumopaint.com">SUMOPaint</a> -  SUMO Paint offers professional and easy to use tools for creating and editing images within a browser. SUMO Paint is a free image editing software that gives you the opportunity to create, edit and comment images online with powerful tools and layer support. </li>
-                		<li><a href="http://www.photoshop.com">Photoshop.com</a> - Tweak, rotate and touch up photoswith Photoshop&reg; Express, your free online photo editor.</li>
-                		<li><a href="http://aviary.com/home">Aviary Phoenix</a> - All the Photoshop features you actually need, at a fraction of the price. Did we mention built-in collaboration? Create and edit with the world!</li>
+                		<li><a href="http://www.sumopaint.com">SUMOPaint</a> - <?= _("SUMO Paint offers professional and easy to use tools for creating and editing images within a browser. SUMO Paint is a free image editing software that gives you the opportunity to create, edit and comment images online with powerful tools and layer support.");?> </li>
+                		<li><a href="http://www.photoshop.com">Photoshop.com</a> - <?= _("Tweak, rotate and touch up photoswith Photoshop&reg; Express, your free online photo editor.");?></li>
+                		<li><a href="http://aviary.com/home">Aviary Phoenix</a> - <?= _("All the Photoshop features you actually need, at a fraction of the price. Did we mention built-in collaboration? Create and edit with the world!");?></li>
 
                 		</ul>
 
-                		</div>
-                </div>
+                		</div>		</div>
+
+                
+                
          
          
             </div>
+
+
 <?php include 'templates/get_personas.php'; ?>
         </div>
     </div>
 <?php include 'templates/footer.php'; ?>
 </body>
 </html>
--- a/server/demo_install.php
+++ b/server/demo_install.php
@@ -1,30 +1,31 @@
 <?php
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/user.php';	
+    require_once 'lib/language.php';
 
 	$user = new PersonaUser();
-	$title = "How to Get Started"; 
+	$title = _("How to Get Started"); 
 	include 'templates/header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
-                <h2>Watch Our Demo</h2>
-                <h3>Personas are lightweight, easy to install and easy to change “skins” for your Firefox web browser.</h3>
+                <h2><?= _("Watch Our Demo");?></h2>
+                <h3><?= _("Personas are lightweight, easy to install and easy to change \"skins\" for your Firefox web browser.");?></h3>
             </div>
             <div id="maincontent" class="demo">
                 <div id="breadcrumbs">
-                    <a href="/">Personas Home</a> : Watch Our Demo    
+                    <?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : " . _("Watch Our Demo"), $locale_conf->url('/'));?>
                 </div>
-                <h3>How to Get Started</h3>
-                
+                <h3><?= _("How to Get Started");?></h3>
+                    <? // This really should be converted to open <video> :-P ?>
 					<object width="400" height="300"><param name="allowfullscreen" value="true"/>
 					<param name="allowscriptaccess" value="always" />
 					<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3841582&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" />
 					<embed src="http://vimeo.com/moogaloop.swf?clip_id=3841582&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" 
 					allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed>
 					</object>
                 
             </div>
--- a/server/faq.php
+++ b/server/faq.php
@@ -1,159 +1,158 @@
 <?php
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/user.php';	
-
+	require_once "lib/language.php";
 
 	$user = new PersonaUser();
 
-	$title = "Frequent Questions"; 
+	$title = _("Frequent Questions"); 
 	include 'templates/header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
-                <h2>Frequent Questions</h2>
-                <h3>Personas are lightweight, easy to install and easy to change “skins” for your Firefox web browser.</h3>
+                <h2><?= _("Frequent Questions");?></h2>
+                <h3><?= _("Personas are lightweight, easy to install and easy to change \"skins\" for your Firefox web browser.");?></h3>
             </div>
             <div id="maincontent" class="demo">
                 <div id="breadcrumbs">
-                    <a href="http://www.getpersonas.com">Personas Home</a> :  Frequent Questions
+                    <?printf("<a href=\"%s\">" . _("Personas Home") . "</a> :  " . _("Frequent Questions"), $locale_conf->url('/'));?>
                 </div>
                
                 <dl>
-                    <dt>What are Personas?</dt>
+                    <dt><?= _("What are Personas?");?></dt>
                     <dd>
-                        <p>Personas are lightweight “skins” that change the look of your Firefox web browser. You can easily switch between Personas with just a few clicks. There are hundreds of Personas to choose from, with more added every day. You can even create your own and share it with others.</p>
+                        <p><?= _("Personas are lightweight \"skins\" that change the look of your Firefox web browser. You can easily switch between Personas with just a few clicks. There are hundreds of Personas to choose from, with more added every day. You can even create your own and share it with others.");?></p>
                     </dd>
-                    <dt>How do I add Personas to my Firefox?</dt>
-                    <dd><p>In less than 60 seconds, you can install a Persona and transform the look of your Firefox web browser. Visit <a href="http://getpersonas.com">GetPersonas.com</a> and click the download button. After installation, you will be asked to restart Firefox.</p>
+                    <dt><?= _("How do I add Personas to my Firefox?");?></dt>
+                    <dd><p><?printf(_("In less than 60 seconds, you can install a Persona and transform the look of your Firefox web browser. Visit <a href=\"%s\">getpersonas.com</a> and click the download button. After installation, you will be asked to restart Firefox."), $locale_conf->url('/'));?></p>
 
-                    <p>If you want to see how it works, you can watch a quick video demonstration <a href="/demo_install">here</a>.</p>
+                    <p><?printf(_("If you want to see how it works, you can watch a quick video demonstration <a href=\"%s\">here</a>."), $locale_conf->url('/demo_install'));?></p>
 
-                    <p>Once Personas are installed, you’ll be able to choose and change your selected Persona any time simply by clicking on the little fox mask in the lower left-hand corner of your browser window.</p></dd>
-                        <dt>How do I create or edit my designer profile?</dt>
+                    <p><?= _("Once Personas are installed, you'll be able to choose and change your selected Persona any time simply by clicking on the little fox mask in the lower left-hand corner of your browser window.");?></p></dd>
+                        <dt><?= _("How do I create or edit my designer profile?");?></dt>
                            <dd>
-                               <p>If you are a new Personas designer, you will be asked to create a profile when
-                                  you first sign up <a href="https://www.getpersonas.com/signin?return=/upload">here</a>. You will have the option to include a "display
-                                  name" and "designer description", both of which will be displayed in the public
-                                  gallery.</p>
+                               <p><?printf(_("If you are a new Personas designer, you will be asked to create a profile when
+                                  you first sign up <a href=\"%s\">here</a>. You will have the option to include a \"display
+                                  name\" and \"designer description\", both of which will be displayed in the public
+                                  gallery."), $locale_conf->url('/signin?return=/upload'));?></p>
 
-                                  <p>If you are an existing Personas designer, you can edit and add to your profile
-                                  <a href="https://www.getpersonas.com/profile">here</a>.</p>
+                                  <p><?printf(_("If you are an existing Personas designer, you can edit and add to your profile <a href=\"%s\">here</a>."), $locale_conf->url('/profile'));?></p>
 
                            </dd>
                 
-                <dt>How can I add or change my current Persona?</dt>
-                <dd><p>There are two easy ways to change your Persona:</p>
+                <dt><?= _("How can I add or change my current Persona?");?></dt>
+                <dd><p><?= _("There are two easy ways to change your Persona:");?></p>
                     <ol>
-                        <li>Visit the Personas website at <a href="http://getpersonas.com">GetPersonas.com</a>, check out the gallery, choose your favorite Persona, and click on your choice to instantly change the look of your browser.<br> OR</li>
-                       <li>Click on the little fox mask in the lower left hand corner of your browser, then select a Persona that suits your style.</li>
+                        <li><?printf(_("Visit the Personas website at %s, check out the gallery, choose your favorite Persona, and click on your choice to instantly change the look of your browser.<br> OR"), sprintf("<a href=\"%s\">GetPersonas.com</a>", $locale_conf->url('/')));?></li>
+                       <li><?= _("Click on the little fox mask in the lower left hand corner of your browser, then select a Persona that suits your style.");?></li>
                     </ol>
                 
-               <dt>I can't seem to find Personas for Firefox after I downloaded it and installed it.  Where is it?</dt>
-               <dd><p>Look for the little fox mask in the lower left-hand corner of your Firefox browser window.</p></dd>
+               <dt><?= _("I can't seem to find Personas for Firefox after I downloaded it and installed it.  Where is it?");?></dt>
+               <dd><p><?= _("Look for the little fox mask in the lower left-hand corner of your Firefox browser window.");?></p></dd>
                
                
-               <dt>Can I create my own Persona?</dt>
+               <dt><?= _("Can I create my own Persona?");?></dt>
 
-               <dd><p>Absolutely! All you need to do is create two graphics files in your favorite graphics editing program (<em>e.g.</em>, Photoshop). To get started read more about how to <a href="/demo_create">create a Persona</a>.</p></dd>
+               <dd><p><?printf(_("Absolutely! All you need to do is create two graphics files in your favorite graphics editing program (<em>e.g.</em>, Photoshop). To get started read more about how to <a href=\"%s\">create a Persona</a>."), $locale_conf->url('/demo_create'));?></p></dd>
                
-			   <dt><a name="guidelines"></a>Are there any guidelines for content allowed in the Personas gallery?</dt>
-    			<dd><p>Yes. We are big fans of creativity, but want to ensure that the art displayed in the Personas gallery meets a basic set of guidelines. Specifically:</p>
+			   <dt><a name="guidelines"></a><?= _("Are there any guidelines for content allowed in the Personas gallery?");?></dt>
+    			<dd><p><?= _("Yes. We are big fans of creativity, but want to ensure that the art displayed in the Personas gallery meets a basic set of guidelines. Specifically:");?></p>
                
                    <ol>
-                      <li>The logo, image, or art within your design is either your original work, or you are authorized to license and distribute it</li>
-                      <li>Your design does not contain provocative, lewd, or sexual content (ie, it is PG-rated)</li>
-                      <li>Your design does not include any identifiable non-celebrity person(s)</li>
-                      <li>Your design does not contain violence or violent acts, nor does it exhibit discriminatory behavior or signs</li>
-                      <li>Your design does not violate any applicable law, regulation or ordinance</li>
+                      <li><?= _("The logo, image, or art within your design is either your original work, or you are authorized to license and distribute it");?></li>
+                      <li><?= _("Your design does not contain provocative, lewd, or sexual content (ie, it is PG-rated)");?></li>
+                      <li><?= _("Your design does not include any identifiable non-celebrity person(s)");?></li>
+                      <li><?= _("Your design does not contain violence or violent acts, nor does it exhibit discriminatory behavior or signs");?></li>
+                      <li><?= _("Your design does not violate any applicable law, regulation or ordinance");?></li>
                       </ol></dd>
                
-               <dt>After creating a Persona, can I edit the design?</dt>
-               <dd><p>Yes. If at any point you need to edit your Persona design 
-                after it has been submitted to the gallery, simply visit <a href="http://www.getpersonas.com/gallery/All/My">this link</a>, log in to
-               your account, and go to the "Personas Home : Gallery : All : My" section. 
-               From there, you can make changes to the settings you entered upon creation.</p></dd>
+               <dt><?= _("After creating a Persona, can I edit the design?");?></dt>
+               <dd><p><?printf(_("Yes. If at any point you need to edit your Persona design 
+                after it has been submitted to the gallery, simply visit <a href=\"%s\">this link</a>, log in to
+               your account, and go to the \"Personas Home : Gallery : All : My\" section. 
+               From there, you can make changes to the settings you entered upon creation."), $locale_conf->url('/gallery/All/My'));?></p></dd>
                
-               <dt>What's the maximum file size allowable for my persona?</dt>
+               <dt><?= _("What's the maximum file size allowable for my persona?");?></dt>
 
-               <dd><p>The persona that you upload may not exceed 300KB for the header or the footer
-               image.</p></dd>
+               <dd><p><?= _("The persona that you upload may not exceed 300KB for the header or the footer
+               image.");?></p></dd>
                
                
 
-               <dt>Do I still retain ownership over Persona artwork that I upload to the Personas website?</dt>
+               <dt><?= _("Do I still retain ownership over Persona artwork that I upload to the Personas website?");?></dt>
 
-               <dd><p>Yes.</p></dd> 
+               <dd><p><?= _("Yes.");?></p></dd> 
 
 
-               <dt>What’s the difference between a Firefox theme and Personas for Firefox?</dt>
+               <dt><?= _("What's the difference between a Firefox theme and Personas for Firefox?");?></dt>
 
-               <dd><p>Personas allow you to “skin” the top and bottom areas of Firefox only (the header and footer of the browser chrome) without any change to the look of the navigation buttons or menus. With Personas, you can easily switch between many different lightweight skins with no further installation required.</p>
+               <dd><p><?= _("Personas allow you to \"skin\" the top and bottom areas of Firefox only (the header and footer of the browser chrome) without any change to the look of the navigation buttons or menus. With Personas, you can easily switch between many different lightweight skins with no further installation required.");?></p>
 
-               <p>Like Personas, a Firefox theme is a type of Firefox add-on that extends the functionality of your browser and allows you to “skin” it in a variety of ways. However, unlike Personas, a theme changes the appearance of navigation buttons, toolbars and menus.  </p></dd>
+               <p><?= _("Like Personas, a Firefox theme is a type of Firefox add-on that extends the functionality of your browser and allows you to \"skin\" it in a variety of ways. However, unlike Personas, a theme changes the appearance of navigation buttons, toolbars and menus.");?></p></dd>
 
 
-               <dt>If I have an existing Firefox theme installed, will Personas still work?</dt>
+               <dt><?= _("If I have an existing Firefox theme installed, will Personas still work?");?></dt>
 
-               <dd><p>Yes, Personas will work. However, it’s strongly recommended that you uninstall a theme when using Personas. To disable a current Firefox theme, go to the “Tools” menu and select “Add-ons” to display the add-ons manager. Then click on the “Themes” button at the top of the add-ons manager window, click on the “Default” theme for Firefox, and click on “Use theme”. After a quick restart, you’ll be ready to dress up your browser with Personas.</p></dd>
+               <dd><p><?= _("Yes, Personas will work. However, it's strongly recommended that you uninstall a theme when using Personas. To disable a current Firefox theme, go to the \"Tools\" menu and select \"Add-ons\" to display the add-ons manager. Then click on the \"Themes\" button at the top of the add-ons manager window, click on the \"Default\" theme for Firefox, and click on \"Use theme\". After a quick restart, you'll be ready to dress up your browser with Personas.");?></p></dd>
 
 
-               <dt>Do I have to add my Persona to the public gallery?</dt>
+               <dt><? _("Do I have to add my Persona to the public gallery?");?></dt>
 
-               <dd><p>No. When you upload your Persona at GetPersonas.com, you can choose to add it to the public gallery or keep it private. If you want to upload a custom Persona without visiting GetPersonas.com, you can do so anytime by following these steps:</p>
+               <dd><p><? _("No. When you upload your Persona at GetPersonas.com, you can choose to add it to the public gallery or keep it private. If you want to upload a custom Persona without visiting GetPersonas.com, you can do so anytime by following these steps:");?></p>
 
             <ol>            
-               <li>Enable custom Personas in your version of Personas:
+               <li><?= _("Enable custom Personas in your version of Personas:");?>
                    <ul>
-                       <li>Click on the little fox mask icon in the lower left-hand corner of your browser</li>
-                          <li>Select "Preferences..."</li>
-                          <li>Under “Advanced”, select "Show Custom Persona Menu"</li>
-                          <li>Close the preferences window</li>
+                       <li><?= _("Click on the little fox mask icon in the lower left-hand corner of your browser");?></li>
+                          <li><?= _("Select \"Preferences...\"");?></li>
+                          <li><?= _("Under \"Advanced\", select \"Show Custom Persona Menu\"");?></li>
+                          <li><?= _("Close the preferences window");?></li>
                    </ul>
                </li>
                
-               <li>Create your custom Persona:
+               <li><?= _("Create your custom Persona:");?>
                <ul>
-                 <li>Click on the little fox mask icon in the lower left-hand corner of your browser</li>
-                 <li>Select "Custom Persona", then select "Edit" from its sub-menu</li>
-                 <li>Specify a header, footer, text color and accent color for a Persona that’s locally stored on your computer</li>
-                 <li>Your new Persona will be automatically selected, or you can manually choose it from the little fox mask menu </li>
+                 <li><?= _("Click on the little fox mask icon in the lower left-hand corner of your browser");?></li>
+                 <li><?= _("Select \"Custom Persona\", then select \"Edit\" from its sub-menu");?></li>
+                 <li><?= _("Specify a header, footer, text color and accent color for a Persona that’s locally stored on your computer");?></li>
+                 <li><?= _("Your new Persona will be automatically selected, or you can manually choose it from the little fox mask menu");?></li>
                  </ul>
 </ol>
 
-               <dt>What kind of computer and operating system does Personas work with?</dt>
+               <dt><?= _("What kind of computer and operating system does Personas work with?");?></dt>
 
-               <dd><p>Personas work with any type of computer that has Firefox installed. This includes Apple Mac, Linux and Windows platforms. You must have administrative rights to add Personas to your Firefox browser.</p></dd>
+               <dd><p><?= _("Personas work with any type of computer that has Firefox installed. This includes Apple Mac, Linux and Windows platforms. You must have administrative rights to add Personas to your Firefox browser.");?></p></dd>
 
 
-               <dt>How do I uninstall Personas for Firefox?</dt>
+               <dt><?= _("How do I uninstall Personas for Firefox?");?></dt>
 
-               <dd><p>If you’ve decided Personas doesn’t work for you, you can uninstall with a few easy steps:</p>
+               <dd><p><?= _("If you've decided Personas doesn't work for you, you can uninstall with a few easy steps:");?></p>
                    <ol>
-                      <li>Open the Add-ons dialog box by going to “Tools->Add-ons”</li>
-                      <li>Click on the “Extensions” button on the top</li>
-                      <li>Select “Personas” </li>
-                      <li>Click "Uninstall"</li>
-                      <li>Restart Firefox</li>
+                      <li><?= _("Open the Add-ons dialog box by going to \"Tools->Add-ons\"");?></li>
+                      <li><?= _("Click on the \"Extensions\" button on the top");?></li>
+                      <li><?= _("Select \"Personas\"");?> </li>
+                      <li><?= _("Click \"Uninstall\"");?></li>
+                      <li><?= _("Restart Firefox");?></li>
                       </ol></dd>
 
 
-               <dt>How do I provide feedback? </dt>
+               <dt><?= _("How do I provide feedback?");?> </dt>
 
-               <dd><p>Personas is currently in beta, so we’re always looking for ways to improve the product. We’d love to hear what you think. Visit the <a href="https://labs.mozilla.com/forum/?CategoryID=18">Personas</a> forums to send us your feedback.</p>
+               <dd><p><?= _("Personas is currently in beta, so we’re always looking for ways to improve the product. We’d love to hear what you think. Visit the <a href=\"https://labs.mozilla.com/forum/?CategoryID=18\">Personas</a> forums to send us your feedback.");?></p>
 
 
 
-               <dt>Is Personas for Firefox open source?</dt>
+               <dt><?= _("Is Personas for Firefox open source?");?></dt>
 
-               <dd><p>Yes. The source code for Personas is available under the MPL/GPL/LGPL tri-license. You can view the source <a href="http://hg.mozilla.org/labs/personas/personas">here</a>.</p>
+               <dd><p><?= _("Yes. The source code for Personas is available under the MPL/GPL/LGPL tri-license. You can view the source <a href=\"http://hg.mozilla.org/labs/personas/personas\">here</a>.");?></p>
                    
                    
                
                    
                  
          </dd>       
       </dl>
                 
--- a/server/firstrun.php
+++ b/server/firstrun.php
@@ -2,17 +2,17 @@
 	require_once 'lib/personas_constants.php';	
 	require_once 'lib/personas_functions.php';	
 	require_once 'lib/storage.php';
 	require_once 'lib/user.php';
 
 	$db = new PersonaStorage();
 	$user = new PersonaUser();
 
-	$title = "Thanks for installing Personas"; 
+	$title = _("Thanks for installing Personas"); 
 	include 'templates/header.php'; 
 ?>
 <body class="firstrun">
     <div id="outer-wrapper">
         
          
         <div id="inner-wrapper">
                        <p id="account">
@@ -20,67 +20,66 @@
             			</p>
                         <div id="nav">
                             <h1><a href="/"><img src="/static/img/logo.png" alt="Mozilla Labs Personas"></a></h1>
                                 <div id="check-it-out">
                                     <div class="hd">
                                         &nbsp;
                                     </div>
                                     <p class="bd">
-                                        Check it out! Your browser's all dressed up.                        
+                                        <?= _("Check it out! Your browser's all dressed up.");?>                        
                                     </p>
 
                                     <div class="ft">
                                         &nbsp;
                                     </div>
                                 </div>
                         </div>
 
             
             <div id="header">
-                <h2>Thanks for Installing Personas for Firefox!</h2>
-                <h2>The Easiest Way to Dress Up Your Browser.</h2>
+                <h2><?= _("Thanks for Installing Personas for Firefox!");?></h2>
+                <h2><?= _("The Easiest Way to Dress Up Your Browser.");?></h2>
                 <p>
                     <a href="/gallery" class="cta">
-                        <span>Browse the Gallery!</span>
+                        <span><?= _("Browse the Gallery!");?></span>
                         <span class="arrow"></span>
                     </a>
                 </p>
                 
             </div>
             
 <?php include 'templates/featured_designer.php'; ?>
             
             <div class="feature ">
-                <h3>Get Started with Personas</h3>
+                <h3><?= _("Get Started with Personas");?></h3>
                 <ol class="get-started">
-                    <li class="one">Click on the fox mask in the lower left corner of your Firefox browser, or go to the Personas page directly from <a href="http://www.getpersonas.com">here</a>.</li>
-                    <li class="two">Next, select a Persona from the list, or check out the <a a href="/gallery/All/Popular">Personas gallery</a>.</li>
-                    <li class="three">You can change your persona as much as you like! Choose a new one from the list or <a href="https://www.getpersonas.com/upload">create your own</a>.</li>
+                    <li class="one"><?printf(_("Click on the fox mask in the lower left corner of your Firefox browser, or go to the Personas page directly from <a href=\"%s\">here</a>."), $locale_conf->url('/'));?></li>
+                    <li class="two"><?printf(_("Next, select a Persona from the list, or check out the <a href=\"%s\">Personas gallery</a>."), $locale_conf->url('/gallery/All/Popular'));?></li>
+                    <li class="three"><?printf(_("You can change your persona as much as you like! Choose a new one from the list or <a href=\"%s\">create your own</a>."), $locale_conf->url('/upload'));?></li>
                 </ol>
                 
-                <p>Have a Personas question or comment? Check out our <a href="/faq">FAQ</a> section or <a href="https://labs.mozilla.com/forum/?CategoryID=18">discussion
-                forum</a>.
+                <p><?printf(_("Have a Personas question or comment? Check out our <a href=\"%s\">FAQ</a> section or <a href=\"https://labs.mozilla.com/forum/?CategoryID=18\">discussion forum</a>."), $locale_conf->url('/faq'));?>
                 </p>
             </div>
             
             <div class="feature last more">
-                <h3>Find out more about Firefox</h3>
-                <p>Wondering what to do now? Our <a href="http://en-us.www.mozilla.com/en-US/firefox/central/">Getting Started</a> page has plenty of helpful information.</p>
-                <p>Questions? Our <a href="https://labs.mozilla.com/forum/?CategoryID=18">Support page</a> has answers.</p>
-                <p>Ready to customize? Now that you’ve got Firefox and Personas, find out more about all the ways you can <a href="https://addons.mozilla.org/en-US/firefox">personalize Firefox</a>!</p>
+                <h3><?= _("Find out more about Firefox");?></h3>
+                <p><?= _("Wondering what to do now? Our <a href=\"http://www.mozilla.com/firefox/central/\">Getting Started</a> page has plenty of helpful information.");?></p>
+                <p><?= _("Questions? Our <a href=\"https://labs.mozilla.com/forum/?CategoryID=18\">Support page</a> has answers.");?></p>
+                <p><?= _("Ready to customize? Now that you’ve got Firefox and Personas, find out more about all the ways you can <a href=\"https://addons.mozilla.org/firefox\">personalize Firefox</a>!";?></p>
              
             </div>
             
         </div>
     </div>
 <?php include 'templates/footer.php'; ?>
     <script type="text/javascript" charset="utf-8">
         $(document).ready(function () {
             $(".slideshow").slider();
             $("img.persona").previewPersona();
         });
     </script>
     <p id="get-more-personas">
-       Click on the fox mask to get started!
+       <?= _("Click on the fox mask to get started!");?>
     </p>
 </body>
 </html>
--- a/server/index.php
+++ b/server/index.php
@@ -1,56 +1,57 @@
 <?php
 	require_once 'lib/personas_constants.php';	
 	require_once 'lib/personas_functions.php';	
 	require_once 'lib/storage.php';
 	require_once 'lib/user.php';
-
-	$db = new PersonaStorage();
+    require_once 'lib/language.php';
+    
+    $db = new PersonaStorage();
 	$user = new PersonaUser();
-
-	$title = "Dress up your web browser"; 
+	
+    $title = _("Dress up your web browser"); 
 	include 'templates/header.php'; 
 ?>
 <body class="home">
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
 			<div id="header">
-                <h2>What will your browser wear today?</h2>
-                <h3>Personas are lightweight, easy-to-install and easy-to-change "skins" for your Firefox web browser.</h3>
+                <h2><?= _("What will your browser wear today?");?></h2>
+                <h3><?= _("Personas are lightweight, easy-to-install and easy-to-change \"skins\" for your Firefox web browser.");?></h3>
                 <div class="get-personas">
                     <div>
                         <p>
-                            <a href="https://addons.mozilla.org/en-US/firefox/downloads/latest/10900" class="get-personas" id="download"><span>Get Personas for Firefox - Free</span><span class="arrow"></span></a>
+                            <?= _("<a href=\"https://addons.mozilla.org/firefox/downloads/latest/10900\" class=\"get-personas\" id=\"download\"><span>Get Personas for Firefox - Free</span>");?><span class="arrow"></span></a>
                             <script type="text/javascript" charset="utf-8">
-                                $("#download").personasDownload({"bundle":"bundle-url", "bundle-text":'<span>Get Firefox and Personas - Free</span><span class="arrow"></span>'});
+                                $("#download").personasDownload({"bundle":"bundle-url", "bundle-text":'<span><?= _("Get Firefox and Personas - Free");?></span><span class="arrow"></span>'});
                             </script>
                         </p>
-                        <p class="platforms-note">Firefox Add-on for Windows, Mac or Linux</p>
+                        <p class="platforms-note"><?= _("Firefox Add-on for Windows, Mac or Linux");?></p>
                     </div>
                 </div>
                 
                 <div id="more-info">
                     <div id="info">
-                        <h4>Theme your browser according to your mood, hobby or season. </h4>
-                        <p>Click the green download button to get started!</p>                  
+                        <h4><?= _("Theme your browser according to your mood, hobby or season.");?> </h4>
+                        <p><?= _("Click the green download button to get started!");?></p>                  
                     </div>
                 </div>
             </div>
 <?php include 'templates/featured_personas.php'; ?>
 <?php include 'templates/featured_designer.php'; ?>
 <?php include 'templates/movers.php'; ?>
 
         </div>
     </div>
 <?php include 'templates/footer.php'; ?>
     <script type="text/javascript" charset="utf-8">
         $(document).ready(function () {
             $(".slideshow").slider();
             $("#more-info").popup();
             
-            $("#header").ie6Warning({"message":'<div id="ie6">Upgrade your browser to get the most out of this website. <a href="%LINK%">Download Firefox for free</a>.</div>'});
+            $("#header").ie6Warning({"message":'<div id="ie6"><?= _("Upgrade your browser to get the most out of this website. <a href=\"%LINK%\">Download Firefox for free</a>.");?></div>'});
             $("img.persona").previewPersona();
         });
     </script>
 </body>
 </html>
new file mode 100644
--- /dev/null
+++ b/server/lib/language.php
@@ -0,0 +1,380 @@
+<?php
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is addons.mozilla.org site.
+ *
+ * The Initial Developer of the Original Code is
+ * The Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2006
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Wil Clouser <wclouser@mozilla.com> (Original Author)
+ *   Justin Scott <fligtar@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/**
+ * This will setup cake to handle language/locales passed in via $_GET['lang'].
+ * Keeping with the cake style, this is a class.
+ */
+
+$locale_conf = new LANGUAGE_CONFIG($_SERVER['HTTP_HOST'], true);
+if ($locale_conf->redirect_required())
+{
+    header("Location: " . $locale_conf->url($_SERVER['REQUEST_URI']));
+    echo $_SERVER['REQUEST_URI'];
+}
+
+class LANGUAGE_CONFIG
+{
+
+    var $default_language = 'en-US';
+
+    var $_default_domain   = 'messages';
+
+    var $text_domain      = null;
+
+    var $current_language  = null;
+
+    var $base_url = null;
+
+    /*
+     * Languages for which we will sniff and redirect.
+     */
+    var $_supported_languages = array('en-US' => 'en_US.utf8',
+                                        'fr' => 'fr_FR.utf8');
+
+    /**
+     * This fills in the text_domain (telling where the .mo files are), as well as
+     * optionally setting the current language
+     * 
+     * @param string base_url the very base url onto which the locale will be appended
+     * @param boolean set_language If true, we'll detect and set the current language
+     */
+    function LANGUAGE_CONFIG($base_url, $set_language=false)
+    {
+        $this->base_url = $base_url;
+
+        // This is where our .mo files are.
+        $this->text_domain = getcwd() . '/locale';
+        if ($set_language == true) {
+            $this->setCurrentLanguage(array($this->detectCurrentLanguage()));
+        }
+    }
+
+    /**
+     * Will look at the following, in order for a valid language:
+     *      1) $_GET['lang']
+     *      2) the current QUERY_STRING
+     *      4) (if $checkAcceptLang) HTTP_ACCEPT_LANG header
+     *      3) $this->default_language (fallback)
+     *
+     * @param boolean check the accept lang header?  Only do this if the redirect isn't cached!
+     * @return string language (eg. 'en-US' or 'ru')
+     */
+    function detectCurrentLanguage($checkAcceptLang = false)
+    {
+        $_match = array();
+
+        $_lang_candidate = null;
+
+        // First check $_GET['lang']
+        if (array_key_exists('lang', $_GET)) {
+            $_lang_candidate = $_GET['lang'];
+        }
+
+        // Second check the URL
+        if (is_null($_lang_candidate)) {
+            // Cake:
+            // the QUERY_STRING comes in in the form (eg.):
+            //      url=de-DE/addons/display/1
+            //      or simply url=de with end of line ($) afterwards
+            // preg_match('/=(.+?)(\/|$)/', $_SERVER['QUERY_STRING'], $_match);
+            //
+            // TODO: I believe the above stuff no longer applies
+            // Instead, I believe we should match the first thing (if any)
+            // check to see if it's in our supported languages, if not, 
+            // continue on to next fallback
+            preg_match('/^\/([a-zA-Z-]+)?\/?/', $_SERVER['REQUEST_URI'], $_match);
+
+            if (!empty($_match[1])) {
+                // we need to use an explicit foreach loop so that we can get the proper
+                // capitalization for the locale from the $_supported_languages array
+                $lang = trim(strtolower($_match[1]));
+                foreach ($this->_supported_languages as $key => $value) {
+                    if ($lang == strtolower($key))
+                    {
+                        $_lang_candidate = $key;
+                        break;
+                    }
+                }
+            }
+        }
+
+        // SpecialCase++
+        if (strtolower($_lang_candidate) == 'ja-jp-mac') {
+            $_lang_candidate = 'ja';
+        }
+
+        if ($checkAcceptLang && is_null($_lang_candidate)) {
+            if ( array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER) && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ) {
+
+                $acclang = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
+
+                foreach ($acclang as $val) {
+                    // The value of the accept language could have a semi-colon in it (for
+                    // priority).  If it does, we explode, grab the first value, trim the
+                    // whitespace, and we've got the locale.
+                    $language = trim(array_shift(explode(';', $val)));
+
+                    // Check if the language is one we support
+                    if (in_array(strtolower($language), array_map('strtolower', array_keys($this->_supported_languages)))) {
+
+                        $_lang_candidate = $language;
+                        break; // found one
+
+                    } else {
+
+                        // If there is a dash, this will grab the short language name
+                        $language = array_shift(explode('-', $language));
+
+                        if (in_array(strtolower($language), array_map('strtolower',array_keys($this->_supported_languages)))) {
+                            $_lang_candidate = $language;
+                            break; // found one
+                        } else {
+                            $_lang_candidate = null; // (it's already null, but hey..)
+                        }
+                    }
+                }
+            }
+            
+        }
+
+        // Third, if no detection worked, give the fallback
+        if (is_null($_lang_candidate) || !in_array($_lang_candidate, array_keys($this->_supported_languages))) {
+            $_lang_candidate = $this->getFallbackLanguage();
+        }
+
+        $this->current_language = $_lang_candidate;
+
+        return $this->current_language;
+    }
+
+    /**
+     * Simply returns the current language, or the default if one isn't set.
+     *
+     * @return string current language
+     */
+    function getCurrentLanguage() 
+    {
+        if (empty($this->current_language)) {
+            return $this->getFallbackLanguage();
+        }
+
+        return $this->current_language;
+    }
+
+    /**
+     * Runs all the appropriate gettext functions for setting the current language to
+     * whatever is passed in (or the default).
+     *
+     * @param array languages to try (eg. array('en-US', 'ru'))
+     * @param string domain basically, what is the name of your .mo file? (before the .)
+     * @return boolean true on success, false on failure
+     */
+    function setCurrentLanguage($langs=array(), $domain=null)
+    {
+        // Used below - will fill with valid language mappings to try via setlocale()
+        $languages_to_try = array();
+
+        if (empty($langs)) {
+            $langs = array($this->default_language);
+        }
+
+        if (empty($domain)) {
+            $domain = $this->_default_domain;
+        }
+
+        // Setup text domains - these don't care what the language is.
+        bindtextdomain($domain, $this->text_domain);
+        bind_textdomain_codeset($domain, 'UTF-8');
+        textdomain($domain);
+
+        foreach ($langs as $lang) {
+            // Double check they know what they are talking about.
+            if (!in_array($lang, array_keys($this->_supported_languages))) {
+                // Perhaps we should fallback to the default?
+                continue;
+            } else {
+                // Our language exists, add _the mapping_ to our testing array
+                $languages_to_try[] = $this->_supported_languages[$lang];
+            }
+        }
+
+        // The locales on the local machine use underscores.  Verify this if you like 
+        // by typing `localedef --list-archive` at a prompt
+        $languages_to_try = str_replace('-','_',$languages_to_try);
+
+        // Set the language.  We can't use LC_ALL here because it includes LC_CTYPE
+        // and some languages (I'm looking at you Turkish!) will break php when
+        // string functions are used
+        $lang = setlocale(LC_COLLATE, $languages_to_try);
+        if ($lang != false) {
+            setlocale(LC_MONETARY, $lang);
+            setlocale(LC_NUMERIC, $lang);
+            setlocale(LC_TIME, $lang);
+            if (defined('LC_MESSAGES')) {
+                setlocale(LC_MESSAGES, $lang);
+            }
+        }
+
+        // If this is failing, chances are good you don't have the locale installed
+        // on your machine.  Run `localedef --list-archive` to see a list of
+        // installed locales.
+        if ($lang === false) {
+            // Fallback to defaults
+            $lang = trim(str_replace('-','_',$this->default_language));
+
+            setlocale(LC_COLLATE, $lang);
+            setlocale(LC_MONETARY, $lang);
+            setlocale(LC_NUMERIC, $lang);
+            setlocale(LC_TIME, $lang);
+            if (defined('LC_MESSAGES')) {
+                setlocale(LC_MESSAGES, $lang);
+            }
+
+            // Right now this is just used to give the language to the <head> block,
+            // so it would be accurate to set it here, since we'll be using it to
+            // draw the page.  This could lead to pages where the user has specified
+            // $lang, but everything is coming up in en-US.  If this line is removed,
+            // the page will think it's displaying $lang, and will display everything
+            // it can in $lang, but english will appear to fill in the gaps.
+            // Hopefully this is a corner case.
+            $this->current_language = $this->default_language;
+
+            // In reality, we should have still successfully set the language - it's
+            // just not the language we wanted, so I'm returning false.
+            return false;
+        }
+
+        // setlocale() has returned what it considers the language.  However, we're
+        // remapping the languages in $valid_languages, and setlocale() has returned
+        // a mapping - not the original language.  So, we need to lookup the old
+        // value, and reset our $lang to the real language, not the mapping. 
+        if (in_array($lang,array_values($this->_supported_languages))) {
+            $lang = array_search($lang,$this->_supported_languages);
+        }
+
+        // Set LANG environmental variable. This is not optional for Windows.
+        if (defined('WINDOWS')) {
+            global $language_returns;
+
+            // In order to find out what language was returned, we have to use a
+            // different array of returned strings. They are in the format
+            // German_Germany.1252
+            if (preg_match("/^(.+)\./", $lang, $matches)) {
+                $lang = $language_returns[$matches[1]];
+                putenv("LANG={$lang}");
+            }
+        }
+
+        // Switch our underscore back to a dash
+        $this->current_language = str_replace('_','-',$lang);
+        return true;
+    }
+
+    /**
+     * Try to get a fallback language from the accept-language HTTP header.
+     * If that fails, just go for the default.
+     */
+    function getFallbackLanguage() {
+        // if we don't have a hint, fall back to default
+        if (!array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER))
+            return $this->default_language;
+        
+        $_al = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
+        $_alparts = explode(',', $_al, 2);
+        $_alparts = array_map('strtolower', $_alparts);
+        $_alparts = array_map('trim', $_alparts);
+        
+        $_langscores = array();
+        $_additional_langs = array();
+        foreach ($_alparts as $_part) {
+            if (strpos($_part, ';') !== false) {
+                $_scoresplit = explode(';', $_part, 2);
+                $_score = explode('=', $_scoresplit[1], 2);
+                $_langscores[$_scoresplit[0]] = $_score[1];
+                
+                // if the requested lang is dashed, also allow more general form
+                if (strpos($_scoresplit[0], '-') !== false) {
+                    $_lang = substr($_scoresplit[0], 0, strpos($_scoresplit[0], '-'));
+                    $_langscores[$_lang] = $_score[1]; 
+                }
+            } else {
+                $_langscores[$_part] = 1;
+                // if the requested lang is dashed, also allow more general form
+                if (strpos($_part, '-') !== false) {
+                    $_lang = substr($_part, 0, strpos($_part, '-'));
+                    $_langscores[$_lang] = 1; 
+                }
+            }
+
+        }
+        arsort($_langscores, SORT_NUMERIC);
+        
+        foreach ($_langscores as $_lang => $_score) {
+            foreach ($this->_supported_languages as $_valid_lang => $_mapping) {
+                // O(n*m), sorry. But don't worry, the arrays are small.
+                if (strpos(strtolower($_valid_lang), $_lang) === 0) return $_valid_lang;
+            }
+        }
+        
+        // if we get here we are really out of luck: just return the default
+        return $this->default_language;
+    }
+    
+    /** 
+     * Return the "localized" and "linkified" version of a path based on the current locale setting
+     * e.g. "/" becomes "http://getpersonas.com/en-US/" or "/dir1" becomes "http://getpersonas.com/en-US/dir1/"
+     *
+     * @param string path to turn into a link
+     */
+    //TODO: what happens when the path requires https?
+    function url($docpath) {
+        $http_prefix = (empty($_SERVER['HTTPS'])) ? 'http://' : 'https://';
+        return "$http_prefix$this->base_url/$this->current_language$docpath";
+    }
+
+    /**
+     *
+     */
+    function redirect_required() {
+        preg_match('/^\/([a-zA-Z_-]+)?\/?/', $_SERVER['REQUEST_URI'], $_match);
+        return empty($_match[1]) or $_match[1] != $this->current_language;
+    }
+}
+?>
--- a/server/lib/user.php
+++ b/server/lib/user.php
@@ -45,16 +45,17 @@
 #
 
 #####
 # Memcache keys used by this module: 
 #  user:<username> - user record containing 'display_username', 'description' and 'privs'
 
 require_once 'personas_constants.php';
 require_once 'recaptcha.php';
+require_once 'lib/language.php';
 
 class PersonaUser
 {
 	var $_dbh;
 	var $_memcache;
 
 	var $_username = null;
 	var $_display_username = null;
@@ -427,28 +428,30 @@ class PersonaUser
 #####
 # Checks to see if the user is signed in legitimately (as opposed to unauthed_username) and 
 # redirects them to login if they haven't
 
 	function force_signin($admin = null)
 	{
 		if (!$this->_username)
 		{
-			header('Location: /signin?return=' . $_SERVER['SCRIPT_URL'] . ($admin ? "&admin=1" : ""));
+            global $locale_conf;
+			header('Location: ' . $locale_conf->url('/signin?return=' . $_SERVER['SCRIPT_URL'] . ($admin ? "&admin=1" : "")));
 			exit;
 		}
 	}		
 
 #####
 # Wipe the user's cookie. Since personas is stateless, that'll be sufficient to log them out
 
 	function log_out()
 	{
+        global $locale_conf;
 		setcookie('PERSONA_USER', '', time() - 3600, '/');		
-		$this->_errors['success_message'] = "You have been logged out. <a href=\"http://www.getpersonas.com/\">Return to the Personas Homepage</a>";
+		$this->_errors['success_message'] = sprintf(_("You have been logged out.") . "<a href=\"%s\">" . _("Return to the Personas Homepage") . "</a>", $locale_conf->url('/'));
 	}
 
 
 #####
 # Does a database lookup of the user, presumably from the login page. Should be pretty rare.
 
 	function authenticate_user_from_password($username, $password) 
 	{
old mode 100644
new mode 100755
--- a/server/locale/en_US/LC_MESSAGES/messages.po
+++ b/server/locale/en_US/LC_MESSAGES/messages.po
@@ -0,0 +1,366 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: addons\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-01-16 11:45-0800\n"
+"PO-Revision-Date: 2009-02-26 15:08-0800\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../server/index.php:20
+msgid "What will your browser wear today?"
+msgstr ""
+
+#: ../server/templates/forgot_password_reset_tmpl.php:7
+#: ../server/templates/forgot_password_reset_tmpl.php:10
+#: ../server/templates/forgot_password_tmpl.php:7
+#: ../server/templates/forgot_password_tmpl.php:10
+#: ../server/templates/forgot_password_thanks_tmpl.php:7
+#: ../server/templates/forgot_password_thanks_tmpl.php:11
+msgid "Forgot Your Password?"
+msgstr ""
+
+#: ../server/templates/forgot_password_reset_tmpl.php:10
+#: ../server/templates/forgot_password_tmpl.php:10
+#: ../server/templates/forgot_password_thanks_tmpl.php:11
+msgid "Personas Home"
+msgstr ""
+
+#: ../server/templates/forgot_password_reset_tmpl.php:10
+#: ../server/templates/nav.php:11
+#: ../server/templates/forgot_password_tmpl.php:10
+#: ../server/templates/forgot_password_thanks_tmpl.php:11
+msgid "Sign In"
+msgstr ""
+
+#: ../server/templates/forgot_password_reset_tmpl.php:16
+msgid "Enter your new password:"
+msgstr ""
+
+#: ../server/templates/forgot_password_reset_tmpl.php:22
+msgid "New password"
+msgstr ""
+
+#: ../server/templates/forgot_password_reset_tmpl.php:27
+msgid "Re-type your new password"
+msgstr ""
+
+#: ../server/templates/forgot_password_reset_tmpl.php:31
+msgid "reset password"
+msgstr ""
+
+#: ../server/templates/nav.php:5
+msgid "Welcome, "
+msgstr ""
+
+#: ../server/templates/nav.php:5
+msgid "Edit Account"
+msgstr ""
+
+#: ../server/templates/nav.php:5
+msgid "Sign Out"
+msgstr ""
+
+#: ../server/templates/nav.php:10
+msgid "You have been signed out | "
+msgstr ""
+
+#: ../server/templates/nav.php:24
+msgid "Check it out! Your browser's all dressed up."
+msgstr ""
+
+#: ../server/templates/nav.php:34
+msgid "Gallery"
+msgstr ""
+
+#: ../server/templates/nav.php:35
+msgid "Create <br/>Your Own"
+msgstr ""
+
+#: ../server/templates/forgot_password_tmpl.php:15
+msgid "Please enter your Personas username below"
+msgstr ""
+
+#: ../server/templates/forgot_password_tmpl.php:18
+msgid "Username:"
+msgstr ""
+
+#: ../server/templates/forgot_password_tmpl.php:22
+msgid "continue"
+msgstr ""
+
+#: ../server/templates/forgot_password_thanks_tmpl.php:8
+msgid "Follow the easy steps below to start dressing up your browser!"
+msgstr ""
+
+#: ../server/templates/forgot_password_thanks_tmpl.php:13
+msgid "Your password reset information has been e-mailed to you."
+msgstr ""
+
+#: ../server/demo_create.php:10 ../server/demo_create.php:32
+msgid "How to Create Personas"
+msgstr ""
+
+#: ../server/demo_create.php:18
+msgid "How To"
+msgstr ""
+
+#: ../server/demo_create.php:19
+msgid ""
+"Personas are lightweight, easy to install and easy to change \"skins\" for "
+"your Firefox web browser."
+msgstr ""
+
+#: ../server/demo_create.php:23
+#, php-format
+msgid "<a href=\"%s\">Personas Home</a> : How to Create Personas"
+msgstr ""
+
+#: ../server/demo_create.php:36
+msgid ""
+"Personas are made up of two graphic image files - a \"header\" image and a "
+"\"footer\" image - which skin the default Firefox UI background."
+msgstr ""
+
+#. TODO shouln't there be a </p> tag here?
+#: ../server/demo_create.php:42 ../server/demo_create.php:56
+msgid "Step 1: Creating a Persona Header Image"
+msgstr ""
+
+#: ../server/demo_create.php:43
+#, php-format
+msgid "<a href=\"%s\">Step 3: Testing your Persona Images</a> &raquo;"
+msgstr ""
+
+#: ../server/demo_create.php:46
+#, php-format
+msgid "<a href=\"%s\">Step 2: Creating a Persona Footer Image</a> &raquo;"
+msgstr ""
+
+#: ../server/demo_create.php:47
+#, php-format
+msgid "<a href=\"%s\">Step 4: Submit your Persona!</a> &raquo;"
+msgstr ""
+
+#: ../server/demo_create.php:60
+msgid ""
+"The header image is displayed as the background of the top of the browser "
+"window, nestling in behind the toolbars, address bar, search bar and the tab "
+"strip.  \n"
+"                \t\t\tIt will be <b>anchored to the top-right corner</b> of "
+"the browser window."
+msgstr ""
+
+#: ../server/demo_create.php:67
+msgid ""
+"View a sample Persona Header <b><a href=\"/static/img/Persona_Header_LABS.jpg"
+"\">here</a></b>."
+msgstr ""
+
+#: ../server/demo_create.php:69
+msgid ""
+"View the sample Persona Header as seen in <b><a href=\"/static/img/"
+"tut_XPheader.jpg\">XP</a></b>, <b><a href=\"/static/img/tut_VISTAheader.jpg"
+"\">Vista</a></b>, and <b><a href=\"/static/img/tut_OSXheader.jpg\">OSX</a></"
+"b>."
+msgstr ""
+
+#: ../server/demo_create.php:81
+msgid "Dimensions should be <b>3000px wide x 200px high</b>"
+msgstr ""
+
+#: ../server/demo_create.php:83
+msgid "PNG or JPG file format"
+msgstr ""
+
+#: ../server/demo_create.php:85
+msgid "subtle, soft contrast images and gradients work best"
+msgstr ""
+
+#: ../server/demo_create.php:95
+msgid "highly detailed images will compete with the browser UI"
+msgstr ""
+
+#: ../server/demo_create.php:97
+msgid ""
+"Firefox may reveal more of the lower portion of the image if it or an "
+"extension adds another toolbar or other UI\n"
+"                \t\t\telement to the top of the window"
+msgstr ""
+
+#: ../server/demo_create.php:100
+msgid ""
+"the right-hand side of the image should have the most important information "
+"- as a user\n"
+"                \t\t\t\tincreases the width of the browser window, the "
+"browser reveals more of the left-hand side of the\n"
+"                \t\t\t\timage"
+msgstr ""
+
+#: ../server/demo_create.php:112
+msgid "images must be no larger than 300kb in filesize"
+msgstr ""
+
+#: ../server/demo_create.php:114
+msgid "images over 3000px x 200px will not be approved"
+msgstr ""
+
+#: ../server/demo_create.php:116
+msgid ""
+"never use artwork/logos/photography that you do not have the legal rights to "
+"use - you will have to prove you have the rights if the content is questioned"
+msgstr ""
+
+#: ../server/demo_create.php:126
+#, php-format
+msgid "<b><a href=\"%s\">Continue to Step 2</a> &raquo;</b>"
+msgstr ""
+
+#: ../server/demo_create.php:137
+#, php-format
+msgid ""
+"Did you know you can test a Persona before you submit it?  <b><a href=\"%s"
+"\">Find out how!</a>&raquo;</b>"
+msgstr ""
+
+#: ../server/demo_create.php:141
+msgid "Online Image Editor Resources"
+msgstr ""
+
+#: ../server/demo_create.php:145
+msgid ""
+"SUMO Paint offers professional and easy to use tools for creating and "
+"editing images within a browser. SUMO Paint is a free image editing software "
+"that gives you the opportunity to create, edit and comment images online "
+"with powerful tools and layer support."
+msgstr ""
+
+#: ../server/demo_create.php:146
+msgid ""
+"Tweak, rotate and touch up photoswith Photoshop&reg; Express, your free "
+"online photo editor."
+msgstr ""
+
+#: ../server/demo_create.php:147
+msgid ""
+"All the Photoshop features you actually need, at a fraction of the price. "
+"Did we mention built-in collaboration? Create and edit with the world!"
+msgstr ""
+
+#: ../server/delete_persona.php:54
+msgid "Removing a persona"
+msgstr ""
+
+#: ../server/delete_persona.php:79
+msgid "You don't have permission to edit that"
+msgstr ""
+
+#. should default to popular
+#: ../server/viewpersonas.php:58 ../server/viewpersonas.php:118
+msgid "Popular"
+msgstr ""
+
+#: ../server/viewpersonas.php:58
+msgid "Recent"
+msgstr ""
+
+#: ../server/viewpersonas.php:58 ../server/viewpersonas.php:86
+#: ../server/viewpersonas.php:92 ../server/viewpersonas.php:95
+#: ../server/viewpersonas.php:101 ../server/viewpersonas.php:119
+msgid "All"
+msgstr ""
+
+#: ../server/viewpersonas.php:58
+msgid "My"
+msgstr ""
+
+#: ../server/viewpersonas.php:58
+msgid "Favorites"
+msgstr ""
+
+#: ../server/viewpersonas.php:66
+msgid "View Personas"
+msgstr ""
+
+#: ../server/viewpersonas.php:90
+msgid "all"
+msgstr ""
+
+#: ../server/viewpersonas.php:94
+msgid "recent"
+msgstr ""
+
+#: ../server/viewpersonas.php:97
+msgid "my"
+msgstr ""
+
+#: ../server/viewpersonas.php:99
+msgid "My Personas"
+msgstr ""
+
+#: ../server/viewpersonas.php:103
+msgid "favorites"
+msgstr ""
+
+#: ../server/viewpersonas.php:105
+msgid "My Favorite Personas"
+msgstr ""
+
+#: ../server/viewpersonas.php:109
+msgid "search"
+msgstr ""
+
+#: ../server/viewpersonas.php:110
+msgid "Search Personas"
+msgstr ""
+
+#: ../server/change_password.php:18
+msgid ""
+"Oops!  We are unable to locate the username you entered.  Please try again, "
+"or <a href='https://www.getpersonas.com/upload'>create a new one</a>."
+msgstr ""
+
+#: ../server/change_password.php:26
+msgid ""
+"We have no email address on file for you. Please contact personas-"
+"devel@mozilla.com"
+msgstr ""
+
+#: ../server/change_password.php:38
+msgid "Resetting your personas password"
+msgstr ""
+
+#: ../server/change_password.php:40
+msgid ""
+"There was a problem with our mail server. Please try again in a few minutes. "
+"If it continues to not work, please contact personas-devel@mozilla.com"
+msgstr ""
+
+#: ../server/change_password.php:50 ../server/change_password.php:77
+#: ../server/change_password.php:133
+msgid "There was an internal error. Please contact personas-devel@mozilla.com"
+msgstr ""
+
+#: ../server/change_password.php:67 ../server/change_password.php:100
+msgid ""
+"The code you submitted is not valid for that username. Please request "
+"another one"
+msgstr ""
+
+#: ../server/change_password.php:107
+msgid "Password must be at least 6 characters long"
+msgstr ""
+
+#: ../server/change_password.php:114
+msgid ""
+"The password should contain at least one alphabetic character and at least "
+"one non-alphabetic character"
+msgstr ""
+
+#: ../server/change_password.php:121
+msgid "The password and confirmation do not match. Please try again"
+msgstr ""
old mode 100644
new mode 100755
--- a/server/locale/extract-po.sh
+++ b/server/locale/extract-po.sh
@@ -1,10 +1,10 @@
 #!/bin/bash
-SOURCE_DIRS="config models views controllers"
+SOURCE_DIRS=".."
 
 cd `dirname $0`/../
 
 rm messages.po
 touch messages.po
 
 for sourcedir in $SOURCE_DIRS; do \
     find ./${sourcedir} -name "*thtml" -or -name "*.php" | xgettext \
old mode 100644
new mode 100755
old mode 100644
new mode 100755
--- a/server/locale/merge-po.sh
+++ b/server/locale/merge-po.sh
@@ -6,17 +6,26 @@
 function usage() {
     echo "syntax:"
     echo "merge-po.sh extracted.pot destination-dir/"
     exit 1
 }
 
 tempfoo=`basename $0`
 TMPFILE=`mktemp /tmp/${tempfoo}.XXXXXX` || exit 1
+echo $TMPFILE
 
 # check if file and dir are there
 if [[ ($# -ne 2) || (! -f "$1") || (! -d "$2") ]]; then usage; fi
 
 for lang in `find $2 -type f -name "*.po"`; do
-    msgmerge --update $lang $1 > $TMPFILE
-    cp "$TMPFILE" "$lang"
+    echo "Lang: ${lang}"
+    # this line was changed because msgmerge was outputting nothing
+    # and this nothingness was being written into en_US/LC_MESSAGES/messages.po
+    # I *think* this was written under the assumption that msgmerge
+    # actually outputted the results of the merge to stdin, but this is not
+    # the case for msgmerge (GNU gettext-tools) 0.17
+    # old lines: 
+    # msgmerge --update $lang $1 > $TMPFILE
+    # cp "$TMPFILE" "$lang"
+    msgmerge --update $lang $1
 done
 rm "$TMPFILE"
old mode 100644
new mode 100755
new file mode 100644
--- /dev/null
+++ b/server/localhttpd.conf
@@ -0,0 +1,48 @@
+Alias /static /home/mhahnenberg/Desktop/personas/static
+# RewriteRule ^/static$ /home/mhahnenberg/Desktop/personas/static
+AliasMatch /([a-zA-Z-]+/)?signin /home/mhahnenberg/Desktop/personas/server/signin.php
+# RewriteRule ^/signin$ /home/mhahnenberg/Desktop/personas/server/signin.php
+AliasMatch /([a-zA-Z-]+/)?upload /home/mhahnenberg/Desktop/personas/server/upload_forms.php
+# RewriteRule ^/upload$ /home/mhahnenberg/Desktop/personas/server/upload_forms.php
+AliasMatch /([a-zA-Z-]+/)?forgot_password /home/mhahnenberg/Desktop/personas/server/change_password.php
+# RewriteRule ^/forgot_password$ /home/mhahnenberg/Desktop/personas/server/change_password.php
+AliasMatch /([a-zA-Z-]+/)?admin /home/mhahnenberg/Desktop/personas/server/admin
+# RewriteRule ^/admin$ /home/mhahnenberg/Desktop/personas/server/admin
+AliasMatch /([a-zA-Z-]+/)?persona /home/mhahnenberg/Desktop/personas/server/personadetail.php
+# RewriteRule ^/persona$ /home/mhahnenberg/Desktop/personas/server/personadetail.php
+AliasMatch /([a-zA-Z-]+/)?firstrun/ /home/mhahnenberg/Desktop/personas/server/firstrun.php
+# RewriteRule ^/firstrun/$ /home/mhahnenberg/Desktop/personas/server/firstrun.php
+AliasMatch /([a-zA-Z-]+/)?firstrun /home/mhahnenberg/Desktop/personas/server/firstrun.php
+# RewriteRule ^/firstrun$ /home/mhahnenberg/Desktop/personas/server/firstrun.php
+AliasMatch /([a-zA-Z-]+/)?reviewguidelines /home/mhahnenberg/Desktop/personas/server/reviewguidelines.php
+# RewriteRule ^/reviewguidelines$ /home/mhahnenberg/Desktop/personas/server/reviewguidelines.php
+AliasMatch /([a-zA-Z-]+/)?reviewguidelines/ /home/mhahnenberg/Desktop/personas/server/reviewguidelines.php
+# RewriteRule ^/reviewguidelines/$ /home/mhahnenberg/Desktop/personas/server/reviewguidelines.php
+AliasMatch /([a-zA-Z-]+/)?updated/ /home/mhahnenberg/Desktop/personas/server/updated.php
+# RewriteRule ^/updated/$ /home/mhahnenberg/Desktop/personas/server/updated.php
+AliasMatch /([a-zA-Z-]+/)?updated /home/mhahnenberg/Desktop/personas/server/updated.php
+# RewriteRule ^/updated$ /home/mhahnenberg/Desktop/personas/server/updated.php
+AliasMatch /([a-zA-Z-]+/)?gallery /home/mhahnenberg/Desktop/personas/server/viewpersonas.php
+# RewriteRule ^/gallery(.+)$ /home/mhahnenberg/Desktop/personas/server/viewpersonas.php
+AliasMatch /([a-zA-Z-]+/)?store /home/mhahnenberg/Desktop/personas/store
+# RewriteRule ^/store$ /home/mhahnenberg/Desktop/personas/store
+AliasMatch /([a-zA-Z-]+/)?pending /home/mhahnenberg/Desktop/personas/pending
+# RewriteRule ^/pending$ /home/mhahnenberg/Desktop/personas/pending
+AliasMatch /([a-zA-Z-]+/)?demo_create_2 /home/mhahnenberg/Desktop/personas/server/demo_create2.php
+# RewriteRule ^/demo_create_2$ /home/mhahnenberg/Desktop/personas/server/demo_create2.php
+AliasMatch /([a-zA-Z-]+/)?demo_create_3 /home/mhahnenberg/Desktop/personas/server/demo_create3.php
+# RewriteRule ^/demo_create_3$ /home/mhahnenberg/Desktop/personas/server/demo_create3.php
+AliasMatch /([a-zA-Z-]+/)?demo_create_4 /home/mhahnenberg/Desktop/personas/server/demo_create4.php
+# RewriteRule ^/demo_create_4$ /home/mhahnenberg/Desktop/personas/server/demo_create4.php
+AliasMatch /([a-zA-Z-]+/)?demo_create /home/mhahnenberg/Desktop/personas/server/demo_create.php
+# RewriteRule ^/demo_create$ /home/mhahnenberg/Desktop/personas/server/demo_create.php
+AliasMatch /([a-zA-Z-]+/)?demo_install /home/mhahnenberg/Desktop/personas/server/demo_install.php
+# RewriteRule ^/demo_install$ /home/mhahnenberg/Desktop/personas/server/demo_install.php
+AliasMatch /([a-zA-Z-]+/)?privacy /home/mhahnenberg/Desktop/personas/server/privacy.php
+# RewriteRule ^/privacy$ /home/mhahnenberg/Desktop/personas/server/privacy.php
+AliasMatch /([a-zA-Z-]+/)?faq /home/mhahnenberg/Desktop/personas/server/faq.php
+# RewriteRule ^/faq$ /home/mhahnenberg/Desktop/personas/server/faq.php
+AliasMatch /([a-zA-Z-]+/)?index.html /home/mhahnenberg/Desktop/personas/server/index.php
+# RewriteRule ^/index.html$ /home/mhahnenberg/Desktop/personas/server/index.php
+AliasMatch ^/([a-zA-Z-]+/)?$ /home/mhahnenberg/Desktop/personas/server/index.php
+# RewriteRule ^/$ /home/mhahnenberg/Desktop/personas/server/index.php
--- a/server/personadetail.php
+++ b/server/personadetail.php
@@ -47,17 +47,17 @@
 
 	$categories = $db->get_categories();
 	array_unshift($categories, 'All');
 	$category = null;
 	
 	$path = array_key_exists('PATH_INFO', $_SERVER) ? $_SERVER['PATH_INFO'] : '/';
 	$path = substr($path, 1); #chop the lead slash
 	list($persona_id) = explode('/', $path);
-	$page_header = 'View Personas';
+	$page_header = _("View Personas");
 	
 	if (!is_numeric($persona_id))
 		$persona_id = null;
 	else
 	{
 		$persona_id = intval($persona_id);
 		$persona = $db->get_persona_by_id($persona_id);
 		if ($persona['status'] == 1)
@@ -75,53 +75,52 @@
 	include 'templates/header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
                 <h2><?= $page_header ?></h2>
-                <h3>Your browser, your style! Dress it up with easy-to-change "skins" for your
-                Firefox.</h3>
+                <h3><?= _("Your browser, your style! Dress it up with easy-to-change \"skins\" for your Firefox.");?></h3>
             </div>
             <div id="maincontent">
-                <p id="breadcrumbs"><a href="http://www.getpersonas.com">Personas Home</a> : View Personas</p>
+                <p id="breadcrumbs"><?printf(_("<a href=\"%s\">" . _("Personas Home") . "</a> : " . _("View Personas"), $locale_conf->url('/'));?></p>
 <?php if ($persona['status'] == 1)
 		include 'templates/persona_detail.php';
 	  else
-	  	echo "We are unable to locate the persona you requested."
+	  	echo _("We are unable to locate the persona you requested.");
 ?>
 			</div>
 <?php include 'templates/category_nav.php'; ?>
             
         </div>
     </div>
     
 <?php include 'templates/footer.php'; ?>
     <script type="text/javascript" charset="utf-8">
 		
 
         $(document).ready(function () {
-            $("#header").ie6Warning({"message":'<div id="ie6">Upgrade your browser to get the most out of this website. <a href="%LINK%">Download Firefox for free</a>.</div>'});
+            $("#header").ie6Warning({"message":'<div id="ie6"><?= _("Upgrade your browser to get the most out of this website. <a href="%LINK%">Download Firefox for free</a>.");?></div>'});
             $("#try-button").personasButton({
-                                        'hasPersonas':'<span>wear this</span><span>&nbsp;</span>',
-                                        'hasFirefox':'<span>get personas now!</span><span>&nbsp;</span>',
-                                        'noFirefox':'<span>get personas with firefox</span><span>&nbsp;</span>'
+                                        'hasPersonas':'<span><?= _("wear this");?></span><span>&nbsp;</span>',
+                                        'hasFirefox':'<span><?= _("get personas now!");?></span><span>&nbsp;</span>',
+                                        'noFirefox':'<span><?= _("get personas with firefox");?></span><span>&nbsp;</span>'
                                         });
             
             var favorite_action = <?= $favorite_persona ? 0 : 1 ?>;
             $(".favorite a").click(function() {                 
                 //change to loading here
-              	$(this).html("loading...");
+              	$(this).html(<?= _("loading...");?>);
     			$.get('/favorite/<?= $persona_id ?>/<?= $nonce ?>', {"action": favorite_action, "ajax":true}, 
     				function(data) 
     					{ 
     						favorite_action = favorite_action ? 0 : 1;
-    						$(".favorite a").html(favorite_action ? "Add to favorites" : "Remove from favorites");
+    						$(".favorite a").html(favorite_action ? <?= _("Add to favorites") . " : " . _("Remove from favorites");?>);
                             if(favorite_action) {
                                 $(".favorite a").removeClass("favorited");
                             } else {
                                 $(".favorite a").addClass("favorited");
                             }
     					}
     				);
 
--- a/server/privacy.php
+++ b/server/privacy.php
@@ -1,63 +1,63 @@
 <?php
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/user.php';	
 
 	$user = new PersonaUser();
-	$title = "Privacy Policy"; 
+	$title = _("Privacy Policy"); 
 	include 'templates/header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
                 <h2>Privacy Policy</h2>
                 
             </div>
             <div id="maincontent" class="demo">
                 <div id="breadcrumbs">
-                    <a href="/">Personas Home</a> :  Privacy Policy
+                    <?printf("<a href=\"%s\">" . _("Personas Home") . "</a> :  " . _("Privacy Policy"), $locale_conf->url('/'));?>
                 </div>
                
                
-                <h3>Mozilla Personas Privacy Policy</h3>
-                <p>Dated: March 20, 2009</p>
-                <p>We’re working hard to protect your privacy while delivering products and services that bring you the performance and protection you desire in your personal computing.  This privacy policy explains how Mozilla Corporation (“Mozilla”), a wholly-owned subsidiary of the non-profit Mozilla Foundation, collects and uses information about users of the official Mozilla Personas add-on (“Personas”) for Mozilla Firefox® web browser (“Firefox”).  It does not apply to other Mozilla websites, products or services.  </p>
-                <h4>Types of Information</h4>
-                <p>Personas collects certain information that falls into the following categories:</p>
-                <p><em>“Personal Information”</em> is information that you provide to us that personally identifies you, such as your name and email address.  Except as described below, Mozilla does not collect or require users of Personas to furnish Personal Information.  To protect your privacy any Personal Information will be available only to Mozilla employees, contractors, and selected contributors who signed confidentiality agreements that prohibit them from using or disclosing such information other than for internal Mozilla purposes.</p>
-                <p><em>“Non-Personal Information”</em> is information that cannot be directly associated with a specific person or entity.  Non-Personal Information includes but is not limited to your computer’s configuration, the Persona Design (as defined below) and the version of Personas you use.</p>
-                <p><em>“Potentially Personal Information”</em> is information that is Non-Personal Information in and of itself but that could be used in conjunction with other information to personally identify you.  For example, Internet Protocol (“IP”) addresses (the addresses of computers on the internet), which is Non-Personal Information in and of itself, could be Personal Information when combined with internet service provider (“ISP”) records.</p>
-                <p><em>“Aggregate Data”</em> is information that is recorded about users and collected into groups so it no longer reflects or references an individually identifiable user.  Aggregate Data does not contain any Personal Information.</p>
-                <h4>Personal Information</h4>
-                <p><em>Downloading Personas.</em>  Mozilla does not collect any Personal Information if you are downloading Personas.</p>
-                <p><em>Creating a Custom Persona.</em>  If you are creating a Custom Persona for your own use, Mozilla does not collect any Personal Information.</p>
-                <p><em>Contributing a Design to the Personas Gallery.</em> The Personas gallery is where you can browse all the available designs.  If you contribute a design or image (each a “Persona Design”) to the Personas gallery, Mozilla collects the following Personal Information: (1) your user name and (2) your email address.  Your user name will be used to attribute your Persona Design to you and will be publicly available on the Personas gallery.  You do not have to provide your real name; you can use a nickname or avatar.  Your email address will not be publicly available or shared with any third parties.  Mozilla will use your email address only to contact you regarding your design or to provide any additional information that you elect or opt in to receive.</p>
-                <p>In addition, Mozilla does not publicly release information gathered in connection with commercial transactions (i.e., transactions involving money). </p>
-                <p>Mozilla does not make publicly available Personal Information that it specifically promises at the time of collection to maintain in confidence. </p>
-                <h4>Interactive Product Features</h4>
-                <p>If you have Personas installed, each time you open Firefox Personas loads your selected Persona Design from the Mozilla server.  Once per day Personas checks to see if your selected Persona Design still is available in its list of Persona Designs.  This feature sends the same information that web browsers typically transfer with any HTTP requests including user agent and, Potentially Personally-Identifying Information such as, your IP address. </p>
-                <p>Personas has a feature that refreshes the Personas gallery once per day.  This feature sends the following Non-Personal Information to Mozilla: </p>
+                <h3><?= _("Mozilla Personas Privacy Policy");?></h3>
+                <p><?= _("Dated: March 20, 2009");?></p>
+                <p><?= _("We're working hard to protect your privacy while delivering products and services that bring you the performance and protection you desire in your personal computing.  This privacy policy explains how Mozilla Corporation (\"Mozilla\"), a wholly-owned subsidiary of the non-profit Mozilla Foundation, collects and uses information about users of the official Mozilla Personas add-on (\"Personas\") for Mozilla Firefox® web browser (\"Firefox\").  It does not apply to other Mozilla websites, products or services.");?>  </p>
+                <h4><?= _("Types of Information");?></h4>
+                <p><?= _("Personas collects certain information that falls into the following categories:");?></p>
+                <p><?= _("<em>\"Personal Information\"</em> is information that you provide to us that personally identifies you, such as your name and email address.  Except as described below, Mozilla does not collect or require users of Personas to furnish Personal Information.  To protect your privacy any Personal Information will be available only to Mozilla employees, contractors, and selected contributors who signed confidentiality agreements that prohibit them from using or disclosing such information other than for internal Mozilla purposes.");?></p>
+                <p><?= _("<em>\"Non-Personal Information\"</em> is information that cannot be directly associated with a specific person or entity.  Non-Personal Information includes but is not limited to your computer's configuration, the Persona Design (as defined below) and the version of Personas you use.");?></p>
+                <p><?= _("<em>\"Potentially Personal Information\"</em> is information that is Non-Personal Information in and of itself but that could be used in conjunction with other information to personally identify you.  For example, Internet Protocol (\"IP\") addresses (the addresses of computers on the internet), which is Non-Personal Information in and of itself, could be Personal Information when combined with internet service provider (\"ISP\") records.");?></p>
+                <p><?= _("<em>\"Aggregate Data\"</em> is information that is recorded about users and collected into groups so it no longer reflects or references an individually identifiable user.  Aggregate Data does not contain any Personal Information.");?></p>
+                <h4><?= _("Personal Information");?></h4>
+                <p><?= _("<em>Downloading Personas.</em>  Mozilla does not collect any Personal Information if you are downloading Personas.");?></p>
+                <p><?= _("<em>Creating a Custom Persona.</em>  If you are creating a Custom Persona for your own use, Mozilla does not collect any Personal Information.");?></p>
+                <p><?= _("<em>Contributing a Design to the Personas Gallery.</em> The Personas gallery is where you can browse all the available designs.  If you contribute a design or image (each a \"Persona Design\") to the Personas gallery, Mozilla collects the following Personal Information: (1) your user name and (2) your email address.  Your user name will be used to attribute your Persona Design to you and will be publicly available on the Personas gallery.  You do not have to provide your real name; you can use a nickname or avatar.  Your email address will not be publicly available or shared with any third parties.  Mozilla will use your email address only to contact you regarding your design or to provide any additional information that you elect or opt in to receive.");?></p>
+                <p><?= _("In addition, Mozilla does not publicly release information gathered in connection with commercial transactions (i.e., transactions involving money).");?> </p>
+                <p><?= _("Mozilla does not make publicly available Personal Information that it specifically promises at the time of collection to maintain in confidence.");?> </p>
+                <h4><?= _("Interactive Product Features");?></h4>
+                <p><?= _("If you have Personas installed, each time you open Firefox Personas loads your selected Persona Design from the Mozilla server.  Once per day Personas checks to see if your selected Persona Design still is available in its list of Persona Designs.  This feature sends the same information that web browsers typically transfer with any HTTP requests including user agent and, Potentially Personally-Identifying Information such as, your IP address.");?> </p>
+                <p><?= _("Personas has a feature that refreshes the Personas gallery once per day.  This feature sends the following Non-Personal Information to Mozilla: ");?></p>
                 <ul>
-                <li>the category and ID of Persona Design selected;</li>
-                <li>the date/time the Persona Design was selected;</li>
-                <li>the ID and version of the application you used (e.g., Firefox 3.0.7);</li>
-                <li>your locale (e.g., English-US);</li>
-                <li>your operating system (i.e.,  Linux, Windows or Mac); and</li>
-                <li>your computer's architecture.</li>
+                <li><?= _("the category and ID of Persona Design selected;");?></li>
+                <li><?= _("the date/time the Persona Design was selected;");?></li>
+                <li><?= _("the ID and version of the application you used (e.g., Firefox 3.0.7);");?></li>
+                <li><?= _("your locale (e.g., English-US);");?></li>
+                <li><?= _("your operating system (i.e.,  Linux, Windows or Mac); and");?></li>
+                <li><?= _("your computer's architecture.");?></li>
                 </ul>
-                <p>Personas relies on Firefox’s automatic update feature for updates.  See the <a href="http://www.mozilla.com/en-US/legal/privacy/firefox-en.html">Firefox Privacy Policy</a> for privacy details of the Firefox automatic update feature. </p>
-                <p>We use this information to improve our products and services and to support decision making regarding feature and capacity planning.  Mozilla is an open organization that believes in sharing as much information as possible about its products, its operations, and its associations. Accordingly, we may release public reports containing Aggregate Data so that our global community and Personas partners may make better product and design decisions and so that users of Personas will know which are the most popular Persona Designs and Personas designers will know how many times their Persona Design was downloaded.  </p>
-                <h4>Privacy Policy Changes</h4>
+                <p><?= _("Personas relies on Firefox’s automatic update feature for updates.  See the <a href=\"http://www.mozilla.com/legal/privacy/firefox-en.html\">Firefox Privacy Policy</a> for privacy details of the Firefox automatic update feature. ");?></p>
+                <p><?= _("We use this information to improve our products and services and to support decision making regarding feature and capacity planning.  Mozilla is an open organization that believes in sharing as much information as possible about its products, its operations, and its associations. Accordingly, we may release public reports containing Aggregate Data so that our global community and Personas partners may make better product and design decisions and so that users of Personas will know which are the most popular Persona Designs and Personas designers will know how many times their Persona Design was downloaded.  ");?></p>
+                <h4><?= _("Privacy Policy Changes");?></h4>
                 
-                <p>Mozilla may change the Personas Privacy Policy from time to time.  Any and all changes will be reflected on this page.  When Mozilla changes this policy in a material way, a notice will be posted on the <a href="http://www.getpersonas.com">www.getpersonas.com</a> Web site.  Substantive changes may also be announced through the standard mechanisms by which Mozilla communicates with its users and community, including Mozilla's "announce" <a href="https://lists.mozilla.org/listinfo/announce">mailing list and newsgroup</a>.  It is your responsibility to ensure that you understand the terms of this Privacy Policy.  You should periodically check this page for any changes to the current policy.</p>
-                <h4>For More Information</h4>
-                <p>If you have questions about this privacy policy, please contact Mozilla at <a href="mailto:privacy@mozilla.com">privacy@mozilla.com</a>.  In your email, please identify the specific product or policy about which you have questions.</p>
+                <p><?printf("Mozilla may change the Personas Privacy Policy from time to time.  Any and all changes will be reflected on this page.  When Mozilla changes this policy in a material way, a notice will be posted on the <a href=\"%s\">www.getpersonas.com</a> Web site.  Substantive changes may also be announced through the standard mechanisms by which Mozilla communicates with its users and community, including Mozilla's \"announce\" <a href=\"https://lists.mozilla.org/listinfo/announce\">mailing list and newsgroup</a>.  It is your responsibility to ensure that you understand the terms of this Privacy Policy.  You should periodically check this page for any changes to the current policy.", $locale_conf->url('/'));?></p>
+                <h4><?= _("For More Information");?></h4>
+                <p><?= _("If you have questions about this privacy policy, please contact Mozilla at <a href=\"mailto:privacy@mozilla.com\">privacy@mozilla.com</a>.  In your email, please identify the specific product or policy about which you have questions.");?></p>
                 
             </div>
 <?php include 'templates/get_personas.php'; ?>
         </div>
     </div>
 <?php include 'templates/footer.php'; ?>
 </body>
 </html>
--- a/server/profile.php
+++ b/server/profile.php
@@ -24,59 +24,59 @@
 		$create['description'] = array_key_exists('create_description', $_POST) ? (ini_get('magic_quotes_gpc') ? stripslashes($_POST['create_description']) : $_POST['create_description']) : null;
 		$create['news'] = array_key_exists('news', $_POST);
 		$create['display_username'] = trim($create['display_username']);
 
 		$create['display_username'] = htmlspecialchars($create['display_username']);
 		$create['description'] = htmlspecialchars($create['description']);
 
 		if (!preg_match('/^[A-Z0-9\._%+-]+@[A-Z0-9\.-]+\.[A-Z]{2,4}$/i', $create['email'])) 
-			$_errors['create_email'] = "Invalid email address";
+			$_errors['create_email'] = _("Invalid email address");
 		
 		if (strlen($create['display_username']) > 32)
-			$_errors['create_display_username'] = "Please limit your display name to 32 characters or less";
+			$_errors['create_display_username'] = _("Please limit your display name to 32 characters or less");
 
 		if (strlen($create['description']) > 256)
-			$_errors['create_description'] = "Please limit your description to 256 characters or less";
+			$_errors['create_description'] = _("Please limit your description to 256 characters or less");
 
 		if (count($_errors) == 0 && $user->update_user($user->get_username(), $create['display_username'], $create['email'], $create['description'], $create['news']))
 		{
 			$db->update_display_username($user->get_username(), $create['display_username']);
 			$updated = 1;
 		}
 	}
 	else
 	{
 		$create['email'] = $user->_email;
 		$create['display_username'] = $user->_display_username;
 		$create['description'] = $user->_description;
 		$create['news'] = $user->_news;
 	}
 	
-	$title = "Change User Details"; 
+	$title = _("Change User Details"); 
 	include 'templates/header.php'; 
 ?>
 <body class="forgot-password">
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
-                <h2>Change User Details</h2>
+                <h2><?= _("Change User Details");?></h2>
             </div>
             <div id="maincontent">
                 <div id="breadcrumbs">
-                    <a href="http://www.getpersonas.com">Personas Home</a> : User Details  
+                    <?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : " _("User Details"), $locale_conf->url('/'));?>
                 </div>
 <?php 
 		if ($updated)
 		{
 ?>
                 <div id="signup">
-                    <h4>Change User Details</h3>
-                	You have successfully updated your user profile. Thanks for keeping us up to date!
+                    <h4><?= _("Change User Details");?></h3>
+                	<?= _("You have successfully updated your user profile. Thanks for keeping us up to date!");?>
                 </div>
 <?php
 		}
 		else
 			include 'templates/change_user_details.php'; 
 ?>
             </div>
         </div>
--- a/server/reviewguidelines.php
+++ b/server/reviewguidelines.php
@@ -1,131 +1,114 @@
 <?php
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/user.php';	
 
 
 	$user = new PersonaUser();
-	$title = "Review Guidelines"; 
+	$title = _("Review Guidelines"); 
 	include 'templates/header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
-                <h2>Review Guidelines</h2>
+                <h2><?= _("Review Guidelines");?></h2>
             </div>
             <div id="maincontent" class="demo">
                 <div id="breadcrumbs">
-                    <a href="http://www.getpersonas.com">Personas Home</a> : Review Guidelines
+                    <?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : " . _("Review Guidelines"), $locale_conf->url('/'))?>
                 </div>
 
-                <p>Though it would be great if we could accept every image or design (“Design”) submitted to the Personas gallery, the reality is that we’re unable to do so – either for legal reasons or because we do not want certain acts or images associated with Mozilla. Therefore, we have created the following guidelines to review the Designs submitted for the gallery. </p>
+                <p><?= _("Though it would be great if we could accept every image or design (\"Design\") submitted to the Personas gallery, the reality is that we're unable to do so – either for legal reasons or because we do not want certain acts or images associated with Mozilla. Therefore, we have created the following guidelines to review the Designs submitted for the gallery. ");?></p>
 
-                <h3 id="images">I.   Images Not Allowed.  </h3>
+                <h3 id="images"><?= _("I.   Images Not Allowed.  ");?></h3>
 
-                <p>Describing inappropriate content is difficult since it is culturally driven; however, there are standards that cross cultural boundaries.  Mozilla in its sole discretion may refuse any Design.  Some of the reasons we will not include a Design in the Personas gallery may include, but are not limited to, the following:</p>
+                <p><?= _("Describing inappropriate content is difficult since it is culturally driven; however, there are standards that cross cultural boundaries.  Mozilla in its sole discretion may refuse any Design.  Some of the reasons we will not include a Design in the Personas gallery may include, but are not limited to, the following:");?></p>
 
-                <h5>Obscene:</h5>
+                <h5><?= _("Obscene:");?></h5>
                 <ul>
-                    	<li>Sexually explicit</li>
-                        <li>Contains sexually derived words (e.g., f*ck)</li>
-                        <li>Explicit nudity 
+                    	<li><?= _("Sexually explicit");?></li>
+                        <li><?= _("Contains sexually derived words (e.g., f*ck)");?></li>
+                        <li><?= _("Explicit nudity");?>
                             <ul>
-                                <li>Full frontal nudity</li>
-                                <li>Genitalia</li>
-                                <li>Buttocks nudity</li>
+                                <li><?= _("Full frontal nudity");?></li>
+                                <li><?= _("Genitalia");?></li>
+                                <li><?= _("Buttocks nudity");?></li>
                             </ul>
-                            <li>Obscene gestures (this is cultural and we’ll have to rely on our community members to monitor this category (e.g., flipping someone off in the U.S. (middle finger) vs. in the UK (2 finger salute with index and middle finger – a reverse peace sign)).</li>
+                            <li><?= _("Obscene gestures (this is cultural and we'll have to rely on our community members to monitor this category (e.g., flipping someone off in the U.S. (middle finger) vs. in the UK (2 finger salute with index and middle finger – a reverse peace sign)).");?></li>
                 </ul>
 
 
-                <h5>Violent:</h5>
+                <h5><?= _("Violent:");?></h5>
                 <ul>
-                    <li>Graphic violence</li>
-                    <li>Gore</li>
-                    <li>Person or animal being harmed or threatened</li>
-                    <li>Bloodshed</li>
-                    <li>Advocating the overthrow of a government</li>
+                    <li><?= _("Graphic violence");?></li>
+                    <li><?= _("Gore");?></li>
+                    <li><?= _("Person or animal being harmed or threatened");?></li>
+                    <li><?= _("Bloodshed");?></li>
+                    <li><?= _("Advocating the overthrow of a government");?></li>
                 </ul>
                 
-                <h5>Hate: </h5>
+                <h5><?= _("Hate: ");?></h5>
                 <ul>
-                    <li>Targets anyone because of his or her membership in a certain social group, including race, gender, color, religion, belief, sexual orientation, disability, ethnicity, nationality, age, gender identity, or political affiliation.</li>
-                    <li>Symbolic representation of any group that targets anyone because of his or her membership in a certain social group.</li>
+                    <li><?= _("Targets anyone because of his or her membership in a certain social group, including race, gender, color, religion, belief, sexual orientation, disability, ethnicity, nationality, age, gender identity, or political affiliation.");?></li>
+                    <li><?= _("Symbolic representation of any group that targets anyone because of his or her membership in a certain social group.");?></li>
                 </ul>
                 
-                <h5>Drugs: </h5>
+                <h5><?= _("Drugs:");?> </h5>
                 <ul>
-                    <li>Illegal drugs or controlled substances</li>
-                    <li>Use of illegal drugs or controlled substances</li>
-                    <li>Drug paraphernalia</li>
+                    <li><?= _("Illegal drugs or controlled substances");?></li>
+                    <li><?= _("Use of illegal drugs or controlled substances");?></li>
+                    <li><?= _("Drug paraphernalia");?></li>
                 </ul>
                 
-                <h5>Privacy:</h5>
+                <h5><?= _("Privacy:");?></h5>
                 <ul>
-                    <li>Violate privacy rights of any third party</li>
+                    <li><?= _("Violate privacy rights of any third party");?></li>
                 </ul>
 
 
-                <h3>II.  Trademark or Copyright Violations</h3>
+                <h3><?= _("II.  Trademark or Copyright Violations");?></h3>
                 
-                <p><strong class="legal">Mozilla Trademarks.</strong> Except for Foxkeh, any modification or manipulation of a Mozilla trademark or logo is not permitted.</p>
+                <p><?= _("<strong class=\"legal\">Mozilla Trademarks.</strong> Except for Foxkeh, any modification or manipulation of a Mozilla trademark or logo is not permitted.");?></p>
 
-                <p><strong class="legal">Third Party Intellectual Property.</strong>  Our users are representing that they have the rights images they are contributing.</p> 
-                <p>[Version A] We are relying on this statement and will not review the submitted designs and images for third party intellectual property rights.  We will comply with proper take-down notices sent the copyright or trademark owner or licensee.</p>
+                <p><?= _("<strong class=\"legal\">Third Party Intellectual Property.</strong>  Our users are representing that they have the rights images they are contributing.");?></p> 
+                <p><?= _("[Version A] We are relying on this statement and will not review the submitted designs and images for third party intellectual property rights.  We will comply with proper take-down notices sent the copyright or trademark owner or licensee.");?></p>
 
-                <p>[Version B] However, if there is an obvious infringement (e.g., a Coca-Cola logo, Manchester United logo) we will not include that image or design.</p>
+                <p><?= _("[Version B] However, if there is an obvious infringement (e.g., a Coca-Cola logo, Manchester United logo) we will not include that image or design.");?></p>
 
-                <p>[Version C] However, if there is an obvious infringement (e.g., a Coca-Cola logo, Manchester United logo) we will not include that image or design.  We will contact the person who submitted the design asking them if they have the rights to that image and if (i) they are licensing this image under the Creative Commons license; or (ii) they want the enter into a separate licensing agreement with us.</p>
+                <p><?= _("[Version C] However, if there is an obvious infringement (e.g., a Coca-Cola logo, Manchester United logo) we will not include that image or design.  We will contact the person who submitted the design asking them if they have the rights to that image and if (i) they are licensing this image under the Creative Commons license; or (ii) they want the enter into a separate licensing agreement with us.");?></p>
 
-                <h3>III.  Reply to Designer About Submitted Design</h3>
+                <h3><?= _("III.  Reply to Designer About Submitted Design");?></h3>
 
-                <p><strong class="legal">Design Acceptance:</strong> If a design is accepted, we will send the following message:</p>
+                <p><?= _("<strong class=\"legal\">Design Acceptance:</strong> If a design is accepted, we will send the following message:");?></p>
 
-                <blockquote>“Congratulations, your Design has been accepted and now is part of the Personas gallery.  Thank you for contributing your Design and licensing it to Mozilla [and to the public under the Creative Commons license].”  [CC language included if the designer checked the Creative Commons box] </blockquote>
+                <blockquote><?= _("\"Congratulations, your Design has been accepted and now is part of the Personas gallery.  Thank you for contributing your Design and licensing it to Mozilla [and to the public under the Creative Commons license].\"  [CC language included if the designer checked the Creative Commons box] ");?></blockquote>
 
-                <p><strong class="legal">Design Rejection:</strong> If a design is rejected, we will send the following message:</p>
+                <p><?= _("<strong class=\"legal\">Design Rejection:</strong> If a design is rejected, we will send the following message:");?></p>
 
-                <blockquote>“Thank you for submitting your Design to the Personas gallery.  However, this design does not meet our <a href="#images">guidelines</a> and we are unable to include it in our gallery.  You may create your own custom persona [hyperlink to instructions on using the custom setting].”</blockquote>
+                <blockquote><?= _("\"Thank you for submitting your Design to the Personas gallery.  However, this design does not meet our <a href=\"#images\">guidelines</a> and we are unable to include it in our gallery.  You may create your own custom persona [hyperlink to instructions on using the custom setting].\"");?></blockquote>
 
-                <h3>IV.  DMCA and Trademark Violation Take Down Notices</h3>
+                <h3><?= _("IV.  DMCA and Trademark Violation Take Down Notices");?></h3>
 
-                <p>When we receive a take-down notice, either through DMCA notice or trademark notice, we will take the following steps:</p>
+                <p><?= _("When we receive a take-down notice, either through DMCA notice or trademark notice, we will take the following steps:");?></p>
                 <ol>
-                <li>Promptly take down the image in question;</li>
-                <li>Notify the designer of the take down notice;
-                <li>Respond to the entity submitting the take down notice;</li>
-                <li>Track the following information and retain it for three years:
+                <li><?= _("Promptly take down the image in question;");?></li>
+                <li><?= _("Notify the designer of the take down notice;");?>
+                <li><?= _("Respond to the entity submitting the take down notice;");?></li>
+                <li><?= _("Track the following information and retain it for three years:");?>
                     <ol>
-                        <li>Name, email address [and IP address] of the designer</li>
-                        <li>Date the notice was received, </li>
-                        <li>Name of the copyright or trademark holder; and</li>
-                        <li>Date the Design was taken down.</li>
+                        <li><?= _("Name, email address [and IP address] of the designer");?></li>
+                        <li><?= _("Date the notice was received, ");?></li>
+                        <li><?= _("Name of the copyright or trademark holder; and");?></li>
+                        <li><?= _("Date the Design was taken down.");?></li>
                     </ol>
                 </li>
                 </ol>
                 
-                <p><strong class="legal">Frequent Offenders.</strong>  If a designer is a frequent offender, we will no longer accept Designs from him or her.  What is deemed frequent is somewhat case specific (e.g., 2 Designs rejected out of a total of 20 designs submitted may not be frequent; however 3 rejected out of 3 or 5 Designs submitted is). Once a designer has a third Design rejected, legal will review whether this person shall be banned from submitting Designs to the Personas gallery.</p>
-
-                
-                
-                
-                
-                
-                
-                
-                
-                
-                
-                
-                
-                
-                
-         
-         
+                <p><?= _("<strong class=\"legal\">Frequent Offenders.</strong>  If a designer is a frequent offender, we will no longer accept Designs from him or her.  What is deemed frequent is somewhat case specific (e.g., 2 Designs rejected out of a total of 20 designs submitted may not be frequent; however 3 rejected out of 3 or 5 Designs submitted is). Once a designer has a third Design rejected, legal will review whether this person shall be banned from submitting Designs to the Personas gallery.");?></p>
             </div>
         </div>
     </div>
 <?php include 'templates/footer.php'; ?>
 </body>
 </html>
--- a/server/signin.php
+++ b/server/signin.php
@@ -1,11 +1,12 @@
 <?php
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/user.php';	
+	require_once "lib/language.php";
 
 	$user = new PersonaUser();
 	$_errors = array();
 	$return_url = null;
 	
 	if (array_key_exists('return', $_GET))
 		$return_url = $_GET['return'];
 	elseif (array_key_exists('return', $_POST))
@@ -39,17 +40,17 @@
 			if ($return_url)
 				header('Location: ' . $return_url);
 			else
 				header('Location: /');
 			exit;
 		}
 		else
 		{
-			$_errors['login_user'] = "Invalid username or password. Please try again";
+			$_errors['login_user'] = _("Invalid username or password. Please try again");
 		}
 	}
 	
 	if (array_key_exists('create_username', $_POST) && $_POST['create_username'])
 	{
 		#trying to create an account
 		$create['username'] = array_key_exists('create_username', $_POST) ? (ini_get('magic_quotes_gpc') ? stripslashes($_POST['create_username']) : $_POST['create_username']) : null;
 		$password = array_key_exists('create_password', $_POST) ? (ini_get('magic_quotes_gpc') ? stripslashes($_POST['create_password']) : $_POST['create_password']) : null;
@@ -67,73 +68,73 @@
 		$captcha_response = recaptcha_check_answer(
 			RECAPTCHA_PRIVATE_KEY,
 			$_SERVER['REMOTE_ADDR'],
 			$_POST['recaptcha_challenge_field'],
 			$_POST['recaptcha_response_field']
 		);
 		
 		if (!$captcha_response->is_valid) 
-			$_errors['captcha'] = "Invalid captcha response. Please try again.";
+			$_errors['captcha'] = _("Invalid captcha response. Please try again.");
 
 		if (!preg_match('/^[A-Z0-9\._%+-]+@[A-Z0-9\.-]+\.[A-Z]{2,4}$/i', $create['email'])) 
-			$_errors['create_email'] = "Invalid email address";
+			$_errors['create_email'] = _("Invalid email address");
 
 		if (!preg_match('/^[A-Z0-9\._-]+$/i', $create['username'])) 
-			$_errors['create_username'] = "Illegal characters in the login name (alphanumerics, period, underscore and dash only)";
+			$_errors['create_username'] = _("Illegal characters in the login name (alphanumerics, period, underscore and dash only)");
 		elseif (strlen($create['username']) > 32)
-			$_errors['create_username'] = "Please limit your login name to 32 characters or less";
+			$_errors['create_username'] = _("Please limit your login name to 32 characters or less");
 		elseif (strlen($create['username']) < 6)
-			$_errors['create_username'] = "Please use at least 6 characters in your login name";
+			$_errors['create_username'] = _("Please use at least 6 characters in your login name");
 			
 		if (strlen($password) < 6)
-			$_errors['create_password'] = "Password must be at least 6 characters long";
+			$_errors['create_password'] = _("Password must be at least 6 characters long");
 		elseif (!preg_match('/[A-Z]/i', $password) || !preg_match('/[^A-Z]/i', $password) )
-			$_errors['create_password'] = "Password should contain at least one alphabetic character and at least one non-alphabetic character";
+			$_errors['create_password'] = _("Password should contain at least one alphabetic character and at least one non-alphabetic character");
 		
 		if ($password != $passwordconf)
-			$_errors['create_passconf'] = "Password does not match confirmation";
+			$_errors['create_passconf'] = _("Password does not match confirmation");
 		
 		if (strlen($create['display_username']) > 32)
-			$_errors['create_display_username'] = "Please limit your display name to 32 characters or less";
+			$_errors['create_display_username'] = _("Please limit your display name to 32 characters or less");
 
 		if (strlen($create['description']) > 256)
-			$_errors['create_description'] = "Please limit your description to 256 characters or less";
+			$_errors['create_description'] = _("Please limit your description to 256 characters or less");
 
 		if ($user->user_exists($create['username']))
-			$_errors['create_username'] = "Login name already in use";
+			$_errors['create_username'] = _("Login name already in use");
 		
 		
 		if (count($_errors) == 0)
 		{
 			if ($user->create_user($create['username'], $password, $create['display_username'], $create['email'], $create['description'], $create['news']))
 			{
 				setcookie('PERSONA_USER', $user->get_cookie(), null, '/');
 				if ($return_url)
 					header('Location: ' . $return_url);
 				else
 					header('Location: /');
 				exit;
 			}
 		}
 	}
 
-	$title = "Login"; 
+	$title = _("Login"); 
 	include 'templates/header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
                 <h2>Login</h2>
             </div>
             <div id="maincontent" class="login-signup">
                 <div id="breadcrumbs">
-                    Personas Home : Login    
+                    <?= _("Personas Home : Login");?>    
                 </div>
 				<?php if (array_key_exists('success_message', $_errors)) echo '<p class="logout-success">' . $_errors['success_message'] . '</p>' ?>
 <?php include 'templates/login_form.php'; ?>
 <?php if (!array_key_exists('admin', $_GET))
 		include 'templates/signup_form.php'; 
 ?>
             </div>
         </div>
--- a/server/templates/change_user_details.php
+++ b/server/templates/change_user_details.php
@@ -1,30 +1,30 @@
                 <div id="signup">
-                    <h4>Change User Details</h3>
+                    <h4><?= _("Change User Details");?></h3>
                     <form action="profile" method="post">
 					<input type="hidden" name="update" value=1>
-                    <p><label for="username">Login Name: <?= $user->get_username() ?></label>
+                    <p><label for="username"><?= _("Login Name:");?> <?= $user->get_username() ?></label>
                     
                     </p>
                     
-                    <p><label for="email">Email</label>
+                    <p><label for="email"><?= _("Email");?></label>
                     <input type="text" name="create_email" value="<?= $create['email'] ?>" id="" <?php if (array_key_exists('create_email', $_errors)) echo 'class="error"' ?>/>
 					<?php if (array_key_exists('create_email', $_errors)) echo '<span class="error-message">' . $_errors['create_email'] . '</span>' ?>
                     </p>
                     
-                    <p><label for="username">Display Username*</label>
+                    <p><label for="username"><?= _("Display Username*");?></label>
                     <input type="text" name="create_display_username" value="<?= $create['display_username'] ?>" id="" <?php if (array_key_exists('create_display_username', $_errors)) echo 'class="error"' ?>/>
 					<?php if (array_key_exists('create_display_username', $_errors)) echo '<span class="error-message">' . $_errors['create_display_username'] . '</span>' ?>
                     </p>
                     
                      <p>
-                        <label for="description">Designer Description*</label>
+                        <label for="description"><?= _("Designer Description*");?></label>
                         <textarea name="create_description" id="create_description" <?php if (array_key_exists('create_description', $_errors)) echo 'class="error"' ?> ><?= $create['description'] ?></textarea>
                         <?php if (array_key_exists('create_description', $_errors)) echo '<span class="error-message">' . $_errors['create_description'] . '</span>' ?>
                      </p>
 
-                   <p class="news"><label for="news"><input type="checkbox" name="news" id="news" value="" <?= $create['news'] ? "checked" : "" ?>/> I’d like to receive news and information about Personas</label></p>
-                    <p>* <i>denotes an optional field. These entries will be displayed in the personas gallery.</i></p>
+                   <p class="news"><label for="news"><input type="checkbox" name="news" id="news" value="" <?= $create['news'] ? "checked" : "" ?>/><?= _("I'd like to receive news and information about Personas");?></label></p>
+                    <p><?= _("* <i>denotes an optional field. These entries will be displayed in the personas gallery.</i>");?></p>
                     <button type="submit" class="button"><span>change</span><span class="arrow"></span></button>
                     </form>
                 </div>
-			<p class="disclaimer">Mozilla values your privacy. We will not sell or rent your email address.</p>
+			<p class="disclaimer"><?= _("Mozilla values your privacy. We will not sell or rent your email address.");?></p>
--- a/server/templates/delete_persona_success_tmpl.php
+++ b/server/templates/delete_persona_success_tmpl.php
@@ -1,42 +1,42 @@
-<?php $title = "Delete your Persona"; include 'header.php'; ?>
+<?php $title = _("Delete your Persona"); include 'header.php'; ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'nav.php'; ?>
             <div id="header">
-                <h2>Delete Your Persona</h2>
-                <h3>Thanks for sharing your persona with us.</h3>
+                <h2><?= _("Delete Your Persona");?></h2>
+                <h3><?= _("Thanks for sharing your persona with us.");?></h3>
             </div>
             <div id="maincontent">
-                <p id="breadcrumbs"><a href="http://www.getpersonas.com">Personas Home</a> : Delete Your Persona</p>
-				Thank you for letting us host your persona. We'll look forward to seeing your future efforts!
+                <p id="breadcrumbs"><?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : " . _("Delete Your Persona"), $locale_conf->url('/'));?></p>
+				<?= _("Thank you for letting us host your persona. We'll look forward to seeing your future efforts!")?>
             </div>
             <div id="secondary-content">
               <ol id="upload-steps">
                 <li>
-                    <h3>Step 1:</h3>
+                    <h3><?= _("Step 1:")?></h3>
                     <h4><?= $title ?></h4>
                 </li>
                 <li class="current">
                     <div class="wrapper">
-                   		<h3>Step 2:</h3>
-                    	<h4>Finish</h4>
+                   		<h3><?= _("Step 2:")?></h3>
+                    	<h4><?= _("Finish")?></h4>
                     </div>
                 </li>
               </ol>
             </div>
         </div>
     </div>
 <?php include 'footer.php'; ?>
     <script type="text/javascript" charset="utf-8">
         $(document).ready(function () {
-            $("#header").ie6Warning({"message":'<div id="ie6">Upgrade your browser to get the most out of this website. <a href="%LINK%">Download Firefox for free</a>.</div>'});
+            $("#header").ie6Warning({"message":'<div id="ie6"><?= _("Upgrade your browser to get the most out of this website. <a href="%LINK%">Download Firefox for free</a>.");?></div>'});
             $("#try-button").personasButton({
-                                        'hasPersonas':'<span>wear this</span><span>&nbsp;</span>',
-                                        'hasFirefox':'<span>get personas now!</span><span>&nbsp;</span>',
-                                        'noFirefox':'<span>get personas with firefox</span><span>&nbsp;</span>'
+                                        'hasPersonas':'<span><?= _("wear this");?></span><span>&nbsp;</span>',
+                                        'hasFirefox':'<span><?= _("get personas now!");?></span><span>&nbsp;</span>',
+                                        'noFirefox':'<span><?= _("get personas with firefox");?></span><span>&nbsp;</span>'
                                         });
         });
     </script>
 </body>
 </html>
--- a/server/templates/delete_persona_tmpl.php
+++ b/server/templates/delete_persona_tmpl.php
@@ -1,60 +1,62 @@
 <?php 
 	error_log($persona['author']);
 	error_log($auth_user);
-	$delete_require = $persona['author'] != $auth_user ? "onsubmit=\"if ($('#formreason').val() == '') {alert('Please provide a reason for deletion'); return false;}\"" : "";
-	$title = "Delete your Persona"; include 'header.php'; 
+	$delete_require = $persona['author'] != $auth_user ? ("onsubmit=\"if ($('#formreason').val() == '') {alert('". _("Please provide a reason for deletion") . "'); return false;}\"" : "";
+	$title = _("Delete your Persona"); 
+    
+    include 'header.php'; 
 ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'nav.php'; ?>
             <div id="header">
-                <h2>Delete Your Persona</h2>
-                <h3>Thanks for sharing your persona with us.</h3>
+                <h2><?= _("Delete Your Persona");?></h2>
+                <h3><?= _("Thanks for sharing your persona with us.");?></h3>
             </div>
             <div id="maincontent">
-                <p id="breadcrumbs"><a href="http://www.getpersonas.com">Personas Home</a> : Delete Your Persona</p>
+                <p id="breadcrumbs"><?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : " . _("Delete Your Persona"), $locale_conf->url('/'));?></p>
                 
 <?php include 'persona_detail.php' ?>
 <?php if(!$override_error && $persona) { ?>
-                <form method="POST" action="/delete/<?= $persona['id'] ?>" enctype='multipart/form-data' <?= $delete_require ?>>
+                <form method="POST" action="<?= $locale_conf->url('/delete/=' . $persona['id']);?>" enctype='multipart/form-data' <?= $delete_require ?>>
 					<input type="hidden" name="id" value="<?= htmlspecialchars($persona['id']) ?>">
 					<input type="hidden" name="confirm" value="1">
 					<p class="continue">
 <?php 	if($persona['author'] != $auth_user) { ?>
-						Delete Reason: <input type="text" name="dreason" id=formreason> 
+						<?= _("Delete Reason:");?> <input type="text" name="dreason" id=formreason> 
 <?php 	} ?>
-						<button type="submit" class="button"><span>confirm deletion</span><span class="arrow">&nbsp;</span></button>
+						<button type="submit" class="button"><span><?= _("confirm deletion");?></span><span class="arrow">&nbsp;</span></button>
 					</p>
             	</form>
 <?php } ?>
             </div>
             <div id="secondary-content">
               <ol id="upload-steps">
                 <li class="current">
                     <div class="wrapper">
-                        <h3>Step 1:</h3>
+                        <h3><?= _("Step 1:");?></h3>
                         <h4><?= $title ?></h4>
                     </div>
                 </li>
                 <li>
-                    <h3>Step 2:</h3>
-                    <h4>Finish</h4>
+                    <h3><?= _("Step 2:");?></h3>
+                    <h4><?= _("Finish");?></h4>
                 </li>
               </ol>
             </div>
         </div>
     </div>
 <?php include 'footer.php'; ?>
     <script type="text/javascript" charset="utf-8">
         $(document).ready(function () {
-            $("#header").ie6Warning({"message":'<div id="ie6">Upgrade your browser to get the most out of this website. <a href="%LINK%">Download Firefox for free</a>.</div>'});
+            $("#header").ie6Warning({"message":'<div id="ie6"><?= _('Upgrade your browser to get the most out of this website. <a href="%LINK%">Download Firefox for free</a>.');?></div>'});
             $("#try-button").personasButton({
-                                        'hasPersonas':'<span>wear this</span><span>&nbsp;</span>',
-                                        'hasFirefox':'<span>get personas now!</span><span>&nbsp;</span>',
-                                        'noFirefox':'<span>get personas with firefox</span><span>&nbsp;</span>'
+                                        'hasPersonas':'<span><?= _("wear this");?></span><span>&nbsp;</span>',
+                                        'hasFirefox':'<span><?= _("get personas now!");?></span><span>&nbsp;</span>',
+                                        'noFirefox':'<span><?= _("get personas with firefox");?></span><span>&nbsp;</span>'
                                         });
         });
     </script>
 </body>
 </html>
--- a/server/templates/featured_designer.php
+++ b/server/templates/featured_designer.php
@@ -22,37 +22,37 @@
 			$persona['designer_description'] = substr($persona['designer_description'], 0, $featured_description_max);
 			$persona['designer_description'] = preg_replace('/ [^ ]+$/', '', $persona['designer_description']) . '...';
 		}
 				
 		$personas[] = $persona; 
 	}
 ?>
 			<div class="feature slideshow">
-                <h3>Featured Designers</h3>
+                <h3><?= _("Featured Designers");?></h3>
                 <ul class="slideshow-nav">
 <?php
 				for ($i = 1; $i <= count($personas); $i++)
 				{
 					echo '<li><a href="#"' . ($i == 1 ? 'class="active"' : '') . ">$i</a></li>";
 				}
 ?>
 				</ul>
-                <a href="#" class="slideshow-previous"><img src="/static/img/nav-prev.png" alt="Previous"/></a>
-                <a href="#" class="slideshow-next"><img src="/static/img/nav-next.png" alt="Next"/></a>
+                <a href="#" class="slideshow-previous"><img src="/static/img/nav-prev.png" alt="<?= _("Previous");?>"/></a>
+                <a href="#" class="slideshow-next"><img src="/static/img/nav-next.png" alt="<?= _("Next");?>"/></a>
                 <div class="">
                     <ul class="slides">
 <?php
 					foreach ($personas as $persona)
 					{
 ?>
                         <li>
                             <a href="/gallery/Designer/<?= $persona['author'] ?>"><img class="preview persona" src="<?= PERSONAS_LIVE_PREFIX . '/' . url_prefix($persona['id']) ?>/preview_featured.jpg" persona="<?= $persona['json'] ?>"></a>
                             <h4><a href="/gallery/Designer/<?= $persona['author'] ?>"><?= $persona['display_username'] ?></a></h4>
-                            <p class="try"><a href="/gallery/Designer/<?= $persona['author'] ?>">view designer »</a></p>
+                            <p class="try"><a href="/gallery/Designer/<?= $persona['author'] ?>"><?= _("view designer »");?></a></p>
                             <hr />
                             <p><?= $persona['designer_description'] ?></p>
                         </li>
 <?php
 					}
 ?>
                     </ul>
                 </div>
--- a/server/templates/featured_personas.php
+++ b/server/templates/featured_personas.php
@@ -19,40 +19,40 @@
 			$persona['short_description'] = substr($persona['short_description'], 0, $featured_description_max);
 			$persona['short_description'] = preg_replace('/ [^ ]+$/', '', $persona['short_description']) . '...';
 		}
 
 		$personas[] = $persona; 
 	}	
 ?>
 			<div class="feature slideshow">
-                <h3>Featured Personas</h3>
+                <h3><?= _("Featured Personas");?></h3>
                 <ul class="slideshow-nav">
 <?php
 				for ($i = 1; $i <= count($personas); $i++)
 				{
 					echo '<li><a href="#"' . ($i == 1 ? 'class="active"' : '') . ">$i</a></li>";
 				}
 ?>
 				</ul>
-                <a href="#" class="slideshow-previous"><img src="/static/img/nav-prev.png" alt="Previous"/></a>
-                <a href="#" class="slideshow-next"><img src="/static/img/nav-next.png" alt="Next"/></a>
+                <a href="#" class="slideshow-previous"><img src="/static/img/nav-prev.png" alt="<?= _("Previous");?>"/></a>
+                <a href="#" class="slideshow-next"><img src="/static/img/nav-next.png" alt="<?= _("Next");?>"/></a>
                 <div class="">
                     <ul class="slides">
 <?php
 				foreach ($personas as $persona)
 				{
 ?>
                         <li>
                             <a href="/persona/<?= $persona['id'] ?>"><img class="preview persona" src="<?= $persona['preview_image'] ?>/preview_featured.jpg" persona="<?= $persona['json'] ?>"></a>
                             <h4><a href="/persona/<?= $persona['id'] ?>"><?= $persona['name'] ?></a></h4>
-                            <p class="try"><a href="/persona/<?= $persona['id'] ?>">view details »</a></p>
+                            <p class="try"><a href="/persona/<?= $persona['id'] ?>"><?= _("view details »");?></a></p>
                             <hr />
-                            <p class="designer">By: <a href="/gallery/Designer/<?= $persona['author'] ?>"><?= $persona['display_username'] ?></a></p>
-                            <p class="daily-users"><?= number_format($persona['popularity']) ?> active daily users</p>
+                            <p class="designer"><?printf("By: <a href=\"/gallery/Designer/%s\">%s</a>", $persona['author'], $persona['display_username']);?></p>
+                            <p class="daily-users"><?printf(_("%d active daily users"), number_format($persona['popularity']));?></p>
                             <p><?= $persona['short_description'] ?></p>
                             <hr />
                             <p><?php //description goes here ?></p>
                         </li>
 <?php
 				}
 ?>
                     </ul>
--- a/server/templates/footer.php
+++ b/server/templates/footer.php
@@ -1,9 +1,19 @@
     <div id="footer">
-        <p>Copyright © <?= date("Y") ?> Mozilla. <a href="http://labs.mozilla.com/projects/firefox-personas/">Personas</a> is a <a href="http://labs.mozilla.com">Mozilla Labs</a> experiment. | <a href="http://labs.mozilla.com/about-labs/">About Mozilla Labs</a>    |  <a href="/privacy">Privacy</a></p>
+        <form class="languages go" method="get" action="">
+        <div>
+            <label for="language"><?= _("Other languages:");?></label>
+            <select id="language" name="lang" dir="ltr">
+                <option value="en-US" selected="selected">English (US)</option>
+            </select>
+            <button>Go</button>
+        </div>
+        </form>
+
+        <p><?printf(_("Copyright &copy; %s Mozilla.") . _(" <a href=\"http://labs.mozilla.com/projects/firefox-personas/\">Personas</a> is a <a href=\"http://labs.mozilla.com\">Mozilla Labs</a> experiment. | <a href=\"http://labs.mozilla.com/about-labs/\">") . _("About Mozilla Labs") . "</a>    |  <a href=\"%s\">" . _("Privacy") . "</a>", date("Y"), $locale_conf->url('/privacy'));?></p>
     </div>
 
     
 	<script src="/static/js/urchin.js"></script>
     <script type="text/javascript">
           urchinTracker();
-    </script>
\ No newline at end of file
+    </script>
--- a/server/templates/forgot_password_done_tmpl.php
+++ b/server/templates/forgot_password_done_tmpl.php
@@ -1,17 +1,17 @@
-<?php $title = "Forgot Your Password"; include 'header.php'; ?>
+<?php $title = _("Forgot Your Password"); include 'header.php'; ?>
 <body class="forgot-password">
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'nav.php'; ?>
             <div id="header">
-                <h2>Forgot Your Password?</h2>
+                <h2><?= _("Forgot Your Password?");?></h2>
             </div>
             <div id="maincontent">
-                <p id="breadcrumbs"><a href="http://www.getpersonas.com">Personas Home</a> : <a href="/signin">Sign In</a> : Forgot Your Password?</p>
-                <p>Your password has been reset. You may <a href="/signin">sign in</a> now.</p>
+                <p id="breadcrumbs"><?printf(_("<a href=\"%s\">Personas Home</a> : <a href=\"%s\">Sign In</a> : Forgot Your Password?"), $locale_conf->url('/'), $locale_conf->url('/signin'));?></p>
+                <p><?printf(_("Your password has been reset. You may <a href=\"%s\">sign in</a> now."), $locale_conf->url('/signin'));?></p>
             </div>
         </div>
     </div>
 <?php include 'footer.php'; ?>
 </body>
 </html>
--- a/server/templates/forgot_password_reset_tmpl.php
+++ b/server/templates/forgot_password_reset_tmpl.php
@@ -1,39 +1,39 @@
-<?php $title = "Forgot Your Password"; include 'header.php'; ?>
+<?php $title = _("Forgot Your Password"); include 'header.php'; ?>
 <body class="forgot-password">
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'nav.php'; ?>
             <div id="header">
-                <h2>Forgot Your Password?</h2>
+                <h2><?= _("Forgot Your Password?")?></h2>
             </div>
             <div id="maincontent">
-                <p id="breadcrumbs"><a href="http://www.getpersonas.com">Personas Home</a> : <a href="/signin">Sign In</a> : Forgot Your Password?</p>
+                <p id="breadcrumbs"><?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : <a href=\"%s\">" . _("Sign In") . "</a> : " . _("Forgot Your Password?"), $locale_conf->url('/'), $locale_conf->url('/signin'));?></p>
                 
 <?php 
 	if ($error)
 		echo "<h4 class=\"error\">$error</h4>";
 ?>
-                <h4>Enter your new password:</h4>
+                <h4><?= _("Enter your new password:")?></h4>
                 
-                <form action="forgot_password" method="post">
+                <form action="<?= $locale_conf->url('/forgot_password');?>" method="post">
                 <input type=hidden name="user" value="<?= $username ?>">
                 <input type=hidden name="code" value="<?= $code ?>">
                  <p>
-                        <label for="password">New password</label>
+                        <label for="password"><?= _("New password")?></label>
                         <input type="password" name="password" value="" id="password" />
                     </p>
                     
                     <p>
-                        <label for="password-verify">Re-type your new password</label>
+                        <label for="password-verify"><?= _("Re-type your new password")?></label>
                         <input type="password" name="password-verify" value="" id="" />
                     </p>
                     
-                    <button type="submit" class="button"><span>reset password</span><span class="arrow">&nbsp;</span></button>
+                    <button type="submit" class="button"><span><?= _("reset password")?></span><span class="arrow">&nbsp;</span></button>
                     
                 </form>
             </div>
         </div>
     </div>
 <?php include 'footer.php'; ?>
 </body>
 </html>
--- a/server/templates/forgot_password_thanks_tmpl.php
+++ b/server/templates/forgot_password_thanks_tmpl.php
@@ -1,19 +1,19 @@
-<?php $title = "Forgot Your Password"; include 'header.php'; ?>
+<?php $title = _("Forgot Your Password"); include 'header.php'; ?>
 <body class="forgot-password">
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'nav.php'; ?>
             <div id="header">
-                <h2>Forgot Your Password?</h2>
-                <h3>Follow the easy steps below to start dressing up your browser!</h3>
+                <h2><?= _("Forgot Your Password?")?></h2>
+                <h3><?= _("Follow the easy steps below to start dressing up your browser!")?></h3>
             </div>
             <div id="maincontent">
-                <p id="breadcrumbs"><a href="http://www.getpersonas.com">Personas Home</a> : <a href="/signin">Sign In</a> : Forgot Your Password?</p>
+                <p id="breadcrumbs"><?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : <a href=\"%s\">" . _("Sign In") . "</a> : " . _("Forgot Your Password?"), $locale_conf->url('/'), $locale_conf->url('/signin'));?></p>
                 
-                <p>Your password reset information has been e-mailed to you.</p>
+                <p><?= _("Your password reset information has been e-mailed to you.")?></p>
             </div>
         </div>
     </div>
 <?php include 'footer.php'; ?>
 </body>
 </html>
--- a/server/templates/forgot_password_tmpl.php
+++ b/server/templates/forgot_password_tmpl.php
@@ -1,30 +1,30 @@
-<?php $title = "Forgot Your Password"; include 'header.php'; ?>
+<?php $title = _("Forgot Your Password"); include 'header.php'; ?>
 <body class="forgot-password">
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'nav.php'; ?>
             <div id="header">
-                <h2>Forgot Your Password?</h2>
+                <h2><?= _("Forgot Your Password?")?></h2>
             </div>
             <div id="maincontent">
-                <p id="breadcrumbs"><a href="http://www.getpersonas.com">Personas Home</a> : <a href="/signin">Sign In</a> : Forgot Your Password?</p>
+                <p id="breadcrumbs"><?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : <a href=\"%s\">" . _("Sign In") . "</a> : " . _("Forgot Your Password?"), $locale_conf->url('/'), $locale_conf->url('/signin'));?></p>
 <?php 
 	if ($error)
-		echo "<h4 class=\"error\">$error</h4>";
+		echo "<h4 class=\"error\">" . $error . "</h4>";
 ?>
-                <h4>Please enter your Personas username below</h4>
+                <h4><?= _("Please enter your Personas username below");?></h4>
                 <form action="forgot_password" method="post">
                     <p>
-                        <label for="username">Username:</label>
+                        <label for="username"><?= _("Username:")?></label>
                         <input type="text" name="userreq" value="" id="username"/>
                     </p>
                     
-                    <button type="submit" class="button"><span>continue</span><span class="arrow">&nbsp;</span></button>
+                    <button type="submit" class="button"><span><?= _("continue")?></span><span class="arrow">&nbsp;</span></button>
                 </form>
             </div>
             
         </div>
     </div>
     
    
 <?php include 'footer.php'; ?>
--- a/server/templates/gallery.php
+++ b/server/templates/gallery.php
@@ -9,42 +9,42 @@
 	if ($category == 'Designer' && file_exists("designer/$tab.php"))
 	{
 		include "designer/$tab.php";
 	}
 	else
 	{
 		if (!($category == 'Designer' && $header_text = $user->get_description($tab)))
 		{
-			$header_text = 'Your browser, your style! Dress it up with easy-to-change "skins" for your Firefox.';
+			$header_text = _("Your browser, your style! Dress it up with easy-to-change \"skins\" for your Firefox.");
 		}
 ?>
 			<div id="header">
                 <h2><?= $page_header ?></h2>
                 <h3><?= $header_text ?></h3>
             </div>
 <?php } ?>
 			<div id="maincontent">
-                <p id="breadcrumbs"><a href="http://www.getpersonas.com">Personas Home</a> : <a href="http://www.getpersonas.com/gallery/All/Popular">Gallery</a> : <?= $category ?><?php if ($category == 'Designer') { echo " : $display_username"; } else if ($tab != "All") { echo " : $tab"; } ?></p>
+                <p id="breadcrumbs"><?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : <a href=\"%s\">" . _("Gallery") . "</a> : %s<? if ($category == 'Designer') { echo " : $display_username"; } else if ($tab != \"All\") { echo \" : $tab\"; } ?>", $locale_conf->url('/'), $locale_conf->url('/gallery/All/Popular'), $category);?></p>
                 <div id="gallery">
 <?php
 			
 			if ($tab == 'Search')
 			{
 ?>  
 			
 <?php
 				if (count($list) == 0 && array_key_exists('p', $_GET))
 				{
-					echo "<p>We were unable to locate any personas that match those search terms. Please try again</p>";
+					echo _("<p>We were unable to locate any personas that match those search terms. Please try again</p>");
 				}
 			}
 			elseif (count($list) == 0)
 			{
-				echo "<p>There are no personas available here. Please use the navigation on the left to choose another category.</p>";
+				echo _("<p>There are no personas available here. Please use the navigation on the left to choose another category.</p>");
 			}
 			
 			
 			
 			include 'pagination.php';
 ?>
 					<ul>
 <?php
@@ -52,37 +52,37 @@
 			{
 ?>
                         <li class="gallery-item">
                             <div>
                                 <h3><?= $persona['name'] ?></h3>
                                 <div class="preview">
                                     <a href="/persona/<?= ($persona['id'] < 10 ? "0" : "") . $persona['id'] ?>"><img src="<?= $persona['preview_url'] ?>" alt="<?= $persona['name'] ?>" persona="<?= $persona['json'] ?>"/></a>
                                 </div>
-                                <p class="designer"><strong>Designer:</strong> <a href="/gallery/Designer/<?= $persona['author'] ?>"><?= $persona['display_username'] ?></a></p>
-                                <p class="added"><strong>Added:</strong> <?= $persona['date'] ?></p>
+                                <p class="designer"><?printf(_("<strong>Designer:</strong> <a href=\"%s\">%s</a>"), $locale_conf->url("/gallery/Designer/" . $persona['author']), $persona['display_username']);?></p>
+                                <p class="added"><? printf(_("<strong>Added:</strong> %s") . $persona['date']);?></p>
                                 <?php if($showDescription) { ?>
                                     <p><?= $persona['short_description'] ?></p>
                                 <?php } ?>
-                                <p><?= number_format($persona['popularity']) ?> active daily users</p>
-                                <p><a href="<?= "/persona/" . ($persona['id'] < 10 ? "0" : "") . $persona['id'] ?>" class="view">view details »</a></p>
+                                <p><?printf(_("%d active daily users"), number_format($persona['popularity']));?></p>
+                                <p><?printf("<a href=\"%s\" class=\"view\">" . _("view details »"), $locale_conf->url('/persona/' . ($persona['id'] < 10 ? "0" : "") . $persona['id']));?></a></p>
                                 
                                 <?php if($showWearThis) { ?>
                                     <p id="buttons">
-                                        <a href="#" class="button try-button" persona="<?= $persona['json'] ?>"><span>try it now</span><span>&nbsp;</span></a>
+                                        <a href="#" class="button try-button" persona="<?= $persona['json'] ?>"><span><?= _("try it now");?></span><span>&nbsp;</span></a>
                                     </p>
                                 <?php } ?>
                                 
 <?php
 				if ($user->has_admin_privs() || ($tab == 'My' && $persona['locale'] == PERSONAS_LOCALE))
 				{
 ?>
-								<p><a href="/upload?id=<?= $persona['id'] ?>" target="_blank">Edit</a>
+								<p><?printf("<a href=\"%s\" target=\"_blank\">" . _("Edit") . "</a>", $locale_conf->url('/upload?id=' . $persona['id']));?>
 								| 
-								<a href="/delete/<?= $persona['id'] ?>" target="_blank">Delete</a></p>
+								<?printf("<a href=\"%s\" target=\"_blank\">" . _("Delete") . "</a>", $locale_conf->url('/delete/' . $persona['id']));?></p>
 <?php
 				}
 ?>
                             </div>
                         </li>
  <?php
  			}
  ?>
@@ -97,16 +97,16 @@
 <?php include 'footer.php'; ?>
     <script type="text/javascript" charset="utf-8">
         $(document).ready(function() {
            $("#gallery .preview img").previewPersona();
         });
         
         <?php if($showWearThis) { ?>
             $(".try-button").personasButton({
-                'hasPersonas':'<span>wear this</span><span>&nbsp;</span>',
-                'hasFirefox':'<span>get personas now!</span><span>&nbsp;</span>',
-                'noFirefox':'<span>get personas with firefox</span><span>&nbsp;</span>'
+                'hasPersonas':'<span><?= _("wear this");?></span><span>&nbsp;</span>',
+                'hasFirefox':'<span><?= _("get personas now!");?></span><span>&nbsp;</span>',
+                'noFirefox':'<span><?= _("get personas with firefox");?></span><span>&nbsp;</span>'
             });
         <?php } ?>
     </script>
 </body>
 </html>
--- a/server/templates/gallery_rss.php
+++ b/server/templates/gallery_rss.php
@@ -1,23 +1,23 @@
 <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
 <channel>
-	<title>Personas - <?= $category ?> - <?= $tab ?></title>
+	<title><?printf(_("Personas - %s - %s"), $category, $tab);?></title>
 <link><?= $path ?></link>
-<description>Personas - <?= $category ?> - <?= $tab ?></description>
+<description><?printf(_("Personas - %s - %s", $category, $tab);?></description>
 <?php
 	foreach ($list as &$persona)
 	{
 ?>
 	<item>
 		<title><?= $persona['name'] ?></title>
-		<link>http://getpersonas.com/persona/<?= $persona['id'] ?></link>
+		<link><?= $locale_conf->url('/persona/' . $persona['id']);?></link>
 		<description><?= $persona['description'] ?></description>
 		<media:content url="<?= $persona['header_url'] ?>" type="<?= $persona['media_type'] ?>">
 			<media:title><?= $persona['name'] ?></media:title>
 			<media:thumbnail url="<?= $persona['preview_url'] ?>" height="100" width="200"/>
 		</media:content>
 	</item>
 <?php
 	}
 ?>
 </channel>
-</rss>
\ No newline at end of file
+</rss>
--- a/server/templates/get_personas.php
+++ b/server/templates/get_personas.php
@@ -1,47 +1,47 @@
             <div id="secondary-content">
               <ol id="demo-nav">
 <?php if (preg_match('/demo_create/', $_SERVER['SCRIPT_URL'])) { ?>
               <li class="current">
                   <div class="wrapper">
-                      <span>How to Create Personas</span>
+                      <span><?= _("How to Create Personas");?></span>
                   </div>
               </li>
 <?php } else { ?>
               <li> 
-					<a href="/demo_create">How to Create Personas</a>
+					<?printf("<a href=\"%s\">" .  _("How to Create Personas") . "</a>", $locale_conf->url('/demo_create'));?>
 				</li>
 <?php } ?>
 <?php if (preg_match('/demo_install/', $_SERVER['SCRIPT_URL'])) { ?>
                 <li class="current">
                     <div class="wrapper">
-                        <span>How to Get Started</span>
+                        <span><?= _("How to Get Started");?></span>
                     </div>
                 </li>
 <?php } else { ?>
                 <li> 
-					<a href="/demo_install">How to Get Started</a>
+					<?printf("<a href=\"/demo_install\">" . _("How to Get Started") . "</a>", $locale_conf->url('/demo_install'));?>
 				</li>
 <?php } ?>
 
 <?php if (preg_match('/faq/', $_SERVER['SCRIPT_URL'])) { ?>
                 <li class="current">
                     <div class="wrapper">
-                        <span>Frequent Questions</span>
+                        <span><?= _("Frequent Questions");?></span>
                     </div>
                 </li>
 <?php } else { ?>
                 <li> 
-					<a href="/faq">Frequent Questions</a>
+					<?printf("<a href=\"%s\">" . _("Frequent Questions") . "</a>", $locale_conf->url('faq'));?>
 				</li>
 <?php } ?>
               </ol>
               <div class="info-box">
-                <h3><a href="<?php echo PERSONAS_ADDON_URL ?>" id="getpersonas">Get Personas Free</a></h3>
+                <h3><a href="<?php echo PERSONAS_ADDON_URL ?>" id="getpersonas"><?= _("Get Personas Free");?></a></h3>
                 <div class="body">
-                    <p>Easy to install and easy to change "skins" for your Firefox web browser.</p>
+                    <p><?= _("Easy to install and easy to change \"skins\" for your Firefox web browser.");?></p>
                 </div>
               </div>
             </div>
             <script type="text/javascript" charset="utf-8">
-                $("#getpersonas").personasDownload({"bundle":"bundle-url", "bundle-text":'Get Firefox and Personas'});
-            </script>
\ No newline at end of file
+                $("#getpersonas").personasDownload({"bundle":"bundle-url", "bundle-text":<?= _("Get Firefox and Personas");?>});
+            </script>
--- a/server/templates/header.php
+++ b/server/templates/header.php
@@ -1,16 +1,19 @@
 <?php 
-	header('Cache-Control: no-store, must-revalidate, post-check=0, pre-check=0, private, max-age=0');
+
+    header('Cache-Control: no-store, must-revalidate, post-check=0, pre-check=0, private, max-age=0');
 	header('Pragma: private');
+    
 ?>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
             "http://www.w3.org/TR/html4/strict.dtd">
+<?//TODO lang="en"? ?>
 <html lang="en">
 <head>
 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-	<title>Personas for Firefox<?= $title ? ("  | $title") : "" ?></title>
+	<title><?printf(_("Personas for Firefox | %s"), ($title ? $title : ""));?></title>
 	<link href="/static/css/style.css" rel="stylesheet" type="text/css" media="all" />
     <script src="/static/js/jquery.js"></script>
     <script src="/static/js/script.js"></script>
     <link rel="shortcut icon" href="/static/img/favicon.ico" type="image/x-icon" />
     
 </head>
--- a/server/templates/login_form.php
+++ b/server/templates/login_form.php
@@ -1,23 +1,23 @@
                 <div id="login">
-                    <h4>Already a Personas Designer?</h4>
+                    <h4><?= _("Already a Personas Designer?");?></h4>
                     <form action="signin" method="post">
 <?php
 					if ($return_url)
 						echo "<input type=hidden name=return value=\"$return_url\">";
 ?>
-						<p><label for="login_user">Username</label>
+						<p><label for="login_user"><?= _("Username");?></label>
                         <input type="text" name="login_user" value="" id="" <?php if (array_key_exists('login_user', $_errors)) echo 'class="error"' ?> />
                         <?php if (array_key_exists('login_user', $_errors)) echo '<span class="error-message">' . $_errors['login_user'] . '</span>' ?>
                         </p>
                         
-                        <p><label for="login_pass">Password</label>
+                        <p><label for="login_pass"><?= _("Password");?></label>
                         <input type="password" name="login_pass" value="" id="" <?php if (array_key_exists('login_user', $_errors)) echo 'class="error"' ?> />
-                        <span class="extra-info">Minimum 6 characters</span>
+                        <span class="extra-info"><?= _("Minimum 6 characters");?></span>
                         </p>
                         
-                        <p><label for="login_remember"><input type="checkbox" name="login_remember" id="remember" value="1" /> Remember me on this computer</label></p>
-                        <button type="submit" class="button"><span>sign in</span><span class="arrow"></span></button>
+                        <p><label for="login_remember"><input type="checkbox" name="login_remember" id="remember" value="1" /><?= _("Remember me on this computer");?></label></p>
+                        <button type="submit" class="button"><span><?= _("sign in");?></span><span class="arrow"></span></button>
                         
-                        <p class="forgot"><a href="/forgot_password">Forgot your password?</a></p>
+                        <p class="forgot"><?printf("<a href=\"/forgot_password\">" . _("Forgot your password?") . "</a>", $locale_conf->url('/forgot_password'));?></p>
                     </form>
                 </div>
--- a/server/templates/movers.php
+++ b/server/templates/movers.php
@@ -1,10 +1,10 @@
             <div class="feature last">
-                <h3>Movers and Shakers</h3>
+                <h3><?= _("Movers and Shakers");?></h3>
                 <ol class="popular">
 <?php
 	$list = $db->get_movers(null);
 	$count = 1;
 	
 	$featured_designer_list = $db->get_featured_designers();
 	$featured_persona_list = $db->get_featured_personas();
 	
@@ -14,19 +14,19 @@
 			|| in_array($persona['id'], $featured_persona_list))
 			continue;
 		
 		$persona_json = htmlentities(json_encode(extract_record_data($persona)));
 ?>
 					<li>
                             <h4><?= $persona['name'] ?></h4>
                             <hr />
-                             <a href="/persona/<?= $persona['id'] ?>"><img class="persona" alt="<?= $persona['name'] ?>" persona="<?= $persona_json ?>" src="<?= PERSONAS_LIVE_PREFIX . '/' . url_prefix($persona['id']) ?>/preview_popular.jpg"></a>
-                            <p class="author">By: <a href="/gallery/Designer/<?= $persona['author'] ?>"><?= $persona['display_username'] ?></a></p>
-                            <p class="downloads"><?= number_format($persona['popularity']) ?> active daily users</p>
+                             <?printf("<a href=\"%s\">", $locale_conf->url('/persona/' . $persona['id']));?><img class="persona" alt="<?= $persona['name'] ?>" persona="<?= $persona_json ?>" src="<?= PERSONAS_LIVE_PREFIX . '/' . url_prefix($persona['id']) ?>/preview_popular.jpg"></a>
+                            <p class="author"><?printf("By: <a href=\"%s\">%s</a>", $locale_conf->url('/gallery/Designer/' . $persona['author']), $persona['display_username']);?></p>
+                            <p class="downloads"><?printf(_("%d active daily users"), number_format($persona['popularity']));?></p>
                     </li>
 <?php
 		if (++$count > 3)
 			break;
 	}
 ?>
                 </ol>
             </div>
--- a/server/templates/nav.php
+++ b/server/templates/nav.php
@@ -1,47 +1,47 @@
             <p id="account">
 <?php 
 	if(!array_key_exists('no_my', $_GET) && $user->get_unauthed_username())
 	{
-		echo 'Welcome, ' . $user->get_unauthed_username() .' | <a href="/profile">Edit Account</a> | <a href="/signin?action=signout&return=' . $_SERVER['SCRIPT_URL'] . '">Sign Out</a>';
+		printf(_("Welcome, %s") . " | <a href=\"%s\"> " . _("Edit Account") . " </a> | <a href=\"%s\">  " . _("Sign Out") . " </a>", $user->get_unauthed_username(), $locale_conf->url('/profile'), $locale_conf->url('/signin?action=signout&return=' . $_SERVER['SCRIPT_URL']));
 	}
 	elseif(!array_key_exists('no_my', $_GET))
 	{
 		if (array_key_exists('signout_success', $_GET))
-			echo "You have been signed out | ";
-		echo '<a href="/signin?return=' . $_SERVER['SCRIPT_URL'] . '">Sign In</a>';
+			echo _("You have been signed out | ");
+		printf("<a href=\"%s\">" .  _("Sign In") . "</a>", $locale_conf->url('/signin?return=' . $_SERVER['SCRIPT_URL']));
 	}
 ?>
 			</p>
             <div id="nav">
-                <h1><a href="/"><img src="/static/img/logo.png" alt="Mozilla Labs Personas"></a></h1>
+                <h1><?printf("<a href=\"%s\"><img src=\"/static/img/logo.png\" alt=\"" . _("Mozilla Labs Personas") . "\" /></a>", $locale_conf->url('/'));?></h1>
                 
                 <?php if(isset($showCheckItOut) && $showCheckItOut) { ?>
                     <div id="check-it-out">
                         <div class="hd">
                             &nbsp;
                         </div>
                         <p class="bd">
-                            Check it out! Your browser's all dressed up.                        
+                            <?echo _("Check it out! Your browser's all dressed up.")?>
                         </p>
 
                         <div class="ft">
                             &nbsp;
                         </div>
                     </div>
                 <?php } ?>
                 <?php if(!(isset($hidenav) && $hideNav)) { ?>
                     <ul>
-                        <li class="gallery"><a href="/gallery/All/Popular">Gallery</a></li>
-                        <li class="create"><a href="/upload">Create <br/>Your Own</a></li>
-                        <li class="demo"><a href="/demo_create">How To</a></li>
-                        <li class="faq"><a href="/faq">Frequent <br/>Questions</a></li>
+                        <li class="gallery"><?printf("<a href=\"%s\">" . _("Gallery") . "</a>", $locale_conf->url('/gallery/All/Popular'));?></li>
+                        <li class="create"><?printf("<a href=\"%s\">" . _("Create <br/>Your Own") . "</a>", $locale_conf->url('/upload'));?></li>
+                        <li class="demo"><?printf("<a href=\"%s\">" . _("How To") . "</a>", $locale_conf->url('/demo_create'));?></li>
+                        <li class="faq"><?printf("<a href=\"%s\">" . _("Frequent <br/>Questions") . "</a>", $locale_conf->url('/faq'));?></li>
                         <li class="search">
-                            <form action="/gallery/All/search" method="GET">
-                                <p>Search personas:</p>
+                            <form action=<?printf("%s", $locale_conf->url('/gallery/All/search'));?> method="GET">
+                                <p><?echo _("Search personas:");?></p>
                                 <input id="q" name="p" type="text" />
                                 <input type="image" name="search" value="" id="submit" src="/static/img/search-button.png" />
                             </form>
                         </li>
                     </ul>
                 <?php } ?>
             </div>
--- a/server/templates/pagination.php
+++ b/server/templates/pagination.php
@@ -10,22 +10,22 @@
 					
 					$floor = $page - 4;
 					if ($floor < 1)
 						$floor = 1;
 					$ceiling = $page + 4;
 					if ($ceiling > $pages)
 						$ceiling = $pages;
 						
-					echo '<div id="pagination"><p>Page:</p>';
+					echo '<div id="pagination"><p>' . _("Page:") . '</p>';
 					echo "<ul>\n";
 					if ($page > 1)
 					{
 						$url = "$url_prefix/$category/$tab/" . ($page - 1);
-						echo "<li><a href=\"$url\">Previous</a></li>\n";
+						echo "<li><a href=\"$url\">" . _("Previous") . "</a></li>\n";
 					}
 					$i = $floor;
 					if ($floor > 1)
 					{
 						echo "<li><a href=\"$url_prefix/$category/$tab/1\">1</a></li>\n";
 					}
 					if ($floor > 2)
 					{
@@ -49,16 +49,16 @@
 					}
 					if ($ceiling < $pages)
 					{
 						echo "<li><a href=\"$url_prefix/$category/$tab/$pages\">$pages</a></li>\n";
 					}
 					if ($page < $pages)
 					{
 						$url = "$url_prefix/$category/$tab/" . ($page + 1);
-						echo "<li><a href=\"$url\">Next</a></li>\n";
+						echo "<li><a href=\"$url\">" . _("Next") . "</a></li>\n";
 					}
 					echo "</ul>\n";
 					echo "</div>\n";
 				}
 			}
 ?>
-<p>
\ No newline at end of file
+<p>
--- a/server/templates/persona_detail.php
+++ b/server/templates/persona_detail.php
@@ -4,46 +4,46 @@
 ?>            
                 <p class="description"><?= $override_error ?></p>
 <?php
 	}
 	else if ($persona['id'])
 	{
 ?>
 				<h2><?= $persona['name'] ?></h2>
-                <h3>created by <a href="/gallery/Designer/<?= $persona['author'] ?>"><?= $persona['display_username'] ?></a></h3>
+                <h3><?printf("created by <a href=\"%s\">%s</a>", $locale_conf->url('/gallery/Designer/' . $persona['author']), $persona['display_username']);?></h3>
                 <?php
                   if ($user->get_unauthed_username())
             		{
-                        $text = ($favorite_persona) ? 'Remove from favorites' : 'Add to favorites';
+                        $text = ($favorite_persona) ? _("Remove from favorites") : _("Add to favorites");
             		    $action = ($favorite_persona) ? 0 : 1;
-            		    $class = ($favorite_persona) ? 'favorited':"";
-            		    echo '<p class="favorite"><a href="/favorite/'.$persona_id.'/' . $nonce . '?action='.$action.'" class="'.$class.'">'.$text.'</a></p>';
+            		    $class = ($favorite_persona) ? _("favorited"):"";
+            		    echo '<p class="favorite">' . sprintf("<a href=\"%s\" class=\"%s\">%s</a>", $locale_conf->url('/favorite' . $persona_id . '/' . $nonce . '?action=' . $action), $class, $text) . '</p>';
             		}
                 ?>
                 <img class="detailed-view"  alt="<?= $persona['name'] ?>" persona="<?= $persona['json'] ?>" src="<?= PERSONAS_LIVE_PREFIX . '/' . url_prefix($persona['id']) ?>/preview_large.jpg" >
                 
 <?php           
 		if ($persona['description'])
 		{
 			$desc = preg_replace('/(https?:\/\/[^ ]+[A-Za-z0-9\/])/', '<a href="$1">$1</a>', $persona['description']);
 ?>
-				<p class="description"><strong>Description:</strong> <?= $desc ?></p>
+				<p class="description"><?= _("<strong>Description:</strong>");?> <?= $desc ?></p>
 <?php
 		}
 ?>
                 <p id="buttons">
-                    <a href="#" class="button" id="try-button" persona="<?= $persona['json'] ?>"><span>try it now</span><span>&nbsp;</span></a>
+                    <a href="#" class="button" id="try-button" persona="<?= $persona['json'] ?>"><span><?= _("try it now");?></span><span>&nbsp;</span></a>
                 </p>
                 
 <?php
 		if ($persona['popularity'])
-			print '<p class="numb-users">' . number_format($persona['popularity']) . ' active daily users</p>';
+			print '<p class="numb-users">' . sprintf(_("%d active daily users"), number_format($persona['popularity'])) . '</p>';
 
 ?>
 	<p><script type="text/javascript" src="http://w.sharethis.com/button/sharethis.js#publisher=df86b16e-195c-4917-ae28-61a1382ba281&amp;type=website&amp;send_services=&amp;post_services=facebook%2Cdigg%2Cdelicious%2Cybuzz%2Ctwitter%2Cstumbleupon%2Creddit%2Ctechnorati%2Cmixx%2Cblogger%2Ctypepad%2Cwordpress%2Cgoogle_bmarks%2Cwindows_live%2Cmyspace%2Cfark%2Cbus_exchange%2Cpropeller%2Cnewsvine%2Clinkedin"></script></p>
 <?php
 	} else {
 ?>            
-                <p class="description">We are unable to find this persona. Please return to the gallery and try again.</p>
+                <p class="description"><?= _("We are unable to find this persona. Please return to the gallery and try again.");?></p>
 <?php
 	}
 ?>
--- a/server/templates/popular_personas.php
+++ b/server/templates/popular_personas.php
@@ -1,22 +1,22 @@
             <div class="feature last">
-                <h3>Most Popular Personas</h3>
+                <h3><?= _("Most Popular Personas");?></h3>
                 <ol class="popular">
 <?php
 	$list = array_slice($db->get_popular_personas(null), 0, 3);
 	
 	foreach ($list as $persona)
 	{
 		$persona_json = htmlentities(json_encode(extract_record_data($persona)));
 ?>
 					<li>
                             <h4><?= $persona['name'] ?></h4>
                             <hr />
-                             <a href="/persona/<?= $persona['id'] ?>"><img class="persona" alt="<?= $persona['name'] ?>" persona="<?= $persona_json ?>" src="<?= PERSONAS_LIVE_PREFIX . '/' . url_prefix($persona['id']) ?>/preview_popular.jpg"></a>
-                            <p class="author">By: <a href="/gallery/Designer/<?= $persona['author'] ?>"><?= $persona['display_username'] ?></a></p>
-                            <p class="downloads"><?= number_format($persona['popularity']) ?> active daily users</p>
+                             <?printf("<a href=\"%s\">", $locale_conf->url('/persona/' . $persona['id']));?><img class="persona" alt="<?= $persona['name'] ?>" persona="<?= $persona_json ?>" src="<?= PERSONAS_LIVE_PREFIX . '/' . url_prefix($persona['id']) ?>/preview_popular.jpg"></a>
+                            <p class="author"><?printf("By: <a href=\"%s\">%s</a>", $locale_conf->url('/gallery/Designer/' . $persona['author']), $persona['display_username']);?></p>
+                            <p class="downloads"><?printf(_("%d active daily users"), number_format($persona['popularity']));?></p>
                     </li>
 <?php
 	}
 ?>
                 </ol>
             </div>
--- a/server/templates/signup_form.php
+++ b/server/templates/signup_form.php
@@ -1,47 +1,47 @@
                 <div id="signup">
-                    <h4>New Personas Designer?</h3>
+                    <h4><?= _("New Personas Designer?");?></h3>
                     <form action="signin" method="post">
 <?php
 					if ($return_url)
 						echo "<input type=hidden name=return value=\"$return_url\">";
 ?>
-                    <p><label for="email">Email</label>
+                    <p><label for="email"><?= _("Email");?></label>
                     <input type="text" name="create_email" value="<?= $create['email'] ?>" id="" <?php if (array_key_exists('create_email', $_errors)) echo 'class="error"' ?>/>
 					<?php if (array_key_exists('create_email', $_errors)) echo '<span class="error-message">' . $_errors['create_email'] . '</span>' ?>
                     </p>
                     
-                    <p><label for="username">Login Name</label>
+                    <p><label for="username"><?= _("Login Name");?></label>
                     <input type="text" name="create_username" value="<?= $create['username'] ?>" id="" <?php if (array_key_exists('create_username', $_errors)) echo 'class="error"' ?>/>
 					<?php if (array_key_exists('create_username', $_errors)) echo '<span class="error-message">' . $_errors['create_username'] . '</span>' ?>
                     </p>
                     
-                    <p><label for="username">Display Username*</label>
+                    <p><label for="username"><?= _("Display Username*");?></label>
                     <input type="text" name="create_display_username" value="<?= $create['display_username'] ?>" id="" <?php if (array_key_exists('create_display_username', $_errors)) echo 'class="error"' ?>/>
 					<?php if (array_key_exists('create_display_username', $_errors)) echo '<span class="error-message">' . $_errors['create_display_username'] . '</span>' ?>
                     </p>
                     
-                    <p><label for="password">Password</label>
+                    <p><label for="password"><?= _("Password");?></label>
                     <input type="password" name="create_password" value="" id="" <?php if (array_key_exists('create_password', $_errors)) echo 'class="error"' ?>/>
 					<?php if (array_key_exists('create_password', $_errors)) echo '<span class="error-message">' . $_errors['create_password'] . '</span>' ?>
                     </p>
                     
-                    <p><label for="password_confirm">Confirm Password</label>
+                    <p><label for="password_confirm"><?= _("Confirm Password");?></label>
                     <input type="password" name="create_passconf" value="" id="" <?php if (array_key_exists('create_passconf', $_errors)) echo 'class="error"' ?>/>
 					<?php if (array_key_exists('create_passconf', $_errors)) echo '<span class="error-message">' . $_errors['create_passconf'] . '</span>' ?>
                     </p>
                     
                      <p>
-                        <label for="description">Designer Description*</label>
+                        <label for="description"><?= _("Designer Description*");?></label>
                         <textarea name="create_description" id="create_description" <?php if (array_key_exists('create_description', $_errors)) echo 'class="error"' ?> ><?= $create['description'] ?></textarea>
                         <?php if (array_key_exists('create_description', $_errors)) echo '<span class="error-message">' . $_errors['create_description'] . '</span>' ?>
                      </p>
 
-                   <p class="news"><label for="news"><input type="checkbox" name="news" id="news" value="" <?= $create['news'] ? "checked" : "" ?>/> I’d like to receive news and information about Personas</label></p>
+                   <p class="news"><label for="news"><input type="checkbox" name="news" id="news" value="" <?= $create['news'] ? "checked" : "" ?>/><?= _("I'd like to receive news and information about Personas");?></label></p>
                     
             
                     <div id="captcha">
                         <script type="text/javascript">
                                 var RecaptchaOptions = {
                                    theme : 'clean',
                                    tabindex : 11
                                 };
@@ -51,13 +51,13 @@
 	
 						<noscript>
 							<iframe src="https://api-secure.recaptcha.net/noscript?k=<?= RECAPTCHA_PUBLIC_KEY ?>" height="300" width="500" frameborder="0"></iframe><br/>
 							<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
 							<input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
 						</noscript>        
 						<?php if (array_key_exists('captcha', $_errors)) echo '<span class="error-message">' . $_errors['captcha'] . '</span>' ?>
                     </div>
-                    <p>* <i>denotes an optional field. These entries will be displayed in the personas gallery.</i></p>
-                    <button type="submit" class="button"><span>sign me up</span><span class="arrow"></span></button>
+                    <p><?= _("* <i>denotes an optional field. These entries will be displayed in the personas gallery.</i>");?></p>
+                    <button type="submit" class="button"><span><?= _("sign me up");?></span><span class="arrow"></span></button>
                     </form>
                 </div>
-			<p class="disclaimer">Mozilla values your privacy. We will not sell or rent your email address.</p>
+			<p class="disclaimer"><?= _("Mozilla values your privacy. We will not sell or rent your email address.");?></p>
--- a/server/templates/upload_persona_tmpl.php
+++ b/server/templates/upload_persona_tmpl.php
@@ -1,57 +1,57 @@
-<?php $title = ($upload_submitted['id'] ? "Edit" : "Create") . " your Persona"; include 'header.php'; ?>
+<?php $title = ($upload_submitted['id'] ? _("Edit Your Persona") : _("Create Your Persona")); include 'header.php'; ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'nav.php'; ?>
             <div id="header">
-                <h2>Create Your Persona</h2>
-                <h3>Follow the easy steps below to start dressing up your browser!</h3>
+                <h2><?= _("Create Your Persona");?></h2>
+                <h3><?= ("Follow the easy steps below to start dressing up your browser!");?></h3>
             </div>
             <div id="maincontent">
-                <p id="breadcrumbs"><a href="http://www.getpersonas.com">Personas Home</a> : <?= $upload_submitted['id'] ? "Edit" : "Create" ?> Your Own</p>
+                <p id="breadcrumbs"><?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : %s", $locale_conf->url('/'), ($upload_submitted['id'] ? _("Edit Your Own") : _("Create Your Own")));?></p>
                 
-                <h4><?= $upload_submitted['id'] ? "Edit" : "Create" ?> Your Persona</h4>
+                <h4><?= $upload_submitted['id'] ? _("Edit Your Persona") : _("Create Your Persona") ?></h4>
 <?php if ($override_error) { ?>
                 <p class="description"><?= $override_error ?></p>
 <?php } else { ?>
                 <form method="POST" action="/upload" enctype='multipart/form-data'>
 				<input type="hidden" name="agree" value="<?= htmlspecialchars($upload_submitted['agree']) ?>">
 				<input type="hidden" name="license" value="<?= htmlspecialchars($upload_submitted['license']) ?>">
 				<input type="hidden" name="id" value="<?= htmlspecialchars($upload_submitted['id']) ?>">
                 <div id="create-part-1">
                     <p>
-                        <label for="persona-name">Persona Name</label>
+                        <label for="persona-name"><?= _("Persona Name");?></label>
                         <input type="text" name="name" value="<?= htmlspecialchars($upload_submitted['name']) ?>" id="name" <?php if (array_key_exists('name', $upload_errors)) echo 'class="error"' ?> />
                         <?php if (array_key_exists('name', $upload_errors)) echo '<span class="error-message">' . $upload_errors['name'] . '</span>' ?>
                      </p>
                     
                     <p>
-                        <label for="textcolor">Text Color</label>
+                        <label for="textcolor"><?= _("Text Color");?></label>
                         <input type="text" name="textcolor" value="<?= htmlspecialchars($upload_submitted['textcolor']) ?>" id="textcolor"/ <?php if (array_key_exists('textcolor', $upload_errors)) echo 'class="error"' ?>>
                          <?php if (array_key_exists('textcolor', $upload_errors)) echo '<span class="error-message">' . $upload_errors['textcolor'] . '</span>' ?>
                     </p>
                     
                     <p>
-                        <label for="header-image">Header Image</label>
+                        <label for="header-image"><?= _("Header Image");?></label>
                         <span><input type="file" name="header-image" value="" id="header-image"  <?php if (array_key_exists('header-image', $upload_errors)) echo 'class="error"' ?> /></span>
                         <?php if (array_key_exists('header-image', $upload_errors)) echo '<span class="error-message">' . $upload_errors['header-image'] . '</span>' ?>
                     </p>
                     
                     <p>
-                        <label for="description">Description</label>
+                        <label for="description"><?= _("Description");?></label>
                         <textarea name="description" id="description" <?php if (array_key_exists('description', $upload_errors)) echo 'class="error"' ?> ><?= $upload_submitted['description'] ?></textarea>
                         <?php if (array_key_exists('description', $upload_errors)) echo '<span class="error-message">' . $upload_errors['description'] . '</span>' ?>
                      </p>
                 </div>
                 
                 <div id="create-part-2">
                     <p>
-                        <label for="category">Category</label>
+                        <label for="category"><?= _("Category");?></label>
                         <select name="category" id="category">
 <?php
 		echo '<option value=""';
 		if ($upload_submitted['category'] == "")
 			echo " selected";
 		echo "></option>\n";
 		
 		foreach ($categories as $category)
@@ -61,76 +61,76 @@
 				echo " selected";
 			echo ">$category</option>\n";
 		} 
 ?>
 						</select>
                         <?php if (array_key_exists('category', $upload_errors)) echo '<span class="error-message">' . $upload_errors['category'] . '</span>' ?>
                     </p>
                     <p>
-                        <label for="accentcolor">Accent Color</label>
+                        <label for="accentcolor"><?= _("Accent Color");?></label>
                         <input type="text" name="accentcolor" value="<?= htmlspecialchars($upload_submitted['accentcolor']) ?>" id="accentcolor"/ <?php if (array_key_exists('accentcolor', $upload_errors)) echo 'class="error"' ?> >
                         <?php if (array_key_exists('accentcolor', $upload_errors)) echo '<span class="error-message">' . $upload_errors['accentcolor'] . '</span>' ?>
                      </p>
                     
                     <p>
-                        <label for="footer-image">Footer Image</label>
+                        <label for="footer-image"><?= _("Footer Image");?></label>
                         <span><input type="file" name="footer-image" value="" id="footer-image" <?php if (array_key_exists('footer-image', $upload_errors)) echo 'class="error"' ?> /></span>
                         <?php if (array_key_exists('footer-image', $upload_errors)) echo '<span class="error-message">' . $upload_errors['footer-image'] . '</span>' ?>
                      </p>
                     
                     <p>
-                        <label for="reason">I'm creating a Persona to...</label>
+                        <label for="reason"><?= _("I'm creating a Persona to...");?></label>
                         <span>
                             <select name="reason" id="reason">
 <?php
-		$reasons = Array("" => "", "fun" => "have some fun", "build" => "build a brand", "non-profit" => "support a non-profit cause", "other" => "other");
+		$reasons = Array("" => "", "fun" => _("have some fun"), "build" => _("build a brand"), "non-profit" => _("support a non-profit cause"), "other" => _("other"));
 		foreach ($reasons as $reason => $longreason)
 		{
 			print "<option value=\"$reason\"";
 			if ($reason == $upload_submitted['reason'])
-				echo " selected";
+				echo _(" selected");
 			print ">$longreason</option>\n";
 		}
 ?>
                             </select>
                          <?php if (array_key_exists('reason', $upload_errors)) echo '<span class="error-message">' . $upload_errors['reason'] . '</span>' ?>
                         </span>
                     </p>
                     
                     <p id="other-info">
-                        <label for="other-reason">Reason:</label>
+                        <label for="other-reason"><?= _("Reason:");?></label>
                         <input id="other-reason" name="other-reason" type="text" value="<?= htmlspecialchars($upload_submitted['other-reason']) ?>"/>
                         <?php if (array_key_exists('other-reason', $upload_errors)) echo '<span class="error-message">' . $upload_errors['other-reason'] . '</span>' ?>
                    </p>
                     
                 </div>
                 
                 <p class="continue">
-                    <button type="submit" class="button"><span>submit</span><span class="arrow">&nbsp;</span></button></p>
-                <p>By clicking submit I affirm that I am the rightful owner of this content (see <a href="/faq#guidelines" target="_blank">guidelines</a>) and understand that this design will be publicly available in the Gallery upon approval.</p>
+                    <button type="submit" class="button"><span><?= _("submit");?></span><span class="arrow">&nbsp;</span></button></p>
+                <p><?printf(_("By clicking submit I affirm that I am the rightful owner of this content (see <a href=\"%s\" target=\"_blank\">guidelines</a>) and understand that this design will be publicly available in the Gallery upon approval."), $locale_conf->url('/faq#guidelines'));?></p>
             	</form>
  <?php } ?>
            </div>
 			<div id="secondary-content">
               <ol id="upload-steps">
                    <li class="completed">                         
-                          	<h3>Step 1:</h3>
-                          	<h4>Terms of Service</h4>
+                          	<h3><?= _("Step 1:");?></h3>
+                          	<h4><?= _("Terms of Service");?></h4>
                       </li>
                 <li class="current">
                     <div class="wrapper">
-                        <h3>Step 2:</h3>
+                        <h3><?= _("Step 2:");?></h3>
                         <h4><?= $title ?></h4>
                     </div>
                 </li>
                
                 <li>
-                    <h3>Step 3:</h3>
-                    <h4>Finish!</h4>
+                    <h3><?= _("Step 3:");?></h3>
+                    <h4><?= _("Finish!");?></h4>
                 </li>
               </ol>
             </div>
         </div>
     </div>
 <?php include 'footer.php'; ?>
    <script type="text/javascript" charset="utf-8">
     $('#textcolor').ColorPicker({
--- a/server/templates/upload_success_tmpl.php
+++ b/server/templates/upload_success_tmpl.php
@@ -1,41 +1,41 @@
-<?php $title = "Success!"; include 'header.php'; ?>
+<?php $title = _("Success!"); include 'header.php'; ?>
 <body>
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'nav.php'; ?>
             <div id="header">
-                <h2>Create Your Own</h2>
-                <h3>It’s easy to create your own Persona just follow the easy steps below!</h3>
+                <h2><?= _("Create Your Own");?></h2>
+                <h3><?= _("It's easy to create your own Persona just follow the easy steps below!");?></h3>
             </div>
             <div id="maincontent" class="success">
                 <div id="breadcrumbs">
-                    <a href="http://www.getpersonas.com">Personas Home</a> : Create Your Own    
+                    <?printf("<a href=\"%s\">" . _("Personas Home") . "</a> : " . _("Create Your Own"), $locale_conf->url('/'));?>
                 </div>
-                <h2>Success!</h2>
-                <h3>You have successfully <?= $action_verb ? $action_verb : "added" ?> your Persona. Once it's approved, you'll be able to view it in the Gallery.</h3>
+                <h2><?= _("Success!");?></h2>
+                <h3><?= $action_sentence ?></h3>
                 <ul class="success-options">
-                    <li><a href="http://www.getpersonas.com/gallery/All/Popular">View Personas Gallery »</a></li>
+                    <li><?printf("<a href=\"%s\">" . _("View Personas Gallery") . "</a>", $locale_conf->url('/gallery/All/Popular'));?></li>
                 </ul>
             </div>
             <div id="secondary-content">
               <ol id="upload-steps">
                   <li class="completed"> <!-- class="completed" needed to show green checkbox -->
-                      <h3>Step 1:</h3>
-                      <h4>Terms of Service</h4>
+                      <h3><?= _("Step 1:");?></h3>
+                      <h4><?= _("Terms of Service");?></h4>
                   </li>
                 <li class="completed"> 
-                    <h3>Step 2:</h3>
-                    <h4>Create Your Persona</h4> 
+                    <h3><?= _("Step 2:");?></h3>
+                    <h4><?= _("Create Your Persona");?></h4> 
                 </li>
                 
                 <li class="completed">
-                    <h3>Step 3:</h3>
-                    <h4>Finish!</h4>
+                    <h3><?= _("Step 3:");?></h3>
+                    <h4><?= _("Finish!");?></h4>
                 </li>
               </ol>
             </div>
         </div>
     </div>
 <?php include 'footer.php'; ?>
 </body>
 </html>
--- a/server/templates/user_error.php
+++ b/server/templates/user_error.php
@@ -1,15 +1,15 @@
 <?php include 'header.php'; ?>
 <body >
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'nav.php'; ?>
             <div id="header">
-                <h2>A Problem Occurred</h2>
+                <h2><?= _("A Problem Occurred");?></h2>
             </div>
             <div id="maincontent">
                 <?= $_errors['error'] ?>
             </div>
         </div>
     </div>
 <?php include 'footer.php'; ?>
 </body>
--- a/server/updated.php
+++ b/server/updated.php
@@ -2,25 +2,25 @@
 	require_once 'lib/personas_constants.php';	
 	require_once 'lib/personas_functions.php';	
 	require_once 'lib/storage.php';
 	require_once 'lib/user.php';
 
 	$db = new PersonaStorage();
 	$user = new PersonaUser();
 
-	$title = "Updated"; 
+	$title = _("Updated"); 
 	include 'templates/header.php'; 
 ?>
 <body class="updated">
     <div id="outer-wrapper">
         <div id="inner-wrapper">
 <?php include 'templates/nav.php'; ?>
             <div id="header">
-                <h2>You've been updated to the latest version of Personas!</h2>
+                <h2><?= _("You've been updated to the latest version of Personas!");?></h2>
 
             </div>
             
 <?php include 'templates/featured_personas.php'; ?>
 <?php include 'templates/featured_designer.php'; ?>
 <?php include 'templates/popular_personas.php'; ?>
             
         </div>
--- a/server/upload_forms.php
+++ b/server/upload_forms.php
@@ -1,14 +1,15 @@
 <?php
 
 	require_once 'lib/personas_constants.php';
 	require_once 'lib/personas_functions.php';
 	require_once 'lib/storage.php';
 	require_once 'lib/user.php';	
+	require_once "lib/language.php";
 		
 	#step 1: Authenticate
 	$user = new PersonaUser();
 
 	$auth_user = $user->authenticate();
 	$user->force_signin();
 
 	$db = new PersonaStorage();
@@ -28,17 +29,17 @@
 		
 	if ($id)	
 	{
 		$upload_submitted = $db->get_persona_by_id($id);
 		if (!$user->has_admin_privs() && $upload_submitted['author'] != $auth_user)
 		{
 			#include something bad here
 			$upload_submitted = null;
-			$override_error = "You don't have permission to edit that";
+			$override_error = _("You don't have permission to edit that");
 			include 'templates/upload_persona_tmpl.php';
 			exit;
 		}
 		$upload_submitted['agree'] = 1;
 		
 		#need to clean out the header and footer so we don't transfer old ones to the edit
 		$upload_submitted['header'] = null;
 		$upload_submitted['footer'] = null;
@@ -53,20 +54,20 @@
 		}
 		
 		#do form validation on the terms. make sure to transfer the data into the next form.
 		
 		$upload_submitted['agree'] = ini_get('magic_quotes_gpc') ? stripslashes($_POST['agree']) : $_POST['agree'];
 		$upload_submitted['license'] = ini_get('magic_quotes_gpc') ? stripslashes($_POST['license']) : $_POST['license'];
 
 		if ($upload_submitted['agree'] != 1)
-			$upload_errors['agree'] = "Please make sure to agree to the licensing agreement";
+			$upload_errors['agree'] = _("Please make sure to agree to the licensing agreement");
 		
 		if ($upload_submitted['license'] != 'cc' && $upload_submitted['license'] != 'restricted')
-			$upload_errors['license'] = "Please make sure to choose the appropriate license";
+			$upload_errors['license'] = _("Please make sure to choose the appropriate license");
 
 		if (count($upload_errors) > 0)
 		{
 			include 'templates/upload_tos_tmpl.php';
 			exit;
 		}
 	}
 	
@@ -85,82 +86,82 @@
 	$upload_submitted['name'] = trim(ini_get('magic_quotes_gpc') ? stripslashes($_POST['name']) : $_POST['name']);
 	$upload_submitted['accentcolor'] = ini_get('magic_quotes_gpc') ? stripslashes($_POST['accentcolor']) : $_POST['accentcolor'];
 	$upload_submitted['textcolor'] = ini_get('magic_quotes_gpc') ? stripslashes($_POST['textcolor']) : $_POST['textcolor'];
 	$upload_submitted['description'] = ini_get('magic_quotes_gpc') ? stripslashes($_POST['description']) : $_POST['description'];
 	$upload_submitted['reason'] = ini_get('magic_quotes_gpc') ? stripslashes($_POST['reason']) : $_POST['reason'];
 	$upload_submitted['other-reason'] = ini_get('magic_quotes_gpc') ? stripslashes($_POST['other-reason']) : $_POST['other-reason'];
 
 	if (!in_array($upload_submitted['category'], $categories))
-		$upload_errors['category'] = "Unknown category";
+		$upload_errors['category'] = _("Unknown category");
 	
 	if (strlen($upload_submitted['description']) > 500)
-		$upload_errors['description'] = "Please limit your description to 500 characters";
+		$upload_errors['description'] = _("Please limit your description to 500 characters");
 	
 	#sanitize it
 	$upload_submitted['description'] = htmlspecialchars($upload_submitted['description']); 
 	
 	
 	
 	if(preg_match('/[^A-Za-z0-9_\-\. \&]/', $upload_submitted['name']))
-		$upload_errors['name'] = "Please use only alphanumerics, underscore, hyphen, space, period and ampersand in your persona name";	
+		$upload_errors['name'] = _("Please use only alphanumerics, underscore, hyphen, space, period and ampersand in your persona name");	
 	elseif(!preg_match('/^[A-Za-z]/', $upload_submitted['name']))
-		$upload_errors['name'] = "Please begin your persona name with a letter";	
+		$upload_errors['name'] = _("Please begin your persona name with a letter");	
 	elseif ($upload_submitted['name'][0] == '.')
-		$upload_errors['name'] = "name cannot start with a period";
+		$upload_errors['name'] = _("name cannot start with a period");
 	elseif ($upload_submitted['name'] == '')
-		$upload_errors['name'] = "Please use alphanumeric characters in your persona name";
+		$upload_errors['name'] = _("Please use alphanumeric characters in your persona name");
 	elseif (strlen($upload_submitted['name']) < 6)
-		$upload_errors['name'] = "Please use at least 6 characters in your persona name";
+		$upload_errors['name'] = _("Please use at least 6 characters in your persona name");
 	elseif (strlen($upload_submitted['name']) > 40)
-		$upload_errors['name'] = "Please limit your persona name to 40 characters";
+		$upload_errors['name'] = _("Please limit your persona name to 40 characters");
 	else
 	{
 		$collision_id = $db->check_persona_name($upload_submitted['name']);
 		if ($collision_id && $collision_id != $id)
-			$upload_errors['name'] = "That name is already in use. Please select another one";
+			$upload_errors['name'] = _("That name is already in use. Please select another one");
 	}
 	
 	$upload_submitted['accentcolor'] = preg_replace('/[^a-f0-9]/i', '', strtolower($upload_submitted['accentcolor']));
 	if ($upload_submitted['accentcolor'] && strlen($upload_submitted['accentcolor']) != 3 && strlen($upload_submitted['accentcolor']) != 6)
-		$upload_errors['accentcolor'] = "Unrecognized accent color";
+		$upload_errors['accentcolor'] = _("Unrecognized accent color");
 	
 	$upload_submitted['textcolor'] = preg_replace('/[^a-f0-9]/i', '', strtolower($upload_submitted['textcolor']));
 	if ($upload_submitted['textcolor'] && strlen($upload_submitted['textcolor']) != 3 && strlen($upload_submitted['textcolor']) != 6)
-		$upload_errors['textcolor'] = "Unrecognized text color";
+		$upload_errors['textcolor'] = _("Unrecognized text color");
 	
 	if ($upload_submitted['license'] == 'restricted' && !$upload_submitted['reason'])
-		$upload_errors['reason'] = "Please provide a reason for creating this persona";
+		$upload_errors['reason'] = _("Please provide a reason for creating this persona");
 	
 	#basic non-committal image upload checks
 
 	if (!(array_key_exists('id', $upload_submitted) && $_FILES['header-image']['size'] == 0)) #images are optional on edit
 	{
 		if ($_FILES['header-image']['size'] == 0)
-			$upload_errors['header-image'] = "Please include a header image";
+			$upload_errors['header-image'] = _("Please include a header image");
 		elseif ($_FILES['header-image']['size'] > 307200)
-			$upload_errors['header-image'] = "Please limit your header file size to 300K";
+			$upload_errors['header-image'] = _("Please limit your header file size to 300K");
 		elseif (strlen(preg_replace('/[^A-Za-z0-9_\-\.]/', '', $_FILES['header-image']['name'])) < 4)
-			$upload_errors['header-image'] = "Please use alphanumeric characters in your header image name";
+			$upload_errors['header-image'] = _("Please use alphanumeric characters in your header image name");
 		$upload_submitted['header'] = preg_replace('/[^A-Za-z0-9_\-\.]/', '', $_FILES['header-image']['name']);
 	}
 	
 	if (!(array_key_exists('id', $upload_submitted) && $_FILES['footer-image']['size'] == 0)) #images are optional on edit
 	{
 		if ($_FILES['footer-image']['size'] == 0)
-			$upload_errors['footer-image'] = "Please include a footer image";
+			$upload_errors['footer-image'] = _("Please include a footer image");
 		elseif ($_FILES['footer-image']['size'] > 307200)
-			$upload_errors['footer-image'] = "Please limit your footer file size to 300K";
+			$upload_errors['footer-image'] = _("Please limit your footer file size to 300K");
 		elseif (strlen(preg_replace('/[^A-Za-z0-9_\-\.]/', '', $_FILES['footer-image']['name'])) < 4)
-			$upload_errors['footer-image'] = "Please use alphanumeric characters in your footer image name";
+			$upload_errors['footer-image'] = _("Please use alphanumeric characters in your footer image name");
 		$upload_submitted['footer'] = preg_replace('/[^A-Za-z0-9_\-\.]/', '', $_FILES['footer-image']['name']);
 	}
 	
 	if ($upload_submitted['header'] && $upload_submitted['header'] == $upload_submitted['footer'])
-		$upload_errors['footer-image'] = "Please use different names for the header and the footer";
+		$upload_errors['footer-image'] = _("Please use different names for the header and the footer");
 	
 	if (count($upload_errors) > 0)
 	{
 		include 'templates/upload_persona_tmpl.php';
 		exit;
 	}
 	
 	#now the more complex image checks		
@@ -168,74 +169,74 @@
 	
 	if (!(array_key_exists('id', $upload_submitted) && $_FILES['header-image']['size'] == 0)) #images are optional on edit
 	{
 		$imgcommand = "identify -format \"%h %w %m\" "; 
 
 		$header_specs = exec($imgcommand . $_FILES['header-image']['tmp_name']);	
 		list($hheight, $hwidth, $htype) = explode(" ", $header_specs);		
 		if (!($htype == 'JPEG' || $htype == 'PNG'))
-			$upload_errors['header-image'] = "We do not recognize the format of your header image. Please let us know at persona-devel@mozilla.com if you think this is in error.";
+			$upload_errors['header-image'] = _("We do not recognize the format of your header image. Please let us know at persona-devel@mozilla.com if you think this is in error.");
 		elseif ($hheight < 200 || $hwidth < 2500)
-			$upload_errors['header-image'] = "Please make sure your header image is at least 2500x200 pixels (it appears to be $hwidth" . "x$hheight)";
+			$upload_errors['header-image'] = sprintf(_("Please make sure your header image is at least 2500x200 pixels (it appears to be %dx%d)"), $hwidth, $hheight);
 		elseif ($hheight > 500)
-			$upload_errors['header-image'] = "Please make sure your header image is less than 500 pixels tall so that it can appear in the browser (it appears to be $hwidth" . "x$hheight)";
+			$upload_errors['header-image'] = sprintf(_("Please make sure your header image is less than 500 pixels tall so that it can appear in the browser (it appears to be %dx%d)"), $hwidth, $hheight);
 	}
 	
 	if (!(array_key_exists('id', $upload_submitted) && $_FILES['footer-image']['size'] == 0)) #images are optional on edit
 	{
 		$footer_specs = exec($imgcommand . $_FILES['footer-image']['tmp_name']);
 		list($fheight, $fwidth, $ftype) = explode(" ", $footer_specs);
 		if (!($ftype == 'JPEG' || $ftype == 'PNG'))
-			$upload_errors['footer-image'] = "We do not recognize the format of your footer image. Please let us know at persona-devel@mozilla.com if you think this is in error.";
+			$upload_errors['footer-image'] = _("We do not recognize the format of your footer image. Please let us know at persona-devel@mozilla.com if you think this is in error.");
 		elseif ($fheight < 100 || $fwidth < 2500)
-			$upload_errors['footer-image'] = "Please make sure your footer image is at least 2500x100 pixels (it appears to be $fwidth" . "x$fheight)";
+			$upload_errors['footer-image'] = sprintf(_("Please make sure your footer image is at least 2500x100 pixels (it appears to be %dx%d)"), $fwidth, $fheight);
 		elseif ($fheight > 250)
-			$upload_errors['header-image'] = "Please make sure your footer image is less than 250 pixels tall so that it can appear in the browser (it appears to be $fwidth" . "x$fheight)";
+			$upload_errors['header-image'] = sprintf(_("Please make sure your footer image is less than 250 pixels tall so that it can appear in the browser (it appears to be %dx%d)"), $fwidth, $fheight);
 	}	
 			
 	if (count($upload_errors) > 0)
 	{
 		include 'templates/upload_persona_tmpl.php';
 		exit;
 	}
 	
 	#step 4: Success
 
 	if (array_key_exists('id', $upload_submitted))
 	{
 		$db->submit_persona_edit($upload_submitted['id'], $auth_user, $upload_submitted['name'], $upload_submitted['category'], $upload_submitted['accentcolor'], $upload_submitted['textcolor'], $upload_submitted['description'], $upload_submitted['header'], $upload_submitted['footer'], $upload_submitted['reason'], $upload_submitted['reason-other']);
 		$db->log_action($auth_user, $id, "Edited");
-		$action_verb = "edited";
+		$action_sentence = _("You have successfully edited your Persona. Once it's approved, you'll be able to view it in the Gallery.");
 	}
 	else
 	{
 		$upload_submitted['id'] = $db->submit_persona($upload_submitted['name'], $upload_submitted['category'], $upload_submitted['header'], $upload_submitted['footer'], $auth_user, $user->get_display_username(), $upload_submitted['accentcolor'], $upload_submitted['textcolor'], $upload_submitted['description'], $upload_submitted['license'], $upload_submitted['reason'], $upload_submitted['other-reason']);
 		$db->log_action($auth_user, $upload_submitted['id'], "Added");
-		$action_verb = "added";
+		$action_sentence = _("You have successfully added your Persona. Once it's approved, you'll be able to view it in the Gallery.");
 	}
 	$persona_path = make_persona_pending_path($upload_submitted['id']);
 	
 	if ($_FILES['footer-image']['size'] > 0 && !move_uploaded_file($_FILES['footer-image']['tmp_name'], $persona_path . "/" . $upload_submitted['footer']))
 	{
-		$upload_errors['footer-image'] = "A problem occured uploading your persona. Please contact persona-devel@mozilla.com to let us know about this issue. Thank you.";
+		$upload_errors['footer-image'] = _("A problem occured uploading your persona. Please contact persona-devel@mozilla.com to let us know about this issue. Thank you.");
 		if (!array_key_exists('id', $_POST))
 		{
 			$db->reject_persona($upload_submitted['id']);
 			$upload_submitted['id'] = null;
 		}
 		include 'templates/upload_persona_tmpl.php';
 		exit;					
 	}
 
 	if ($_FILES['header-image']['size'] > 0)
 	{
 		if (!move_uploaded_file($_FILES['header-image']['tmp_name'], $persona_path . "/" . $upload_submitted['header']))
 		{
-			$upload_errors['header-image'] = "A problem occured uploading your persona. Please contact persona-devel@mozilla.com to let us know about this issue. Thank you.";
+			$upload_errors['header-image'] = _("A problem occured uploading your persona. Please contact persona-devel@mozilla.com to let us know about this issue. Thank you.");
 			if (!array_key_exists('id', $_POST))
 			{
 				$db->reject_persona($upload_submitted['id']);
 				$upload_submitted['id'] = null;
 			}
 			include 'templates/upload_persona_tmpl.php';
 			exit;					
 		}
@@ -244,9 +245,9 @@
 	else
 	{
 		file_put_contents($persona_path . '/index_1.json', json_encode(extract_record_data($upload_submitted)));
 	}
 
 	include 'templates/upload_success_tmpl.php';
 
 
-?>
\ No newline at end of file
+?>
--- a/server/viewpersonas.php
+++ b/server/viewpersonas.php
@@ -35,93 +35,94 @@
 # the terms of any one of the MPL, the GPL or the LGPL.
 #
 # ***** END LICENSE BLOCK *****
 
 	require_once 'lib/personas_constants.php';	
 	require_once 'lib/personas_functions.php';	
 	require_once 'lib/storage.php';
 	require_once 'lib/user.php';
+	require_once "lib/language.php";
 	
 	$db = new PersonaStorage();
 	$user = new PersonaUser();
 	$user->authenticate();
 	$showWearThis = false;
 	$showDescription = true;
 	
 	$description_max = 50; #truncated description size
 	$url_prefix = '/gallery'; #telling the templates the gallery root
 	$title = "Gallery"; #page title for the header template
 	$no_my = array_key_exists('no_my', $_GET) ? 1 : 0; #whether to display all the dynamic stuff
 	$display_username = '';
 	
 	$categories = $db->get_categories();
 	array_unshift($categories, 'All');
-	$tabs = array('Popular', 'Recent', 'All', 'My', 'Favorites');
+	$tabs = array(_('Popular'), _('Recent'), _('All'), _('My'), _('Favorites'));
 	
 	$path = array_key_exists('PATH_INFO', $_SERVER) ? $_SERVER['PATH_INFO'] : '/';
 	$path = substr($path, 1); #chop the lead slash
 	list($category, $tab, $page) = explode('/', $path.'//');
 
 	$category = ucfirst($category);
 		
-	$page_header = "View Personas";
+	$page_header = _("View Personas");
 
 	$list = array(); #grab the appropriate personas for display
 	
 	#Designer reverses the semantics of the tab path. Everything else has the base directive 
 	#down at the lowest level, but Designer is a level up to have the designer name make sense
 	if ($category == 'Designer')
 	{
 		$display_username = $user->get_display_username($tab);
 		if ($tab) #tab is actually the author here
 		{
 			$list = $db->get_persona_by_author($tab); 
-			$title = $page_header = "Personas by " . $display_username;
+			$title = $page_header = "Personas by " . $display_username; //TODO
 			$showWearThis = true;
 			$showDescription = false;
 		}
 	}
 	else
 	{
 		if (!in_array($category, $categories))
-			$category = 'All';
+			$category = _('All');
 
 		switch(strtolower($tab))
 		{
-			case 'all':
+			case _('all'): // TODO: should these be localized?
 				$page = is_numeric($page) && $page > 0 ? $page : 1;
-				$list = $db->get_all_personas($category == 'All' ? null : $category, $page - 1);
+				$list = $db->get_all_personas($category == _('All') ? null : $category, $page - 1);
 				break;
-			case 'recent':
-				$list = $db->get_recent_personas($category == 'All' ? null : $category);
+			case _('recent'):
+				$list = $db->get_recent_personas($category == _('All') ? null : $category);
 				break;
-			case 'my':
+			case _('my'):
 				$user->force_signin();
-				$title = $page_header = "My Personas";
+				$title = $page_header = _("My Personas");
 				if ($user->get_username())
-					$list = $db->get_persona_by_author($user->get_username(), $category == 'All' ? null : $category);	
+					$list = $db->get_persona_by_author($user->get_username(), $category == _('All') ? null : $category);	
 				break;
-			case 'favorites':
+			case _('favorites'):
 				$user->force_signin();
-				$title = $page_header = "My Favorite Personas";
+				$title = $page_header = _("My Favorite Personas");
 				if ($user->get_username())
 					$list = $db->get_user_favorites($user->get_username(), $category);
 				break;
-			case 'search':
-				$title = $page_header = 'Search Personas';
+			case _('search'):
+				$title = $page_header = _('Search Personas');
 				if (array_key_exists('p', $_GET) && $_GET['p'])
 				{
-					$title = $page_header = "Personas Search Results for " . htmlspecialchars($_GET['p']);
+					$title = $page_header = "Personas Search Results for " . htmlspecialchars($_GET['p']);  //TODO
 					$list = $db->search_personas($_GET['p'], $category, PERSONA_GALLERY_PAGE_SIZE);
 				}
 				break;
 			default: #should default to popular
-				$tab = 'Popular';
-				$list = $db->get_popular_personas($category == 'All' ? null : $category);
+				$tab = _('Popular');
+				$list = $db->get_popular_personas($category == _('All') ? null : $category);
 				break;
 		}
 	}
 
 	if (array_key_exists('rss', $_GET))
 	{
 		header("Content-Type: application/xml"); 
 		$types = array('png' => 'application/png', 'jpg' => 'application/jpg');
@@ -134,17 +135,17 @@
 		include 'templates/gallery_rss.php';
 	}
 	else
 	{
 		foreach ($list as &$persona)
 		{
 			$persona['preview_url'] = PERSONAS_LIVE_PREFIX . '/' . url_prefix($persona['id']) . '/' . "preview.jpg";
 			$persona['json'] = htmlentities(json_encode(extract_record_data($persona)));
-			$persona['date'] = date("n/j/Y", strtotime($persona['approve']));
+			$persona['date'] = date("n/j/Y", strtotime($persona['approve']));   //TODO: don't we have to localize dates too?
 			$persona['short_description'] = $persona['description'];
 			if (strlen($persona['short_description']) > $description_max)
 			{
 				$persona['short_description'] = substr($persona['short_description'], 0, $description_max);
 				$persona['short_description'] = preg_replace('/ [^ ]+$/', '', $persona['short_description']) . '...';
 			}
 		}
 		include 'templates/gallery.php';