Permalink
Browse files

Introduce wp_load_translations_early(), which can be used before the …

…locale is properly loaded in order to translate early error strings. Internationalize setup-config.php -- translators no longer have a reason to modify this file. fixes #18180.

git-svn-id: http://svn.automattic.com/wordpress/trunk@19760 1a063a9b-81f0-0310-95a4-ce76da25c4cd
  • Loading branch information...
1 parent e106811 commit 81ed9a7563e5ad4c0edccd059bc4ea7d9c1a4a10 nacin committed Jan 26, 2012
Showing with 207 additions and 105 deletions.
  1. +46 −49 wp-admin/setup-config.php
  2. +7 −3 wp-includes/functions.php
  3. +101 −14 wp-includes/load.php
  4. +5 −2 wp-includes/locale.php
  5. +14 −10 wp-includes/ms-load.php
  6. +5 −3 wp-includes/ms-settings.php
  7. +13 −10 wp-includes/wp-db.php
  8. +12 −10 wp-load.php
  9. +4 −4 wp-settings.php
@@ -41,31 +41,31 @@
define('WP_DEBUG', false);
/**#@-*/
-require_once(ABSPATH . WPINC . '/load.php');
-require_once(ABSPATH . WPINC . '/version.php');
+require(ABSPATH . WPINC . '/load.php');
+require(ABSPATH . WPINC . '/version.php');
+
+// Also loads functions.php, plugin.php, l10n.php, pomo/mo.php (all required by setup-config.php)
+wp_load_translations_early();
+
wp_check_php_mysql_versions();
require_once(ABSPATH . WPINC . '/compat.php');
-require_once(ABSPATH . WPINC . '/functions.php');
require_once(ABSPATH . WPINC . '/class-wp-error.php');
-if (!file_exists(ABSPATH . 'wp-config-sample.php'))
- wp_die('Sorry, I need a wp-config-sample.php file to work from. Please re-upload this file from your WordPress installation.');
+if ( ! file_exists( ABSPATH . 'wp-config-sample.php' ) )
+ wp_die( __( 'Sorry, I need a wp-config-sample.php file to work from. Please re-upload this file from your WordPress installation.' ) );
$config_file = file(ABSPATH . 'wp-config-sample.php');
// Check if wp-config.php has been created
-if (file_exists(ABSPATH . 'wp-config.php'))
- wp_die("<p>The file 'wp-config.php' already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href='install.php'>installing now</a>.</p>");
+if ( file_exists( ABSPATH . 'wp-config.php' ) )
+ wp_die( '<p>' . sprintf( __( "The file 'wp-config.php' already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href='%s'>installing now</a>." ), 'install.php' ) . '</p>' );
// Check if wp-config.php exists above the root directory but is not part of another install
-if (file_exists(ABSPATH . '../wp-config.php') && ! file_exists(ABSPATH . '../wp-settings.php'))
- wp_die("<p>The file 'wp-config.php' already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href='install.php'>installing now</a>.</p>");
+if ( file_exists(ABSPATH . '../wp-config.php' ) && ! file_exists( ABSPATH . '../wp-settings.php' ) )
+ wp_die( '<p>' . sprintf( __( "The file 'wp-config.php' already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href='install.php'>installing now</a>."), 'install.php' ) . '</p>' );
-if (isset($_GET['step']))
- $step = $_GET['step'];
-else
- $step = 0;
+$step = isset( $_GET['step'] ) ? (int) $_GET['step'] : 0;
/**
* Display setup wp-config.php file header.
@@ -82,7 +82,7 @@ function display_header() {
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>WordPress &rsaquo; Setup Configuration File</title>
+<title><?php _e( 'WordPress &rsaquo; Setup Configuration File' ); ?></title>
<link rel="stylesheet" href="css/install.css" type="text/css" />
</head>
@@ -96,55 +96,55 @@ function display_header() {
display_header();
?>
-<p>Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding.</p>
+<p><?php _e( 'Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding.' ) ?></p>
<ol>
- <li>Database name</li>
- <li>Database username</li>
- <li>Database password</li>
- <li>Database host</li>
- <li>Table prefix (if you want to run more than one WordPress in a single database) </li>
+ <li><?php _e( 'Database name' ); ?></li>
+ <li><?php _e( 'Database username' ); ?></li>
+ <li><?php _e( 'Database password' ); ?></li>
+ <li><?php _e( 'Database host' ); ?></li>
+ <li><?php _e( 'Table prefix (if you want to run more than one WordPress in a single database)' ); ?></li>
</ol>
-<p><strong>If for any reason this automatic file creation doesn't work, don't worry. All this does is fill in the database information to a configuration file. You may also simply open <code>wp-config-sample.php</code> in a text editor, fill in your information, and save it as <code>wp-config.php</code>. </strong></p>
-<p>In all likelihood, these items were supplied to you by your Web Host. If you do not have this information, then you will need to contact them before you can continue. If you&#8217;re all ready&hellip;</p>
+<p><strong><?php _e( "If for any reason this automatic file creation doesn't work, don't worry. All this does is fill in the database information to a configuration file. You may also simply open <code>wp-config-sample.php</code> in a text editor, fill in your information, and save it as <code>wp-config.php</code>. </strong></p>
+<p>In all likelihood, these items were supplied to you by your Web Host. If you do not have this information, then you will need to contact them before you can continue. If you&#8217;re all ready&hellip;" ); ?></p>
-<p class="step"><a href="setup-config.php?step=1<?php if ( isset( $_GET['noapi'] ) ) echo '&amp;noapi'; ?>" class="button">Let&#8217;s go!</a></p>
+<p class="step"><a href="setup-config.php?step=1<?php if ( isset( $_GET['noapi'] ) ) echo '&amp;noapi'; ?>" class="button"><?php _e( 'Let&#8217;s go!' ); ?></a></p>
<?php
break;
case 1:
display_header();
?>
<form method="post" action="setup-config.php?step=2">
- <p>Below you should enter your database connection details. If you're not sure about these, contact your host. </p>
+ <p><?php _e( "Below you should enter your database connection details. If you're not sure about these, contact your host." ); ?></p>
<table class="form-table">
<tr>
- <th scope="row"><label for="dbname">Database Name</label></th>
+ <th scope="row"><label for="dbname"><?php _e( 'Database Name' ); ?></label></th>
<td><input name="dbname" id="dbname" type="text" size="25" value="wordpress" /></td>
- <td>The name of the database you want to run WP in. </td>
+ <td><?php _e( 'The name of the database you want to run WP in.' ); ?></td>
</tr>
<tr>
- <th scope="row"><label for="uname">User Name</label></th>
- <td><input name="uname" id="uname" type="text" size="25" value="username" /></td>
- <td>Your MySQL username</td>
+ <th scope="row"><label for="uname"><?php _e( 'User Name' ); ?></label></th>
+ <td><input name="uname" id="uname" type="text" size="25" value="<?php echo htmlspecialchars( _x( 'username', 'example username' ), ENT_QUOTES ); ?>" /></td>
+ <td><?php _e( 'Your MySQL username' ); ?></td>
</tr>
<tr>
- <th scope="row"><label for="pwd">Password</label></th>
- <td><input name="pwd" id="pwd" type="text" size="25" value="password" /></td>
- <td>...and your MySQL password.</td>
+ <th scope="row"><label for="pwd"><?php _e( 'Password' ); ?></label></th>
+ <td><input name="pwd" id="pwd" type="text" size="25" value="<?php echo htmlspecialchars( _x( 'password', 'example password' ), ENT_QUOTES ); ?>" /></td>
+ <td><?php _e( '&hellip;and your MySQL password.' ); ?></td>
</tr>
<tr>
- <th scope="row"><label for="dbhost">Database Host</label></th>
+ <th scope="row"><label for="dbhost"><?php _e( 'Database Host' ); ?></label></th>
<td><input name="dbhost" id="dbhost" type="text" size="25" value="localhost" /></td>
- <td>You should be able to get this info from your web host, if <code>localhost</code> does not work.</td>
+ <td><?php _e( 'You should be able to get this info from your web host, if <code>localhost</code> does not work.' ); ?></td>
</tr>
<tr>
- <th scope="row"><label for="prefix">Table Prefix</label></th>
+ <th scope="row"><label for="prefix"><?php _e( 'Table Prefix' ); ?></label></th>
<td><input name="prefix" id="prefix" type="text" value="wp_" size="25" /></td>
- <td>If you want to run multiple WordPress installations in a single database, change this.</td>
+ <td><?php _e( 'If you want to run multiple WordPress installations in a single database, change this.' ); ?></td>
</tr>
</table>
- <?php if ( isset( $_GET['noapi'] ) ) { ?><input name="noapi" type="hidden" value="true" /><?php } ?>
- <p class="step"><input name="submit" type="submit" value="Submit" class="button" /></p>
+ <?php if ( isset( $_GET['noapi'] ) ) { ?><input name="noapi" type="hidden" value="1" /><?php } ?>
+ <p class="step"><input name="submit" type="submit" value="<?php echo htmlspecialchars( __( 'Submit' ), ENT_QUOTES ); ?>" class="button" /></p>
</form>
<?php
break;
@@ -160,7 +160,7 @@ function display_header() {
// Validate $prefix: it can only contain letters, numbers and underscores
if ( preg_match( '|[^a-z0-9_]|i', $prefix ) )
- wp_die( /*WP_I18N_BAD_PREFIX*/'<strong>ERROR</strong>: "Table Prefix" can only contain numbers, letters, and underscores.'/*/WP_I18N_BAD_PREFIX*/ );
+ wp_die( __( '<strong>ERROR</strong>: "Table Prefix" can only contain numbers, letters, and underscores.' ) );
// Test the db connection.
/**#@+
@@ -175,15 +175,12 @@ function display_header() {
// We'll fail here if the values are no good.
require_wp_db();
if ( ! empty( $wpdb->error ) ) {
- $back = '<p class="step"><a href="setup-config.php?step=1" onclick="javascript:history.go(-1);return false;" class="button">Try Again</a></p>';
+ $back = '<p class="step"><a href="setup-config.php?step=1" onclick="javascript:history.go(-1);return false;" class="button">' . __( 'Try Again' ) . '</a></p>';
wp_die( $wpdb->error->get_error_message() . $back );
}
// Fetch or generate keys and salts.
$no_api = isset( $_POST['noapi'] );
- require_once( ABSPATH . WPINC . '/plugin.php' );
- require_once( ABSPATH . WPINC . '/l10n.php' );
- require_once( ABSPATH . WPINC . '/pomo/translations.php' );
if ( ! $no_api ) {
require_once( ABSPATH . WPINC . '/class-http.php' );
require_once( ABSPATH . WPINC . '/http.php' );
@@ -248,15 +245,15 @@ function get_bloginfo() {
if ( ! is_writable(ABSPATH) ) :
display_header();
?>
-<p>Sorry, but I can't write the <code>wp-config.php</code> file.</p>
-<p>You can create the <code>wp-config.php</code> manually and paste the following text into it.</p>
+<p><?php _e( "Sorry, but I can't write the <code>wp-config.php</code> file." ); ?></p>
+<p><?php _e( 'You can create the <code>wp-config.php</code> manually and paste the following text into it.' ); ?></p>
<textarea cols="98" rows="15" class="code"><?php
foreach( $config_file as $line ) {
echo htmlentities($line, ENT_COMPAT, 'UTF-8');
}
?></textarea>
-<p>After you've done that, click "Run the install."</p>
-<p class="step"><a href="install.php" class="button">Run the install</a></p>
+<p><?php _e( 'After you\'ve done that, click "Run the install."' ); ?></p>
+<p class="step"><a href="install.php" class="button"><?php _e( 'Run the install' ); ?></a></p>
<?php
else :
$handle = fopen(ABSPATH . 'wp-config.php', 'w');
@@ -267,9 +264,9 @@ function get_bloginfo() {
chmod(ABSPATH . 'wp-config.php', 0666);
display_header();
?>
-<p>All right sparky! You've made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to&hellip;</p>
+<p><?php _e( "All right sparky! You've made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to&hellip;" ); ?></p>
-<p class="step"><a href="install.php" class="button">Run the install</a></p>
+<p class="step"><a href="install.php" class="button"><?php _e( 'Run the install' ); ?></a></p>
<?php
endif;
break;
@@ -1201,8 +1201,10 @@ function is_blog_installed() {
// One or more tables exist. We are insane.
+ wp_load_translations_early();
+
// Die with a DB error.
- $wpdb->error = sprintf( /*WP_I18N_NO_TABLES*/'One or more database tables are unavailable. The database may need to be <a href="%s">repaired</a>.'/*/WP_I18N_NO_TABLES*/, 'maint/repair.php?referrer=is_blog_installed' );
+ $wpdb->error = sprintf( __( 'One or more database tables are unavailable. The database may need to be <a href="%s">repaired</a>.' ), 'maint/repair.php?referrer=is_blog_installed' );
dead_db();
}
@@ -2647,16 +2649,18 @@ function dead_db() {
status_header( 500 );
nocache_headers();
header( 'Content-Type: text/html; charset=utf-8' );
+
+ wp_load_translations_early();
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) ) language_attributes(); ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title><?php echo /*WP_I18N_DB_ERROR*/'Database Error'/*/WP_I18N_DB_ERROR*/; ?></title>
+ <title><?php _e( 'Database Error' ); ?></title>
</head>
<body>
- <h1><?php echo /*WP_I18N_DB_CONNECTION_ERROR*/'Error establishing a database connection'/*/WP_I18N_DB_CONNECTION_ERROR*/; ?></h1>
+ <h1><?php _e( 'Error establishing a database connection' ); ?></h1>
</body>
</html>
<?php
View
@@ -19,7 +19,7 @@ function wp_unregister_GLOBALS() {
return;
if ( isset( $_REQUEST['GLOBALS'] ) )
- die( /*WP_I18N_GLOBALS_OVERWRITE*/'GLOBALS overwrite attempt detected'/*/WP_I18N_GLOBALS_OVERWRITE*/ );
+ die( 'GLOBALS overwrite attempt detected' );
// Variables that shouldn't be unset
$no_unset = array( 'GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES', 'table_prefix' );
@@ -97,22 +97,21 @@ function wp_fix_server_vars() {
*
* Dies if requirements are not met.
*
- * This function must be able to work without a complete environment set up. In wp-load.php, for
- * example, WP_CONTENT_DIR is defined and version.php is included before this function is called.
- *
* @access private
* @since 3.0.0
*/
function wp_check_php_mysql_versions() {
- // we can probably extend this function to check if wp_die() exists then use translated strings, and then use it in install.php etc.
-
global $required_php_version, $wp_version;
$php_version = phpversion();
- if ( version_compare( $required_php_version, $php_version, '>' ) )
- die( sprintf( /*WP_I18N_OLD_PHP*/'Your server is running PHP version %1$s but WordPress %2$s requires at least %3$s.'/*/WP_I18N_OLD_PHP*/, $php_version, $wp_version, $required_php_version ) );
+ if ( version_compare( $required_php_version, $php_version, '>' ) ) {
+ wp_load_translations_early();
+ wp_die( sprintf( __( 'Your server is running PHP version %1$s but WordPress %2$s requires at least %3$s.' ), $php_version, $wp_version, $required_php_version ) );
+ }
- if ( !extension_loaded( 'mysql' ) && !file_exists( WP_CONTENT_DIR . '/db.php' ) )
- die( /*WP_I18N_OLD_MYSQL*/'Your PHP installation appears to be missing the MySQL extension which is required by WordPress.'/*/WP_I18N_OLD_MYSQL*/ );
+ if ( ! extension_loaded( 'mysql' ) && ! file_exists( WP_CONTENT_DIR . '/db.php' ) ) {
+ wp_load_translations_early();
+ wp_die( __( 'Your PHP installation appears to be missing the MySQL extension which is required by WordPress.' ) );
+ }
}
/**
@@ -159,6 +158,8 @@ function wp_maintenance() {
die();
}
+ wp_load_translations_early();
+
$protocol = $_SERVER["SERVER_PROTOCOL"];
if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol )
$protocol = 'HTTP/1.0';
@@ -170,11 +171,11 @@ function wp_maintenance() {
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title><?php echo /*WP_I18N_MAINTENANCE*/'Maintenance'/*/WP_I18N_MAINTENANCE*/; ?></title>
+ <title><?php _e( 'Maintenance' ); ?></title>
</head>
<body>
- <h1><?php echo /*WP_I18N_MAINT_MSG*/'Briefly unavailable for scheduled maintenance. Check back in a minute.'/*/WP_I18N_MAINT_MSG*/; ?></h1>
+ <h1><?php _e( 'Briefly unavailable for scheduled maintenance. Check back in a minute.' ); ?></h1>
</body>
</html>
<?php
@@ -364,8 +365,10 @@ function wp_set_wpdb_vars() {
$prefix = $wpdb->set_prefix( $table_prefix );
- if ( is_wp_error( $prefix ) )
- wp_die( /*WP_I18N_BAD_PREFIX*/'<strong>ERROR</strong>: <code>$table_prefix</code> in <code>wp-config.php</code> can only contain numbers, letters, and underscores.'/*/WP_I18N_BAD_PREFIX*/ );
+ if ( is_wp_error( $prefix ) ) {
+ wp_load_translations_early();
+ wp_die( __( '<strong>ERROR</strong>: <code>$table_prefix</code> in <code>wp-config.php</code> can only contain numbers, letters, and underscores.' ) );
+ }
}
/**
@@ -649,3 +652,87 @@ function is_multisite() {
return false;
}
+
+/**
+ * Attempts an early load of translations.
+ *
+ * Used for errors encountered during the initial loading process, before the locale has been
+ * properly detected and loaded.
+ *
+ * Designed for unusual load sequences (like setup-config.php) or for when the script will then
+ * terminate with an error, otherwise there is a risk that a file can be double-included.
+ *
+ * @since 3.4.0
+ * @access private
+ */
+function wp_load_translations_early() {
+ global $text_direction, $wp_locale;
+
+ static $loaded = false;
+ if ( $loaded )
+ return;
+ $loaded = true;
+
+ if ( function_exists( 'did_action' ) && did_action( 'init' ) )
+ return;
+
+ // We need $wp_local_package
+ require ABSPATH . WPINC . '/version.php';
+
+ // Translation and localization
+ require_once ABSPATH . WPINC . '/pomo/mo.php';
+ require_once ABSPATH . WPINC . '/l10n.php';
+ require_once ABSPATH . WPINC . '/locale.php';
+
+ // General libraries
+ require_once ABSPATH . WPINC . '/functions.php';
+ require_once ABSPATH . WPINC . '/plugin.php';
+
+ $locales = $locations = array();
+
+ while ( true ) {
+ if ( defined( 'WPLANG' ) ) {
+ if ( '' == WPLANG )
+ break;
+ $locales[] = WPLANG;
+ }
+
+ if ( isset( $wp_local_package ) )
+ $locales[] = $wp_local_package;
+
+ if ( ! $locales )
+ break;
+
+ if ( defined( 'WP_LANG_DIR' ) && @is_dir( WP_LANG_DIR ) )
+ $locations[] = WP_LANG_DIR;
+
+ if ( defined( 'WP_CONTENT_DIR' ) && @is_dir( WP_CONTENT_DIR . '/languages' ) )
+ $locations[] = WP_CONTENT_DIR . '/languages';
+
+ if ( @is_dir( ABSPATH . 'wp-content/languages' ) )
+ $locations[] = ABSPATH . 'wp-content/languages';
+
+ if ( @is_dir( ABSPATH . WPINC . '/languages' ) )
+ $locations[] = ABSPATH . WPINC . '/languages';
+
+ if ( ! $locations )
+ break;
+
+ $locations = array_unique( $locations );
+
+ foreach ( $locales as $locale ) {
+ foreach ( $locations as $location ) {
+ if ( file_exists( $location . '/' . $locale . '.mo' ) ) {
+ load_textdomain( 'default', $location . '/' . $locale . '.mo' );
+ if ( WP_Locale::is_locale_rtl( $locale ) )
+ $text_direction = 'rtl';
+ break 2;
+ }
+ }
+ }
+
+ break;
+ }
+
+ $wp_locale = new WP_Locale();
+}
Oops, something went wrong.

0 comments on commit 81ed9a7

Please sign in to comment.