Praktický návod

Jak navrhnout e-shop pro více zemí a měn

Země, jazyk a měna jsou tři různé rozměry. Modeluj je samostatně a spoj je až v konkrétním prodejním trhu.

30 minut · E-commerce architektura

Nejdřív stručně

Jedna lokalizace není jeden stát

Jeden stát může mít více jazyků a jeden jazyk se používá v různých zemích. Stejně tak zvolená měna nemusí být automaticky měnou doručení nebo účetní měnou firmy.

Prodejní trh proto definuj jako explicitní konfiguraci: země, povolené locale, ceníky, měny, daně, dopravy, platby a domény. Objednávka si z ní uloží neměnný snapshot.

Připrav si

Co musíš zjistit před návrhem

Nezačínej přepínačem vlajek. Sepiš skutečné obchodní rozdíly mezi trhy a vlastníka každé konfigurace.

  • Seznam trhů, jazyků, domén, měn, skladů, doprav, plateb a právních entit, které prodávají.
  • Pravidlo tvorby ceny: samostatný ceník, přepočet kurzem, psychologické zaokrouhlení a období platnosti.
  • Obsah, který se překládá, a obsah, který se liší obchodně: sortiment, dostupnost, název, popis nebo podmínky.
  • Pravidla daní a dokladů ověřená s účetními a právními odborníky pro konkrétní země; neukládej je jako nezdokumentované ify.

Kroky 1 až 3

Odděl globální produkt od prodejního trhu

Sdílej stabilní identitu produktu, ale dostupnost, cenu a prezentaci váž na konkrétní channel nebo market.

1. Vytvoř explicitní model trhu

  1. Globální produkt drží SKU a společná technická data. Market listing určuje, zda se produkt prodává, za jakých podmínek a s jakou prezentací.
  2. Locale zapisuj jako jazyk a region, například cs-CZ nebo de-AT. Nepoužívej samotnou vlajku jako jazyk ani jako obchodní pravidlo.
  3. Market vybírej z ověřené domény, uživatelské volby a doručovacího kontextu. GeoIP může nabídnout výchozí hodnotu, ne autoritativně měnit košík.
  4. Všechny background joby, cache klíče a vyhledávací dokumenty nesou market ID. Jinak se data jednoho trhu snadno objeví v jiném.
market = country + allowed_locales + domains + price_lists + tax_profile
Unicode CLDR data pro jazyky a území

2. Ukládej ceny po měnách přesně

  1. Cenu modeluj jako přesnou částku a kód měny. Float nepoužívej a počet desetinných míst nehardcoduj na dvě pro všechny měny.
  2. Pro každou měnu může existovat samostatný ceník s valid_from a valid_to. Automatický kurz je vstup do návrhu ceny, ne důvod přepisovat historickou objednávku.
  3. Pokud zobrazuješ orientační druhou měnu, jasně ji označ. Checkout a platba musí mít jednu závaznou měnu a přesný konečný součet.
  4. Objednávka uloží ceny řádků, slevy, dopravu, daně, měnu a případný použitý kurz jako snapshot v okamžiku potvrzení.
price_list(market_id, currency, product_id, amount, valid_from, valid_to)
Oficiální PHP dokumentace k lokalizaci čísel a měn

3. Lokalizuj obsah, URL a procesy

  1. Překlady ukládej pod locale se zřetelným fallbackem. Chybějící překlad nesmí tiše publikovat obsah v nesprávném jazyce bez rozhodnutí.
  2. Lokalizuj formát částek, data, jednotky, adresy a validaci telefonu. Interně uchovávej strukturované hodnoty, ne jejich zobrazený řetězec.
  3. Pro každou jazykovou URL nastav canonical a hreflang podle skutečně dostupných variant. Přepínač má vést na odpovídající obsah, ne vždy na homepage.
  4. Dopravu, platbu, e-maily a doklady vybírej podle marketu a snapshotuj do objednávky. Změna konfigurace nesmí přepsat starý doklad.
product_translation(product_id, locale, name, slug, description)
W3C Internationalization resources

Krok 4

Otestuj kombinace, ne jen každý trh zvlášť

Chyby vznikají při přechodu mezi měnou, jazykem a trhem uprostřed košíku nebo checkoutu.

  1. Vytvoř matici trhu, locale a měny

    Ověř povolené i zakázané kombinace, ceny, dostupnost, dopravu, platbu a adresní formát.

    php bin/phpunit --filter MarketCheckout
  2. Změň ceník po vytvoření objednávky

    Historická objednávka a doklad musí zachovat původní částky, měnu, kurz i daňový snapshot.

  3. Přepni jazyk v rozpracovaném košíku

    Položky zůstanou stejné a názvy se přeloží; změna trhu se naopak provede jen s výslovným přepočtem a kontrolou dostupnosti.

Když to zlobí

Nejčastější chyby

Změna jazyka přepne také cenu a sklad

Jazyk je chybně použit jako market. Odděl locale od prodejního trhu a změnu marketu prováděj jako samostatnou validovanou operaci.

Objednávka se po změně kurzu přepočítala

Historie odkazuje na živý ceník. Ulož do objednávky přesný snapshot částek, měny a použitého kurzu.

Produkt z jednoho trhu uniká do druhého

Chybí market scope v repository, cache, indexu nebo background jobu. Market ID musí být povinný na každé hranici.

Formátovaná cena nejde znovu spočítat

Do domény se dostal lokalizovaný řetězec. Uchovávej amount + currency a NumberFormatter používej pouze pro vstupní nebo výstupní hranici.

Hotovo

Každý trh má jasná pravidla bez kopie celého e-shopu.

Produkty mohou sdílet identitu, zatímco market řídí lokalizaci, ceníky, dostupnost a proces objednávky. Historická objednávka zůstává neměnným snapshotem.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.