* docs: translation module * fix link in JS SDK * add translations user guides [WIP] * updates * fix broken link * remove mentions of default locale * change header * updates * updated user guides * handle todos * fix build error * fix lint errors
371 lines
10 KiB
Plaintext
371 lines
10 KiB
Plaintext
---
|
|
products:
|
|
- product
|
|
- store
|
|
---
|
|
|
|
import { CodeTabs, CodeTab, Table } from "docs-ui"
|
|
|
|
export const metadata = {
|
|
title: `Links between Translation Module and Other Modules`,
|
|
}
|
|
|
|
# {metadata.title}
|
|
|
|
This document showcases the module links that Medusa defines between the Translation Module and other Commerce Modules.
|
|
|
|
## Summary
|
|
|
|
Medusa defines the following links between the Translation Module and other Commerce Modules:
|
|
|
|
<Table>
|
|
<Table.Header>
|
|
<Table.Row>
|
|
<Table.HeaderCell>
|
|
First Data Model
|
|
</Table.HeaderCell>
|
|
<Table.HeaderCell>
|
|
Second Data Model
|
|
</Table.HeaderCell>
|
|
<Table.HeaderCell>
|
|
Type
|
|
</Table.HeaderCell>
|
|
<Table.HeaderCell>
|
|
Description
|
|
</Table.HeaderCell>
|
|
</Table.Row>
|
|
</Table.Header>
|
|
<Table.Body>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[Product](/references/product/models/Product) in [Product Module](../../product/page.mdx)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Read-only - one-to-many
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Learn more](#product-module)
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductVariant](/references/product/models/ProductVariant) in [Product Module](../../product/page.mdx)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Read-only - one-to-many
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Learn more](#product-module)
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductCategory](/references/product/models/ProductCategory) in [Product Module](../../product/page.mdx)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Read-only - one-to-many
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Learn more](#product-module)
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductCollection](/references/product/models/ProductCollection) in [Product Module](../../product/page.mdx)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Read-only - one-to-many
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Learn more](#product-module)
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductTag](/references/product/models/ProductTag) in [Product Module](../../product/page.mdx)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Read-only - one-to-many
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Learn more](#product-module)
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductType](/references/product/models/ProductType) in [Product Module](../../product/page.mdx)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Read-only - one-to-many
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Learn more](#product-module)
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductOption](/references/product/models/ProductOption) in [Product Module](../../product/page.mdx)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Read-only - one-to-many
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Learn more](#product-module)
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductOptionValue](/references/product/models/ProductOptionValue) in [Product Module](../../product/page.mdx)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Read-only - one-to-many
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Learn more](#product-module)
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[StoreLocale](/references/store/models/StoreLocale) in [Store Module](../../store/page.mdx)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Locale](/references/translation/models/Locale)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Read-only - has many
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
[Learn more](#store-module)
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
</Table.Body>
|
|
</Table>
|
|
|
|
---
|
|
|
|
## Product Module
|
|
|
|
Medusa defines the following read-only links between the Translation and Product Modules:
|
|
|
|
<Table>
|
|
<Table.Header>
|
|
<Table.Row>
|
|
<Table.HeaderCell>
|
|
Data Model
|
|
</Table.HeaderCell>
|
|
<Table.HeaderCell>
|
|
Link Type
|
|
</Table.HeaderCell>
|
|
<Table.HeaderCell>
|
|
Description
|
|
</Table.HeaderCell>
|
|
</Table.Row>
|
|
</Table.Header>
|
|
<Table.Body>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[Product](/references/product/models/Product) \<-\> [Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
One-to-many (bidirectional)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Retrieve translations associated with a product and vice versa.
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductVariant](/references/product/models/ProductVariant) -> [Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
One-to-many (read-only)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Retrieve translations of a product variant only.
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductCategory](/references/product/models/ProductCategory) -> [Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
One-to-many (read-only)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Retrieve translations of a product category only.
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductCollection](/references/product/models/ProductCollection) -> [Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
One-to-many (read-only)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Retrieve translations of a product collection only.
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductTag](/references/product/models/ProductTag) -> [Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
One-to-many (read-only)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Retrieve translations of a product tag only.
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductType](/references/product/models/ProductType) -> [Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
One-to-many (read-only)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Retrieve translations of a product type only.
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductOption](/references/product/models/ProductOption) -> [Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
One-to-many (read-only)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Retrieve translations of a product option only.
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
<Table.Row>
|
|
<Table.Cell>
|
|
[ProductOptionValue](/references/product/models/ProductOptionValue) -> [Translation](/references/translation/models/Translation)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
One-to-many (read-only)
|
|
</Table.Cell>
|
|
<Table.Cell>
|
|
Retrieve translations of a product option value only.
|
|
</Table.Cell>
|
|
</Table.Row>
|
|
</Table.Body>
|
|
</Table>
|
|
|
|
### Retrieve with Query
|
|
|
|
To retrieve the translations of a product with [Query](!docs!/learn/fundamentals/module-links/query), pass `translations.*` in `fields`:
|
|
|
|
<Note>
|
|
|
|
You can pass the `translations.*` field when querying any of the above-mentioned data models to retrieve their associated translations.
|
|
|
|
</Note>
|
|
|
|
<CodeTabs group="relation-query">
|
|
<CodeTab label="query.graph" value="method">
|
|
|
|
```ts
|
|
const { data: products } = await query.graph({
|
|
entity: "product",
|
|
fields: [
|
|
"translations.*",
|
|
],
|
|
})
|
|
|
|
// products[0].translations
|
|
```
|
|
|
|
</CodeTab>
|
|
<CodeTab label="useQueryGraphStep" value="step">
|
|
|
|
```ts
|
|
import { useQueryGraphStep } from "@medusajs/medusa/core-flows"
|
|
|
|
// ...
|
|
|
|
const { data: products } = useQueryGraphStep({
|
|
entity: "product",
|
|
fields: [
|
|
"translations.*",
|
|
],
|
|
})
|
|
|
|
// products[0].translations
|
|
```
|
|
|
|
</CodeTab>
|
|
</CodeTabs>
|
|
|
|
---
|
|
|
|
## Store Module
|
|
|
|
The [Store Module](../../store/page.mdx) has a `StoreLocale` data model that stores the supported locales of a store. However, these locales don't hold all the details of a locale, such as its name.
|
|
|
|
Instead, Medusa defines a read-only link from the Store Module's `StoreLocale` data model to the Translation Module's `Locale` data model. This means you can retrieve the details of a store's supported locales, but you don't manage the links in a pivot table in the database.
|
|
|
|
### Retrieve with Query
|
|
|
|
To retrieve the details of a store's locales with [Query](!docs!/learn/fundamentals/module-links/query), pass `supported_locales.locale.*` in `fields`:
|
|
|
|
<CodeTabs group="relation-query">
|
|
<CodeTab label="query.graph" value="method">
|
|
|
|
```ts
|
|
const { data: stores } = await query.graph({
|
|
entity: "store",
|
|
fields: [
|
|
"supported_locales.locale.*",
|
|
],
|
|
})
|
|
|
|
// stores[0].supported_locales[0].locale
|
|
```
|
|
|
|
</CodeTab>
|
|
<CodeTab label="useQueryGraphStep" value="step">
|
|
|
|
```ts
|
|
import { useQueryGraphStep } from "@medusajs/medusa/core-flows"
|
|
|
|
// ...
|
|
|
|
const { data: stores } = useQueryGraphStep({
|
|
entity: "store",
|
|
fields: [
|
|
"supported_locales.locale.*",
|
|
],
|
|
})
|
|
|
|
// stores[0].supported_locales[0].locale
|
|
```
|
|
|
|
</CodeTab>
|
|
</CodeTabs>
|