* Fetch a text string from the given array or return $default if it's not
* set. Carriage returns are stripped from the text, and with some language
* modules there is an input transliteration applied. This should generally
- * be used for form <textarea> and <input> fields. Used for user-supplied
- * freeform text input (for which input transformations may be required - e.g.
- * Esperanto x-coding).
+ * be used for form "<textarea>" and "<input>" fields. Used for
+ * user-supplied freeform text input (for which input transformations may
+ * be required - e.g. Esperanto x-coding).
*
* @param $name String
* @param $default String: optional
* appearing time in the header in ascending order.
* May contain the "language" '*', which applies to languages other than those explicitly listed.
* This is aligned with rfc2616 section 14.4
+ * Preference for earlier languages appears in rfc3282 as an extension to HTTP/1.1.
*/
public function getAcceptLang() {
// Modified version of code found at http://www.thefutureoftheweb.com/blog/use-accept-language-header
$langcodes = $lang_parse[1];
$qvalues = $lang_parse[4];
$indices = range( 0, count( $lang_parse[1] ) - 1 );
+
// Set default q factor to 1
foreach ( $indices as $index ) {
if ( $qvalues[$index] === '' ) {
$qvalues[$index] = 1;
} elseif ( $qvalues[$index] == 0 ) {
- $langcodes[$index] = '';
+ unset( $langcodes[$index], $qvalues[$index], $indices[$index] );
}
}
- // Sort list
+ // Sort list. First by $qvalues, then by order. Reorder $langcodes the same way
array_multisort( $qvalues, SORT_DESC, SORT_NUMERIC, $indices, $langcodes );
+
// Create a list like "en" => 0.8
$langs = array_combine( $langcodes, $qvalues );
- if ( isset( $langs[''] ) ) {
- unset( $langs[''] );
- }
+
return $langs;
}