En PHP, IntCalendar génère des paramètres régionaux incorrects.
P粉553428780
P粉553428780 2023-07-28 12:49:22
0
2
613
<p>J'ai le code suivant, qui, je crois, est censé afficher fr_FR comme paramètres régionaux, mais pour une raison quelconque, il affiche en_US_POSIX (quel que soit le fuseau horaire). Qu'ai-je fait de mal? </p> <pre class="brush:php;toolbar:false;">$loc = IntlCalendar::createInstance(new DateTimeZone('Europe/Paris')); echo $loc->getLocale(Locale::VALID_LOCALE);</pre> <p>Liens de référence : https://www.php.net/manual/en/intlcalendar.createinstance.php et https://www.php.net/manual/en/intlcalendar.getlocale.php<br /> ;<br />On dirait que ce n'est pas la bonne approche (bien que le code soit valide) - existe-t-il un moyen plus approprié de trouver les paramètres régionaux « par défaut » pour un fuseau horaire donné ? </p><p><br /></p>
P粉553428780
P粉553428780

répondre à tous(2)
P粉464088437

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粉054616867

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 
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal