首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用i18n正确地将一个有角度的6应用程序构建成baseHref的“地区目录”?

如何使用i18n正确地将一个有角度的6应用程序构建成baseHref的“地区目录”?
EN

Stack Overflow用户
提问于 2018-10-15 14:19:10
回答 1查看 4.6K关注 0票数 10

我正在努力使我的应用程序以多种语言可用,我遵循的是角的i18n指南。默认的语言环境是en-US,还有法语fr和西班牙语es翻译。

例如,在使用ng serve --configuration=fr运行应用程序时,这很好。

现在我到了,我想要构建这个应用程序。我使用这个命令:

代码语言:javascript
复制
ng build --prod --build-optimizer --i18n-file src/locale/messages.es.xlf --i18n-format xlf --i18n-locale es

我更新了angular.json,就像指南中解释的那样:

代码语言:javascript
复制
"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-parameter,所以我不能简单地将构建移动到子目录中,比如/dist/myapp/fr

为了更清楚地说明,在运行build之后,我想要一个如下所示的文件夹结构:

代码语言:javascript
复制
/dist/myapp/en
/dist/myapp/fr
/dist/myapp/es

myapp是我的webroot时,应该可以在浏览器中访问这些路由:

代码语言:javascript
复制
/en
/fr
/es

3.)

最后,lang-attribute ist没有正确设置。index.html未更改,将始终显示:

代码语言:javascript
复制
<html lang="en">

而不是<html lang="es"><html lang="fr">

要使这一工作正确进行,缺少什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-22 14:36:49

在进行构建时,需要传递正确的配置。否则,它将只使用production配置

实际上,您需要为每种语言进行一次构建。

代码语言:javascript
复制
ng build --configuration=fr
ng build --configuration=en
ng build --configuration=es

您可以为每个配置指定要使用的选项(aot、输出散列、.)或者您可以将其放入build中的build设置中。

代码语言:javascript
复制
  "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
    },

至于更改lang属性,根据这个github问题,您必须手动完成它

代码语言:javascript
复制
export class AppComponent {
  constructor(@Inject(DOCUMENT) doc: Document, @Inject(LOCALE_ID) locale: string, renderer: Renderer2) {
    renderer.setAttribute(doc.documentElement, 'lang', locale);
  }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52818850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档