2010-12-30 9 views
10

Ich arbeite an einem mehrsprachigen Projekt mit Zend Framework (Deutsch und Englisch), wo ich ein kleines Formular habe, um ein Produkt zu bestellen. Der Benutzer sollte in der Lage sein:Best Practice für die Handhabung von Gebietsschemas mit Währungen und Sprachumschaltungen

  • ändert seine bevorzugte Währung für die Produktpreise
  • ändert seine bevorzugte Sprache für die gesamte Website

Im Moment benutze ich Zend_Locale :: findLocale(), um Holen Sie sich das Gebietsschema des Benutzers. Mit meinen Browsereinstellungen bekomme ich 'de_CH' und das funktioniert gut. Aber es gibt einige Probleme so bald wie:

  • Der Benutzer seinen Browser so konfiguriert hat, um mir nur den Sprachcode (‚de‘ anstelle von ‚de_CH‘)
  • Der Benutzer kann eine Sprache bevorzugt, die nicht unterstützt wird von meiner Website
  • der Benutzer aus einem Land, in dem sie eine Währung bekamen, die nicht durch mein Produkt Bestellformular

Nur der Sprachcode der Sprachcode ist genug zu handhaben Zend_Translate unterstützt wird, b ut Zend_Currency benötigt mehr Informationen. Ich denke, es gibt keine Lösung, um das vollständige Gebietsschema mit dem Ländercode von jedem möglichen Benutzer zu erhalten. Meine Frage ist: Wie gehst du mit diesen Situationen um? Schicken Sie _initLocale() Ihres Bootstrap ein, wenn ein Ländercode fehlt und verwenden Sie einen Standard-Ländercode? Gibt es dafür Zend Framework-Methoden?

eine nicht unterstützte Sprache Wenn die Benutzer die Sprache ‚fr‘ ist, würde Ich mag eine Standardsprache verwenden, da unsere Website nicht französisch unterstützt. Gibt es eine bessere Möglichkeit als ein Whitelist-Array im Bootstrap hinzuzufügen? Zum Beispiel eine Methode von Zend_Translate?

Eine nicht unterstützte Währung Was ist, wenn die Sprache des Benutzers unterstützt wird, aber nicht seine Währung? Sollte ich das Gebietsschema im Bootstrap ändern oder sollte ich eine Kopie des Gebietsschemas machen und es für Zend_Currency ändern?

Das Hauptproblem Ich denke, dass mein Hauptproblem ist, dass ich nicht sicher bin, wie man all diese verschiedenen Gebietsschemafragen behandelt. Mein bevorzugter Ansatz wäre es, das in _initLocale() des Bootstraps festgelegte Gebietsschema zu überprüfen, damit ich sicher sein kann, dass ich seine Sprache und Währung unterstützen kann.

Vielen Dank für Ihre Hinweise.

Mit freundlichen Grüßen, Nico

Schnitt 1 ich mir ein paar Gedanken über einen Weg, diese Probleme zu behandeln gemacht haben. Was denkst du über diesen Ansatz?

  1. Zend_Locale(): all Kurz locales filtern (ohne Ländervorwahl) und verwendet eine weiße Liste mit den Sprachen Ihrer Anwendung unterstützt (nur der Sprachcode). Wenn keine Übereinstimmung vorhanden ist, verwenden Sie den von Ihrer Anwendung angegebenen Standard.
  2. Zend_Translate: Beginnen Sie mit dem Sprachcode aus dem Gebietsschema.Wenn der Benutzer jedoch die bevorzugte Sprache ändert, belassen Sie das Gebietsschema wie es ist (vielleicht gibt es kein übereinstimmendes Gebietsschema basierend auf dem neuen Sprachcode und dem alten Ländercode) und ändern Sie einfach den Sprachcode in Zend_Translate.
  3. Zend_Currency: Verwenden Sie das Gebietsschema als Standard. Wenn der Benutzer die bevorzugte Währung ändert, ändern Sie einfach die Währung und nicht das Gebietsschema. Die Formatierung würde also auf der alten Ländereinstellung basieren, da die Änderung der Währung nicht bedeutet, dass der Benutzer auch seine Ländereinstellung ändern möchte.

Wäre dieser Ansatz akzeptabel? Es gibt ein Problem mit Schritt 1, wenn der Browser wie folgt festgelegt locale:

  • de
  • en_US

Vielleicht ist die Anwendung deutsche nicht unterstützt, sondern weil es eine kurze locale, die Anwendung wird stattdessen en_US verwenden. Aber ich weiß nicht, welche Lösung dieses Problem beheben würde, weil ich ein kurzes Gebietsschema nicht zu einem vollständigen Gebietsschema "upgraden" kann.

+2

Ich bin nicht sicher, ob das hilft, aber als Benutzer ich verabscheue Anwendungen und Websites, die versuchen, meine Sprache für mich herauszufinden. Ich denke, es ist immer besser, eine Sprachtaste oder ein Dropdown-Menü auf Ihrer Website zu haben. Der Vorteil für Sie ist, dass Sie keine Angst haben, seltsame Sprachkombinationen zu erkennen. – Matt

+0

+1 auf Matts Vorschlag. Ich bin verwirrt, warum Sie jede Sprache und Währung unterstützen möchten. Sie werden Ihre Website wahrscheinlich nur in 5 bis 10 Sprachen übersetzen. Es könnte daher unnötig sein, ein Gebietsschema zu "erkennen" und zu tun, was magisch ist, um die richtige Sprache zu finden. Was ist mit Besuchern aus Amsterdam, die Englisch oder Französisch bevorzugen, aber Ihre Website erkennt, dass sie Niederländisch am wahrscheinlichsten verstehen werden? Ich stimme für einen Sprach-/Währungsselektor. KUSS. –

+0

OK, aber um das vollständige Gebietsschema erstellen zu können, muss der Benutzer auch sein Land auswählen. Oder ich würde die gewählte Währung falsch ausgeben (zB EUR 12.000.- statt EUR 12.000). Aber ja, vielleicht K.I.S.S. ist hier der richtige Mittelweg ;-). Danke für deinen Vorschlag. – Nico

Antwort

1

Das von Ihnen hervorgehobene Problem ist häufig und ich denke, dass ein wenig Arbeit erforderlich wäre, um das Gebietsschema für Ihren Benutzer festzulegen.

de zu de_DE erfordert, dass Sie wissen, ob sie sich in Deutschland befinden, aber das kann default to de_CH sein, das ist Ihre Lokalität, wenn Sie die Benutzerlokalität nicht kennen.

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

Ordnen Sie dies in Ihrer Anwendung zu. Ihr Mapping kann dies für Einwohner in Deutschland, die Deutsch sprechen, in de_DE umwandeln. Oder de_CH für deutschsprachige Einwohner in der Schweiz. Oder fr_CH für Einwohner der Schweiz, die Französisch sprechen und so weiter für Englischsprachige wäre es en_CH oder en_DE. So löst das 2 Probleme.

Die Sprache und der Standort des Benutzers werden benötigt, um das Gebietsschema für den Benutzer genau zu bestimmen.

Wenn Sie dort nicht wissen, sollten Sie auf Ihre eigene Standardsprache und Lokalität voreinstellen.

-Link: Unicode - locality and language mapping

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

Sie sollten eine Standardsprache und Währung haben, wenn Sie in Europa sind, dann würde die Wahl sein, was auch immer Ihre Standard-Lokalität und Sprache ist, wenn Sie Schweizer sind dann de_CH Sinn macht.

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

In diesem Fall sollten Sie zu Ihrem Standard zurückkehren.

Zend hat viele Beispiele für die Verwendung von Gebietsschemata in ihrem Wiki. Der am häufigsten verwendete Ort in Zend ist die Bootstrap-Datei.

Ich benutzte diesen Link, um Unterstützung für diese Antwort auf Zend Framework Wiki zu verweisen. Der folgende Code bietet ein kleines Beispiel dafür, wie die Zend_Locale-Klasse Ausnahmen auslöst, wenn das Gebietsschema ungültig ist. Sie können zu diesem Zeitpunkt nach dem Ort und der Sprache suchen und diese in Kombination mit den Informationen verwenden, die Sie vom Browser erhalten, um das Gebietsschema für den Benutzer genau festzulegen.

-Link: 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

Vielen Dank. – Nico

+0

Keine Probleme, viel Glück mit Ihrem Projekt. –

0

Hier ist ein Artikel, den ich über Lokalisierung geschrieben habe, von dem ich denke, dass Sie bei der Beantwortung einiger Ihrer Fragen nützlich sein könnten.

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

+0

Vielen Dank für Ihre Antwort. Ich denke, dass dieser Ansatz in Ländern mit verschiedenen Sprachen immer noch Probleme bereiten wird. Außerdem kann ich en_US nicht für jedes englischsprachige Land verwenden. – Nico

0

In meinem Fall würde Ich mag Benutzer bitten, ihre Sprache und Währung zu wählen, wenn sie zum ersten Mal meiner Website besuchen. in der Sprache wählen Sie die Schnittstelle Ich war der Sprachcode aus dem Browser des Benutzers als Referenz der Standardsprache. und auch ich biete schnellen Sprachumschaltknopf in meiner Site an.