如何使用baseHref将带有i18n的Angular 6应用正确构建到“语言环境目录”中?

时间:2018-10-15 14:19:10

标签: angular internationalization angular6 locale

我正在尝试使我的应用程序以多种语言提供,并且我正在关注Angular的i18n guide。默认语言环境为en-US,并且还有法语fr和西班牙语es的翻译。

例如,当使用ng serve --configuration=fr运行应用程序时,此方法工作正常。

现在我要构建应用程序。我正在使用以下命令:

ng build --prod --build-optimizer --i18n-file src/locale/messages.es.xlf --i18n-format xlf --i18n-locale es

我也按照指南中的说明更新了angular.json

"architect": {
  "build": {
    "builder": "@angular-devkit/build-angular:browser",
    "options": {
    "outputPath": "dist/myapp",
    },
    "configurations": {
      "production": {
        "fileReplacements": [
          {
            "replace": "src/environments/environment.ts",
            "with": "src/environments/environment.prod.ts"
          }
        ],
        "optimization": true,
        "outputHashing": "all",
        "sourceMap": false,
        "extractCss": true,
        "namedChunks": false,
        "aot": true,
        "extractLicenses": true,
        "vendorChunk": false,
        "buildOptimizer": true
      },
      "es": {
        "aot": true,
        "outputPath": "dist/myapp/es",
        "baseHref": "/es/",
        "i18nFile": "src/locale/messages.es.xlf",
        "i18nFormat": "xlf",
        "i18nLocale": "es",
        "i18nMissingTranslation": "error"
      },
      "fr": {
        "aot": true,
        "outputPath": "dist/myapp/fr",
        "baseHref": "/fr/",
        "i18nFile": "src/locale/messages.fr.xlf",
        "i18nFormat": "xlf",
        "i18nLocale": "fr",
        "i18nMissingTranslation": "error"
    }
  }
},

构建过程正常进行,我得到了该应用程序的翻译版本。


不幸的是,有些事情不起作用:

1。)
该应用程序始终内置在dist/myapp中,而不是内置在dist/myapp/frdist/myapp/es中。

2。)
没有使用baseHref参数,因此我不能简单地将构建内容移到/dist/myapp/fr之类的子目录中。

为了更加清楚,在运行build之后,我想要一个这样的文件夹结构:

/dist/myapp/en
/dist/myapp/fr
/dist/myapp/es

并且当myapp是我的Webroot时,应该可以在浏览器中访问以下路由:

/en
/fr
/es

3。)
最后,lang属性未正确设置。 index.html未被更改,将始终显示:

<html lang="en">

代替<html lang="es"><html lang="fr">


缺少什么才能使它正常工作?

1 个答案:

答案 0 :(得分:5)

在进行构建时,您需要传递正确的配置。否则,它将仅使用do.call("mapply", c(myfunc, eg, SIMPLIFY=FALSE)) 配置

实际上,您需要为每种语言做一个构建。

production

您可以为每种配置指定要使用的选项(自动,输出哈希等),也可以将其放在ng build --configuration=fr ng build --configuration=en ng build --configuration=es 内的options设置中

build

关于更改 "build": { "builder": "@angular-devkit/build-angular:browser", "options": { "outputPath": "dist/myapp", "optimization": true, "outputHashing": "all", "sourceMap": false, "extractCss": true, "namedChunks": false, "aot": true, "extractLicenses": true, "vendorChunk": false, "buildOptimizer": true }, 属性,根据此github issue,您必须手动进行

lang