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?
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.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 inZend_Translate
.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.
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
+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. –
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