Я пробую новый механизм перевода, в соответствии с которым в рамках маршрутов я отправляю данные, какими будут переведенные, чтобы получить разные URL-адреса для многоязычного приложения.Например, у меня будет:
{
path: 'bookings',
data: { translation: 'reservas' },
loadChildren: './booking/booking.module#BookingModule'
},
, чтобы я мог правильно перенаправить фиксированную панель навигации с различными языковыми настройками и сохранить «тот же URL», который имеет смысл.Для этого у меня есть следующий код:
ngOnInit(): void {
this.router.events.pipe(filter(event => event instanceof NavigationEnd)
, map(() => {
let child = this.activatedRoute.firstChild;
while (child) {
if (child.firstChild) {
child = child.firstChild;
} else if (child.snapshot.data && child.snapshot.data['translation']) {
return child.snapshot.data['translation'];
} else {
return null;
}
}
return null;
})).subscribe( (t: string) => {
this.translatedUrl = t
});
}
Когда я затем нажимаю на элемент, чтобы поменять язык, я заменяю текущий маршрут URL на его перевод, если это имеет смысл.
Первая проблема, с которой я столкнулся, заключается в том, что когда у меня есть параметры, я не могу их правильно обработать, потому что я не знаю, как получить их из компонента, который уже обработан, поэтому я не знаю, как получить«обновил» activatedRoute
, который потенциально мог бы использовать.Кроме того, я не знаю, включаете ли вы эту информацию как часть объекта данных, я имею в виду что-то вроде этого:
{
path: ':id',
data: { translation: 'something', id: ':id' },
loadChildren: './something/something.module#SomethingModule'
},
И, очевидно, мой второй вопрос заключается в том, что, учитывая весь этот код, я неНе знаю, есть ли более простой способ добиться этого.
ОБНОВЛЕНИЕ:
Единственная другая альтернатива, о которой я подумал, - это заставить каждый компонент отправлять данные вподелился сервис с соответствующей информацией.Тем не менее, я использую некоторые из них в разных местах, и относительные URL могут быть трудными для обработки.Я думал, что настройка всего в маршрутизации будет местом, куда можно пойти