I have a function in my PHP script which loads the correct localization file based on the locale, which the header sends. In Firefox my Text is displayed perfectly, but when I switch to Chrome it only says “Notice: Trying to access array offset on value of type null in [PATH]/index.php on line 46”
My function to load the language is this one:
<?php /** * This function loads the specified language by their locale identifier * * @param string $locale The locale identifier * @param string $page Page to load data for * @return array Returns array with data */ // Example Code snippet on how to use it: /* $locale = locale_accept_from_http($_SERVER["HTTP_ACCEPT_LANGUAGE"]); // Locale retrieved from Header $language = loadLanguage($locale, "panel"); // Loads the language for the "panel" Page */ function loadLanguage($locale, $page){ $langlist = [ "de", "en" ]; $lang_values = array_values($langlist); if(in_array($locale, $lang_values)){ if(file_get_contents(dirname(__FILE__) . "/{$page}" . "/snippets_" . strtoupper($locale) . ".json")){ return json_decode(file_get_contents(dirname(__FILE__) . "/{$page}" . "/snippets_" . strtoupper($locale) . ".json"), true); } else { return json_decode(file_get_contents(dirname(__FILE__) . "/{$page}" . "/snippets_EN.json"), true); } } } ?>
The translation files for German (de) and English (en) exist in their folders so I don’t really understand, why it doesn’t work. Does Chrome even send the language header?
Thanks for your help tho!
Advertisement
Answer
My Chrome browser sends “en-GB,en-US;q=0.9,en;q=0.8” for HTTP_ACCEPT_LANGUAGE from the UK
When passed into locale_accept_from_http you get “en_GB” .. not “en”. You either need to allow for GB and presumably en_US etc, or maybe substring the result to the 1st 2 language characters.
Note that its totally possible that the header wont be sent for a given browser so you should check default to one or the other languages is a match isn’t found. the function returns NULL if not found. You could also have another country returned obviously.