Shopware 6 Japanese Language Pack

Ein vollständiges Lokalisierungs-Plugin von Grund auf entwickelt

Inhaltsverzeichnis

Shopware 6 ist eine europäische E-Commerce-Plattform ohne jegliche japanische Sprachunterstützung. Als ich einen Online-Shop für meine Frau (eine Illustratorin) entwickelte, entschied ich mich, das Japanese Language Pack for Shopware 6 zu entwickeln, um japanischen Entwicklern die Nutzung zu erleichtern. Die aktuelle Version v1.3.0 bietet eine vollständige japanische Lokalisierung sowohl für das Storefront als auch für das Admin-Panel.

Design-Philosophie: Schrittweise Funktionserweiterung

Anstatt von Anfang an Perfektion anzustreben, habe ich eine Architektur gewählt, die schrittweise Funktionserweiterungen ermöglicht.

<?php
public function install(InstallContext $installContext): void
{
    $this->createJapaneseLanguage($installContext->getContext());
    $this->createJapaneseCurrency($installContext->getContext());
    $this->createJapaneseCountry($installContext->getContext());
    $this->createJapanesePrefectures($installContext->getContext());
    $this->createJapaneseProductSorting($installContext->getContext());
    $this->createJapaneseMailTemplates($installContext->getContext());
    $this->createJapaneseStateMachineStates($installContext->getContext());
}

Durch die Aufteilung jeder Funktionalität in separate Methoden ermögliche ich schrittweise Releases und vereinfachte Wartung.

Präzise Behandlung der japanischen Yen-Spezifikationen

Der japanische Yen hat die Besonderheit, dass er keine Dezimalstellen verwendet. Um dies in Shopware korrekt abzubilden:

<?php
$currencyRepository->create([
    [
        'isoCode' => 'JPY',
        'name' => '日本円',
        'symbol' => '¥',
        'factor' => 1.0,
        'decimalPrecision' => 0,
        'shortName' => 'JPY',
        'position' => 1,
        'itemRounding' => [
            'decimals' => 0,
            'interval' => 0.01,
            'roundForNet' => false
        ],
        'totalRounding' => [
            'decimals' => 0,
            'interval' => 0.01,
            'roundForNet' => false
        ]
    ]
], $context);

Nicht nur decimalPrecision: 0, sondern auch die Vereinheitlichung der Dezimalbehandlung sowohl in itemRounding als auch totalRounding. Dadurch wird korrekt “¥1,235” anstatt “¥1,234.56” angezeigt.

Implementierung der 47 Präfekturen-Daten

Für japanische E-Commerce-Websites ist die Auswahl der Präfekturen unverzichtbar. Ich habe alle 47 Präfekturen mit Shopwares standardmäßigem State-Management implementiert:

<?php
private function getPrefecturesData(): array
{
    return [
        ['code' => 'JP-01', 'name' => 'Hokkaido', 'nameJa' => '北海道'],
        ['code' => 'JP-02', 'name' => 'Aomori', 'nameJa' => '青森県'],
        // ...alle 47 Präfekturen
    ];
}

public function createPrefectures(Context $context): void
{
    foreach ($this->getPrefecturesData() as $prefecture) {
        // Existenzprüfung und Erstellungslogik
    }
}

Durch das Speichern sowohl englischer als auch japanischer Namen wird die Verwendung auch in internationalen Umgebungen ermöglicht.

Die japanische Flagge mit CSS Gradients zeichnen

Anstatt auf Bilddateien angewiesen zu sein, erstelle ich die japanische Flagge mit CSS Gradients:

.language-flag {
  &.country-jp {
    background: radial-gradient(
        5px at 50% 50%,
        #bc002d 0,
        #bc002d 35%,
        transparent 35%,
        transparent 100%
      ), white;
    border: 1px solid $gray-500;
  }
}

Mit radial-gradient zeichne ich einen roten Kreis in der Mitte und mache den äußeren Bereich transparent, um die Hinomaru darzustellen. Es werden keine Bilddateien benötigt und die Lösung ist leichtgewichtig.

Praktische Entwicklungserfahrungen und Erkenntnisse

Unerwartete Font-Problematik

Zunächst war nicht ersichtlich, warum japanischer Text in generierten Dokumenten nicht angezeigt wurde. Die Ursache lag in den Standard-Schriftarten, die keine japanischen Zeichen unterstützten. Durch die Anpassung der Font-Spezifikation in den Dokumenten-Templates auf Noto Sans CJK JP konnte das Problem gelöst werden.

Effiziente Übersetzungsarbeit mit KI-Unterstützung

Die Übersetzung der Admin-Panel- und E-Mail-Templates war inhaltlich nicht kompliziert, aber aufgrund der großen Anzahl von Dateien sehr zeitaufwändig. Besonders bei repetitiven Snippet-Übersetzungen erwies sich der Einsatz von KI als äußerst effizient und beschleunigte den Prozess erheblich.

Gewonnene Erkenntnisse

Durch dieses Projekt konnte ich ein umfassendes Verständnis der gesamten Lokalisierungsarchitektur von Shopware entwickeln und wertvolle Einblicke in die Internationalisierung von E-Commerce-Plattformen gewinnen.

Erreichte Ziele in v1.3.0

Die aktuelle Version v1.3.0 implementiert vollständig:

  • Vollständige japanische Lokalisierung: Storefront, Admin-Panel, E-Mail-Templates, Dokumente
  • Japan-spezifische Anpassungen: Yen-Währung, 47 Präfekturen, Flaggen-Icon
  • Erweiterbarkeit: Architektur ermöglicht schrittweise Funktionserweiterungen

Zukunftsaussichten

Dieses Plugin reduziert die sprachlichen Barrieren für japanische Entwickler beim Einstieg in Shopware 6 erheblich. Als Grundlage für die Verbreitung von Shopware in Japan plane ich eine kontinuierliche Wartung.