From: Roland Haeder Date: Fri, 25 Sep 2015 08:47:05 +0000 (+0200) Subject: Continued: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=e0c42678ef855eaf67d9758190c3968f30d9ddf2;p=pizzaservice-war.git Continued: - introduced AbstractWebBean which currently only initializes the resource bundle (i18n) - fixed all (?) attributes as the libs has changed a lot - renamed bundle back to de_DE - updated jars Signed-off-by:Roland Häder --- diff --git a/lib/jcoreee.jar b/lib/jcoreee.jar index 7b5dcd35..1b1ad2a1 100644 Binary files a/lib/jcoreee.jar and b/lib/jcoreee.jar differ diff --git a/lib/jshop-core.jar b/lib/jshop-core.jar index df70d7de..3758a7bc 100644 Binary files a/lib/jshop-core.jar and b/lib/jshop-core.jar differ diff --git a/lib/jshop-ee-lib.jar b/lib/jshop-ee-lib.jar index aee55970..f7b46945 100644 Binary files a/lib/jshop-ee-lib.jar and b/lib/jshop-ee-lib.jar differ diff --git a/src/java/org/mxchange/localization/bundle.properties b/src/java/org/mxchange/localization/bundle.properties deleted file mode 100644 index 825b7b9d..00000000 --- a/src/java/org/mxchange/localization/bundle.properties +++ /dev/null @@ -1,168 +0,0 @@ -# Copyright (C) 2015 Roland Haeder -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Unknown gender -GENDER_UNKNOWN=Unbekannt -GENDER_MALE=Herr -GENDER_FEMALE=Frau -GENDER_COMPANY=Firma -MINI_BASKET_IS_EMPTY=Der Warenkorb ist leer. -MINI_BASKET_LAST_ITEM=Zuletzt hinzugefuegt: {0} -MINI_BASKET_ADDITIONAL_ITEMS=Es befinden sich noch {0} weitere Produkte im Warenkorb. -MINI_BASKET_TITLE=Warenkorb -ADMIN_CATEGORY_HAS_NO_PARENT=Keine Elternkategorie -YES=Ja -NO=Nein -ADMIN_PARENT_CATEGORY_CANNOT_BE_NULL=Elternkategorie darf nicht leer sein. -ADMIN_CATEGORY_MUST_BE_SELECTED=Es muss eine Kategorie ausgew\u00e4hlt werden. -BUTTON_TITLE_ADD_ITEM_TO_BASKET=F\u00fcgt das Produkt dem Warenkorb hinzu. -INPUT_TITLE_ENTER_ITEM_AMOUNT=Geben Sie hier die Bestellmenge ein. -LOGIN_NO_CUSTOMER_NUMBER_MESSAGE=Sie haben keine EMail-Adresse eingegeben. -LOGIN_NO_PASSWORD_MESSAGE=Sie haben kein Passwort eingegeben. -PAGE_TITLE_INDEX_WELCOME=Willkommen! -SUB_TITLE_INDEX_WELCOME=Willkommen zum Pizza-Service: -FOLLOWING_PRODUCTS_ARE_AVAILABLE=Folgende Produkte k\u00f6nnen bestellt werden: -ADMIN_ADD_ITEM_TO_BASKET=Hinzuf\u00fcgen -LINK_TO_BASKET_TITLE=Weiter zum Warenkorb. -LINK_CHANGE_IN_BASKET=Im Warenkorb \u00e4ndern -SINGLE_ITEM_PRICE=Einzelpreis: -CHANGE_ITEM_AMOUNT=Bestellmenge \u00e4ndern: -TOTAL_ITEM_PRICE=Zwischensumme: -TOTAL_ORDER_PRICE=Gesamtsumme: -NO_ITEMS_ADDED_TO_BASKET=Es befinden sich derzeit keine Artikel im Warenkorb. -ITEM_NOT_ORDERED=Nicht bestellt. -PAGE_TITLE_ADMIN_WELCOME=Willkommen zum Administrationsbereich -SUB_TITLE_ADMIN_WELCOME=Willkommen zur Administration: -PAGE_TITLE_ADMIN_LOGOUT=Ausloggen -SUB_TITLE_ADMIN_LOGOUT=Aus dem Adminbereich ausloggen: -PAGE_TITLE_ADMIN_CATEGORY=Kategorien -SUB_TITLE_ADMIN_CATEGORIES=Kategorien administrieren: -SELECT_ENTRY=Ausw\u00e4hlen: -ADMIN_ENTER_CATEGORY_TITLE=Bezeichnung: -ADMIN_ENTER_CATEGORY_TITLE_EXAMPLE=(z.B. Pizzen) -ADMIN_PARENT_CATEGORY=Elternkategorie: -SUB_TITLE_ADMIN_PRODUCTS=Diese Produkte sind erstellt worden: -PAGE_TITLE_ADMIN_PRODUCTS=Produkte -BUTTON_RESET_FORM=Formular zur\u00fccksetzen -ADMIN_BUTTON_EDIT_ENTRIES=\u00c4ndern -ADMIN_BUTTON_DELETE_ENTRIES=L\u00f6schen -ADMIN_ADD_PRODUCT_TITLE=Neues Produkt hinzuf\u00fcgen: -ADMIN_ADD_CATEGORY_TITLE=Neue Kategorie hinzuf\u00fcgen: -CATEGORY=Kategorie: -PLEASE_FILL_ALL_FIELDS=Bitte alle Felder ausf\u00fcllen: -ADMIN_BUTTON_ADD_CATEGORY=Kategorie hinzuf\u00fcgen -ADMIN_ENTER_PRODUCT_TITLE=Produktbezeichnung: -ADMIN_ENTER_PRODUCT_TITLE_EXAMPLE=(z.B. Pizza Italia) -IS_AVAILABLE=Verf\u00fcgbar: -ADMIN_BUTTON_ADD_PRODUCT=Produkt hinzuf\u00fcgen -ADMIN_ADD_PRODUCT_NOTICE_TITLE=Hinweise zum Hinzuf\u00fcgen von Produkten: -ADMIN_ADD_PRODUCT_NOTICE_LINE1=Beim Preis keine W\u00e4hrungszeichen (wie \u20ac usw.) eingeben. -ADMIN_ADD_PRODUCT_NOTICE_LINE2=Kommastellen mit Punkt, nicht mit Komma abtrennen. -ADMIN_ADD_PRODUCT_NOTICE_LINE3=Keine Tausendertrenner verwenden, auch keine Leerschritte. -GUEST_ENTER_LOGIN_DATA_TITLE=Bitte geben Sie Ihre Kundennummer und Passwort ein: -GUEST_ENTER_LOGIN_DATA_LEGEND_TITLE=Bitte geben Sie die Ihnen vergebene Kundennummer und das dazugeh\u00f6rige Passwort ein. -GUEST_ENTER_LOGIN_DATA_LEGEND=Bitte Zugangsdaten eingeben: -ENTER_CUSTOMER_NUMBER=Kundennummer: -ENTER_PASSWORD=Passwort: -BUTTON_CUSTOMER_LOGIN=Zum Kundenbereich einloggen -LINK_HOME_TITLE=Eingangsseite -LINK_HOME=Home -LINK_BASKET=Warenkorb -LINK_CLOSE_SESSION_TITLE=Sitzung beennden -LINK_CLOSE_SESSION=Sitzung beenden -MENU_HOME_TITLE=Shop -MENU_CUSTOMER_TITLE=Kundenbereich -LINK_CUSTOMER_LOGIN_TITLE=Login f\u00fcr bestehende Kunden -LINK_CUSTOMER_LOGIN=Einloggen -LINK_CUSTOMER_REGISTER_TITLE=Anmeldung als neuer Kunde -LINK_CUSTOMER_REGISTER=Neuer Kunde -LINK_CUSTOMER_PASSWORD_TITLE=Neues Passwort erstellen -LINK_CUSTOMER_PASSWORD=Passwort vergessen? -LINK_TO_BASKET=Zum Warenkorb -LINK_CONTINUE_SHOPPING=Weiter einkaufen -LINK_CONTINUE_SHOPPING_TITLE=Klicken zum Fortfahren mit dem Einkauf. -PAGE_TITLE_INDEX_SHOW_BASKET=Warenkorb anzeigen -SUB_TITLE_INDEX_SHOW_BASKET=Alle im Warenkorb befindlichen Artikel: -GUEST_ITEM_TITLE=Artikel: -BUTTON_CHANGE_ITEM_AMOUNT=\u00c4ndern -PAGE_TITLE_INDEX_IMPRINT=Impressum -SUB_TITLE_INDEX_IMPRINT=Impressum: -PAGE_TITLE_INDEX_ITEM_ADDED=Produkt zum Warenkorb hinzugef\u00fcgt -SUB_TITLE_INDEX_ITEM_ADDED=Produkt zum Warenkorb hinzugef\u00fcgt: -GUEST_ITEM_ADDED_TO_BASKET=Der Artikel {0} wurde zum Warenkorb hinzugef\u00fcgt. -LINK_CONTINUE_TO_CHECKOUT=Weiter zur Bezahlung -PAGE_TITLE_CUSTOMER_CHECKOUT=Weiter zur Bezahlung -PAGE_TITLE_INDEX_CHECKOUT2=Ohne Anmeldung bezahlen -SUB_TITLE_INDEX_CHECKOUT2=Ohne Anmeldung bezahlen: -GUEST_CHECKOUT_WITHOUT_REGISTRATION_TITLE=Sie k\u00f6nnen hier ohne Anmeldung bezahlen: -SUB_TITLE_CUSTOMER_CHECKOUT=Bezahlungsm\u00f6glichkeit ausw\u00e4hlen: -LINK_CHECKOUT_OPTION_LOGIN=Weiter zum Kundenlogin -LINK_CHECKOUT_OPTION_REGISTRATION=Weiter zum neuen Kundenkonto anmelden -LINK_CHECKOUT_OPTION_GUEST=Ohne Anmeldung bezahlen -BUTTON_COMPLETE_ORDER=Bestellung verbindlich abschicken -GUEST_REGISTRATION_TITLE=Anmelden als Neukunde -GUEST_REGISTRATION_EMAIL_LEGEND_TITLE=Zum Best\u00e4tigen wird Ihre Email-Adresse ben\u00f6tigt, f\u00fcr den Login Kundennummer und Passwort. -GUEST_REGISTRATION_EMAIL_LEGEND=Email-Adresse und Passwort: -GUEST_REGISTRATION_ENTER_EMAIL1=Email-Adresse eingeben: -GUEST_REGISTRATION_ENTER_EMAIL2=Email-Adresse wiederholen: -GUEST_REGISTRATION_ENTER_PASSWORD1=Passwort eingeben: -GUEST_REGISTRATION_ENTER_PASSWORD2=Passwort wiederholen: -GUEST_REGISTRATION_CUSTOMER_NUMBER_NOTICE=Die Kundennummer wird Ihnen sp\u00e4ter vergeben. -BUTTON_FINISH_REGISTRATION=Anmelden -PRIVACY_TERMS_LEGEND_TITLE=Bitte die AGBs und Datenschutzbestimmungen lesen und akzeptieren. -PRIVACY_TERMS_LEGEND=Rechtliches: -PRIVACY_POLICY_NOT_ACCEPTED_MESSAGE=Bitte den Datenschutzbestimmungen zustimmen. -TERMS_NOT_ACCEPTED_MESSAGE=Bitte den AGBs zustimmen. -PERSONAL_DATA_MINIMUM_NOTICE=Bitte geben Sie mindestens Name, Anschrift und Telefonnummer an. -PERSONAL_DATA_GENDER=Anrede: -PERSONAL_DATA_COMPANY_NAME=Firmenname: -PERSONAL_DATA_FIRST_NAME=Vorname: -PERSONAL_DATA_FAMILY_NAME=Nachname: -PERSONAL_DATA_STREET=Stra\u00dfe: -PERSONAL_DATA_HOUSE_NUMBER=Hausnummer: -PERSONAL_DATA_ZIP_CODE=Postleitzahl: -PERSONAL_DATA_PHONE_NUMBER=Telefon: -PERSONAL_DATA_FAX_NUMBER=Faxnummer: -PERSONAL_DATA_CELLPHONE_NUMBER=Mobil: -PERSONAL_DATA_CITY=Ort: -PERSONAL_DATA_LEGEND_TITLE=Bitte geben Sie Ihre Daten ein. -PERSONAL_DATA_LEGEND=Bitte Ihre Daten eingeben: -GUEST_PAYMENT_WITHOUT_REGISTRATION_TITLE=Bezahlung ohne Anmeldung -PAGE_TITLE_CUSTOMER_LOGIN=Einloggen -SUB_TITLE_CUSTOMER_LOGIN=Zum Kundenbereich einloggen: -PAGE_TITLE_CUSTOMER_LOST_PASSWORD=Passwort vergessen -SUB_TITLE_CUSTOMER_LOST_PASSWORD=Stellen Sie Ihr Passwort wieder her: -GUEST_LOST_PASSWORD_TITLE=Sie haben Ihr Passwort vergessen? -GUEST_LOST_PASSWORD_LEGEND_TITLE=Bitte Daten eingeben: -GUEST_LOST_PASSWORD_LEGEND=Bitte Daten eingeben: -ENTER_EMAIL_ADDRESS=Email-Adresse: -GUEST_LOST_PASSWORD_NUMBER_OR_EMAIL=... oder ... -BUTTON_CONTINUE_STEP_2=Weiter zu Schritt 2 -PAGE_TITLE_CUSTOMER_REGISTER=Neukunde -SUB_TITLE_CUSTOMER_REGISTER=Anmelden zum Pizza-Service: -PAGE_TITLE_INDEX_TERMS=Allgemeine Gesch\u00e4ftsbedingungen -SUB_TITLE_INDEX_TERMS=Allgemeine Gesch\u00e4ftsbedingungen -PAGE_TITLE_INDEX_PRIVACY=Datenschutzbestimmungen -SUB_TITLE_INDEX_PRIVACY=Datenschutzbestimmungen: -ADMIN_MENU_MAIN_TITLE=Hauptauswahl -ADMIN_MENU_LOGOUT_TITLE=Ausloggen -PAGE_TITLE_CUSTOMER_CHECKOUT_DONE=Bestellvorgang abgeschlossen -SUB_TITLE_CUSTOMER_CHECKOUT_DONE=Der Bestellvorgang ist abgeschlossen: -PAGE_TITLE_CUSTOMER_EMPTY_BASKET=Leerer Warenkorb! -SUB_TITLE_CUSTOMER_EMPTY_BASKET=Sie haben keine Artikel zum Warenkorb hinzugef\u00fcgt: -LINK_OPEN_RECEIPT=Rechnung ansehen - -ERROR_AMOUNT_IS_NULL=Die Bestellmenge ist nicht gesetzt. -ERROR_AMOUNT_IS_NOT_LONG=Die eingegebene Menge ist keine Zahl. diff --git a/src/java/org/mxchange/localization/bundle_de_DE.properties b/src/java/org/mxchange/localization/bundle_de_DE.properties new file mode 100644 index 00000000..825b7b9d --- /dev/null +++ b/src/java/org/mxchange/localization/bundle_de_DE.properties @@ -0,0 +1,168 @@ +# Copyright (C) 2015 Roland Haeder +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Unknown gender +GENDER_UNKNOWN=Unbekannt +GENDER_MALE=Herr +GENDER_FEMALE=Frau +GENDER_COMPANY=Firma +MINI_BASKET_IS_EMPTY=Der Warenkorb ist leer. +MINI_BASKET_LAST_ITEM=Zuletzt hinzugefuegt: {0} +MINI_BASKET_ADDITIONAL_ITEMS=Es befinden sich noch {0} weitere Produkte im Warenkorb. +MINI_BASKET_TITLE=Warenkorb +ADMIN_CATEGORY_HAS_NO_PARENT=Keine Elternkategorie +YES=Ja +NO=Nein +ADMIN_PARENT_CATEGORY_CANNOT_BE_NULL=Elternkategorie darf nicht leer sein. +ADMIN_CATEGORY_MUST_BE_SELECTED=Es muss eine Kategorie ausgew\u00e4hlt werden. +BUTTON_TITLE_ADD_ITEM_TO_BASKET=F\u00fcgt das Produkt dem Warenkorb hinzu. +INPUT_TITLE_ENTER_ITEM_AMOUNT=Geben Sie hier die Bestellmenge ein. +LOGIN_NO_CUSTOMER_NUMBER_MESSAGE=Sie haben keine EMail-Adresse eingegeben. +LOGIN_NO_PASSWORD_MESSAGE=Sie haben kein Passwort eingegeben. +PAGE_TITLE_INDEX_WELCOME=Willkommen! +SUB_TITLE_INDEX_WELCOME=Willkommen zum Pizza-Service: +FOLLOWING_PRODUCTS_ARE_AVAILABLE=Folgende Produkte k\u00f6nnen bestellt werden: +ADMIN_ADD_ITEM_TO_BASKET=Hinzuf\u00fcgen +LINK_TO_BASKET_TITLE=Weiter zum Warenkorb. +LINK_CHANGE_IN_BASKET=Im Warenkorb \u00e4ndern +SINGLE_ITEM_PRICE=Einzelpreis: +CHANGE_ITEM_AMOUNT=Bestellmenge \u00e4ndern: +TOTAL_ITEM_PRICE=Zwischensumme: +TOTAL_ORDER_PRICE=Gesamtsumme: +NO_ITEMS_ADDED_TO_BASKET=Es befinden sich derzeit keine Artikel im Warenkorb. +ITEM_NOT_ORDERED=Nicht bestellt. +PAGE_TITLE_ADMIN_WELCOME=Willkommen zum Administrationsbereich +SUB_TITLE_ADMIN_WELCOME=Willkommen zur Administration: +PAGE_TITLE_ADMIN_LOGOUT=Ausloggen +SUB_TITLE_ADMIN_LOGOUT=Aus dem Adminbereich ausloggen: +PAGE_TITLE_ADMIN_CATEGORY=Kategorien +SUB_TITLE_ADMIN_CATEGORIES=Kategorien administrieren: +SELECT_ENTRY=Ausw\u00e4hlen: +ADMIN_ENTER_CATEGORY_TITLE=Bezeichnung: +ADMIN_ENTER_CATEGORY_TITLE_EXAMPLE=(z.B. Pizzen) +ADMIN_PARENT_CATEGORY=Elternkategorie: +SUB_TITLE_ADMIN_PRODUCTS=Diese Produkte sind erstellt worden: +PAGE_TITLE_ADMIN_PRODUCTS=Produkte +BUTTON_RESET_FORM=Formular zur\u00fccksetzen +ADMIN_BUTTON_EDIT_ENTRIES=\u00c4ndern +ADMIN_BUTTON_DELETE_ENTRIES=L\u00f6schen +ADMIN_ADD_PRODUCT_TITLE=Neues Produkt hinzuf\u00fcgen: +ADMIN_ADD_CATEGORY_TITLE=Neue Kategorie hinzuf\u00fcgen: +CATEGORY=Kategorie: +PLEASE_FILL_ALL_FIELDS=Bitte alle Felder ausf\u00fcllen: +ADMIN_BUTTON_ADD_CATEGORY=Kategorie hinzuf\u00fcgen +ADMIN_ENTER_PRODUCT_TITLE=Produktbezeichnung: +ADMIN_ENTER_PRODUCT_TITLE_EXAMPLE=(z.B. Pizza Italia) +IS_AVAILABLE=Verf\u00fcgbar: +ADMIN_BUTTON_ADD_PRODUCT=Produkt hinzuf\u00fcgen +ADMIN_ADD_PRODUCT_NOTICE_TITLE=Hinweise zum Hinzuf\u00fcgen von Produkten: +ADMIN_ADD_PRODUCT_NOTICE_LINE1=Beim Preis keine W\u00e4hrungszeichen (wie \u20ac usw.) eingeben. +ADMIN_ADD_PRODUCT_NOTICE_LINE2=Kommastellen mit Punkt, nicht mit Komma abtrennen. +ADMIN_ADD_PRODUCT_NOTICE_LINE3=Keine Tausendertrenner verwenden, auch keine Leerschritte. +GUEST_ENTER_LOGIN_DATA_TITLE=Bitte geben Sie Ihre Kundennummer und Passwort ein: +GUEST_ENTER_LOGIN_DATA_LEGEND_TITLE=Bitte geben Sie die Ihnen vergebene Kundennummer und das dazugeh\u00f6rige Passwort ein. +GUEST_ENTER_LOGIN_DATA_LEGEND=Bitte Zugangsdaten eingeben: +ENTER_CUSTOMER_NUMBER=Kundennummer: +ENTER_PASSWORD=Passwort: +BUTTON_CUSTOMER_LOGIN=Zum Kundenbereich einloggen +LINK_HOME_TITLE=Eingangsseite +LINK_HOME=Home +LINK_BASKET=Warenkorb +LINK_CLOSE_SESSION_TITLE=Sitzung beennden +LINK_CLOSE_SESSION=Sitzung beenden +MENU_HOME_TITLE=Shop +MENU_CUSTOMER_TITLE=Kundenbereich +LINK_CUSTOMER_LOGIN_TITLE=Login f\u00fcr bestehende Kunden +LINK_CUSTOMER_LOGIN=Einloggen +LINK_CUSTOMER_REGISTER_TITLE=Anmeldung als neuer Kunde +LINK_CUSTOMER_REGISTER=Neuer Kunde +LINK_CUSTOMER_PASSWORD_TITLE=Neues Passwort erstellen +LINK_CUSTOMER_PASSWORD=Passwort vergessen? +LINK_TO_BASKET=Zum Warenkorb +LINK_CONTINUE_SHOPPING=Weiter einkaufen +LINK_CONTINUE_SHOPPING_TITLE=Klicken zum Fortfahren mit dem Einkauf. +PAGE_TITLE_INDEX_SHOW_BASKET=Warenkorb anzeigen +SUB_TITLE_INDEX_SHOW_BASKET=Alle im Warenkorb befindlichen Artikel: +GUEST_ITEM_TITLE=Artikel: +BUTTON_CHANGE_ITEM_AMOUNT=\u00c4ndern +PAGE_TITLE_INDEX_IMPRINT=Impressum +SUB_TITLE_INDEX_IMPRINT=Impressum: +PAGE_TITLE_INDEX_ITEM_ADDED=Produkt zum Warenkorb hinzugef\u00fcgt +SUB_TITLE_INDEX_ITEM_ADDED=Produkt zum Warenkorb hinzugef\u00fcgt: +GUEST_ITEM_ADDED_TO_BASKET=Der Artikel {0} wurde zum Warenkorb hinzugef\u00fcgt. +LINK_CONTINUE_TO_CHECKOUT=Weiter zur Bezahlung +PAGE_TITLE_CUSTOMER_CHECKOUT=Weiter zur Bezahlung +PAGE_TITLE_INDEX_CHECKOUT2=Ohne Anmeldung bezahlen +SUB_TITLE_INDEX_CHECKOUT2=Ohne Anmeldung bezahlen: +GUEST_CHECKOUT_WITHOUT_REGISTRATION_TITLE=Sie k\u00f6nnen hier ohne Anmeldung bezahlen: +SUB_TITLE_CUSTOMER_CHECKOUT=Bezahlungsm\u00f6glichkeit ausw\u00e4hlen: +LINK_CHECKOUT_OPTION_LOGIN=Weiter zum Kundenlogin +LINK_CHECKOUT_OPTION_REGISTRATION=Weiter zum neuen Kundenkonto anmelden +LINK_CHECKOUT_OPTION_GUEST=Ohne Anmeldung bezahlen +BUTTON_COMPLETE_ORDER=Bestellung verbindlich abschicken +GUEST_REGISTRATION_TITLE=Anmelden als Neukunde +GUEST_REGISTRATION_EMAIL_LEGEND_TITLE=Zum Best\u00e4tigen wird Ihre Email-Adresse ben\u00f6tigt, f\u00fcr den Login Kundennummer und Passwort. +GUEST_REGISTRATION_EMAIL_LEGEND=Email-Adresse und Passwort: +GUEST_REGISTRATION_ENTER_EMAIL1=Email-Adresse eingeben: +GUEST_REGISTRATION_ENTER_EMAIL2=Email-Adresse wiederholen: +GUEST_REGISTRATION_ENTER_PASSWORD1=Passwort eingeben: +GUEST_REGISTRATION_ENTER_PASSWORD2=Passwort wiederholen: +GUEST_REGISTRATION_CUSTOMER_NUMBER_NOTICE=Die Kundennummer wird Ihnen sp\u00e4ter vergeben. +BUTTON_FINISH_REGISTRATION=Anmelden +PRIVACY_TERMS_LEGEND_TITLE=Bitte die AGBs und Datenschutzbestimmungen lesen und akzeptieren. +PRIVACY_TERMS_LEGEND=Rechtliches: +PRIVACY_POLICY_NOT_ACCEPTED_MESSAGE=Bitte den Datenschutzbestimmungen zustimmen. +TERMS_NOT_ACCEPTED_MESSAGE=Bitte den AGBs zustimmen. +PERSONAL_DATA_MINIMUM_NOTICE=Bitte geben Sie mindestens Name, Anschrift und Telefonnummer an. +PERSONAL_DATA_GENDER=Anrede: +PERSONAL_DATA_COMPANY_NAME=Firmenname: +PERSONAL_DATA_FIRST_NAME=Vorname: +PERSONAL_DATA_FAMILY_NAME=Nachname: +PERSONAL_DATA_STREET=Stra\u00dfe: +PERSONAL_DATA_HOUSE_NUMBER=Hausnummer: +PERSONAL_DATA_ZIP_CODE=Postleitzahl: +PERSONAL_DATA_PHONE_NUMBER=Telefon: +PERSONAL_DATA_FAX_NUMBER=Faxnummer: +PERSONAL_DATA_CELLPHONE_NUMBER=Mobil: +PERSONAL_DATA_CITY=Ort: +PERSONAL_DATA_LEGEND_TITLE=Bitte geben Sie Ihre Daten ein. +PERSONAL_DATA_LEGEND=Bitte Ihre Daten eingeben: +GUEST_PAYMENT_WITHOUT_REGISTRATION_TITLE=Bezahlung ohne Anmeldung +PAGE_TITLE_CUSTOMER_LOGIN=Einloggen +SUB_TITLE_CUSTOMER_LOGIN=Zum Kundenbereich einloggen: +PAGE_TITLE_CUSTOMER_LOST_PASSWORD=Passwort vergessen +SUB_TITLE_CUSTOMER_LOST_PASSWORD=Stellen Sie Ihr Passwort wieder her: +GUEST_LOST_PASSWORD_TITLE=Sie haben Ihr Passwort vergessen? +GUEST_LOST_PASSWORD_LEGEND_TITLE=Bitte Daten eingeben: +GUEST_LOST_PASSWORD_LEGEND=Bitte Daten eingeben: +ENTER_EMAIL_ADDRESS=Email-Adresse: +GUEST_LOST_PASSWORD_NUMBER_OR_EMAIL=... oder ... +BUTTON_CONTINUE_STEP_2=Weiter zu Schritt 2 +PAGE_TITLE_CUSTOMER_REGISTER=Neukunde +SUB_TITLE_CUSTOMER_REGISTER=Anmelden zum Pizza-Service: +PAGE_TITLE_INDEX_TERMS=Allgemeine Gesch\u00e4ftsbedingungen +SUB_TITLE_INDEX_TERMS=Allgemeine Gesch\u00e4ftsbedingungen +PAGE_TITLE_INDEX_PRIVACY=Datenschutzbestimmungen +SUB_TITLE_INDEX_PRIVACY=Datenschutzbestimmungen: +ADMIN_MENU_MAIN_TITLE=Hauptauswahl +ADMIN_MENU_LOGOUT_TITLE=Ausloggen +PAGE_TITLE_CUSTOMER_CHECKOUT_DONE=Bestellvorgang abgeschlossen +SUB_TITLE_CUSTOMER_CHECKOUT_DONE=Der Bestellvorgang ist abgeschlossen: +PAGE_TITLE_CUSTOMER_EMPTY_BASKET=Leerer Warenkorb! +SUB_TITLE_CUSTOMER_EMPTY_BASKET=Sie haben keine Artikel zum Warenkorb hinzugef\u00fcgt: +LINK_OPEN_RECEIPT=Rechnung ansehen + +ERROR_AMOUNT_IS_NULL=Die Bestellmenge ist nicht gesetzt. +ERROR_AMOUNT_IS_NOT_LONG=Die eingegebene Menge ist keine Zahl. diff --git a/src/java/org/mxchange/pizzaapplication/beans/AbstractWebBean.java b/src/java/org/mxchange/pizzaapplication/beans/AbstractWebBean.java new file mode 100644 index 00000000..afb864ac --- /dev/null +++ b/src/java/org/mxchange/pizzaapplication/beans/AbstractWebBean.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2015 Roland Haeder + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.mxchange.pizzaapplication.beans; + +import java.io.Serializable; +import java.util.ResourceBundle; + +/** + * An abstract web web bean for web applications. This class currently only + * handles loading the resource bundle (i18n). + * + * @author Roland Haeder + */ +public abstract class AbstractWebBean implements Serializable { + + /** + * Serial number + */ + private static final long serialVersionUID = 48_475_834_783_473_187L; + + /** + * Bundle instance + */ + private final ResourceBundle bundle; + + /** + * Protectd constructor + */ + protected AbstractWebBean () { + // Load resource bundle + this.bundle = ResourceBundle.getBundle("org/mxchange/localization/bundle"); + } + + /** + * Getter for bundle instance + * + * @return Bundle instance + */ + protected ResourceBundle getBundle () { + return this.bundle; + } + + /** + * Getter for message from given key + * + * @param key Key to get message from + * @return Message + */ + protected String getMessageStringFromKey (final String key) { + // Is the bundle loaded? + if (this.getBundle() == null) { + // Abort here + throw new NullPointerException("bundle is null"); //NOI18N + } + + // Return message + return this.getBundle().getString(key); + } +} diff --git a/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebBean.java b/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebBean.java index 1d62d65f..d1e88221 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebBean.java @@ -40,7 +40,7 @@ import org.mxchange.jshopcore.model.product.Product; */ @Named ("basketController") @SessionScoped -public class BasketWebBean implements BasketWebController { +public class BasketWebBean implements BasketWebController { /** * Serial number @@ -59,9 +59,9 @@ public class BasketWebBean implements BasketWebController { /////////////////////// Properties ///////////////////// /** - * Ordered amount + * Ordered orderedAmount */ - private Long amount; + private Long orderedAmount; /** * Current item @@ -99,14 +99,14 @@ public class BasketWebBean implements BasketWebController { } // Generate item instance - AddableBasketItem item = new BasketItem(product, this.getAmount()); + AddableBasketItem item = new BasketItem(product, this.getOrderedAmount()); - // Is amount set? - if (this.getAmount() == null) { + // Is orderedAmount set? + if (this.getOrderedAmount() == null) { // Trace message - //this.getLogger().logTrace("addItem: amount not specified, returning null ... - EXIT!"); + //this.getLogger().logTrace("addItem: orderedAmount not specified, returning null ... - EXIT!"); - // No amount specified?! + // No orderedAmount specified?! return null; } @@ -120,8 +120,8 @@ public class BasketWebBean implements BasketWebController { // Deligate to model this.basket.addItem(item); - // Remove amount - this.setAmount(null); + // Remove orderedAmount + this.setOrderedAmount(null); // Trace message //this.getLogger().logTrace(MessageFormat.format("addItem: item {0} - has been added to basket. - EXIT!", item)); @@ -158,16 +158,16 @@ public class BasketWebBean implements BasketWebController { if (this.getCurrentItem() == null) { // Current item is null throw new NullPointerException("currentItem is null"); //NOI18N - } else if (this.getCurrentItem().getProduct() == null) { + } else if (this.getCurrentItem().getItemProduct() == null) { // Product is null throw new NullPointerException("currentItem.product is null"); //NOI18N - } else if (this.getCurrentItem().getAmount() == null) { + } else if (this.getCurrentItem().getOrderedAmount() == null) { // Amount is null throw new NullPointerException("currentItem.amount is null"); //NOI18N } // Caculate item's price - Float totalPrice = (this.getCurrentItem().getProduct().getPrice() * this.getCurrentItem().getAmount()); + Float totalPrice = (this.getCurrentItem().getItemProduct().getProductPrice() * this.getCurrentItem().getOrderedAmount()); // Trace message //this.getLogger().logTrace(MessageFormat.format("calculateCurrentItemPrice: totalPrice={0} - EXIT!", totalPrice)); @@ -193,7 +193,7 @@ public class BasketWebBean implements BasketWebController { // Is it a product? if (item.isProductType()) { // Caculate item's price - totalPrice = (item.getProduct().getPrice() * item.getAmount()); + totalPrice = (item.getItemProduct().getProductPrice() * item.getOrderedAmount()); } // Trace message @@ -266,13 +266,13 @@ public class BasketWebBean implements BasketWebController { } @Override - public Long getAmount () { - return this.amount; + public Long getOrderedAmount () { + return this.orderedAmount; } @Override - public void setAmount (final Long amount) { - this.amount = amount; + public void setOrderedAmount (final Long orderedAmount) { + this.orderedAmount = orderedAmount; } @Override @@ -308,9 +308,9 @@ public class BasketWebBean implements BasketWebController { if (null == item) { // item is null throw new NullPointerException("item is null"); - } else if ((item.isProductType()) && (item.getProduct().equals(product))) { + } else if ((item.isProductType()) && (item.getItemProduct().equals(product))) { // Found it - itemAmount = item.getAmount(); + itemAmount = item.getOrderedAmount(); break; } } @@ -404,10 +404,10 @@ public class BasketWebBean implements BasketWebController { // Get type switch (item.getItemType()) { case "product": // Sellable product //NOI18N - assert (item.getProduct() instanceof Product) : MessageFormat.format("item {0} has no product instance set.", item); //NOI18N + assert (item.getItemProduct() instanceof Product) : MessageFormat.format("item {0} has no product instance set.", item); //NOI18N // Get title - lastItem = item.getProduct().getTitle(); + lastItem = item.getItemProduct().getProductTitle(); break; default: // Not supported diff --git a/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebController.java b/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebController.java index b7fce984..eccff4bf 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebController.java +++ b/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebController.java @@ -86,14 +86,14 @@ public interface BasketWebController extends Serializable { * * @return Item amount property */ - public Long getAmount (); + public Long getOrderedAmount (); /** * Setter for item amount property * * @param amount Item amount property */ - public void setAmount (final Long amount); + public void setOrderedAmount (final Long amount); /** * Getter for current item diff --git a/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebBean.java b/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebBean.java index 2db3a58e..3232a844 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebBean.java @@ -58,9 +58,9 @@ public class AdminCategoryWebBean implements AdminCategoryWebController { /////////////////////// Properties ///////////////////// /** - * Category title + * Category categoryTitle */ - private String title; + private String categoryTitle; /** * Parent category @@ -90,7 +90,7 @@ public class AdminCategoryWebBean implements AdminCategoryWebController { // Create category Category category = new ProductCategory(); category.setParentCategory(this.getParentCategory()); - category.setTitle(this.getTitle()); + category.setCategoryTitle(this.getCategoryTitle()); // Deligate to remote bean this.categoryBean.doAdminAddCategory(category); @@ -104,13 +104,13 @@ public class AdminCategoryWebBean implements AdminCategoryWebController { } @Override - public String getTitle () { - return this.title; + public String getCategoryTitle () { + return this.categoryTitle; } @Override - public void setTitle (final String title) { - this.title = title; + public void setCategoryTitle (final String categoryTitle) { + this.categoryTitle = categoryTitle; } @Override diff --git a/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebController.java b/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebController.java index 8ea0703d..f749293a 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebController.java +++ b/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebController.java @@ -49,16 +49,16 @@ public interface AdminCategoryWebController { public void setParentCategory (final Category parentCategory); /** - * Getter for title + * Getter for category title * * @return the title */ - public String getTitle (); + public String getCategoryTitle (); /** - * Setter for title + * Setter for category title * - * @param title the title to set + * @param categoryTitle the title to set */ - public void setTitle (final String title); + public void setCategoryTitle (final String categoryTitle); } diff --git a/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebBean.java b/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebBean.java index 0b0645a8..8c6b654c 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebBean.java @@ -26,6 +26,7 @@ import javax.naming.InitialContext; import javax.naming.NamingException; import org.mxchange.jshopcore.exceptions.CannotAddProductException; import org.mxchange.jshopcore.exceptions.ProductTitleAlreadyUsedException; +import org.mxchange.jshopcore.model.category.Category; import org.mxchange.jshopcore.model.product.AdminProductSessionBeanRemote; import org.mxchange.jshopcore.model.product.GenericProduct; import org.mxchange.jshopcore.model.product.Product; @@ -61,22 +62,22 @@ public class AdminProductWebBean implements AdminProductWebController { /** * Available */ - private Boolean available; + private Boolean productAvailability; /** - * Category id + * Category instance */ - private Long id; + private Category productCategory; /** - * Property price + * Property productPrice */ - private Float price; + private Float productPrice; /** - * Property title + * Property productTitle */ - private String title; + private String productTitle; /** * Default constructor @@ -102,10 +103,10 @@ public class AdminProductWebBean implements AdminProductWebController { Product product = new GenericProduct(); // Add all - product.setAvailable(this.getAvailable()); - product.setId(this.getId()); - product.setPrice(this.getPrice()); - product.setTitle(this.getTitle()); + product.setProductAvailability(this.getProductAvailability()); + product.setProductCategory(this.getProductCategory()); + product.setProductPrice(this.getProductPrice()); + product.setProductTitle(this.getProductTitle()); // Call bean this.productBean.doAdminAddProduct(product); @@ -114,10 +115,10 @@ public class AdminProductWebBean implements AdminProductWebController { this.controller.addProduct(product); // Set all to null - this.setAvailable(Boolean.FALSE); - this.setId(null); - this.setPrice(null); - this.setTitle(null); + this.setProductAvailability(Boolean.FALSE); + this.setProductCategory(null); + this.setProductPrice(null); + this.setProductTitle(null); } catch (final ProductTitleAlreadyUsedException | CannotAddProductException ex) { // Continue to throw throw new FaceletException(ex); @@ -131,42 +132,42 @@ public class AdminProductWebBean implements AdminProductWebController { } @Override - public void setAvailable (final Boolean available) { - this.available = available; + public void setProductAvailability (final Boolean productAvailability) { + this.productAvailability = productAvailability; } @Override - public Long getId () { - return id; + public Category getProductCategory () { + return productCategory; } @Override - public void setId (final Long id) { - this.id = id; + public void setProductCategory (final Category productCategory) { + this.productCategory = productCategory; } @Override - public Float getPrice () { - return this.price; + public Float getProductPrice () { + return this.productPrice; } @Override - public void setPrice (final Float price) { - this.price = price; + public void setProductPrice (final Float productPrice) { + this.productPrice = productPrice; } @Override - public String getTitle () { - return this.title; + public String getProductTitle () { + return this.productTitle; } @Override - public void setTitle (final String title) { - this.title = title; + public void setProductTitle (final String productTitle) { + this.productTitle = productTitle; } @Override - public Boolean getAvailable () { - return this.available; + public Boolean getProductAvailability () { + return this.productAvailability; } } diff --git a/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebController.java b/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebController.java index 90fa3dea..0942bff8 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebController.java +++ b/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebController.java @@ -18,6 +18,7 @@ package org.mxchange.pizzaapplication.beans.product; import java.util.List; import javax.faces.view.facelets.FaceletException; +import org.mxchange.jshopcore.model.category.Category; import org.mxchange.jshopcore.model.product.Product; /** @@ -48,54 +49,54 @@ public interface AdminProductWebController { * * @return Product's available property */ - public Boolean getAvailable (); + public Boolean getProductAvailability (); /** * Setter for product's available property * * @param available Product's available property */ - public void setAvailable (final Boolean available); + public void setProductAvailability (final Boolean available); /** - * Getter for product's category id + * Getter for product's category * - * @return Product's category id + * @return Product's category */ - public Long getId (); + public Category getProductCategory (); /** - * Setter for product's category id + * Setter for product's category instance * - * @param id Product's category id + * @param productCategory Product's category instance */ - public void setId (final Long id); + public void setProductCategory (final Category productCategory); /** * Getter for product's price property * * @return Product's price property */ - public Float getPrice (); + public Float getProductPrice (); /** * Setter for product's price property * * @param price Product's price property */ - public void setPrice (final Float price); + public void setProductPrice (final Float price); /** * Getter for product's title property * * @return Product's title */ - public String getTitle (); + public String getProductTitle (); /** * Setter for product's title property * * @param title Product's title */ - public void setTitle (final String title); + public void setProductTitle (final String title); } diff --git a/src/java/org/mxchange/pizzaapplication/beans/shop/ShopWebBean.java b/src/java/org/mxchange/pizzaapplication/beans/shop/ShopWebBean.java index 9b233a73..52e59682 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/shop/ShopWebBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/shop/ShopWebBean.java @@ -27,12 +27,12 @@ import javax.inject.Named; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; -import org.mxchange.jcoreee.BaseEeSystem; import org.mxchange.jshopcore.model.category.Category; import org.mxchange.jshopcore.model.category.CategorySessionBeanRemote; import org.mxchange.jshopcore.model.category.ProductCategory; import org.mxchange.jshopcore.model.product.Product; import org.mxchange.jshopcore.model.product.ProductSessionBeanRemote; +import org.mxchange.pizzaapplication.beans.AbstractWebBean; /** * General shop controller @@ -41,7 +41,7 @@ import org.mxchange.jshopcore.model.product.ProductSessionBeanRemote; */ @Named ("controller") @ApplicationScoped -public class ShopWebBean extends BaseEeSystem implements ShopWebController { +public class ShopWebBean extends AbstractWebBean implements ShopWebController { /** * Serial number @@ -67,7 +67,7 @@ public class ShopWebBean extends BaseEeSystem implements ShopWebController { @Override public void addProduct (final Product product) { // Is the product available? - if (product.getAvailable()) { + if (product.getProductAvailability()) { // Add it this.availableProducts.add(product); } diff --git a/web/WEB-INF/templates/admin/admin_category_selection_box.tpl b/web/WEB-INF/templates/admin/admin_category_selection_box.tpl index 3141b802..d91cc209 100644 --- a/web/WEB-INF/templates/admin/admin_category_selection_box.tpl +++ b/web/WEB-INF/templates/admin/admin_category_selection_box.tpl @@ -4,8 +4,8 @@ xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets"> - - + + diff --git a/web/WEB-INF/templates/admin/admin_parent_category_selection_box.tpl b/web/WEB-INF/templates/admin/admin_parent_category_selection_box.tpl index ef9e7100..15ce79e4 100644 --- a/web/WEB-INF/templates/admin/admin_parent_category_selection_box.tpl +++ b/web/WEB-INF/templates/admin/admin_parent_category_selection_box.tpl @@ -5,6 +5,6 @@ xmlns:ui="http://java.sun.com/jsf/facelets"> - + diff --git a/web/WEB-INF/templates/basket/full_basket.tpl b/web/WEB-INF/templates/basket/full_basket.tpl index 8ddeea95..81ff9316 100644 --- a/web/WEB-INF/templates/basket/full_basket.tpl +++ b/web/WEB-INF/templates/basket/full_basket.tpl @@ -10,7 +10,7 @@ #{msg.GUEST_ITEM_TITLE} - #{item.product.title} + #{item.itemProduct.productTitle} @@ -19,7 +19,7 @@
- + @@ -30,7 +30,7 @@ #{msg.CHANGE_ITEM_AMOUNT} - + diff --git a/web/admin/category.xhtml b/web/admin/category.xhtml index 021b989a..dbf05089 100644 --- a/web/admin/category.xhtml +++ b/web/admin/category.xhtml @@ -23,13 +23,13 @@ #{msg.SELECT_ENTRY} - #{cat.id}: + #{cat.categoryId}: #{msg.ADMIN_ENTER_CATEGORY_TITLE} - #{cat.title} + #{cat.categoryTitle} @@ -63,7 +63,7 @@
- +
diff --git a/web/admin/product.xhtml b/web/admin/product.xhtml index 33b0a9d7..cbce503d 100644 --- a/web/admin/product.xhtml +++ b/web/admin/product.xhtml @@ -23,27 +23,27 @@ Produktnummer: - #{product.id}: + #{product.productId}: #{msg.ADMIN_ENTER_PRODUCT_TITLE} - #{product.title} + #{product.productTitle} #{msg.SINGLE_ITEM_PRICE} - #{product.price} + #{product.productPrice} #{msg.CATEGORY} - #{product.categoryId} + #{product.productCategory.categoryId} #{msg.IS_AVAILABLE} - #{product.available} + #{product.productAvailability} @@ -72,7 +72,7 @@
- +
@@ -85,7 +85,7 @@
- +
@@ -109,7 +109,7 @@
- + diff --git a/web/basket.xhtml b/web/basket.xhtml index e3c253c2..ab56ee25 100644 --- a/web/basket.xhtml +++ b/web/basket.xhtml @@ -23,7 +23,7 @@ #{msg.GUEST_ITEM_TITLE} - #{item.product.title} + #{item.itemProduct.productTitle} @@ -32,7 +32,7 @@
- + @@ -45,7 +45,7 @@ - + diff --git a/web/customer/checkout_done.xhtml b/web/customer/checkout_done.xhtml index 4d1b8621..2d1ddad5 100644 --- a/web/customer/checkout_done.xhtml +++ b/web/customer/checkout_done.xhtml @@ -20,7 +20,7 @@ Rechnung abrufen: - + diff --git a/web/index.xhtml b/web/index.xhtml index 5e10ffb6..895fa113 100644 --- a/web/index.xhtml +++ b/web/index.xhtml @@ -34,7 +34,7 @@
- #{product.title} + #{product.productTitle}
@@ -44,7 +44,7 @@ - +