2010-12-30 4 views
10

私は製品を注文するための小さなフォームを持つZend Framework(ドイツ語と英語)を使用した多言語プロジェクトに取り組んでいます。ユーザーができるようにする必要があります:製品価格に通貨と言語スイッチでロケールを処理するためのベストプラクティス

  • 変更彼れる好ましい通貨
  • 変更現時点ではウェブサイト全体

のための彼れる好ましい言語は、私が(Zend_Localeの:: findLocaleを使用)へユーザーのロケールを取得します。私のブラウザ設定では、私は 'de_CH'を取得し、それはうまく動作します。ユーザーは単にユーザーがサポートされていない言語を好む

  • (代わりに「de_CH」の「デ・」)私の言語コードを与えるために彼のブラウザを設定している

    • :しかし、すぐとしていくつかの問題があります私のウェブサイト
    • により、ユーザは、言語コードはZend_Translateの、Bを処理するのに十分であるだけで言語コード 私の製品の注文フォームではサポートされていない、彼らは通貨を得た国

    からですZend_Currencyにはより多くの情報が必要です。私はすべての可能なユーザーから国コードで完全なロケールを取得するソリューションはないと思う。私の質問は、あなたはどのようにこれらの状況に対処していますか?国コードがない場合は、ブートストラップの_initLocale()をチェックインし、デフォルトの国コードを使用しますか? Zend Frameworkの方法はありますか?

    サポートされていない言語 言語は「FR」であるユーザーが、私は私たちのウェブサイトは、フランス語サポートしていないため、デフォルトの言語を使用したい場合。ブートストラップにホワイトリストアレイを追加するよりも良い可能性はありますか?例えば、Zend_Translateのメソッド?

    サポートされていない通貨 ユーザーの言語はサポートされていますが、通貨はサポートされていますか?ブートストラップでロケールを変更すべきか、ロケールのコピーを作成してZend_Currency用に変更する必要がありますか?

    主な問題 私の主な問題は、これらの異なるロケールの問題をすべて処理する方法がわからないことだと思います。私の好みの方法は、ブートストラップの_initLocale()で設定されたロケールを検証することです。その言語と通貨をサポートできることを確信できます。

    ありがとうございます。

    敬具、 ニコ

    編集1 私は自分自身、これらの問題を処理する方法についていくつかのより多くの考えてきました。このアプローチについてどう思いますか?

    1. Zend_Locale():フィルターすべての短いロケール(国コードなし)と、アプリケーションのサポート(単に言語コード)の言語でホワイトリストを使用しています。一致がない場合は、アプリケーションによって指定されたデフォルト値を使用します。
    2. Zend_Translate:ロケールの言語コードで始まります。しかし、ユーザーが優先言語を変更した場合は、ロケールをそのまま(新しい言語コードと古い国コードに基づいて一致するロケールがない)、言語コードをZend_Translateに変更します。
    3. Zend_Currency:ロケールをデフォルトとして使用します。ユーザーが優先通貨を変更した場合は、ロケールではなく通貨のみを変更してください。したがって、通貨の変更がユーザーが自分のロケールを変更することを希望しているわけではないため、書式設定は古いロケールに基づいて行われます。

    このアプローチは受け入れ可能でしょうか?そこブラウザは、次のように設定されているロケールの場合には、ステップ1の問題点は次のとおりです。

    • en_USの

    をおそらく、アプリケーションがドイツ語サポートしていますが、それは短いロケール、アプリケーションであるため、代わりにen_USを使用します。しかし、私は短いロケールを完全なロケールに 'アップグレードすることができないので、どの解決策がこの問題を解決するのかはわかりません。

  • +2

    私はこのことができますかどうかわからないんだけど、ユーザーとして、私は私のために言語を把握しようとしたアプリケーションやウェブサイトを憎みます。あなたのサイトに言語ボタンやドロップダウンがある方が良いと思います。あなたにとって有益な点は、言語的な組み合わせを検出する心配がないことです。 – Matt

    +0

    +1のマットの提案。私はなぜあなたがすべての言語と通貨をサポートしたいと思うのかと困惑しています。たいていあなたのサイトはたかだか5〜10言語にしか翻訳されません。したがって、ロケールを「検出」し、適切な言語を見つけるために必要な魔法を実行することは不要です。アムステルダムを訪れた人はどうですか?英語やフランス語が好きですが、あなたのサイトではオランダ語を最もよく理解できるでしょうか?私は言語/通貨セレクタに投票します。キッス。 –

    +0

    でも、完全なロケールを生成できるようにするには、ユーザーは自分の国を選択する必要があります。そうでなければ、選択した通貨を間違った方法で出力します(たとえば、12,000ユーロの代わりに12.000ユーロ)。しかし、はい、おそらくK.I.S.S.ここの右中道です;-)。提案ありがとう。 – Nico

    答えて

    1

    あなたが強調した問題はよくあることですが、あなたのユーザーのロケールを設定するためには少量の作業が必要になると思います。

    de_DEには、ドイツにあるかどうかを知る必要がありますが、ユーザーの地域性がわからない場合は、地域のde_CHにデフォルト設定できます。

    * The user has configured his browser to just give me the language code ('de' instead of 'de_CH') 
    

    これをアプリケーションにマップします。あなたのマッピングは、ドイツ語を話すドイツの住民のためにde_DEに変換することができます。ドイツ語を話すスイス在住者のためのde_CH。フランス語を話すスイス人の住民のためのfr_CHなど、英語の話者はen_CHまたはen_DEになります。これは2つの問題を解決します。

    ユーザのロケールを正確に判断するには、ユーザの言語と場所が必要です。

    場所がわからない場合は、デフォルトの言語と地域をデフォルトにする必要があります。

    リンク:Unicode - locality and language mapping

    * The user prefers a language which is not supported by my website 
    

    あなたがスイスであれば、その後de_CHは理にかなって、あなたはヨーロッパにいるならば、選択はデフォルトの地域と言語が何であれになり、デフォルトの言語と通貨を持っている必要があります。

    * The user is from a country where they got a currency which isn't supported by my product order form 
    

    この場合、デフォルトに戻す必要があります。

    Zendには、Wikiでロケールを使用する例が多数あります。 Zendでローカリティを設定する最も一般的な場所は、ブートストラップファイルです。

    私はこのリンクを使用して、この応答のサポートをZend Framework wikiで参照しました。以下のコードは、ロケールが無効な場合にZend_Localeクラスが例外をスローする方法の小さな例を示しています。この時点で場所と言語を確認し、ブラウザから受け取った情報と組み合わせて使用​​して、ユーザーのロケールを正確に設定できます。

    リンク:Zend Locale Introduction

    // within the bootstrap file 
        try { 
         $locale = new Zend_Locale('auto'); 
        } catch (Zend_Locale_Exception $e) { 
         $locale = new Zend_Locale('de'); 
        } 
        // within your model/controller 
        $date = new Zend_Date($locale); 
        $currency = new Zend_Currency($locale) 
    
    +0

    ありがとうございます。 – Nico

    +0

    問題はありません、あなたのプロジェクトには幸運です。 –

    0

    ここでは、ローカライゼーションについて書いた記事をいくつかお答えしています。私の場合は

    http://phpadvent.org/2010/localization-by-anthony-gentile

    +0

    あなたの答えをありがとう。私は、このアプローチがまだ異なる言語の国でいくつかの問題を引き起こすと思います。また、すべての英語圏の国でen_USを使用することはできません。 – Nico

    0

    、私は彼らが最初に私のサイトを訪問したときに彼らの言語と通貨を選択するようユーザーにお願いしたいと思います。言語を選択するインターフェイスでは、ユーザーのブラウザからデフォルト言語のリファレンスとして言語コードを取得しました。私は自分のサイトで簡単に言語切り替えボタンを提供しています。

    関連する問題