Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions concepts/commerce/catalog/products.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ nav:

Products are sellable entities (physical and digital products) within your shop.

Depending on your setup, Shopware can easily handle thousands of products. However, an upsurge in the product quantity (in millions) needs some tweaks for robust running of the environment as it depends on factors like the number of [categories](../../../concepts/commerce/catalog/categories), [sales channels](../../../concepts/commerce/catalog/sales-channels), [product properties](../../../concepts/commerce/catalog/products#property-groups--options), etc. Every product added to your shop can be made available on one or more [sales channels](../../../concepts/commerce/catalog/sales-channels).
Depending on your setup, Shopware can easily handle thousands of products. However, an upsurge in the product quantity (in millions) needs some tweaks for robust running of the environment as it depends on factors like the number of [categories](../../../concepts/commerce/catalog/categories), [sales channels](../../../concepts/commerce/catalog/sales-channels), [product properties](../../../concepts/commerce/catalog/products), etc. Every product added to your shop can be made available on one or more [sales channels](../../../concepts/commerce/catalog/sales-channels).

Let's delve into a more detailed understanding of products using the example of garments:

Expand Down Expand Up @@ -52,8 +52,8 @@ erDiagram
uuid product_id
}
ProductCategory {
uuid product_id
uuid category_id
uuid product_id
uuid category_id
}
Category {
uuid category_id
Expand Down
8 changes: 4 additions & 4 deletions concepts/commerce/checkout-concept/cart.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ stateDiagram-v2
Enrichment secures the *Independence_ and _Adaptability* of Shopware 6. As shown in the below code snippet, the cart can create and contain line items that are initially empty and will only be loaded \(enriched\) during the calculation.

```php
<?php
<?php

use Shopware\Core\Checkout\Cart\Cart;
use Shopware\Core\Checkout\Cart\LineItem\LineItem;
Expand Down Expand Up @@ -145,7 +145,7 @@ A default set of collectors is implemented in Shopware 6, which has a set call o
title: Enrichment
---
sequenceDiagram
Enrichment->>Enrichment :
Enrichment->>Enrichment :
box
participant Enrichment
participant ProductCartProcessor
Expand All @@ -160,7 +160,7 @@ box
Enrichment->>ProductCartProcessor: enrich
Enrichment->>CartPromotionsCollector: enrich
Enrichment->>CartDiscountCollector: enrich
Enrichment->>Enrichment :
Enrichment->>Enrichment :
```

## Cart processors - price calculation and validation
Expand Down Expand Up @@ -195,7 +195,7 @@ As you can see in the diagram above, the cart is modified during the enrichment

## Cart storage

Contrary to other entities in the system, the cart is not managed through the [Data Abstraction Layer](/docs/concepts/framework/data-abstraction-layer)\(DAL)\. The cart can only be written and retrieved as a whole. As discussed in the sections, the workload of Shopware 6 can only be performed on the whole object in memory.
Contrary to other entities in the system, the cart is not managed through the [Data Abstraction Layer](./../../../concepts/framework/data-abstraction-layer)\(DAL)\. The cart can only be written and retrieved as a whole. As discussed in the sections, the workload of Shopware 6 can only be performed on the whole object in memory.

## Cart control

Expand Down
26 changes: 13 additions & 13 deletions concepts/translations/built-in-translation-system.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ When loading translations, the system follows a defined priority order to resolv
look at its documentation.
3. Country-agnostic translations (`en` and `de`) – These are shipped with Shopware and its plugins. They ensure that the
system always has a reliable fallback language and provide a consistent developer experience without requiring you
to wait until your translations are accepted at [translate.shopware.com](https://crowdin.com/project/shopware6). For more details on selecting a fallback language and structuring your snippet files, see the [Fallback Languages guide](/concepts/translations/fallback-language-selection.md).
to wait until your translations are accepted at [translate.shopware.com](https://crowdin.com/project/shopware6). For more details on selecting a fallback language and structuring your snippet files, see the [Fallback Languages guide](./../../concepts/translations/fallback-language-selection).
4. Built-in translation system – Finally, the translations installed via the built-in translation system are applied.

## Built-in translation system and Flysystem
Expand All @@ -102,35 +102,35 @@ You can find the configuration file at `src/Core/System/Resources/translation.ya

#### `repository-url`

**Type:** `string`
**Type:** `string`
**Example:**

```yaml
repository-url: https://raw.githubusercontent.com/shopware/translations/main/translations
```

**Description:**
**Description:**
The base URL of the translation repository. Translation files for different languages and plugins are fetched from here.

---

#### `metadata-url`

**Type:** `string`
**Type:** `string`
**Example:**

```yaml
metadata-url: https://raw.githubusercontent.com/shopware/translations/main/crowdin-metadata.json
```

**Description:**
**Description:**
The URL for [metadata information](#how-does-the-system-recognize-new-updates) about the translations.

---

#### `plugins`

**Type:** `array[string]`
**Type:** `array[string]`
**Example:**

```yaml
Expand All @@ -141,29 +141,29 @@ plugins: [
]
```

**Description:**
**Description:**
A list of supported plugins for which translations are available.

---

#### `excluded-locales`

**Type:** `array[string]`
**Type:** `array[string]`
**Example:**

```yaml
excluded-locales: [ 'de-DE', 'en-GB' ]
```

**Description:**
**Description:**
A list of language locales to be excluded from translation processing. German (Germany) and English (UK) are excluded by
default since they are shipped with Shopware. The exclusion applies to plugins too.

---

#### `plugin-mapping`

**Type:** `array[object]`
**Type:** `array[object]`
**Example:**

```yaml
Expand All @@ -177,14 +177,14 @@ plugin-mapping:
- `plugin` (`string`): The internal plugin identifier (e.g., directory or code name).
- `name` (`string`): The corresponding plugin name in the translation repository.

**Description:**
**Description:**
Allows mapping between internal plugin identifiers and repository names in case they differ.

---

#### `languages`

**Type:** `array[object]`
**Type:** `array[object]`
**Example:**

```yaml
Expand All @@ -199,7 +199,7 @@ languages:
- `locale` (`string`): Language code according to [IETF BCP 47](https://www.rfc-editor.org/info/bcp47), restricted to [ISO 639-1 (2-letter) language codes](https://en.wikipedia.org/wiki/ISO_639-1), used by
Shopware for translations.

**Description:**
**Description:**
Defines the set of supported languages for which translations should be retrieved. Each entry specifies a display name
and a locale code.

Expand Down
14 changes: 7 additions & 7 deletions concepts/translations/fallback-language-selection.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
# Fallback language selection

With Shopware 6.7 a **country-agnostic snippet layer** was introduced to reduce duplicate translations.
In this model the snippet loader first attempts to load a country-specific variant (e.g. `de-DE`), then looks for an agnostic **fallback language** (e.g. `de`), and as a last resort falls back to `en` as a universal default.
With Shopware 6.7 a **country-agnostic snippet layer** was introduced to reduce duplicate translations.
In this model the snippet loader first attempts to load a country-specific variant (e.g. `de-DE`), then looks for an agnostic **fallback language** (e.g. `de`), and as a last resort falls back to `en` as a universal default.
The fallback layer concept and fallback order are explained in detail in the [Built-in Translation Handling](built-in-translation-system.md) page, which you should read alongside this guide.

## Why an extra fallback layer?

Before v6.7, Shopware shipped only country-specific snippet files. Developers often duplicated existing files (for example `en-GB` to `en-US`) and changed a handful of keys.
This practice led to bloated repositories and inconsistent fallbacks. The **country-independent layer** centralizes common translations into a neutral fallback file (`en`, `de`, `pt`, etc.) and isolates regional differences in small patch files.
Before v6.7, Shopware shipped only country-specific snippet files. Developers often duplicated existing files (for example `en-GB` to `en-US`) and changed a handful of keys.
This practice led to bloated repositories and inconsistent fallbacks. The **country-independent layer** centralizes common translations into a neutral fallback file (`en`, `de`, `pt`, etc.) and isolates regional differences in small patch files.
Detailed examples of how Shopware resolves translations are available in the [Built-in Translation Handling](built-in-translation-system.md) guide.

## Fallback languages

The **fallback code** is the plain language code (e.g. `en` or `de`), and the **defining dialect** is the standard locale from which the fallback translations derive (for example `en` instead of `en-US` or `en-GB`).
The **fallback code** is the plain language code (e.g. `en` or `de`), and the **defining dialect** is the standard locale from which the fallback translations derive (for example `en` instead of `en-US` or `en-GB`).
The table shows some examples of common cases:

| Fallback code | Standard variant (defining dialect) | Example dialects |
Expand Down Expand Up @@ -50,7 +50,7 @@ The command supports several options:

## Implementation guidelines for extension developers

For detailed instructions, see the [Extension Translation Migration](/resources/references/upgrades/core/translation/extension-translation.md) guide. In short:
For detailed instructions, see the [Extension Translation Migration](./../../resources/references/upgrades/core/translation/extension-translation) guide. In short:

- **Create a complete base file** (`messages.<language>.base.json`) for each supported language.
- **Add patch files only when needed** – keep them minimal.
Expand All @@ -62,4 +62,4 @@ For detailed instructions, see the [Extension Translation Migration](/resources/
## Conclusion

The country-independent snippet layer streamlines translation maintenance by consolidating common strings into a neutral fallback file and isolating regional vocabulary into small patch files.
For further examples, refer to [Built-in Translation Handling](/concepts/translations/built-in-translation-system.md) and [Extension Translation Migration](/resources/references/upgrades/core/translation/extension-translation.md).
For further examples, refer to [Built-in Translation Handling](./built-in-translation-system) and [Extension Translation Migration](./../../resources/references/upgrades/core/translation/extension-translation).
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ bin/console es:index // Creates only the index for ES
`es:create:alias` will create an alias linking to the index after `es:index` is done. Normally this is done automatically. In the older version, this has to be done.

```bash
bin/console es:create:alias
bin/console es:create:alias
```

**> No Output**
Expand Down Expand Up @@ -205,9 +205,9 @@ curl -X DELETE 'elasticsearch:9200/_all'
Returns the status of your indexing:

```sql
select * from message_queue_stats mqs ;
select count(*) from enqueue e ;
select count(*) from dead_message dm ;
select * from message_queue_stats mqs ;
select count(*) from enqueue e ;
select count(*) from dead_message dm ;
```

The number of entries in the enqueue should match the sum of the size values in the `message_queue_stats`. As long as there are entries in your `enqueue`, the indexing is in process and your message consumer has to work those messages.
Expand All @@ -218,7 +218,7 @@ Sometimes you want to reset the indexing in your database because your indexing
If the database queue is used, third-party services will differ. You can do so with the following queries.

```sql
truncate enqueue ;
truncate enqueue ;
truncate dead_message ;
truncate message_queue_stats ;
update scheduled_task set status = 'scheduled' where status = 'queued';
Expand All @@ -230,7 +230,7 @@ This is mainly for debugging purposes and is only meant for testing and staging
First, execute the database reset (only working for the database queue):

```sql
truncate enqueue ;
truncate enqueue ;
truncate dead_message ;
truncate message_queue_stats ;
update scheduled_task set status = 'scheduled' where status = 'queued';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@
### Indexing the whole shop

Sometimes you want to reindex your whole shop, including Elasticsearch, SEO-URLs, product index, and more.
For a reindex of the whole shop, you can use the command `bin/console dal:refresh:index --use-queue`. Use the `--use-queue` option because you will have too many products to index without the [message queue](/docs/guides/hosting/infrastructure/message-queue) involved.
For a reindex of the whole shop, you can use the command `bin/console dal:refresh:index --use-queue`. Use the `--use-queue` option because you will have too many products to index without the [message queue](../message-queue) involved.

### Alias creation

Expand All @@ -184,10 +184,10 @@
In case a message runs into an error, it is written into the `dead_messages` table and will be processed again after a specific time frame.

You can start multiple messenger consumer processes by using the command `bin/console messenger:consume` and also add output to the processed messages by adding the parameter `bin/console messenger:consume -vv`.
In a production environment, you want to deactivate the admin messenger which is started automatically when opening a session in your Administration view by following this [documentation](/docs/guides/plugins/plugins/framework/message-queue/add-message-handler#the-admin-worker).
In a production environment, you want to deactivate the admin messenger which is started automatically when opening a session in your Administration view by following this [documentation](../../../../guides/hosting/infrastructure/message-queue#admin-worker).

Our experience has shown that up to three worker processes are normal and useful for a production environment.
If you want more than that, a tool like [RabbitMQ](/docs/guides/hosting/infrastructure/message-queue#transport-rabbitmq-example) to handle the queue is needed so your database will not become a bottleneck.
If you want more than that, a tool like [RabbitMQ](../message-queue#message-queue-on-production-systems) to handle the queue is needed so your database will not become a bottleneck.

Check warning on line 190 in guides/hosting/infrastructure/elasticsearch/elasticsearch-setup.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/hosting/infrastructure/elasticsearch/elasticsearch-setup.md#L190

Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short). (COMMA_COMPOUND_SENTENCE_2[1]) Suggestions: `, so` URL: https://languagetool.org/insights/post/comma-before-and/ Rule: https://community.languagetool.org/rule/show/COMMA_COMPOUND_SENTENCE_2?lang=en-US&subId=1 Category: PUNCTUATION
Raw output
guides/hosting/infrastructure/elasticsearch/elasticsearch-setup.md:190:134: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short). (COMMA_COMPOUND_SENTENCE_2[1])
 Suggestions: `, so`
 URL: https://languagetool.org/insights/post/comma-before-and/ 
 Rule: https://community.languagetool.org/rule/show/COMMA_COMPOUND_SENTENCE_2?lang=en-US&subId=1
 Category: PUNCTUATION

## Configuration

Expand Down
6 changes: 3 additions & 3 deletions guides/plugins/apps/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ Apps are well-suited for use cases such as:
- Customizing the Storefront or Administration; creating custom themes, adding custom blocks or Storefront elements, or modifying the appearance and layout of the Administration panel
- Facilitating integration with external systems to allow seamless data synchronization, order and product management, and cross-platform workflows

You can develop apps using the Shopware [App SDK](app-sdks), [App Scripts](app-scripts), and external services via the [App API](../../../resources/references/app-reference). Apps offer a modular and scalable way to extend and customize the platform according to specific business requirements.
You can develop apps using the Shopware [App SDK](app-sdks/index.md), [App Scripts](app-scripts/), and external services via the [App API](../../../resources/references/app-reference/). Apps offer a modular and scalable way to extend and customize the platform according to specific business requirements.

Follow our [App Base Guide](app-base-guide) and [App Starter Guide](starter) to learn how to develop an app.
Follow our [App Base Guide](app-base-guide/) and [App Starter Guide](starter/) to learn how to develop an app.

::: info
Apps also provide theme support, so everything you can do with a theme plugin is also possible in an app. This makes them the preferred option for customizing design in Cloud shops.
:::

To understand how apps differ from other extension types, see the [Overview table](../../../guides/plugins/index).
To understand how apps differ from other extension types, see the [Overview table](../../../guides/plugins/index/).
2 changes: 1 addition & 1 deletion guides/plugins/apps/starter/starter-admin-extension.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,4 +161,4 @@

* Did you know, you can add [new sections](/resources/admin-extension-sdk/api-reference/ui/component-section) to the UI or even [entire modules](/resources/admin-extension-sdk/api-reference/ui/mainModule)?
* The Meteor Admin SDK also offers [TypeScript support](/resources/admin-extension-sdk/getting-started/installation#using-npm-require-bundling) (including autocompletion)
* Don't want to extend the admin panel? Have a look at [App Scripts](/docs/guides/plugins/apps/app-scripts/index.md)
* Don't want to extend the admin panel? Have a look at [App Scripts](../../../../guides/plugins/apps/app-scripts/index.md)

Check warning on line 164 in guides/plugins/apps/starter/starter-admin-extension.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/apps/starter/starter-admin-extension.md#L164

In American English, “take a look” is more commonly used. (HAVE_A_LOOK[5]) Suggestions: `Take a look` Rule: https://community.languagetool.org/rule/show/HAVE_A_LOOK?lang=en-US&subId=5 Category: BRITISH_ENGLISH
Raw output
guides/plugins/apps/starter/starter-admin-extension.md:164:22: In American English, “take a look” is more commonly used. (HAVE_A_LOOK[5])
 Suggestions: `Take a look`
 Rule: https://community.languagetool.org/rule/show/HAVE_A_LOOK?lang=en-US&subId=5
 Category: BRITISH_ENGLISH
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ By default Shopware 6 uses the [Vue I18n](https://kazupon.github.io/vue-i18n/sta

## Creating snippet files

Normally you use snippets in your custom module. To keep things organized, create a new directory named `snippet` inside module directory `<plugin root>/src/Resources/app/administration/src/module/<your-module>/snippet`. For each language you want to support, you need a JSON file inside it, e.g., `de-DE.json`, `en-GB.json`. For more details on selecting a fallback language and structuring your snippet files, see the [Fallback Languages guide](/concepts/translations/fallback-language-selection.md).
Normally you use snippets in your custom module. To keep things organized, create a new directory named `snippet` inside module directory `<plugin root>/src/Resources/app/administration/src/module/<your-module>/snippet`. For each language you want to support, you need a JSON file inside it, e.g., `de-DE.json`, `en-GB.json`. For more details on selecting a fallback language and structuring your snippet files, see the [Fallback Languages guide](./../../../../../concepts/translations/fallback-language-selection).

::: info
Providing snippets for apps works the same as in plugins but it has a more simplistic file structure. Also, unlike plugins, App-Snippets **are not allowed** to override existing snippet keys. So, use the following path for vendor-prefixed app snippet files: `<app root>/Resources/app/administration/snippet`
Expand Down Expand Up @@ -51,7 +51,7 @@ Component.register('my-custom-page', {

methods: {
createdComponent() {
// call the $tc helper function provided by Vue I18n
// call the $tc helper function provided by Vue I18n
const myCustomText = this.$tc('swag-example.general.myCustomText');

console.log(myCustomText);
Expand Down
2 changes: 1 addition & 1 deletion guides/plugins/plugins/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ You will likely create a plugin when you need to make profound changes or requir
- Dynamic validations
- Customer tracking or behavioral logic

Refer to our [Plugin Base Guide](plugin-base-guide) and [Plugin Fundamentals](plugin-fundamentals) for guidance on plugin development.
Refer to our [Plugin Base Guide](plugin-base-guide/) and [Plugin Fundamentals](plugin-fundamentals/) for guidance on plugin development.

::: info
If your extension focuses only on design changes, a simple template adjustment—typically done through a theme plugin—may be the best choice.
Expand Down
Loading