תארו לעצמכם שיש לכם אתר Sulu ברוסית וצריך להוסיף אנגלית, אבל כתובות ה-URL עבור כל שפה צריכות להיות שונות — ru.example.com ו-en.example.com. אתם מחפשים, מוצאים את התיעוד של Sulu על Webspace, אבל נתקלים בניואנסים: איך להעתיק נכון את מבנה העמודים מבלי לאבד נתונים? איך להגדיר hreflang כך שגוגל לא תתלונן? טעות אופיינית היא דילוג על הפקודה sulu:webspace:copy-locale, שלאחריה התוכן מוכפל וה-SEO נשבר. עברנו את הדרך הזו עשרות פעמים ואספנו קונפיגורציות מוכנות, הסברים וטיפים. הזמינו הגדרת אתר רב-לשוני וקבלו פתרון סוהר.
הבעיה: רב-לשוניות ב-Sulu נראית מורכבת, אבל היא לא
לקוחות מגיעים לעיתים קרובות עם השאלה: "איך להכין אתר ברוסית ובאנגלית כך שהתוכן יהיה עצמאי וכתובות ה-URL יהיו נקיות?" צברנו ניסיון מעשי בהגדרת Sulu ופיתחנו גישה שעובדת ללא הפתעות. להלן קונפיגורציות מוכנות, הסברים וטיפים. שימוש ב-Webspace חוסך עד 30% מהזמן בהשוואה לפתרונות מותאמים אישית המבוססים על Symfony.
איך Webspace ורב-לשוניות עובדים ב-Sulu
Sulu בונה רב-לשוניות ורב-אתרים סביב הקונספט של Webspace. Webspace אחד — אתר אחד עם קבוצת שפות ופורטלים (תחומי משנה/קידומות URL). מספר Webspace במופע יחיד — רב-אתר מלא עם backoffice משותף ותוכן עצמאי. כפי שנכתב בתיעוד הרשמי של Sulu, ה-Webspace הוא צומת השורש של עץ התוכן.
| רכיב | תיאור |
|---|---|
| Webspace | אתר לוגי (example.com, blog.example.com) |
| Portal | וריאנט גישה ל-Webspace (production, staging, dev) |
| Localization | שפת תוכן (ru, en, de) |
| URL | קישור בין שפה לדומיין או לנתיב |
Webspace אחד יכול להיות מוגש מכמה דומיינים. ההפך אינו אפשרי — דומיין אחד תמיד שייך ל-Webspace יחיד.
איך להגדיר Webspace רב-לשוני? מדריך שלב-אחר-שלב
-
צרו קונפיגורציית XML ב-
config/packages/webspaces/. דוגמה לאתר ראשי עם שלוש שפות (רוסית כברירת מחדל):
<webspace xmlns="http://schemas.sulu.io/webspace/webspace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.sulu.io/webspace/webspace http://schemas.sulu.io/webspace/webspace-1.1.xsd">
<name>Main Site</name>
<key>main</key>
<localizations>
<localization language="ru" default="true" xDefault="true"/>
<localization language="en"/>
<localization language="de"/>
</localizations>
<shadow-base-language>ru</shadow-base-language>
<default-templates>
<default-template type="page">default</default-template>
<default-template type="home">homepage</default-template>
</default-templates>
<templates>
<template type="page">default</template>
<template type="page">article</template>
<template type="home">homepage</template>
</templates>
<excluded-templates>
<excluded-template>overview</excluded-template>
</excluded-templates>
<portals>
<portal>
<name>Main</name>
<key>main</key>
<environments>
<environment type="prod">
<urls>
<url language="ru" redirect="false">example.com</url>
<url language="en">en.example.com</url>
<url language="de">de.example.com</url>
</urls>
</environment>
<environment type="stage">
<urls>
<url language="ru">stage.example.com</url>
</urls>
</environment>
<environment type="dev">
<urls>
<url language="ru">example.localhost</url>
<url language="en">en.example.localhost</url>
</urls>
</environment>
</environments>
</portal>
</portals>
</webspace> - הריצו אתחול:
php bin/console cache:clear
php bin/console sulu:document:initialize
php bin/console sulu:phpcr:init --user=admin
php bin/console sulu:webspace:copy-locale main --from=ru --to=en<webspace xmlns="http://schemas.sulu.io/webspace/webspace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.sulu.io/webspace/webspace http://schemas.sulu.io/webspace/webspace-1.1.xsd"> <name>Main Site</name> <key>main</key> <localizations> <localization language="ru" default="true" xDefault="true"/> <localization language="en"/> <localization language="de"/> </localizations> <shadow-base-language>ru</shadow-base-language> <default-templates> <default-template type="page">default</default-template> <default-template type="home">homepage</default-template> </default-templates> <templates> <template type="page">default</template> <template type="page">article</template> <template type="home">homepage</template> </templates> <excluded-templates> <excluded-template>overview</excluded-template> </excluded-templates> <portals> <portal> <name>Main</name> <key>main</key> <environments> <environment type="prod"> <urls> <url language="ru" redirect="false">example.com</url> <url language="en">en.example.com</url> <url language="de">de.example.com</url> </urls> </environment> <environment type="stage"> <urls> <url language="ru">stage.example.com</url> </urls> </environment> <environment type="dev"> <urls> <url language="ru">example.localhost</url> <url language="en">en.example.localhost</url> </urls> </environment> </environments> </portal> </portals> </webspace> מעתיק את מבנה עץ העמודים משפה אחת לאחרת — נוח בעת הוספת שפה חדשה לאתר שכבר מאוכלס. ללא פקודה זו, היה צריך ליצור עמודים מאפס בכל שפה.
- הגדירו פורטלי URL עבור כל סביבה כפי שמוצג בקונפיגורציה. עבור סביבת הייצור, השתמשו בדומיינים חיים.
מהם Shadow Pages ואיך להשתמש בהם?
עמוד צל מציג תוכן משפה אחרת מבלי ליצור תרגום נפרד. הוא מופעל ב-backoffice באמצעות מתג. זה חוסך זמן בתרגומים עבור קטעים שאינם דורשים אותם (למשל, יצירת קשר, אודות החברה). הגדרה דרך API:
$document = $this->documentManager->find('/cmf/main/contents/about', 'en');
$document->setShadowLocale('ru');
$document->setShadowLocalesEnabled(true);
$this->documentManager->persist($document, 'en');
$this->documentManager->flush();עמודי צל שימושיים כאשר רוצים לשמור תוכן אחיד לכל השפות אך עדיין לקבל כתובות URL שונות (באמצעות אסטרטגיית ה-URL).
אילו אסטרטגיות URL לשפות תומכת Sulu?
Sulu תומכת בשלוש אפשרויות הגדרת URL:
| אסטרטגיה | דוגמה | מתי להשתמש |
|---|---|---|
| תחומי משנה | ru.example.com, en.example.com | מיקוד גיאוגרפי (hreflang עם x-default) |
| קידומת נתיב | example.com/ru, example.com/en | קל יותר להגדרה, דומיין יחיד |
| דומיינים נפרדים | example.ru, example.com | למותגים עם דומיינים שונים |
עבור SEO, הקפידו להוסיף hreflang ב-php bin/console cache:clear php bin/console sulu:document:initialize php bin/console sulu:phpcr:init --user=admin php bin/console sulu:webspace:copy-locale main --from=ru --to=en (ראו תיעוד MDN):
{% for locale in ['ru', 'en', 'de'] %}
<link rel="alternate" hreflang="{{ locale }}" href="{{ sulu_content_path(null, webspace, locale) }}">
{% endfor %}
<link rel="alternate" hreflang="x-default" href="{{ sulu_content_path(null, webspace, 'ru') }}">
מחליף שפות ב-Twig מומלץ ליישם תוך התחשבות ב-locales הזמינים ובמאפיין sulu:webspace:copy-locale — אנו מספקים קוד זה כחלק מההגדרה.
מה כלול בהגדרת אתר Sulu רב-לשוני?
אנו מספקים:
- הגדרת Webspace עם ה-locales והפורטלים הנדרשים
- הגדרת אסטרטגיית URL (תחומי משנה, קידומת, דומיינים נפרדים)
- יישום מחליף שפות ו-hreflang
- הגדרת עמודי צל עבור קטעים שאינם ניתנים לתרגום
- הרשאות גישה לעורכים לפי Webspace
- תיעוד תפעולי
- הדרכת עורכים לניהול תוכן רב-לשוני
- אחריות ל-30 יום לפעולה תקינה
למה להפקיד בידינו את ההגדרה?
אנו עובדים עם Sulu מאז הקמתה והשלמנו למעלה מ-15 פרויקטים רב-לשוניים. המהנדסים שלנו הם תורמים לקהילת Sulu ומכירים את כל המלכודות. אנו מבטיחים שהגדרה מבוססת Webspace מהירה פי 3 מפתרונות Symfony מותאמים אישית. צרו קשר לייעוץ — נבחן את הפרויקט שלכם תוך יום. הזמינו הגדרת אתר רב-לשוני וקבלו פתרון סוהר מוכן. עלות ההגדרה הרב-לשונית נמוכה בדרך כלל משכתוב המערכת מאפס. העלות נקבעת לאחר ניתוח.
לוח זמנים להגדרה
- הוספת שפה שנייה לאתר קיים: 1–2 ימים.
- הגדרת רב-אתר עם שני Webspace מאפס: 2–3 ימים.
- הגדרה מלאה (3 שפות, 2 Webspace, עמודי צל, hreflang, ניווט): 4–5 ימים.
העלות מחושבת באופן אישי בהתאם למורכבות ולמספר השפות.







