<?php
function maybe_change_user_language( $selected_lang, $user_lang ) {
if ( $selected_lang !== $user_lang ) {
$user_lang = $selected_lang;
}
return $user_lang;
}
// Tests - Scroll to the bottom for results.
function test_respect_user_language_preference( $expected, $site_lang, $user_lang, $selected_lang = 'English' ) {
$user_lang = maybe_change_user_language(
$selected_lang,
$user_lang
);
echo 'Expected: ', $expected, PHP_EOL;
echo 'Actual: ', $user_lang, PHP_EOL;
return 'Result: ' . ( $expected === $user_lang ? 'Pass' : 'Fail' );
}
$tests = array(
'defaults with nothing selected' => array(
'expected' => 'English',
'site_lang' => 'English',
'user_lang' => 'English',
'selected_lang' => 'English',
),
'no existing preference and selects Spanish' => array(
'expected' => 'Spanish',
'site_lang' => 'English',
'user_lang' => 'English',
'selected_lang' => 'Spanish',
),
'already prefers Spanish and selects Spanish' => array(
'expected' => 'Spanish',
'site_lang' => 'English',
'user_lang' => 'Spanish',
'selected_lang' => 'Spanish',
),
'already prefers Spanish and selects nothing' => array(
'expected' => 'Spanish',
'site_language' => 'English',
'user_lang' => 'Spanish',
'selected_lang' => 'English',
),
);
foreach ( $tests as $test => $args ) {
$sep = str_pad( '', strlen( $test ), '=' );
echo $sep, PHP_EOL, $test, PHP_EOL, $sep, PHP_EOL;
echo test_respect_user_language_preference( ...array_values( $args ) ), PHP_EOL, PHP_EOL;
}
- Output for 7.4.0 - 7.4.29, 8.0.1 - 8.0.19, 8.1.0 - 8.1.6
- ==============================
defaults with nothing selected
==============================
Expected: English
Actual: English
Result: Pass
==========================================
no existing preference and selects Spanish
==========================================
Expected: Spanish
Actual: Spanish
Result: Pass
===========================================
already prefers Spanish and selects Spanish
===========================================
Expected: Spanish
Actual: Spanish
Result: Pass
===========================================
already prefers Spanish and selects nothing
===========================================
Expected: Spanish
Actual: English
Result: Fail
preferences:
41.8 ms | 411 KiB | 5 Q