1 | <?php |
||
11 | class RouteGroupLocalizer |
||
12 | { |
||
13 | private $localizer; |
||
14 | private $translator; |
||
15 | private $route; |
||
16 | private $request; |
||
17 | |||
18 | |||
19 | public function __construct(Localizer $localizer, TranslatorContract $translator, Router $route, Request $request) |
||
26 | |||
27 | /** |
||
28 | * Cоздает группу роутеров |
||
29 | * для каждого языка с соответствующими префиксами и именами |
||
30 | * Должен быть в самом верху и оборачивать все локализируемые роутеры. |
||
31 | * |
||
32 | * @param \Closure|string|array $attributes |
||
33 | * @param \Closure|string $routes |
||
34 | * @return void |
||
35 | */ |
||
36 | public function routeGroupLocalizer($attributes, $routes) |
||
76 | |||
77 | /** |
||
78 | * Проверяем, есть ли вложения локализующих групп роутеров. |
||
79 | * Просто анализируем имя роутера. |
||
80 | * Если в нем несколько раз встречается префикс локализации, |
||
81 | * значит группа вложенная |
||
82 | * |
||
83 | * @param RouteCollection $routes |
||
84 | * @return boolean |
||
85 | */ |
||
86 | private function checkGroupNested($routes): bool |
||
95 | |||
96 | /** |
||
97 | * Создаем дополнительный роутер, для главной страницы, |
||
98 | * без указания языка - site.name/ |
||
99 | * Надо для SEO и правильной обработки редиректа |
||
100 | * В миделваре примем решения, оставить дубль страницы |
||
101 | * или делать редирект на страницу с указанием локали по умолчанию - site.name/uk |
||
102 | * |
||
103 | * @param RouteCollection $routes |
||
104 | * @return void |
||
105 | */ |
||
106 | public function addMainRoute($routes): void |
||
127 | |||
128 | /** |
||
129 | * Локализирует роутеры |
||
130 | * |
||
131 | * Ищет роутеры с префиксом локалайзера и устанавливает новые (переведенные) урлы |
||
132 | * |
||
133 | * @param RouteCollection $routes |
||
134 | * @return void |
||
135 | */ |
||
136 | public function translateRoutes($routes): void |
||
156 | |||
157 | /** |
||
158 | * Локализирует УРЛы |
||
159 | * |
||
160 | * Переводится каждый сегмент отдельно. |
||
161 | * Если перевода сегмента нет, то остается прежний |
||
162 | * |
||
163 | * @param string $uri |
||
164 | * @param string $locale |
||
165 | * @param string $group |
||
166 | * @param TranslatorContract $translator |
||
167 | * @return string |
||
168 | */ |
||
169 | public function translateUri(string $uri, string $locale, string $group, TranslatorContract $translator): string |
||
177 | } |
||
178 |