Index: wp-includes/l10n.php
===================================================================
--- wp-includes/l10n.php	(revision 13327)
+++ wp-includes/l10n.php	(working copy)
@@ -69,7 +69,7 @@
 	return apply_filters( 'gettext', $translations->translate( $text ), $text, $domain );
 }
 
-function before_last_bar( $string ) {
+function before_last_bar( $string ) {	
 	$last_bar = strrpos( $string, '|' );
 	if ( false == $last_bar )
 		return $string;
@@ -310,11 +310,36 @@
 		$mo->merge_with( $l10n[$domain] );
 
 	$l10n[$domain] = &$mo;
-
+		
 	return true;
 }
 
 /**
+ * Unloads translations for a domain
+ * 
+ * @since 3.0
+ * @param string $domain Textdomain to be unloaded
+ */
+function unload_textdomain( $domain ) {
+	global $l10n;
+
+	$plugin_override = apply_filters( 'override_unload_textdomain', false, $domain );
+
+	if ( true == $plugin_override ) {
+		return true;
+	}
+
+	do_action( 'unload_textdomain', $domain );
+	
+	if ( isset( $l10n[$domain] ) ) {
+		unset( $l10n[$domain] );
+		return true;
+	}
+	
+	return false;
+}
+
+/**
  * Loads default translated strings based on locale.
  *
  * Loads the .mo file in WP_LANG_DIR constant path from WordPress root. The
@@ -344,7 +369,7 @@
  * @param string $plugin_rel_path Optional. Relative path to WP_PLUGIN_DIR. This is the preferred argument to use. It takes precendence over $abs_rel_path
  */
 function load_plugin_textdomain( $domain, $abs_rel_path = false, $plugin_rel_path = false ) {
-	$locale = get_locale();
+	$locale = apply_filter( 'plugin_locale', get_locale(), $domain );
 
 	if ( false !== $plugin_rel_path	) {
 		$path = WP_PLUGIN_DIR . '/' . trim( $plugin_rel_path, '/' );
@@ -366,19 +391,11 @@
  *
  * @param string $domain Unique identifier for retrieving translated strings
  */
-function load_muplugin_textdomain($domain, $path = false) {
-	$locale = get_locale();
-	if ( empty($locale) )
-		$locale = 'en_US';
+function load_muplugin_textdomain( $domain ) {
+	$locale = apply_filter( 'plugin_locale', get_locale(), $domain );
 
-	/* @todo $path is not used.  Was it ever used and was it expected to be an arbitrary absolute dir?
-	 * Ideally, it should be relative to WPMU_PLUGIN_DUR.
-	if ( false === $path )
-		$path = WPMU_PLUGIN_DIR;
-	*/
-
 	$mofile = WPMU_PLUGIN_DIR . "/$domain-$locale.mo";
-	load_textdomain($domain, $mofile);
+	load_textdomain( $domain, $mofile );
 }
 
 /**
@@ -393,8 +410,8 @@
  *
  * @param string $domain Unique identifier for retrieving translated strings
  */
-function load_theme_textdomain($domain, $path = false) {
-	$locale = get_locale();
+function load_theme_textdomain( $domain, $path = false ) {
+	$locale = apply_filter( 'theme_locale', get_locale(), $domain );
 
 	$path = ( empty( $path ) ) ? get_template_directory() : $path;
 
@@ -414,7 +431,7 @@
  *
  * @param string $domain Unique identifier for retrieving translated strings
  */
-function load_child_theme_textdomain($domain, $path = false) {
+function load_child_theme_textdomain( $domain, $path = false ) {
         $locale = get_locale();
 
         $path = ( empty( $path ) ) ? get_stylesheet_directory() : $path;
