我有以下程式碼,我相信它應該輸出 fr_FR 作為區域設置,但出於某種原因它輸出 en_US_POSIX(無論時區如何)。我做錯了什麼?
$loc = IntlCalendar::createInstance(new DateTimeZone('Europe/Paris')); echo $loc->getLocale(Locale::VALID_LOCALE);
參考連結:https://www.php.net/manual/en/intlcalendar.createinstance.php 與https://www.php.net/manual/en/intlcalendar.getlocale.php
;
看起來這不是正確的方法(儘管代碼是有效的)- 是否有更適合的方法來找到給定時區的“預設”區域設定?
您將時區設定為巴黎的時區。但您沒有設定區域設定。它們是不同的東西。區域設定定義了語言和格式約定,而時區則設定了將 UTC 轉換為本地時間和再次轉換回去的規則。您定義的內容適用於在巴黎的美國人。這是一個有效的用例,尤其是在八月!
請嘗試以下程式碼:
#$loc = IntlCalendar::createInstance( new DateTimeZone( 'Europe/Paris' ), 'fr_FR' ); echo $loc->getLocale( Locale::VALID_LOCALE );
您可以從給定時區取得關聯的國家(以及國家代碼)開始:
然後,您可以將該資訊與 ICU 庫中可用的資源結合起來,以獲取給定國家代碼的最可能語言:
請注意,這並不適用於每個使用者。這是一個不錯的預設起點,但您應該始終詢問使用者的語言偏好。
$possibleLocale = getLanguage($countryCode) . '_' . $countryCode; // fr_FR