我在寫一個支持多種語言的PHP應用程序。將en_US轉換爲en-US
當在PHP中設置語言環境時,我需要根據setlocale documentation提供一個在我認爲是RFC 1766/ISO 639中定義的值。
setlocale(LC_ALL, 'en_US');
var_dump(setlocale(LC_MESSAGES, '0'));
// string(5) "en_US"
當使用這種語言環境來描述HTML 郎屬性,因爲它沒有格式化爲RFC 5646驗證失敗。該語言的RFC 5646值實際上是en-US
(注意使用連字符而不是下劃線)。
在下面的輸出使用PHP的的setlocale功能這個值,如上,結果:
string(1) "C"
我不知道爲什麼它返回℃的價值,但我相信這是因爲提供的語言環境格式不正確。C是原始服務器默認值,即described as ASCII(感謝@Cheery的參考)。
所以,我想知道我該怎麼做。我可以,切實,使用PHP的str_replace函數功能輸出郎屬性之前切換-
到_
,像這樣:
<?php setlocale('en_US'); ?>
<!doctype html>
<html lang="<?= str_replace('_', '-', setlocale(LC_MESSAGES, '0')); ?>">
...
但是,我擔心可能有兩種語言之間的其他差異規範可能會在路上產生意想不到的問題。如果是這樣,是否有翻譯PHP中已有的語言代碼或可以使用的翻譯類的首選方法?
獎金的問題,爲什麼我的服務器默認值爲C的區域設置?
「C」是系統的語言環境之一。例如,https://help.ubuntu.com/community/Locale。 'C#後退,ASCII編碼,與POSIX相同 ' – Cheery 2014-11-20 20:02:40