5

我正在尝试在 /dist/assets 文件夹中部署一个使用 ngx-translate 和翻译语言文件的 Angular 7 应用程序。我在构建中指定了正确的基本 href。部署后,我看到所有内容都加载了,除了返回错误代码 404(未找到)的语言文件。

我试过用几种不同的方式改变 angular.json 文件。我尝试更改 TranslateHttpLoader。似乎没有任何工作。我可以在 /dist 文件夹中看到包含所有语言文件的 i18n 文件夹。但是它没有被引用。

在 app.module.ts

export function HttpLoaderFactory(httpClient: HttpClient) {
  return new TranslateHttpLoader(httpClient, './assets/i18n/', '.json');
}

在 angular.json

"assets": [
  "src/favicon.ico",
  "src/assets"
],

但我最终在浏览器中收到此错误:

/assets/i18n/en.json 404 未找到

任何帮助,将不胜感激!

4

5 回答 5

8

Angular 9.0.4我面临同样的问题。

只有当我在路径中有一个点斜杠前缀时,./assets/i18n/问题才会得到解决:

export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http, './assets/i18n/');
}
于 2020-03-01T15:53:27.927 回答
4

我遇到了和你一样的问题,在我的情况下,它在我的本地 IIS 服务器上运行得非常好,但它为实时 IIS 服务器抛出 404(i18n/en.json 未找到 404)。

我转来转去,认为这是一个角度 i18n 路径错误。最后归结为服务器问题。

默认情况下,IIS 服务器只允许少数文件扩展名类型。您必须手动为 json 文件添加 mimeType(来自 web 配置文件)。

<staticContent>
  <remove fileExtension=".json"/>
  <mimeMap fileExtension=".json" mimeType="application/json"/>
</staticContent>

我将此添加到 Web 配置文件中(如果文件不存在,则必须在网站根文件夹中创建它)。

别客气...

于 2020-09-26T09:46:37.983 回答
3

我遇到了和你一样的问题,我相信它与这个命令有关:

ng build --prod

尝试使用此命令:

ng build --base-href=/deployed_app_name/ --prod

例如,如果您部署的应用程序名称是:stackoverflow 命令应该是这样的:

ng build --base-href=/stackoverflow/ --prod

在这里,您将拥有 i18n json 文件的正确路径

于 2019-09-26T13:03:37.413 回答
2

您是否已导入 AppModule ?

export function HttpLoaderFactory(httpClient: HttpClient) {
    return new TranslateHttpLoader(httpClient, './assets/i18n/', '.json');
}

@NgModule({
    imports: [
        BrowserModule,
        HttpClientModule,
        TranslateModule.forRoot({
            loader: {
                provide: TranslateLoader,
                useFactory: HttpLoaderFactory,
                deps: [HttpClient]
            }
        })
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }
于 2019-05-23T02:58:52.993 回答
0

这是我解决类似问题的路径:

  1. 检查 404 错误的文件是否在 dist 文件夹中正确的路径,如果没有,请确认 angular.json 中的所有资产参数是否正常。
  2. 验证 base-ref 参数为:
  3. 看看你在 environment.prod.ts (或 environment.ts 等)的 i18n 参数中是否有正确的值
于 2019-09-30T12:36:43.670 回答