У меня есть приложение Angular2, и оно должно поддерживать несколько языков. Некоторые из этих языков могут быть RTL (т. е. персидский), а некоторые — LTR (т. е. английский). Помимо локализации строк, мне нужно стилизовать компоненты в зависимости от направления языка.
Теперь, используя этот помощник, я могу иметь два отдельных файла (например, app-rtl.scss и app-ltr.scss), которые импортируют один файл scss (например, app.scss), что позволяет мне писать код scss в одном месте и автоматически выводить два файла; по одному на каждое направление.
Проблема в том, что теперь мне нужно как-то сослаться на подходящий файл css на основе языка пользователя. Так что, если язык пользователя английский, я должен иметь <link href="app-ltr.css" rel="stylesheet">
в заголовке, а если это RTL, <link href="app-rtl.css" rel="stylesheet">
. Кроме того, я хочу добавить в свой проект начальную загрузку, которая также имеет два разных выходных файла для LTR и RTL.
Есть ли чистый способ достичь этой функциональности?
Что я пробовал:
Я создал два фиктивных компонента (один для LTR и один для RTL) без какого-либо шаблона, а затем назначил соответствующий файл scss с помощью styleUrls
и установил encapsulation: ViewEncapsulation.None
, чтобы он стал глобальным стилем. Затем я инициализирую их оба в своем шаблоне корневого компонента с помощью *ngIf и проверяю, является ли язык LTR или нет.
Это будет работать при загрузке первой страницы, потому что активен только один компонент (скажем, компонент LTR), но как только вы измените язык (т. е. второй компонент (RTL) станет активным и, таким образом, LTR будет удален), то стили, связанные с LTR остается на странице и не удаляется. Итак, на вашей странице есть стили RTL и LTR, которые не предназначены.