Zend_Currency Formate bei mehrsprachigem Shop

Hallo Community, ich habe hier ein Thema, das mich nicht los lässt. Es geht um einen Shop. Deutsch und Englisch. Preisformat wie folgt: EUR 19,95 in Deutsch und Englisch. Das Phänomen: Im Deutschen Shop wird es richtig angezeigt: EUR 19,95 im Englischen Shop wird es als EUR19,95 angezeigt. Hier fehlt ein Abstand. Ich bin der Sache nachgegangen. Der Preis wird per Zend_Currency generiert. Da gibt es die Funktion toCurrency(). Diese holt sich das jeweilige Format „theoretisch“ aus /Zend/Locale/Data/en_GB.xml bzw -/de_DE.xml. Dort steht dann im Deutschen ¤ #,##0.00 wobei das ¤ immer mit dem Währungssymbol bzw. dem im Backend konfigurierten String ersetzt. Im Englischen steht: ¤#,##0.00 also ohne Abstand! HA! Dachte ich mir. das ist es. Änderte das Format im xml File, doch ohne Nutzen und leeren aller Caches. Kann es sein, dass Shopware diese Formate an einer separaten Stelle gespeichert hat? Danke! Das Ticket gibt’s übrigens hier: http://jira.shopware.de/Widgets/Jira/?ticket=SW-5043

wo wird den EUR 19,95 angezeigt. ich seh nur 19,95 € * das wird auch so im template eingebunden {$sArticle.price|currency} {s name="Star"}\*{/s} // edit in grundeinstellung/shopeinstellung/währung kannst du dem euro zeichen ein leerzeichen mitgeben. dann steht in EN bei mir € 19,95 *

Hi danke für die Antwort. Die Idee mit dem Leerzeichen hatte ich auch schon, aber dann hab ich im Deutschen 2 Leerzeichen also EUR 21,95. Auch nicht schön. Wie gesagt es liegt wohl an dem vorgegebenen Nummernformat der Zend Locales. Diese müsste ich anpassen können. Bestenfalls im xml file. Oder im Backend. Aktuell hab ich $format = '¤ #,##0.00'; in engine/Library/Zend/Currency.php eingetragen. Ist mir aber zu Dirty. Gruß, Markus

probier mal smarty [quote] $sArticle.price|currency|replace:" “:” " [/quote] also such nach leerleer ersetz duch leer

1 Like

quick and dirty. danke! schade, dass es wohl nicht “sauberer” funktioniert.

Hallo, das Thema kam jüngst wieder bei einem unserer Kunden auf. Unter Shopware 4.2.3 konnte ich das Ganze mit einer kleinen Core-Anpassung lösen: In der Datei Currency.php (engine/Library/Zend/Currency.php) gibt es, wie bereits von meinem Vorredner angemerkt, die methode toCurrency(). In ca. Zeile 198 wird das default Leerzeichen gesetzt: $space = ''; Wenn man dies abändert zu: $space = ' '; dann hat man im Standard immer ein Leerzeichen gesetzt und nicht nur im Deutschen. Hoffe das hilft noch wem weiter :wink: LG BJunk

Hallo, eine weitere Möglichkeit wäre, wenn ihr das direkt im Backend einstellt. http://wiki.shopware.com/Waehrungen_detail_948.html Also so müsste man dann zumindest nicht im Code was ändern und es ist updatefähig. Also das Leerzeichen bzw. HTML-Leerzeichenangabe könnte dort einfach beim Symbol definiert werden Sebastian

Hallo Sebastian, eben das funktioniert leider nicht. Im Deutschen sind dann zwei Leerzeichen nach dem Währungssymbol und im Englischen nur eins. Folgende Abfrage scheint im Deutschen true zu sein, im Englischen aber nicht (Currency.php Lines 199-202): if (iconv\_strpos($value, ' ') !== false) { $value = str\_replace(' ', '', $value); $space = ' '; } Im Deutschen wird dann ein Leerzeichen in $space geschrieben, im Englischen greift die $space-Variable ohne Leerzeichen aus Zeile 198: $space = ''; Nur wenn man hier schon als default-Wert ein Leerzeichen an $space übergibt, wird auch im Englischen ein Leerzeichen nach dem Währungssymbol geschrieben. Das hat bestimmt irgendwie seinen Sinn, der ist mir nur gerade noch nicht klar. :slight_smile: LG BJunk

Hi, bei mir klappt das. Hast du das Leerzeichen im backend als   eingetragen? Also als HTML? Sebastian

Hi Sebastian, auch mit   habe ich dann das Problem, dass im Deutschen nach dem Symbol zwei Leerzeichen folgen und im Englischen nur eins. Im Template dann alle doppelten Leerzeichen durch einfache zu ersetzen kommt leider nicht in Frage. LG BJunk