En PHP, IntCalendar génère des paramètres régionaux incorrects.
P粉553428780
2023-07-28 12:49:22
<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>
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 );
Vous pouvez commencer par obtenir le pays associé (et le code du pays) à partir d'un fuseau horaire donné :
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é :
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