根据所选语言环境加载其他 scss 文件或代码

如何解决根据所选语言环境加载其他 scss 文件或代码

我正在编写一个具有本地化功能的 angular 11 通用应用程序。

我想要实现的是能够根据所选区域加载更多 scss 文件

例如,如果用户选择了 Hebrew,它将添加 styles-he.scss添加direction:rtl

我用谷歌搜索了很多,基本上都和这个网址一样: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
          }
   ...

然后我应该在 app.component.ts 中创建一个 loadStyle 组件:

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/"
          }
        }
      },

所以总的来说,我不知道根据所选语言环境添加更多样式的正确方法是什么。

解决方法

好的,所以我在 stackoverflow 上找到了一个很酷的解决方案。

我从 How To Use LOCALE_ID In Angular i18n Router Module 中学习了如何注入语言环境,并从这里学习了很酷的方法:

change Style sheet when different language is selected.

我实际上会有一个 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;
}

就是这样!一个非常优雅的解决方案:)

,

你可以使用

`  
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(),})` 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?