Storefront Localization

Serve region-aware prices, taxes, and countries.

On this page

In this guide, you'll learn how to localize a storefront using Aiminaabee regions.

Aiminaabee scopes catalog prices, tax, shipping, and payment providers to a region. A customer typically picks a country (or you detect it), you resolve the matching region, and you pass that region_id on product and cart requests.

What regions control

Each region defines:

  • Currency used to calculate variant prices
  • Countries the customer can ship to
  • Tax behavior for that market
  • Payment and fulfillment options available at checkout

On Next.js, put the country in [countryCode] and resolve the region on the server. Follow:

Pass the region on catalog requests

When you list or retrieve products, pass region_id (and request *variants.calculated_price in fields) so variant prices match the customer's market.

ts

tsCopy
const { products } = await sdk.store.product.list(storeCode, {
region_id: region.id,
fields: "*variants.calculated_price,*variants,*options",
})

See Retrieve variant prices for sale prices, tax-inclusive prices, and formatting.

Pass the region on the cart

Create the cart with the selected region so line items, shipping, and totals use the same currency and tax rules:

ts

tsCopy
const { cart } = await sdk.store.cart.create(storeCode, {
region_id: region.id,
})

If the customer changes country, update the cart with the new region_id.

UI copy and URLs

Region data covers commerce localization (currency, tax, countries). For translating UI strings — buttons, navigation, CMS copy — use your frontend's i18n library (for example Next.js routing with [countryCode]). Do not derive the Aiminaabee store code from the country code; pass storeCode separately as described in Connect to Aiminaabee.