Maison > Questions et réponses > le corps du texte
P粉4640884372023-07-29 09:18:13
Vous définissez votre fuseau horaire sur celui de Paris. Mais vous n'avez pas défini les paramètres régionaux. Ce sont des choses différentes. Les paramètres régionaux définissent la langue et les conventions de formatage, tandis que le fuseau horaire définit les règles de conversion de l'UTC en heure locale et inversement. Ce que vous définissez s’applique aux Américains à Paris. C'est un cas d'utilisation valable, surtout en août !
Veuillez essayer le code suivant :
$loc = IntlCalendar::createInstance( new DateTimeZone( 'Europe/Paris' ), 'fr_FR' );
echo $loc->getLocale( Locale::VALID_LOCALE );
P粉0546168672023-07-29 09:01:21
Vous pouvez commencer par obtenir le pays associé (et le code du pays) à partir d'un fuseau horaire donné :
$userTimezone = new DateTimeZone('Europe/Paris'); $location = $userTimezone->getLocation(); /* array(4) { ["country_code"]=> string(2) "FR" ["latitude"]=> float(48.866659999999996) ["longitude"]=> float(2.3333299999999895) ["comments"]=> string(0) "" } */ $countryCode = $location['country_code'];
Vous pouvez ensuite combiner ces informations avec les ressources disponibles dans la bibliothèque ICU pour obtenir la langue la plus probable pour un code de pays donné :
// From @ausi's answer in https://stackoverflow.com/a/58512299/1456201 function getLanguage(string $country): string { $subtags = \ResourceBundle::create('likelySubtags', 'ICUDATA', false); $country = \Locale::canonicalize('und_'.$country); $locale = $subtags->get($country) ?: $subtags->get('und'); return \Locale::getPrimaryLanguage($locale); }
Veuillez noter que cela ne s'applique pas à tous les utilisateurs. Il s'agit d'un bon point de départ par défaut, mais vous devez toujours demander à l'utilisateur sa préférence linguistique.
$possibleLocale = getLanguage($countryCode) . '_' . $countryCode; // fr_FR