문제

는 쉬운 방법이 있을 분석하는 사용자의 HTTP_ACCEPT_LANGUAGE 과에서 로캘 설정 PHP?

알 Zend framework 는 방법을 이지만,오히려 설치하지 전체 프레임워크를 사용하는 하나의 기능입니다.

배 I18Nv2 패키지에서 베타되지 않은 변경의 이미지,그래서 오히려 그것을 사용하지 않을 경우 가능합니다.

도 좋은 것으면 그것을 알아낼 수 있는 경우 서버가 실행 중인 Windows 또는지,이후 윈도우의 로케일 문자열은 다른 나머지 부분에서 세계의...(독일어"deu"또는"독일어"대신에"de".)

도움이 되었습니까?

해결책

좋은 솔루션 에 그것의 방법.

지 않고 필요가 있다는 것을 분석하는 헤더가 있습니다.그것은 쉼표로 구분한 목록으로,세미콜론으로 구분되어 입고 특성이 있습니다.

그것은 다음과 같이 볼 수 있습니다:

en_US, en;q=0.8, fr_CA;q=0.2, *;q=0.1

그리고 각 로케일까지 setlocale() 수락합니다.준비하는 그들의 아무도 일치 할 수 있습니다.

지 않베이스에 그것이 너무 중요하거나 허용할 사용자를 무시하기 때문에,그것은 일부 사용자가 잘못 구성된 브라우저입니다.


Windows locale,아마도 당신이 필요로 변환하 ISO639-1 이하 ISO639-2/3?

다른 팁

그것은 쉬운 일은 아니지만 그것이 있어야로(에서 내 소견).첫째를 추출하려 입에서 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 와 정렬하여 그들의 q 값이 있습니다.나중에 있을 검색하는 적절한 시스템 로케일에 대한 각각의 입는 문제가 없어야에서 기존 유닉스용 기계(당신은 수도에 대처해야와 올바른 문자셋)그러나 윈도우에서 당신을 번역하는 곳으로 윈도우 곳,예를 들어, de_DE 될 것입 German_Germany (다시 당신은 또한에 대처하는 문자집제를 사용하는 경우에 UTF-8 에서의 응용 예를 들어).나는 당신을 구축해야 하는 조회를 위한 테이블이 문제와 많은 곳;-)

아무도 하나의 로케일이 다른 후(정렬과 내림차순 q 값)를 찾을 때까지 경기를 사용하여 setlocale() (이 기능은 반환됩니다 false 는 경우 주어진 로케일 설정할 수 없).

하지만 그 다음이 될 것입니다 마지막 장애물에 대처하기:

로케일 정보를 유지됩 당 프로세스,지 않는 스레드당.는 경우 실행 PHP 에서 다중 스레드 서버 api IIS 와 같은나 아파치에 Windows 생할 수 있습니다 갑자기 변경의 로케일 설정을 하는 동안 스크립트를 실행하지만 스크립트 자체를 호출되지 않 setlocale() 자체입니다.이로 인해 발생하는 다른 스크립트를 실행하에서 다른 스레드 동일한 프로세스의 동일한 시간에 변경하면 프로세스 전체에 로케일을 사용하여 setlocale().

(참조하십시오: http://de2.php.net/manual/en/function.setlocale.php)

즉,당신은 당신을 경험할 수 있습 갑자기 로케일의 변화가 실행되는 동안 스크립트의하기 때문에 다른 사용자와 서로 다른 로케일 설정 그냥 당신의 웹 페이지입니다.

따라서 언급된 Zend_Locale 에 의존하지 않는 PHP 기능 setlocale() (그것은 단지 사용하여 검색하는 시스템 로케일 정보)하지만 그 대신 시스템을 사용하여 데이터를 기반으로에 의해 제공됩 유니코드 CLDR 프로젝트.이것은 구성요소 독립적인에서 모든 사람들 setlocale() 문제를 그러나 또한 이것을 소개하고 다른 어떤 결함 등에 대한 지원의 부족은 로캘-인식 문자열 작업(정렬)예를 들어.

알 Zend framework 는 방법 이지만,오히려 설치하지 전체 프레임워크를 사용하는 하나의 기능입니다.

에 대한 좋은 소식 젠드는,당신을 설치할 필요가 없습니다.그것은 losely 결합된 프레임워크와용하실 수 있습니다 그냥의 Zend_Locale 를 사용하지 않고 다른 구성 요소입니다.어쩌면 당신은 그것을 결합하 Zend_Translate.

체크아웃

http_negotiate_language, 지만,그에 따라 달라집 http 확장합니다.또한,주석을 참조하십시오에 매뉴얼 페이지에 대한 유저 구현합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top