如何在 Angular i18n 应用程序中共享资源和全局样式

eng*_*yin 6 internationalization web angular

我正在尝试用于@angular/localizei18n。

我发现它实际上是为每种语言构建完全独立的包。

有什么方法可以让它在所有国际化包中共享一些通用部分,例如资产(所有静态文件)、样式、图标,可能还有一些非 UI 类(服务、防护、管道等)?换句话说,将我的i18n.sourceLocale语言的全部内容保留在根文件夹中,并仅将 i18n 实际上不同的内容放在 lang 子文件夹下?

以下是我的部分内容angular.json

"i18n": {
        "sourceLocale": "en-US",
        "locales": {
          "uk": "src/locale/messages.fr.json",
          "ru": "src/locale/messages.es.json"
        }
      },

"configurations": {
            "fr": {
              "localize": ["fr"],
              "baseHref": "/fr/",
              "outputPath": "dist/fr/"
            },
            "ru": {
              "localize": ["es"],
              "baseHref": "/es/",
              "outputPath": "dist/es/"
            }
Run Code Online (Sandbox Code Playgroud)

dav*_*vey 0

在构建过程中,资产文件夹被复制到每个语言敏感的应用程序 - >这已经解决了您“跨所有国际化捆绑包”的要求

“并且仅将 i18n 实际不同的内容放在 lang 子文件夹下” --> 这不起作用,因为 lang 子文件夹下的内容将被复制到生产 Web 服务器。换句话说:没有更高的级别:-)

为了引用资产中的内容,不得在 img-src 标签或 css-url() 中使用绝对路径,需要删除前导斜杠

html:

错误:src="/assets/my-image.png" 正确:scr="assets/my-image.png"

样式.css:

错误:background-image: url(/assets/background.png); 正确:background-image: url(assets/background.png);

另请参阅此处: https: //github.com/angular/angular/issues/38299