2009-05-21 13 views
1

Oracle Webアプリケーション(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 

を得ることができますか?

EDIT - 明確かつ詳細な回答カート用

おかげで、以下のカートの詳細な回答に続きます。これを処理する既存のOracleウィジェットがあるかどうか本当に尋ねていたので、私は自分自身を明確にしませんでした。

私はすでに、手動でHTTP_ACCEPT_LANGUAGE変数を解析しています。答えに示されたCurtとして、複雑さのあるわずかな領域があります。それはは何度も何度もやったことがあるような感じです。私がますます多くのコードを書いていたとき、私は "私は車輪を再発明しています"という感じを沈めていました。 :)

これには既存のOracleのアプローチが必要です - おそらくiASには何か?

EDITは - 何か他のものを探しながら答え

に出くわし、私は正確にWHAMんUTL_I18Nパッケージ、全体でつまずいた私はだ後:

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

答えて

1

最後に答えにつきました。 OracleパッケージのUTL_I18Nは、Oracle 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コマンドを生成する関数の2つの関数が必要です。

前者は非常に洗練されています。 'en'のみを指定した場合、おそらく 'en-us'を生成したいと思うでしょう。完全に一致するものがなければ、複数の選択肢のうちの1つを選択することに対処し、不正なヘッダー値を処理する必要があります。一度にこの問題に取り組もうとしないでください。最初は非常に簡単なことを行い、後でそれを拡張してください。

setコマンドを生成するのと同じくらい、あるいはそれ以下のものがありますが、これは非常に簡単です。実際にはルックアップ機能ですが、提供される内容に応じて少し複雑になるかもしれません。

あなたのユニットテストは、このようなことで実際にプログラミングの経験をしたり破ったりするものです。これは単体テストとテスト駆動開発の理想的な問題です。単体テストは、あなたが物事を変更するときに古い機能が動作し続け、新しい機能を追加してバグを修正するのを容易にします。別のテストを追加するだけで、その時点からあなたを導くことができます。(新しいバージョンが何かを破壊していないことを容易に確認できるので、ある時点でひどく間違っていることがわかった場合は、関数の1つを完全に書き換える方が簡単です)

あなたの環境で単体テストを行う方法はおそらくこの質問の対象外ですが、いくつかのヒントを追加してみましょう。まず、あなたの環境で利用可能なユニットテストフレームワーク( "pl-sql-unit?")があれば、それは素晴らしいことです。もしそうでなければ、慌てないでください。洗練されたものは必要ありません。入力と期待される出力のセットだけでなく、関数を通してそれらを実行し、「すべてOK!」と言う方法もあります。誤った結果が表示されることがあります。おそらく、テーブルからの入力と期待される出力を読み取って、これを行う単一の単純なPL/SQL関数を書くことができます。

+0

Curtさん、ありがとうございました。これを処理する既存のOracleウィジェットがあるかどうか本当に尋ねていたので、私は自分自身を明確にしませんでした。私はすでに手動でHTTP_ACCEPT_LANGUAGE変数を解析し、あなたの答えに示されているように、より複雑になっています。それは何度も何度もやったに違いないようなものだった。私は沈んだ "私は車輪を再発明している"気分だった。 :) –

+0

:-(。 –

関連する問題