1

Oracle 웹 애플리케이션 (mod_plsql에서 빌드)에 국제화 기능을 추가 할 때 HTTP_ACCEPT_LANGUAGE 매개 변수를 해석하여이를 사용하여 Oracle 세션에서 다양한 NLS_ * 설정을 지정합니다. 예를 들어HTTP_ACCEPT_LANGUAGE를 Oracle NLS_LANG 설정으로 변환하는 쉬운 방법이 있습니까?

그러나

HTTP_ACCEPT_LANGUAGE=de 

alter session set nls_territory=germany; 
alter session set nls_lang=... 

, 당신은 내가 가정 더 복잡한 무언가를 얻을 수 ...

HTTP_ACCEPT_LANGUAGE=en-us,en;q=0.5 

사람들이 전에 이런 종류의 물건을 태클 어떻게?

편집 - 명확하고 자세한 답변 커트에 대한

감사합니다 아래에 커트의 상세한 답변에서에 다음과 같습니다. 이 문제를 처리하는 기존 오라클 위젯이 있는지 묻는 중 이었지만 실제로는 분명하지 않았습니다.

나는 이미 HTTP_ACCEPT_LANGUAGE 변수를 수동으로 구문 분석하고 있으며, 답변에 표시된 Curt처럼 복잡한 부분이 약간 있습니다. 그것은 은 전에 여러 번 했어야 할 무언가를 느낀다. 점점 더 많은 코드를 작성하면서 "나는 바퀴를 재발 명하고있다"는 느낌을 가라 앉혔습니다. :)

기존 Oracle 접근 방식이 있어야합니다. 아마도 iAS에서 뭔가 있을까요 ??

편집이 - 다른 뭔가를 찾고있는 동안 답

을 우연히 발견, 나는 정확히 쿵 않는 UTL_I18N 패키지를 우연히 발견 난 후 :

Is there an easy way to convert HTTP_ACCEPT_LANGUAGE to Oracle NLS_LANG settings?

답변

1

마지막으로 답을 찾았습니다. 오라클 패키지 UTL_I18N 오라클 NLS 설정으로 브라우저 언어 코드에서 매핑 기능이 포함되어

utl_i18n.map_language_from_iso; 
utl_i18n.map_territory_from_iso; 

매핑 다중 언어 설정, 예를 들어, 아주 잘 대처하지 않는 것 en-us, en; q = 0.5,하지만 처음 5 문자 만 사용하면 함수가 제대로 작동하는 것 같습니다.

HTTP_ACCEPT_LANGUAGE: ar-lb,en-gb;q=0.5 
v_language: 
v_territory: 

HTTP_ACCEPT_LANGUAGE: ar-lb 
v_language: ARABIC 
v_territory: LEBANON 
1

물론, 및 제대로 문제를 해결하고 처음에는 야심 차게하지 않으면 너무 힘들지 않습니다.

두 가지 기능이 필요합니다. 하나는 HTTP_ACCEPT_LANGUAGE을 구문 분석하고 언어 코드를 생성하고 하나는이를 받아 들여 적절한 set 명령을 생성하는 것입니다.

전자는 꽤 정교해질 수 있습니다. 'en'만 입력하면 'en-us'를 생성하고 싶을 것입니다. 완벽하게 일치하는 항목이 없으면 여러 선택 항목 중 하나를 선택해야합니다. 잘못된 형식의 헤더 값을 처리해야합니다. 이 모든 것을 한꺼번에 다루려고 시도하지 마십시오. 처음에는 아주 간단한 것을하고 나중에 연장하십시오.

set 명령을 생성하는 나머지 절반의 경우에도 다소 차이는 있지만, 어쨌든 매우 간단합니다. 실제로는 룩업 기능에 불과하지만, 제공되는 기능에 따라 다소 정교해질 수 있습니다.

이런 식으로 프로그래밍 경험을 실제로 만들거나 없애는 것은 단위 테스트입니다. 이것은 단위 테스트 및 테스트 중심 개발에 이상적인 문제입니다. 단위 테스트를 통해 변경 사항을 적용하면 이전 기능이 계속 작동하고 새로운 기능을 추가하고 버그를 수정하는 것이 더 쉬워집니다. 다른 테스트를 추가하기 만하면되므로 그 시점부터 안내 할 수 있습니다.(새 버전이 아무 것도 깨지 않았 음을 쉽게 확인할 수 있기 때문에 어느 시점에서 끔찍한 잘못을 발견하면 기능 중 하나를 완전히 다시 작성하는 것이 더 쉽습니다.)

환경에서 단위 테스트를 수행하는 방법은이 질문의 범위를 벗어나는 것일 수 있지만 몇 가지 힌트를 추가하겠습니다. 첫째, 사용자 환경에 사용할 수있는 단위 테스트 프레임 워크 ("pl-sql-unit?")가 있으면 좋습니다. 그렇지 않다면 당황하지 마십시오. 정교한 것은 필요하지 않습니다. 입력과 예상 출력의 집합과 함수를 통해 실행하고 "모두 OK"라고 말하면됩니다. 또는 잘못된 결과를 표시하십시오. 테이블의 입력과 예상 출력을 읽고이를 수행하는 단일 PL/SQL 함수를 작성할 수 있습니다.

+0

Curt. 답장을 보내 주셔서 감사합니다. 이 문제를 처리하는 기존 오라클 위젯이 있는지 묻는 중 이었지만 실제로는 분명하지 않았습니다. 나는 이미 수동으로 HTTP_ACCEPT_LANGUAGE 변수를 파싱 할 것이고 대답에 표시 한대로 더 많이 참여하고있다. 여러 번 해봐야 할 일처럼 느껴졌습니다. 나는 "나는 바퀴를 재발 명하고있다"는 느낌을 가라 앉혔다. :) –

+0

:-(. –

관련 문제