<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[29630] trunk: Language packs: No WPLANG anymore.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://core.trac.wordpress.org/changeset/29630">29630</a></dd>
<dt>Author</dt> <dd>ocean90</dd>
<dt>Date</dt> <dd>2014-08-26 19:58:33 +0000 (Tue, 26 Aug 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Language packs: No WPLANG anymore.

* The WPLANG constant is no longer needed. Remove define('WPLANG', ''); from wp-config-sample.php. Populate WPLANG option based on the WPLANG constant. When get_option('WPLANG') is an empty string it will override WPLANG.
* Introduce translations_api() which is available to communicate with the translation API. Move translation install related functions to a new file.
* Replace mu_dropdown_languages() with wp_dropdown_languages(). wp_dropdown_languages() is now populated by the translation API.
* Remove wp_install_load_language() and allow load_default_textdomain() to switch a core translation.

fixes <a href="http://core.trac.wordpress.org/ticket/13069">#13069</a>, <a href="http://core.trac.wordpress.org/ticket/15677">#15677</a>, <a href="http://core.trac.wordpress.org/ticket/19760">#19760</a>, <a href="http://core.trac.wordpress.org/ticket/28730">#28730</a>, <a href="http://core.trac.wordpress.org/ticket/29281">#29281</a>. </pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpadminincludesupgradephp">trunk/src/wp-admin/includes/upgrade.php</a></li>
<li><a href="#trunksrcwpadmininstallphp">trunk/src/wp-admin/install.php</a></li>
<li><a href="#trunksrcwpadminnetworksettingsphp">trunk/src/wp-admin/network/settings.php</a></li>
<li><a href="#trunksrcwpadminoptionsgeneralphp">trunk/src/wp-admin/options-general.php</a></li>
<li><a href="#trunksrcwpadminoptionsphp">trunk/src/wp-admin/options.php</a></li>
<li><a href="#trunksrcwpadminsetupconfigphp">trunk/src/wp-admin/setup-config.php</a></li>
<li><a href="#trunksrcwpincludesl10nphp">trunk/src/wp-includes/l10n.php</a></li>
<li><a href="#trunksrcwpincludesversionphp">trunk/src/wp-includes/version.php</a></li>
<li><a href="#trunkwpconfigsamplephp">trunk/wp-config-sample.php</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunksrcwpadminincludestranslationinstallphp">trunk/src/wp-admin/includes/translation-install.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpadminincludestranslationinstallphpfromrev29628trunksrcwpadminincludesupgradephp"></a>
<div class="copfile"><h4>Copied: trunk/src/wp-admin/includes/translation-install.php (from rev 29628, trunk/src/wp-admin/includes/upgrade.php) (0 => 29630)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/includes/translation-install.php                              (rev 0)
+++ trunk/src/wp-admin/includes/translation-install.php 2014-08-26 19:58:33 UTC (rev 29630)
</span><span class="lines">@@ -0,0 +1,206 @@
</span><ins>+<?php
+/**
+ * WordPress Translation Install Administration API
+ *
+ * @package WordPress
+ * @subpackage Administration
+ */
+
+
+/**
+ * Retrieve translations from WordPress Translation API.
+ *
+ * @since 4.0.0
+ *
+ * @param string       $type Type of translations. Accepts 'plugins', 'themes', 'core'.
+ * @param array|object $args Translation API arguments. Optional.
+ * @return object|WP_Error On success an object of translations, WP_Error on failure.
+ */
+function translations_api( $type, $args = null ) {
+       include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
+
+       if ( ! in_array( $type, array( 'plugins', 'themes', 'core' ) ) ) {
+               return  new WP_Error( 'invalid_type', __( 'Invalid translation type.' ) );
+       }
+
+       /**
+        * Allows a plugin to override the WordPress.org Translation Install API entirely.
+        *
+        * @since 4.0.0
+        *
+        * @param bool|array  $result The result object. Default false.
+        * @param string      $type   The type of translations being requested.
+        * @param object      $args   Translation API arguments.
+        */
+       $res = apply_filters( 'translations_api', false, $type, $args );
+
+       if ( false === $res ) {
+               $url = $http_url = 'http://api.wordpress.org/translations/' . $type . '/1.0/';
+               if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) {
+                       $url = set_url_scheme( $url, 'https' );
+               }
+
+               $options = array(
+                       'timeout' => 3,
+                       'body' => array(
+                               'wp_version' => $wp_version,
+                               'locale'     => get_locale(),
+                               'version'    => $args['version'], // Version of plugin, theme or core
+                       ),
+               );
+
+               if ( 'core' !== $type ) {
+                       $options['body']['slug'] = $args['slug']; // Plugin or theme slug
+               }
+
+               $request = wp_remote_post( $url, $options );
+
+               if ( $ssl && is_wp_error( $request ) ) {
+                       trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="https://wordpress.org/support/">support forums</a>.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE );
+
+                       $request = wp_remote_post( $http_url, $options );
+               }
+
+               if ( is_wp_error( $request ) ) {
+                       $res = new WP_Error( 'translations_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="https://wordpress.org/support/">support forums</a>.' ), $request->get_error_message() );
+               } else {
+                       $res = json_decode( wp_remote_retrieve_body( $request ), true );
+                       if ( ! is_object( $res ) && ! is_array( $res ) ) {
+                               $res = new WP_Error( 'translations_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="https://wordpress.org/support/">support forums</a>.' ), wp_remote_retrieve_body( $request ) );
+                       }
+               }
+       }
+
+       /**
+        * Filter the Translation Install API response results.
+        *
+        * @since 4.0.0
+        *
+        * @param object|WP_Error $res  Response object or WP_Error.
+        * @param string          $type The type of translations being requested.
+        * @param object          $args Translation API arguments.
+        */
+       return apply_filters( 'translations_api_result', $res, $type, $args );
+}
+
+/**
+ * Get available translations from the WordPress.org API.
+ *
+ * @since 4.0.0
+ *
+ * @see translations_api()
+ *
+ * @return array Array of translations, each an array of data. If the API response results
+ *               in an error, an empty array will be returned.
+ */
+function wp_get_available_translations() {
+       if ( ! defined( 'WP_INSTALLING' ) && false !== ( $translations = get_site_transient( 'available_translations' ) ) ) {
+               return $translations;
+       }
+
+       include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
+
+       $api = translations_api( 'core', array( 'version' => $wp_version ) );
+
+       if ( is_wp_error( $api ) || empty( $api['translations'] ) ) {
+               return array();
+       }
+
+       $translations = array();
+       // Key the array with the language code for now.
+       foreach ( $api['translations'] as $translation ) {
+               $translations[ $translation['language'] ] = $translation;
+       }
+
+       if ( ! defined( 'WP_INSTALLING' ) ) {
+               set_site_transient( 'available_translations', $translations, 3 * HOUR_IN_SECONDS );
+       }
+
+       return $translations;
+}
+
+/**
+ * Output the select form for the language selection on the installation screen.
+ *
+ * @since 4.0.0
+ *
+ * @param array $languages Array of available languages (populated via the Translation API).
+ */
+function wp_install_language_form( $languages ) {
+       global $wp_local_package;
+
+       $installed_languages = get_available_languages();
+
+       echo "<label class='screen-reader-text' for='language'>Select a default language</label>\n";
+       echo "<select size='14' name='language' id='language'>\n";
+       echo '<option value="" lang="en" selected="selected" data-continue="Continue" data-installed="1">English (United States)</option>';
+       echo "\n";
+
+       if ( ! empty( $wp_local_package ) && isset( $languages[ $wp_local_package ] ) ) {
+               if ( isset( $languages[ $wp_local_package ] ) ) {
+                       $language = $languages[ $wp_local_package ];
+                       echo '<option value="' . esc_attr( $language['language'] ) . '" lang="' . esc_attr( $language['iso'][1] ) . '">' . esc_html( $language['native_name'] ) . "</option>\n";
+                       unset( $languages[ $wp_local_package ] );
+               }
+       }
+
+       foreach ( $languages as $language ) {
+               printf( '<option value="%s" lang="%s" data-continue="%s"%s>%s</option>' . "\n",
+                       esc_attr( $language['language'] ),
+                       esc_attr( $language['iso'][1] ),
+                       esc_attr( $language['strings']['continue'] ),
+                       in_array( $language['language'], $installed_languages ) ? ' data-installed="1"' : '',
+                       esc_html( $language['native_name'] ) );
+       }
+       echo "</select>\n";
+       echo '<p class="step"><span class="spinner"></span><input id="language-continue" type="submit" class="button button-primary button-large" value="Continue" /></p>';
+}
+
+/**
+ * Download a language pack.
+ *
+ * @since 4.0.0
+ *
+ * @see wp_get_available_translations()
+ *
+ * @param string $download Language code to download.
+ * @return string|bool Returns the language code if successfully downloaded
+ *                     (or already installed), or false on failure.
+ */
+function wp_download_language_pack( $download ) {
+       // Check if the translation is already installed.
+       if ( in_array( $download, get_available_languages() ) ) {
+               return $download;
+       }
+
+       if ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS ) {
+               return false;
+       }
+
+       // Confirm the translation is one we can download.
+       $translations = wp_get_available_translations();
+       if ( ! $translations ) {
+               return false;
+       }
+       foreach ( $translations as $translation ) {
+               if ( $translation['language'] === $download ) {
+                       $translation_to_load = true;
+                       break;
+               }
+       }
+
+       if ( empty( $translation_to_load ) ) {
+               return false;
+       }
+       $translation = (object) $translation;
+
+       require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
+       $skin = new Automatic_Upgrader_Skin;
+       $upgrader = new Language_Pack_Upgrader( $skin );
+       $translation->type = 'core';
+       /**
+        * @todo failures (such as non-direct FS)
+        */
+       $result = $upgrader->upgrade( $translation, array( 'clear_update_cache' => false ) );
+       return $translation->language;
+}
</ins></span></pre></div>
<a id="trunksrcwpadminincludesupgradephp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/includes/upgrade.php (29629 => 29630)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/includes/upgrade.php  2014-08-26 19:05:44 UTC (rev 29629)
+++ trunk/src/wp-admin/includes/upgrade.php     2014-08-26 19:58:33 UTC (rev 29630)
</span><span class="lines">@@ -437,6 +437,9 @@
</span><span class="cx">  if ( $wp_current_db_version < 26691 )
</span><span class="cx">          upgrade_380();
</span><span class="cx"> 
</span><ins>+       if ( $wp_current_db_version < 29630 )
+               upgrade_400();
+
</ins><span class="cx">   maybe_disable_link_manager();
</span><span class="cx"> 
</span><span class="cx">  maybe_disable_automattic_widgets();
</span><span class="lines">@@ -1304,7 +1307,26 @@
</span><span class="cx">          deactivate_plugins( array( 'mp6/mp6.php' ), true );
</span><span class="cx">  }
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> /**
</span><ins>+ * Execute changes made in WordPress 4.0.0.
+ *
+ * @since 4.0.0
+ */
+function upgrade_400() {
+       global $wp_current_db_version;
+       if ( $wp_current_db_version < 29630 ) {
+               if ( ! is_multisite() && false === get_option( 'WPLANG' ) ) {
+                       if ( defined( 'WPLANG' ) && ( '' !== WPLANG ) && in_array( WPLANG, get_available_languages() ) ) {
+                               update_option( 'WPLANG', WPLANG );
+                       } else {
+                               update_option( 'WPLANG', '' );
+                       }
+               }
+       }
+}
+
+/**
</ins><span class="cx">  * Execute network level changes
</span><span class="cx">  *
</span><span class="cx">  * @since 3.0.0
</span><span class="lines">@@ -1419,7 +1441,7 @@
</span><span class="cx">  */
</span><span class="cx"> function maybe_create_table($table_name, $create_ddl) {
</span><span class="cx">  global $wpdb;
</span><del>-       
</del><ins>+
</ins><span class="cx">   $query = $wpdb->prepare( "SHOW TABLES LIKE %s", $wpdb->esc_like( $table_name ) );
</span><span class="cx"> 
</span><span class="cx">  if ( $wpdb->get_var( $query ) == $table_name ) {
</span><span class="lines">@@ -2192,145 +2214,3 @@
</span><span class="cx">  dbDelta( $ms_queries );
</span><span class="cx"> }
</span><span class="cx"> endif;
</span><del>-
-/**
- * Output the input fields for the language selection form on the installation screen.
- *
- * @since 4.0.0
- *
- * @see wp_get_available_translations_from_api()
- * 
- * @param array $languages Array of available languages (populated via the Translations API).
- */
-function wp_install_language_form( $languages ) {
-       $installed_languages = get_available_languages();
-
-       echo "<label class='screen-reader-text' for='language'>Select a default language</label>\n";
-       echo "<select size='14' name='language' id='language'>\n";
-       echo '<option value="" lang="en" selected="selected" data-continue="Continue" data-installed="1">English (United States)</option>';
-       echo "\n";
-
-       if ( defined( 'WPLANG' ) && ( '' !== WPLANG ) && ( 'en_US' !== WPLANG ) ) {
-               if ( isset( $languages[ WPLANG ] ) ) {
-                       $language = $languages[ WPLANG ];
-                       echo '<option value="' . esc_attr( $language['language'] ) . '" lang="' . esc_attr( $language['iso'][1] ) . '">' . esc_html( $language['native_name'] ) . "</option>\n";
-               }
-       }
-
-       foreach ( $languages as $language ) {
-               printf( '<option value="%s" lang="%s" data-continue="%s"%s>%s</option>' . "\n",
-                       esc_attr( $language['language'] ),
-                       esc_attr( $language['iso'][1] ),
-                       esc_attr( $language['strings']['continue'] ),
-                       in_array( $language['language'], $installed_languages ) ? ' data-installed="1"' : '',
-                       esc_html( $language['native_name'] ) );
-       }
-       echo "</select>\n";
-       echo '<p class="step"><span class="spinner"></span><input id="language-continue" type="submit" class="button button-primary button-large" value="Continue" /></p>';
-}
-
-/**
- * Get available translations from the WordPress.org API.
- *
- * @since 4.0.0
- *
- * @see wp_remote_post()
- *
- * @return array Array of translations, each an array of data.
- */
-function wp_get_available_translations_from_api() {
-       $url = 'http://api.wordpress.org/translations/core/1.0/';
-       if ( wp_http_supports( array( 'ssl' ) ) ) {
-               $url = set_url_scheme( $url, 'https' );
-       }
-
-       $options = array(
-               'timeout' => 3,
-               'body' => array( 'version' => $GLOBALS['wp_version'] ),
-       );
-
-       $response = wp_remote_post( $url, $options );
-       $body = wp_remote_retrieve_body( $response );
-       if ( $body && $body = json_decode( $body, true ) ) {
-               $translations = array();
-               // Key the array with the language code for now
-               foreach ( $body['translations'] as $translation ) {
-                       $translations[ $translation['language'] ] = $translation;
-               }
-               return $translations;
-       }
-       return false;
-}
-
-/**
- * Download a language pack.
- *
- * @since 4.0.0
- *
- * @see wp_get_available_translations_from_api()
- *
- * @param string $download Language code to download.
- * @return string|bool Returns the language code if successfully downloaded
- *                     (or already installed), or false on failure.
- */
-function wp_install_download_language_pack( $download ) {
-       // Check if the translation is already installed.
-       if ( in_array( $download, get_available_languages() ) ) {
-               return $download;
-       }
-
-       // Confirm the translation is one we can download.
-       $translations = wp_get_available_translations_from_api();
-       if ( ! $translations ) {
-               return false;
-       }
-       foreach ( $translations as $translation ) {
-               if ( $translation['language'] === $download ) {
-                       $translation_to_load = true;
-                       break;
-               }
-       }
-
-       if ( empty( $translation_to_load ) ) {
-               return false;
-       }
-       $translation = (object) $translation;
-
-       require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-       $skin = new Automatic_Upgrader_Skin;
-       $upgrader = new Language_Pack_Upgrader( $skin );
-       $translation->type = 'core';
-       /**
-        * @todo failures (such as non-direct FS)
-        */
-       $upgrader->upgrade( $translation, array( 'clear_update_cache' => false ) );
-       return $translation->language;
-}
-
-/**
- * Load a translation during the install process.
- *
- * @since 4.0.0
- *
- * @see load_textdomain()
- *
- * @param string $translation Translation to load.
- * @return string|bool Returns the language code if successfully loaded,
- *                     or false on failure.
- */
-function wp_install_load_language( $translation ) {
-       if ( ! empty( $translation ) ) {
-               if ( in_array( $translation, get_available_languages() ) ) {
-                       $translation_to_load = $translation;
-               }
-       }
-
-       if ( empty( $translation_to_load ) ) {
-               return false;
-       }
-
-       unload_textdomain( 'default' ); // Start over.
-       load_textdomain( 'default', WP_LANG_DIR . "/{$translation_to_load}.mo" );
-       load_textdomain( 'default', WP_LANG_DIR . "/admin-{$translation_to_load}.mo" );
-       return $translation_to_load;
-}
</del></span></pre></div>
<a id="trunksrcwpadmininstallphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/install.php (29629 => 29630)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/install.php   2014-08-26 19:05:44 UTC (rev 29629)
+++ trunk/src/wp-admin/install.php      2014-08-26 19:58:33 UTC (rev 29630)
</span><span class="lines">@@ -38,6 +38,9 @@
</span><span class="cx"> /** Load WordPress Administration Upgrade API */
</span><span class="cx"> require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
</span><span class="cx"> 
</span><ins>+/** Load WordPress Translation Install API */
+require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
+
</ins><span class="cx"> /** Load wpdb */
</span><span class="cx"> require_once( ABSPATH . WPINC . '/wp-db.php' );
</span><span class="cx"> 
</span><span class="lines">@@ -178,10 +181,15 @@
</span><span class="cx">  die( '<h1>' . __( 'Configuration Error' ) . '</h1><p>' . __( 'Your <code>wp-config.php</code> file has an empty database table prefix, which is not supported.' ) . '</p></body></html>' );
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+$langugage = '';
+if ( ! empty( $_REQUEST['language'] ) ) {
+       $langugage = preg_replace( '/[^a-zA-Z_]/', '', $_REQUEST['language'] );
+}
+
</ins><span class="cx"> switch($step) {
</span><span class="cx">  case 0: // Step 0
</span><span class="cx"> 
</span><del>-               if ( empty( $_GET['language'] ) && ( $languages = wp_get_available_translations_from_api() ) ) {
</del><ins>+                if ( empty( $langugage ) && ( $languages = wp_get_available_translations() ) ) {
</ins><span class="cx">                   display_header( 'language-chooser' );
</span><span class="cx">                  echo '<form id="setup" method="post" action="?step=1">';
</span><span class="cx">                  wp_install_language_form( $languages );
</span><span class="lines">@@ -192,10 +200,10 @@
</span><span class="cx">          // Deliberately fall through if we can't reach the translations API.
</span><span class="cx"> 
</span><span class="cx">  case 1: // Step 1, direct link or from language chooser.
</span><del>-               if ( ! empty( $_REQUEST['language'] ) ) {
-                       $loaded_language = wp_install_download_language_pack( $_REQUEST['language'] );
</del><ins>+                if ( ! empty( $langugage ) ) {
+                       $loaded_language = wp_download_language_pack( $langugage );
</ins><span class="cx">                   if ( $loaded_language ) {
</span><del>-                               wp_install_load_language( $loaded_language );
</del><ins>+                                load_default_textdomain( $loaded_language );
</ins><span class="cx">                   }
</span><span class="cx">          }
</span><span class="cx"> 
</span><span class="lines">@@ -211,8 +219,8 @@
</span><span class="cx">          display_setup_form();
</span><span class="cx">          break;
</span><span class="cx">  case 2:
</span><del>-               if ( !empty( $_REQUEST['language'] ) ) {
-                       $loaded_language = wp_install_load_language( $_REQUEST['language'] );
</del><ins>+                if ( ! empty( $langugage ) && load_default_textdomain( $langugage ) ) {
+                       $loaded_language = $langugage;
</ins><span class="cx">           } else {
</span><span class="cx">                  $loaded_language = 'en_US';
</span><span class="cx">          }
</span><span class="lines">@@ -226,8 +234,8 @@
</span><span class="cx">          $user_name = isset($_POST['user_name']) ? trim( wp_unslash( $_POST['user_name'] ) ) : '';
</span><span class="cx">          $admin_password = isset($_POST['admin_password']) ? wp_unslash( $_POST['admin_password'] ) : '';
</span><span class="cx">          $admin_password_check = isset($_POST['admin_password2']) ? wp_unslash( $_POST['admin_password2'] ) : '';
</span><del>-               $admin_email  = isset( $_POST['admin_email']  ) ?trim( wp_unslash( $_POST['admin_email'] ) ) : '';
-               $public       = isset( $_POST['blog_public']  ) ? (int) $_POST['blog_public'] : 0;
</del><ins>+                $admin_email  = isset( $_POST['admin_email'] ) ?trim( wp_unslash( $_POST['admin_email'] ) ) : '';
+               $public       = isset( $_POST['blog_public'] ) ? (int) $_POST['blog_public'] : 0;
</ins><span class="cx"> 
</span><span class="cx">          // Check e-mail address.
</span><span class="cx">          $error = false;
</span></span></pre></div>
<a id="trunksrcwpadminnetworksettingsphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/network/settings.php (29629 => 29630)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/network/settings.php  2014-08-26 19:05:44 UTC (rev 29629)
+++ trunk/src/wp-admin/network/settings.php     2014-08-26 19:58:33 UTC (rev 29630)
</span><span class="lines">@@ -102,7 +102,7 @@
</span><span class="cx">                                  <input name="admin_email" type="email" id="admin_email" class="regular-text" value="<?php echo esc_attr( get_site_option( 'admin_email' ) ) ?>" />
</span><span class="cx">                                  <p class="description">
</span><span class="cx">                                          <?php _e( 'This email address will receive notifications. Registration and support emails will also come from this address.' ); ?>
</span><del>-                                       </p>      
</del><ins>+                                        </p>
</ins><span class="cx">                           </td>
</span><span class="cx">                  </tr>
</span><span class="cx">          </table>
</span><span class="lines">@@ -165,7 +165,7 @@
</span><span class="cx"> <?php echo esc_textarea( $limited_email_domains == '' ? '' : implode( "\n", (array) $limited_email_domains ) ); ?></textarea>
</span><span class="cx">                                  <p class="description">
</span><span class="cx">                                          <?php _e( 'If you want to limit site registrations to certain domains. One domain per line.' ) ?>
</span><del>-                                       </p>      
</del><ins>+                                        </p>
</ins><span class="cx">                           </td>
</span><span class="cx">                  </tr>
</span><span class="cx"> 
</span><span class="lines">@@ -231,7 +231,7 @@
</span><span class="cx"> <?php echo esc_textarea( get_site_option( 'first_comment' ) ) ?></textarea>
</span><span class="cx">                                  <p class="description">
</span><span class="cx">                                          <?php _e( 'The first comment on a new site.' ) ?>
</span><del>-                                       </p>      
</del><ins>+                                        </p>
</ins><span class="cx">                           </td>
</span><span class="cx">                  </tr>
</span><span class="cx">                  <tr>
</span><span class="lines">@@ -273,25 +273,34 @@
</span><span class="cx">                  </tr>
</span><span class="cx">          </table>
</span><span class="cx"> 
</span><del>-<?php
</del><ins>+                <?php
</ins><span class="cx">           $languages = get_available_languages();
</span><span class="cx">          if ( ! empty( $languages ) ) {
</span><del>-                       $lang = get_site_option( 'WPLANG' );
-?>
-               <h3><?php _e( 'Language Settings' ); ?></h3>
-               <table class="form-table">
</del><ins>+                        ?>
+                       <h3><?php _e( 'Language Settings' ); ?></h3>
+                       <table class="form-table">
</ins><span class="cx">                           <tr>
</span><span class="cx">                                  <th><label for="WPLANG"><?php _e( 'Default Language' ); ?></label></th>
</span><span class="cx">                                  <td>
</span><del>-                                               <select name="WPLANG" id="WPLANG">
-                                                       <?php mu_dropdown_languages( $languages, get_site_option( 'WPLANG' ) ); ?>
-                                               </select>
</del><ins>+                                                <?php
+                                               $lang = get_site_option( 'WPLANG' );
+                                               if ( ! in_array( $lang, $languages ) ) {
+                                                       $lang = '';
+                                               }
+
+                                               wp_dropdown_languages( array(
+                                                       'name'      => 'WPLANG',
+                                                       'id'        => 'WPLANG',
+                                                       'selected'  => $lang,
+                                                       'languages' => $languages,
+                                               ) );
+                                               ?>
</ins><span class="cx">                                   </td>
</span><span class="cx">                          </tr>
</span><del>-               </table>
-<?php
-               } // languages
-?>
</del><ins>+                        </table>
+                       <?php
+               }
+               ?>
</ins><span class="cx"> 
</span><span class="cx">          <h3><?php _e( 'Menu Settings' ); ?></h3>
</span><span class="cx">          <table id="menu" class="form-table">
</span><span class="lines">@@ -324,7 +333,7 @@
</span><span class="cx">                  </tr>
</span><span class="cx">          </table>
</span><span class="cx"> 
</span><del>-               <?php 
</del><ins>+                <?php
</ins><span class="cx">           /**
</span><span class="cx">           * Fires at the end of the Network Settings form, before the submit button.
</span><span class="cx">           *
</span></span></pre></div>
<a id="trunksrcwpadminoptionsgeneralphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/options-general.php (29629 => 29630)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/options-general.php   2014-08-26 19:05:44 UTC (rev 29629)
+++ trunk/src/wp-admin/options-general.php      2014-08-26 19:58:33 UTC (rev 29630)
</span><span class="lines">@@ -302,23 +302,43 @@
</span><span class="cx"> </select></td>
</span><span class="cx"> </tr>
</span><span class="cx"> <?php do_settings_fields('general', 'default'); ?>
</span><ins>+
</ins><span class="cx"> <?php
</span><del>-       $languages = get_available_languages();
-       if ( $languages ) :
-?>
</del><ins>+$languages = get_available_languages();
+if ( ! empty( $languages ) ) {
+       ?>
</ins><span class="cx">   <tr>
</span><del>-               <th width="33%" scope="row"><label for="WPLANG"><?php _e('Site Language') ?></label></th>
</del><ins>+                <th width="33%" scope="row"><label for="WPLANG"><?php _e( 'Site Language' ); ?></label></th>
</ins><span class="cx">           <td>
</span><del>-                       <?php wp_dropdown_languages( array(
</del><ins>+                        <?php
+                       $locale = get_locale();
+                       if ( ! in_array( $locale, $languages ) ) {
+                               $locale = '';
+                       }
+
+                       wp_dropdown_languages( array(
</ins><span class="cx">                           'name'      => 'WPLANG',
</span><span class="cx">                          'id'        => 'WPLANG',
</span><del>-                               'selected'  => get_option( 'WPLANG' ),
</del><ins>+                                'selected'  => $locale,
</ins><span class="cx">                           'languages' => $languages,
</span><del>-                       ) ); ?>
</del><ins>+                        ) );
+
+                       // Add note about deprecated WPLANG constant.
+                       if ( defined( 'WPLANG' ) && ( '' !== WPLANG ) && $locale !== WPLANG ) {
+                               if ( is_super_admin() ) {
+                                       ?>
+                                       <p class="description">
+                                               <strong><?php _e( 'Note:' ); ?></strong> <?php printf( __( 'The %s constant in your %s file is no longer needed.' ), '<code>WPLANG</code>', '<code>wp-config.php</code>' ); ?>
+                                       </p>
+                                       <?php
+                               }
+                               _deprecated_argument( 'define()', '4.0', sprintf( __( 'The %s constant in your %s file is no longer needed.' ), 'WPLANG', 'wp-config.php' ) );
+                       }
+                       ?>
</ins><span class="cx">           </td>
</span><span class="cx">  </tr>
</span><del>-<?php
-       endif;
</del><ins>+        <?php
+}
</ins><span class="cx"> ?>
</span><span class="cx"> </table>
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunksrcwpadminoptionsphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/options.php (29629 => 29630)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/options.php   2014-08-26 19:05:44 UTC (rev 29629)
+++ trunk/src/wp-admin/options.php      2014-08-26 19:58:33 UTC (rev 29630)
</span><span class="lines">@@ -151,7 +151,7 @@
</span><span class="cx">          $options = $whitelist_options[ $option_page ];
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       // Handle custom date/time formats
</del><ins>+        // Handle custom date/time formats.
</ins><span class="cx">   if ( 'general' == $option_page ) {
</span><span class="cx">          if ( !empty($_POST['date_format']) && isset($_POST['date_format_custom']) && '\c\u\s\t\o\m' == wp_unslash( $_POST['date_format'] ) )
</span><span class="cx">                  $_POST['date_format'] = $_POST['date_format_custom'];
</span><span class="lines">@@ -180,6 +180,14 @@
</span><span class="cx">                  }
</span><span class="cx">                  update_option( $option, $value );
</span><span class="cx">          }
</span><ins>+
+               // Switch translation in case WPLANG was changed.
+               $language = get_option( 'WPLANG' );
+               if ( $language ) {
+                       load_default_textdomain( $language );
+               } else {
+                       unload_textdomain( 'default' );
+               }
</ins><span class="cx">   }
</span><span class="cx"> 
</span><span class="cx">  /**
</span></span></pre></div>
<a id="trunksrcwpadminsetupconfigphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/setup-config.php (29629 => 29630)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/setup-config.php      2014-08-26 19:05:44 UTC (rev 29629)
+++ trunk/src/wp-admin/setup-config.php 2014-08-26 19:58:33 UTC (rev 29630)
</span><span class="lines">@@ -32,8 +32,12 @@
</span><span class="cx"> 
</span><span class="cx"> require( ABSPATH . 'wp-settings.php' );
</span><span class="cx"> 
</span><del>-require( ABSPATH . 'wp-admin/includes/upgrade.php' );
</del><ins>+/** Load WordPress Administration Upgrade API */
+require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
</ins><span class="cx"> 
</span><ins>+/** Load WordPress Translation Install API */
+require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
+
</ins><span class="cx"> nocache_headers();
</span><span class="cx"> 
</span><span class="cx"> // Support wp-config-sample.php one level up, for the develop repo.
</span><span class="lines">@@ -85,10 +89,13 @@
</span><span class="cx"> <?php
</span><span class="cx"> } // end function setup_config_display_header();
</span><span class="cx"> 
</span><ins>+$language = '';
+if ( ! empty( $_REQUEST['language'] ) ) {
+       $language = preg_replace( '/[^a-zA-Z_]/', '', $_REQUEST['language'] );
+}
</ins><span class="cx"> switch($step) {
</span><span class="cx">  case -1:
</span><del>-
-               if ( empty( $_GET['language'] ) && ( $languages = wp_get_available_translations_from_api() ) ) {
</del><ins>+                if ( empty( $language ) && ( $languages = wp_get_available_translations() ) ) {
</ins><span class="cx">                   setup_config_display_header( 'language-chooser' );
</span><span class="cx">                  echo '<form id="setup" method="post" action="?step=0">';
</span><span class="cx">                  wp_install_language_form( $languages );
</span><span class="lines">@@ -99,10 +106,10 @@
</span><span class="cx">          // Deliberately fall through if we can't reach the translations API.
</span><span class="cx"> 
</span><span class="cx">  case 0:
</span><del>-               if ( ! empty( $_REQUEST['language'] ) ) {
-                       $loaded_language = wp_install_download_language_pack( $_REQUEST['language'] );
</del><ins>+                if ( ! empty( $language ) ) {
+                       $loaded_language = wp_download_language_pack( $language );
</ins><span class="cx">                   if ( $loaded_language ) {
</span><del>-                               wp_install_load_language( $loaded_language );
</del><ins>+                                load_default_textdomain( $loaded_language );
</ins><span class="cx">                   }
</span><span class="cx">          }
</span><span class="cx"> 
</span><span class="lines">@@ -136,7 +143,7 @@
</span><span class="cx">  break;
</span><span class="cx"> 
</span><span class="cx">  case 1:
</span><del>-               $loaded_language = wp_install_load_language( $_REQUEST['language'] );
</del><ins>+                load_default_textdomain( $language );
</ins><span class="cx">           setup_config_display_header();
</span><span class="cx">  ?>
</span><span class="cx"> <form method="post" action="setup-config.php?step=2">
</span><span class="lines">@@ -169,14 +176,14 @@
</span><span class="cx">          </tr>
</span><span class="cx">  </table>
</span><span class="cx">  <?php if ( isset( $_GET['noapi'] ) ) { ?><input name="noapi" type="hidden" value="1" /><?php } ?>
</span><del>-       <input type="hidden" name="language" value="<?php echo esc_attr( $loaded_language ); ?>" />
</del><ins>+        <input type="hidden" name="language" value="<?php echo esc_attr( $language ); ?>" />
</ins><span class="cx">   <p class="step"><input name="submit" type="submit" value="<?php echo htmlspecialchars( __( 'Submit' ), ENT_QUOTES ); ?>" class="button button-large" /></p>
</span><span class="cx"> </form>
</span><span class="cx"> <?php
</span><span class="cx">  break;
</span><span class="cx"> 
</span><span class="cx">  case 2:
</span><del>-       $loaded_language = wp_install_load_language( $_REQUEST['language'] );
</del><ins>+        load_default_textdomain( $language );
</ins><span class="cx">   $dbname = trim( wp_unslash( $_POST[ 'dbname' ] ) );
</span><span class="cx">  $uname = trim( wp_unslash( $_POST[ 'uname' ] ) );
</span><span class="cx">  $pwd = trim( wp_unslash( $_POST[ 'pwd' ] ) );
</span><span class="lines">@@ -189,9 +196,9 @@
</span><span class="cx">          $step_1 .= '&amp;noapi';
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       if ( $loaded_language ) {
-               $step_1 .= '&amp;language=' . $loaded_language;
-               $install .= '?language=' . $loaded_language;
</del><ins>+        if ( ! empty( $language ) ) {
+               $step_1 .= '&amp;language=' . $language;
+               $install .= '?language=' . $language;
</ins><span class="cx">   } else {
</span><span class="cx">          $install .= '?language=en_US';
</span><span class="cx">  }
</span></span></pre></div>
<a id="trunksrcwpincludesl10nphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/l10n.php (29629 => 29630)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/l10n.php   2014-08-26 19:05:44 UTC (rev 29629)
+++ trunk/src/wp-includes/l10n.php      2014-08-26 19:58:33 UTC (rev 29630)
</span><span class="lines">@@ -24,7 +24,7 @@
</span><span class="cx">  * @return string The locale of the blog or from the 'locale' hook.
</span><span class="cx">  */
</span><span class="cx"> function get_locale() {
</span><del>-       global $locale;
</del><ins>+        global $locale, $wp_local_package;
</ins><span class="cx"> 
</span><span class="cx">  if ( isset( $locale ) ) {
</span><span class="cx">          /**
</span><span class="lines">@@ -37,27 +37,35 @@
</span><span class="cx">          return apply_filters( 'locale', $locale );
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       // WPLANG is defined in wp-config.
-       if ( defined( 'WPLANG' ) )
</del><ins>+        if ( isset( $wp_local_package ) ) {
+               $locale = $wp_local_package;
+       }
+
+       // WPLANG was defined in wp-config.
+       if ( defined( 'WPLANG' ) ) {
</ins><span class="cx">           $locale = WPLANG;
</span><ins>+       }
</ins><span class="cx"> 
</span><span class="cx">  // If multisite, check options.
</span><span class="cx">  if ( is_multisite() ) {
</span><span class="cx">          // Don't check blog option when installing.
</span><del>-               if ( defined( 'WP_INSTALLING' ) || ( false === $ms_locale = get_option( 'WPLANG' ) ) )
-                       $ms_locale = get_site_option('WPLANG');
</del><ins>+                if ( defined( 'WP_INSTALLING' ) || ( false === $ms_locale = get_option( 'WPLANG' ) ) ) {
+                       $ms_locale = get_site_option( 'WPLANG' );
+               }
</ins><span class="cx"> 
</span><del>-               if ( $ms_locale !== false )
</del><ins>+                if ( $ms_locale !== false ) {
</ins><span class="cx">                   $locale = $ms_locale;
</span><del>-       } elseif ( ! defined( 'WP_INSTALLING' ) ) {
</del><ins>+                }
+       } else {
</ins><span class="cx">           $db_locale = get_option( 'WPLANG' );
</span><del>-               if ( $db_locale ) {
</del><ins>+                if ( $db_locale !== false ) {
</ins><span class="cx">                   $locale = $db_locale;
</span><span class="cx">          }
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       if ( empty( $locale ) )
</del><ins>+        if ( empty( $locale ) ) {
</ins><span class="cx">           $locale = 'en_US';
</span><ins>+       }
</ins><span class="cx"> 
</span><span class="cx">  /** This filter is documented in wp-includes/l10n.php */
</span><span class="cx">  return apply_filters( 'locale', $locale );
</span><span class="lines">@@ -523,23 +531,32 @@
</span><span class="cx">  * @see load_textdomain()
</span><span class="cx">  *
</span><span class="cx">  * @since 1.5.0
</span><ins>+ *
+ * @param string $locale Optional. Locale to load. Defaults to get_locale().
</ins><span class="cx">  */
</span><del>-function load_default_textdomain() {
-       $locale = get_locale();
</del><ins>+function load_default_textdomain( $locale = null ) {
+       if ( null === $locale ) {
+               $locale = get_locale();
+       }
</ins><span class="cx"> 
</span><del>-       load_textdomain( 'default', WP_LANG_DIR . "/$locale.mo" );
</del><ins>+        // Unload previously loaded strings so we can switch translations.
+       unload_textdomain( 'default' );
</ins><span class="cx"> 
</span><ins>+       $return = load_textdomain( 'default', WP_LANG_DIR . "/$locale.mo" );
+
</ins><span class="cx">   if ( ( is_multisite() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK ) ) && ! file_exists(  WP_LANG_DIR . "/admin-$locale.mo" ) ) {
</span><span class="cx">          load_textdomain( 'default', WP_LANG_DIR . "/ms-$locale.mo" );
</span><del>-               return;
</del><ins>+                return $return;
</ins><span class="cx">   }
</span><span class="cx"> 
</span><del>-       if ( is_admin() || ( defined( 'WP_REPAIRING' ) && WP_REPAIRING ) )
</del><ins>+        if ( is_admin() || defined( 'WP_INSTALLING' ) || ( defined( 'WP_REPAIRING' ) && WP_REPAIRING ) ) {
</ins><span class="cx">           load_textdomain( 'default', WP_LANG_DIR . "/admin-$locale.mo" );
</span><ins>+       }
</ins><span class="cx"> 
</span><span class="cx">  if ( is_network_admin() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK ) )
</span><span class="cx">          load_textdomain( 'default', WP_LANG_DIR . "/admin-network-$locale.mo" );
</span><span class="cx"> 
</span><ins>+       return $return;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><span class="lines">@@ -818,26 +835,67 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><del>- * Language selector. More to come.
</del><ins>+ * Language selector.
</ins><span class="cx">  *
</span><span class="cx">  * @since 4.0.0
</span><span class="cx">  *
</span><span class="cx">  * @see get_available_languages()
</span><ins>+ * @see wp_get_available_translations()
</ins><span class="cx">  *
</span><span class="cx">  * @param array $args Optional arguments. Default empty array.
</span><span class="cx">  */
</span><span class="cx"> function wp_dropdown_languages( $args = array() ) {
</span><del>-       if ( isset( $args['languages'] ) ) {
-               $languages = $args['languages'];
-       } else {
-               $languages = get_available_languages();
</del><ins>+        require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
+
+       $args = wp_parse_args( $args, array(
+               'id'        => '',
+               'name'      => '',
+               'languages' => array(),
+               'selected'  => ''
+       ) );
+
+       if ( empty( $args['languages'] ) ) {
+               return false;
</ins><span class="cx">   }
</span><span class="cx"> 
</span><ins>+       $translations = wp_get_available_translations();
+
+       /*
+        * $args['languages'] should only contain the locales. Find the locale in
+        * $translations to get the native name. Fall back to locale.
+        */
+       $languages = array();
+       foreach ( $args['languages'] as $locale ) {
+               if ( isset( $translations[ $locale ] ) ) {
+                       $translation = $translations[ $locale ];
+                       $languages[] = array(
+                               'language'    => $translation['language'],
+                               'native_name' => $translation['native_name'],
+                               'lang'        => $translation['iso'][1],
+                       );
+               } else {
+                       $languages[] = array(
+                               'language'    => $locale,
+                               'native_name' => $locale,
+                               'lang'        => '',
+                       );
+               }
+       }
+
</ins><span class="cx">   printf( '<select name="%s" id="%s">', esc_attr( $args['name'] ), esc_attr( $args['id'] ) );
</span><del>-       echo '<option value="">en_US</option>';
</del><ins>+
+       // List installed languages.
+       echo '<option value="" lang="en">English (United States)</option>';
</ins><span class="cx">   foreach ( $languages as $language ) {
</span><del>-               $selected = selected( $language, $args['selected'], false );
-               echo '<option value="' . esc_attr( $language ) .'"' . $selected . '>' . $language . '</option>';
</del><ins>+                $selected = selected( $language['language'], $args['selected'], false );
+               printf(
+                       '<option value="%s" lang="%s"%s>%s</option>',
+                       esc_attr( $language['language'] ),
+                       esc_attr( $language['lang'] ),
+                       $selected,
+                       esc_html( $language['native_name'] )
+               );
</ins><span class="cx">   }
</span><ins>+
</ins><span class="cx">   echo '</select>';
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunksrcwpincludesversionphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/version.php (29629 => 29630)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/version.php        2014-08-26 19:05:44 UTC (rev 29629)
+++ trunk/src/wp-includes/version.php   2014-08-26 19:58:33 UTC (rev 29630)
</span><span class="lines">@@ -11,7 +11,7 @@
</span><span class="cx">  *
</span><span class="cx">  * @global int $wp_db_version
</span><span class="cx">  */
</span><del>-$wp_db_version = 29188;
</del><ins>+$wp_db_version = 29630;
</ins><span class="cx"> 
</span><span class="cx"> /**
</span><span class="cx">  * Holds the TinyMCE version
</span></span></pre></div>
<a id="trunkwpconfigsamplephp"></a>
<div class="modfile"><h4>Modified: trunk/wp-config-sample.php (29629 => 29630)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-config-sample.php       2014-08-26 19:05:44 UTC (rev 29629)
+++ trunk/wp-config-sample.php  2014-08-26 19:58:33 UTC (rev 29630)
</span><span class="lines">@@ -62,16 +62,6 @@
</span><span class="cx"> $table_prefix  = 'wp_';
</span><span class="cx"> 
</span><span class="cx"> /**
</span><del>- * WordPress Localized Language, defaults to English.
- *
- * Change this to localize WordPress. A corresponding MO file for the chosen
- * language must be installed to wp-content/languages. For example, install
- * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German
- * language support.
- */
-define('WPLANG', '');
-
-/**
</del><span class="cx">  * For developers: WordPress debugging mode.
</span><span class="cx">  *
</span><span class="cx">  * Change this to true to enable the display of notices during development.
</span></span></pre>
</div>
</div>

</body>
</html>