Index: E:/PHP/WordPress/SVN/wp-admin/edit.php
===================================================================
--- E:/PHP/WordPress/SVN/wp-admin/edit.php	(revision 3655)
+++ E:/PHP/WordPress/SVN/wp-admin/edit.php	(working copy)
@@ -100,7 +100,7 @@
 				$default = null;
 
 			echo "<option $default value=\"" . $arc_year.zeroise($arc_month, 2) . '">';
-			echo $month[zeroise($arc_month, 2)] . " $arc_year";
+			echo $wp_locale->month[zeroise($arc_month, 2)] . " $arc_year";
 			echo "</option>\n";
 		}
 	?>
Index: E:/PHP/WordPress/SVN/wp-admin/options-general.php
===================================================================
--- E:/PHP/WordPress/SVN/wp-admin/options-general.php	(revision 3655)
+++ E:/PHP/WordPress/SVN/wp-admin/options-general.php	(working copy)
@@ -94,9 +94,8 @@
 <td><select name="start_of_week" id="start_of_week">
 <?php
 for ($day_index = 0; $day_index <= 6; $day_index++) :
-if ($day_index == get_settings('start_of_week')) $selected = " selected='selected'";
-else $selected = '';
-echo "\n\t<option value='$day_index' $selected>$weekday[$day_index]</option>";
+	$selected = (get_settings('start_of_week') == $day_index) ? 'selected="selected"' : '';
+	echo "\n\t<option value='$day_index' $selected>{$wp_locale->weekday[$day_index]}</option>";
 endfor;
 ?>
 </select></td>
Index: E:/PHP/WordPress/SVN/wp-includes/functions.php
===================================================================
--- E:/PHP/WordPress/SVN/wp-includes/functions.php	(revision 3655)
+++ E:/PHP/WordPress/SVN/wp-includes/functions.php	(working copy)
@@ -16,7 +16,7 @@
 }
 
 function mysql2date($dateformatstring, $mysqlstring, $translate = true) {
-	global $month, $weekday, $month_abbrev, $weekday_abbrev;
+	global $wp_locale;
 	$m = $mysqlstring;
 	if ( empty($m) ) {
 		return false;
@@ -29,16 +29,20 @@
 	if ( -1 == $i || false == $i )
 		$i = 0;
 
-	if ( !empty($month) && !empty($weekday) && $translate ) {
-		$datemonth = $month[date('m', $i)];
-		$datemonth_abbrev = $month_abbrev[$datemonth];
-		$dateweekday = $weekday[date('w', $i)];
-		$dateweekday_abbrev = $weekday_abbrev[$dateweekday];
+	if ( !empty($wp_locale->month) && !empty($wp_locale->weekday) && $translate ) {
+		$datemonth = $wp_locale->month[date('m', $i)];
+		$datemonth_abbrev = $wp_locale->month_abbrev[$datemonth];
+		$dateweekday = $wp_locale->weekday[date('w', $i)];
+		$dateweekday_abbrev = $wp_locale->weekday_abbrev[$dateweekday];
+		$datemeridiem = $wp_locale->meridiem[date('a', $i)];
+		$datemeridiem_capital = $wp_locale->meridiem[date('A', $i)];
 		$dateformatstring = ' '.$dateformatstring;
 		$dateformatstring = preg_replace("/([^\\\])D/", "\${1}".backslashit($dateweekday_abbrev), $dateformatstring);
 		$dateformatstring = preg_replace("/([^\\\])F/", "\${1}".backslashit($datemonth), $dateformatstring);
 		$dateformatstring = preg_replace("/([^\\\])l/", "\${1}".backslashit($dateweekday), $dateformatstring);
 		$dateformatstring = preg_replace("/([^\\\])M/", "\${1}".backslashit($datemonth_abbrev), $dateformatstring);
+		$dateformatstring = preg_replace("/([^\\\])a/", "\${1}".backslashit($datemeridiem), $dateformatstring);
+		$dateformatstring = preg_replace("/([^\\\])A/", "\${1}".backslashit($datemeridiem_capital), $dateformatstring);
 
 		$dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring)-1);
 	}
@@ -66,23 +70,28 @@
 }
 
 function date_i18n($dateformatstring, $unixtimestamp) {
-	global $month, $weekday, $month_abbrev, $weekday_abbrev;
+	global $wp_locale;
 	$i = $unixtimestamp;
-	if ( (!empty($month)) && (!empty($weekday)) ) {
-		$datemonth = $month[date('m', $i)];
-		$datemonth_abbrev = $month_abbrev[$datemonth];
-		$dateweekday = $weekday[date('w', $i)];
-		$dateweekday_abbrev = $weekday_abbrev[$dateweekday];
+	if ( (!empty($wp_locale->month)) && (!empty($wp_locale->weekday)) ) {
+		$datemonth = $wp_locale->month[date('m', $i)];
+		$datemonth_abbrev = $wp_locale->month_abbrev[$datemonth];
+		$dateweekday = $wp_locale->weekday[date('w', $i)];
+		$dateweekday_abbrev = $wp_locale->weekday_abbrev[$dateweekday];
+		$datemeridiem = $wp_locale->meridiem[date('a', $i)];
+		$datemeridiem_capital = $wp_locale->meridiem[date('A', $i)];
 		$dateformatstring = ' '.$dateformatstring;
 		$dateformatstring = preg_replace("/([^\\\])D/", "\${1}".backslashit($dateweekday_abbrev), $dateformatstring);
 		$dateformatstring = preg_replace("/([^\\\])F/", "\${1}".backslashit($datemonth), $dateformatstring);
 		$dateformatstring = preg_replace("/([^\\\])l/", "\${1}".backslashit($dateweekday), $dateformatstring);
 		$dateformatstring = preg_replace("/([^\\\])M/", "\${1}".backslashit($datemonth_abbrev), $dateformatstring);
+		$dateformatstring = preg_replace("/([^\\\])a/", "\${1}".backslashit($datemeridiem), $dateformatstring);
+		$dateformatstring = preg_replace("/([^\\\])A/", "\${1}".backslashit($datemeridiem_capital), $dateformatstring);
+
 		$dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring)-1);
 	}
 	$j = @date($dateformatstring, $i);
 	return $j;
-	}
+}
 
 function get_weekstartend($mysqlstring, $start_of_week) {
 	$my = substr($mysqlstring,0,4);
Index: E:/PHP/WordPress/SVN/wp-includes/locale.php
===================================================================
--- E:/PHP/WordPress/SVN/wp-includes/locale.php	(revision 3655)
+++ E:/PHP/WordPress/SVN/wp-includes/locale.php	(working copy)
@@ -1,70 +1,93 @@
 <?php
+
 // Date and Time
 
-// The Weekdays
-$weekday[0] = __('Sunday');
-$weekday[1] = __('Monday');
-$weekday[2] = __('Tuesday');
-$weekday[3] = __('Wednesday');
-$weekday[4] = __('Thursday');
-$weekday[5] = __('Friday');
-$weekday[6] = __('Saturday');
+class WP_Locale {
+	var $weekday;
+	var $weekday_initial;
+	var $weekday_abbrev;
 
-// The first letter of each day.  The _%day%_initial suffix is a hack to make
-// sure the day initials are unique.  They should be translated to a one
-// letter initial.  
-$weekday_initial[__('Sunday')]    = __('S_Sunday_initial');
-$weekday_initial[__('Monday')]    = __('M_Monday_initial');
-$weekday_initial[__('Tuesday')]   = __('T_Tuesday_initial');
-$weekday_initial[__('Wednesday')] = __('W_Wednesday_initial');
-$weekday_initial[__('Thursday')]  = __('T_Thursday_initial');
-$weekday_initial[__('Friday')]    = __('F_Friday_initial');
-$weekday_initial[__('Saturday')]  = __('S_Saturday_initial');
+	var $month;
+	var $month_abbrev;
 
-foreach ($weekday_initial as $weekday_ => $weekday_initial_) {
-  $weekday_initial[$weekday_] = preg_replace('/_.+_initial$/', '', $weekday_initial_);
-}
+	var $meridiem;
 
-// Abbreviations for each day.
-$weekday_abbrev[__('Sunday')]    = __('Sun');
-$weekday_abbrev[__('Monday')]    = __('Mon');
-$weekday_abbrev[__('Tuesday')]   = __('Tue');
-$weekday_abbrev[__('Wednesday')] = __('Wed');
-$weekday_abbrev[__('Thursday')]  = __('Thu');
-$weekday_abbrev[__('Friday')]    = __('Fri');
-$weekday_abbrev[__('Saturday')]  = __('Sat');
+	function init() {
+		// The Weekdays
+		$this->weekday[0] = __('Sunday');
+		$this->weekday[1] = __('Monday');
+		$this->weekday[2] = __('Tuesday');
+		$this->weekday[3] = __('Wednesday');
+		$this->weekday[4] = __('Thursday');
+		$this->weekday[5] = __('Friday');
+		$this->weekday[6] = __('Saturday');
 
-// The Months
-$month['01'] = __('January');
-$month['02'] = __('February');
-$month['03'] = __('March');
-$month['04'] = __('April');
-$month['05'] = __('May');
-$month['06'] = __('June');
-$month['07'] = __('July');
-$month['08'] = __('August');
-$month['09'] = __('September');
-$month['10'] = __('October');
-$month['11'] = __('November');
-$month['12'] = __('December');
+		// The first letter of each day.  The _%day%_initial suffix is a hack to make
+		// sure the day initials are unique.
+		$this->weekday_initial[__('Sunday')]    = __('S_Sunday_initial');
+		$this->weekday_initial[__('Monday')]    = __('M_Monday_initial');
+		$this->weekday_initial[__('Tuesday')]   = __('T_Tuesday_initial');
+		$this->weekday_initial[__('Wednesday')] = __('W_Wednesday_initial');
+		$this->weekday_initial[__('Thursday')]  = __('T_Thursday_initial');
+		$this->weekday_initial[__('Friday')]    = __('F_Friday_initial');
+		$this->weekday_initial[__('Saturday')]  = __('S_Saturday_initial');
 
-// Abbreviations for each month. Uses the same hack as above to get around the
-// 'May' duplication.
-$month_abbrev[__('January')] = __('Jan_January_abbreviation');
-$month_abbrev[__('February')] = __('Feb_February_abbreviation');
-$month_abbrev[__('March')] = __('Mar_March_abbreviation');
-$month_abbrev[__('April')] = __('Apr_April_abbreviation');
-$month_abbrev[__('May')] = __('May_May_abbreviation');
-$month_abbrev[__('June')] = __('Jun_June_abbreviation');
-$month_abbrev[__('July')] = __('Jul_July_abbreviation');
-$month_abbrev[__('August')] = __('Aug_August_abbreviation');
-$month_abbrev[__('September')] = __('Sep_September_abbreviation');
-$month_abbrev[__('October')] = __('Oct_October_abbreviation');
-$month_abbrev[__('November')] = __('Nov_November_abbreviation');
-$month_abbrev[__('December')] = __('Dec_December_abbreviation');
+		foreach ($this->weekday_initial as $weekday_ => $weekday_initial_) {
+			$this->weekday_initial[$weekday_] = preg_replace('/_.+_initial$/', '', $weekday_initial_);
+		}
 
-foreach ($month_abbrev as $month_ => $month_abbrev_) {
-  $month_abbrev[$month_] = preg_replace('/_.+_abbreviation$/', '', $month_abbrev_);
+		// Abbreviations for each day.
+		$this->weekday_abbrev[__('Sunday')]    = __('Sun');
+		$this->weekday_abbrev[__('Monday')]    = __('Mon');
+		$this->weekday_abbrev[__('Tuesday')]   = __('Tue');
+		$this->weekday_abbrev[__('Wednesday')] = __('Wed');
+		$this->weekday_abbrev[__('Thursday')]  = __('Thu');
+		$this->weekday_abbrev[__('Friday')]    = __('Fri');
+		$this->weekday_abbrev[__('Saturday')]  = __('Sat');
+
+		// The Months
+		$this->month['01'] = __('January');
+		$this->month['02'] = __('February');
+		$this->month['03'] = __('March');
+		$this->month['04'] = __('April');
+		$this->month['05'] = __('May');
+		$this->month['06'] = __('June');
+		$this->month['07'] = __('July');
+		$this->month['08'] = __('August');
+		$this->month['09'] = __('September');
+		$this->month['10'] = __('October');
+		$this->month['11'] = __('November');
+		$this->month['12'] = __('December');
+
+		// Abbreviations for each month. Uses the same hack as above to get around the
+		// 'May' duplication.
+		$this->month_abbrev[__('January')] = __('Jan_January_abbreviation');
+		$this->month_abbrev[__('February')] = __('Feb_February_abbreviation');
+		$this->month_abbrev[__('March')] = __('Mar_March_abbreviation');
+		$this->month_abbrev[__('April')] = __('Apr_April_abbreviation');
+		$this->month_abbrev[__('May')] = __('May_May_abbreviation');
+		$this->month_abbrev[__('June')] = __('Jun_June_abbreviation');
+		$this->month_abbrev[__('July')] = __('Jul_July_abbreviation');
+		$this->month_abbrev[__('August')] = __('Aug_August_abbreviation');
+		$this->month_abbrev[__('September')] = __('Sep_September_abbreviation');
+		$this->month_abbrev[__('October')] = __('Oct_October_abbreviation');
+		$this->month_abbrev[__('November')] = __('Nov_November_abbreviation');
+		$this->month_abbrev[__('December')] = __('Dec_December_abbreviation');
+
+		foreach ($this->month_abbrev as $month_ => $month_abbrev_) {
+			$this->month_abbrev[$month_] = preg_replace('/_.+_abbreviation$/', '', $month_abbrev_);
+		}
+
+		// The Meridiem
+		$this->meridiem['am'] = __('am');
+		$this->meridiem['pm'] = __('pm');
+		$this->meridiem['AM'] = __('AM');
+		$this->meridiem['PM'] = __('PM');
+	}
+
+	function WP_Locale() {
+		$this->init();
+	}
 }
 
 ?>
\ No newline at end of file
Index: E:/PHP/WordPress/SVN/wp-includes/template-functions-general.php
===================================================================
--- E:/PHP/WordPress/SVN/wp-includes/template-functions-general.php	(revision 3655)
+++ E:/PHP/WordPress/SVN/wp-includes/template-functions-general.php	(working copy)
@@ -134,7 +134,7 @@
 
 function wp_title($sep = '&raquo;', $display = true) {
 	global $wpdb;
-	global $m, $year, $monthnum, $day, $category_name, $month, $posts;
+	global $m, $year, $monthnum, $day, $category_name, $wp_locale, $posts;
 
 	$cat = get_query_var('cat');
 	$p = get_query_var('p');
@@ -173,14 +173,14 @@
 	// If there's a month
 	if ( !empty($m) ) {
 		$my_year = substr($m, 0, 4);
-		$my_month = $month[substr($m, 4, 2)];
+		$my_month = $wp_locale->month[substr($m, 4, 2)];
 		$title = "$my_year $sep $my_month";
 	}
 
 	if ( !empty($year) ) {
 		$title = $year;
 		if ( !empty($monthnum) )
-			$title .= " $sep ".$month[zeroise($monthnum, 2)];
+			$title .= " $sep ".$wp_locale->month[zeroise($monthnum, 2)];
 		if ( !empty($day) )
 			$title .= " $sep ".zeroise($day, 2);
 	}
@@ -240,13 +240,13 @@
 
 
 function single_month_title($prefix = '', $display = true ) {
-	global $m, $monthnum, $month, $year;
+	global $m, $monthnum, $wp_locale, $year;
 	if ( !empty($monthnum) && !empty($year) ) {
 		$my_year = $year;
-		$my_month = $month[str_pad($monthnum, 2, '0', STR_PAD_LEFT)];
+		$my_month = $wp_locale->month[str_pad($monthnum, 2, '0', STR_PAD_LEFT)];
 	} elseif ( !empty($m) ) {
 		$my_year = substr($m, 0, 4);
-		$my_month = $month[substr($m, 4, 2)];
+		$my_month = $wp_locale->month[substr($m, 4, 2)];
 	}
 
 	if ( !empty($my_month) && $display )
@@ -292,7 +292,7 @@
 
 
 function get_archives($type='', $limit='', $format='html', $before = '', $after = '', $show_post_count = false) {
-	global $month, $wpdb;
+	global $wp_locale, $wpdb;
 
 	if ( '' == $type )
 		$type = 'monthly';
@@ -330,10 +330,10 @@
 			foreach ( $arcresults as $arcresult ) {
 				$url	= get_month_link($arcresult->year,	$arcresult->month);
 				if ( $show_post_count ) {
-					$text = sprintf('%s %d', $month[zeroise($arcresult->month,2)], $arcresult->year);
+					$text = sprintf('%s %d', $wp_locale->month[zeroise($arcresult->month,2)], $arcresult->year);
 					$after = '&nbsp;('.$arcresult->posts.')' . $afterafter;
 				} else {
-					$text = sprintf('%s %d', $month[zeroise($arcresult->month,2)], $arcresult->year);
+					$text = sprintf('%s %d', $wp_locale->month[zeroise($arcresult->month,2)], $arcresult->year);
 				}
 				echo get_archives_link($url, $text, $format, $before, $after);
 			}
@@ -394,7 +394,7 @@
 
 
 function get_calendar($daylength = 1) {
-	global $wpdb, $m, $monthnum, $year, $timedifference, $month, $month_abbrev, $weekday, $weekday_initial, $weekday_abbrev, $posts;
+	global $wpdb, $m, $monthnum, $year, $timedifference, $wp_locale, $posts;
 
 	// Quick check. If we have no posts at all, abort!
 	if ( !$posts ) {
@@ -450,18 +450,18 @@
 			LIMIT 1");
 
 	echo '<table id="wp-calendar">
-	<caption>' . $month[zeroise($thismonth, 2)] . ' ' . date('Y', $unixmonth) . '</caption>
+	<caption>' . $wp_locale->month[zeroise($thismonth, 2)] . ' ' . date('Y', $unixmonth) . '</caption>
 	<thead>
 	<tr>';
 
-	$day_abbrev = $weekday_initial;
+	$day_abbrev = $wp_locale->weekday_initial;
 	if ( $daylength > 1 )
-		$day_abbrev = $weekday_abbrev;
+		$day_abbrev = $wp_locale->weekday_abbrev;
 
 	$myweek = array();
 
 	for ( $wdcount=0; $wdcount<=6; $wdcount++ ) {
-		$myweek[]=$weekday[($wdcount+$week_begins)%7];
+		$myweek[]=$wp_locale->weekday[($wdcount+$week_begins)%7];
 	}
 
 	foreach ( $myweek as $wd ) {
@@ -476,9 +476,9 @@
 	<tr>';
 
 	if ( $previous ) {
-		echo "\n\t\t".'<td abbr="' . $month[zeroise($previous->month, 2)] . '" colspan="3" id="prev"><a href="' .
-		get_month_link($previous->year, $previous->month) . '" title="' . sprintf(__('View posts for %1$s %2$s'), $month[zeroise($previous->month, 2)],
-			date('Y', mktime(0, 0 , 0, $previous->month, 1, $previous->year))) . '">&laquo; ' . $month_abbrev[$month[zeroise($previous->month, 2)]] . '</a></td>';
+		echo "\n\t\t".'<td abbr="' . $wp_locale->month[zeroise($previous->month, 2)] . '" colspan="3" id="prev"><a href="' .
+		get_month_link($previous->year, $previous->month) . '" title="' . sprintf(__('View posts for %1$s %2$s'), $wp_locale->month[zeroise($previous->month, 2)],
+			date('Y', mktime(0, 0 , 0, $previous->month, 1, $previous->year))) . '">&laquo; ' . $wp_locale->month_abbrev[$wp_locale->month[zeroise($previous->month, 2)]] . '</a></td>';
 	} else {
 		echo "\n\t\t".'<td colspan="3" id="prev" class="pad">&nbsp;</td>';
 	}
@@ -486,9 +486,9 @@
 	echo "\n\t\t".'<td class="pad">&nbsp;</td>';
 
 	if ( $next ) {
-		echo "\n\t\t".'<td abbr="' . $month[zeroise($next->month, 2)] . '" colspan="3" id="next"><a href="' .
-		get_month_link($next->year, $next->month) . '" title="' . sprintf(__('View posts for %1$s %2$s'), $month[zeroise($next->month, 2)],
-			date('Y', mktime(0, 0 , 0, $next->month, 1, $next->year))) . '">' . $month_abbrev[$month[zeroise($next->month, 2)]] . ' &raquo;</a></td>';
+		echo "\n\t\t".'<td abbr="' . $wp_locale->month[zeroise($next->month, 2)] . '" colspan="3" id="next"><a href="' .
+		get_month_link($next->year, $next->month) . '" title="' . sprintf(__('View posts for %1$s %2$s'), $wp_locale->month[zeroise($next->month, 2)],
+			date('Y', mktime(0, 0 , 0, $next->month, 1, $next->year))) . '">' . $wp_locale->month_abbrev[$wp_locale->month[zeroise($next->month, 2)]] . ' &raquo;</a></td>';
 	} else {
 		echo "\n\t\t".'<td colspan="3" id="next" class="pad">&nbsp;</td>';
 	}
@@ -675,19 +675,19 @@
 
 
 function the_weekday() {
-	global $weekday, $id, $post;
-	$the_weekday = $weekday[mysql2date('w', $post->post_date)];
+	global $wp_locale, $id, $post;
+	$the_weekday = $wp_locale->weekday[mysql2date('w', $post->post_date)];
 	$the_weekday = apply_filters('the_weekday', $the_weekday);
 	echo $the_weekday;
 }
 
 
 function the_weekday_date($before='',$after='') {
-	global $weekday, $id, $post, $day, $previousweekday;
+	global $wp_locale, $id, $post, $day, $previousweekday;
 	$the_weekday_date = '';
 	if ( $day != $previousweekday ) {
 		$the_weekday_date .= $before;
-		$the_weekday_date .= $weekday[mysql2date('w', $post->post_date)];
+		$the_weekday_date .= $wp_locale->weekday[mysql2date('w', $post->post_date)];
 		$the_weekday_date .= $after;
 		$previousweekday = $day;
 	}
Index: E:/PHP/WordPress/SVN/wp-settings.php
===================================================================
--- E:/PHP/WordPress/SVN/wp-settings.php	(revision 3655)
+++ E:/PHP/WordPress/SVN/wp-settings.php	(working copy)
@@ -216,6 +216,8 @@
 // Pull in locale data after loading text domain.
 require_once(ABSPATH . WPINC . '/locale.php');
 
+$wp_locale = new WP_Locale();
+
 // Load functions for active theme.
 if ( file_exists(TEMPLATEPATH . "/functions.php") )
 	include(TEMPLATEPATH . "/functions.php");
