Nano Hash - криптовалюты, майнинг, программирование

загрузка дополнительных файлов scss или кода в зависимости от выбранной локали

Пишу универсальное приложение angular 11 с локализацией.

чего я пытаюсь добиться, так это иметь возможность загружать больше файлов scss в зависимости от выбранной локали.

так, например, если пользователь выбрал Hebrew, он добавит styles-he.scss, который добавил direction:rtl.

Я много гуглил, и в основном все говорят то же самое, что и этот URL: https://juristr.com/blog/2019/08/dynamically-load-css-angular-cli/

что мне нужно добавить новый стиль в мой angular.json, чтобы он загружался лениво:

 "styles": [
          "src/styles.scss",
          {
            "input": "src/styles-he.scss",
            "bundleName": "hebrewStyle",
            "inject": false
          }
   ...

а затем я должен создать компонент loadStyle в app.component.ts:

loadStyle(styleName: string) {
    const head = this.document.getElementsByTagName('head')[0];

    let themeLink = this.document.getElementById(
      'client-theme'
    ) as HTMLLinkElement;
    if (themeLink) {
      themeLink.href = styleName;
    } else {
      const style = this.document.createElement('link');
      style.id = 'client-theme';
      style.rel = 'stylesheet';
      style.href = `${styleName}`;

      head.appendChild(style);
    }
  }

и выполнять loadStyle('styles-he.scss') когда захочу

аааа... на самом деле в туториале говорилось о css, не знаю, сработает ли scss. вероятно, я должен использовать css в этом методе.

дело в том, что я ожидал, что будет более угловой способ включения этих файлов стилей на основе стран. не совсем понял, когда я выполняю эту функцию и как узнать, на каком она языке.

это моя конфигурация локали в angular.json

 "i18n": {
        "sourceLocale": "en",
        "locales": {
          "he": {
            "translation": "src/locale/messages.he.xlf",
            "baseHref": "he/"
          }
        }
      },

так что в целом я не понимаю, как правильно добавить больше стилей в зависимости от выбранной локали.


Ответы:


1

Итак, я нашел отличное решение для этого в stackoverflow.

я узнал, как ввести локаль из Как использовать LOCALE_ID в Модуль маршрутизатора Angular i18n и классный метод отсюда:

изменить таблицу стилей, когда выбран другой язык.

на самом деле у меня будет один файл css, но я могу определить язык из самого файла css, что на самом деле является лучшим решением, чем наличие отдельных файлов.

так вот что я сделал:

в app.component.ts я сделал это:

export class AppComponent implements OnInit, OnDestroy {
 constructor(@Inject(LOCALE_ID) private locale: string,....)

 ngOnInit(): void {
   document.documentElement.setAttribute('lang', this.locale);
 }
}

Я ввел локаль и установил атрибут lang в документе со значением локали.

тогда... ну, в моем случае я хотел добавить направление справа налево для веб-сайта, поэтому я редактирую app.component.scss и добавляю:

[lang="he"] :host {
  direction: rtl;
}

вот и все! очень элегантное решение :)

29.01.2021
  • Спасибо за вклад!) 29.01.2021

  • 2

    вы можете использовать

    `  
    const lang ;
    
    
    export function getStyle(){
        return lang == 'ar'? ['../../../assets/scss/ar/rtl.scss', '../../../assets/scss/ar/ar-style.scss']: ['../../../assets/scss/en/bootstrap.scss', '../../../assets/scss/en/en-style.scss'];
    }
    
    @Component({
      selector: 'app-all-category',
      templateUrl: './all-category.component.html',
      styleUrls: getStyle(),
    })` 
    
    22.01.2021
  • lang еще нужно заполнить данными. Я погуглил и могу добавить LOCALE_ID в конструктор, но как функция getStyle() может получить эту локаль? 24.01.2021
  • да, lang все еще нужно заполнить ... я не заполнил его, потому что думал, что у вас есть проблема с получением стилей, а не с получением lang, вы можете получить lang, используя этот const arr = window.location.pathname.split (/); функция экспорта getStyle(){ return arr[1] == 'ar'? ['../../../assets/css/ar/rtl.scss', '../../../assets/scss/ar/ar-style.scss']: ['.. /../../assets/scss/en/bootstrap.scss', '../../../assets/scss/en/en-style.scss']; } 24.01.2021
  • спасибо за помощь, но функция getStyle возвращает ошибку, что значение не может быть определено статически. 29.01.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..