JSON 文件未在 ng2-translate 中加载 webpack
JSON files are not loading in ng2-translate with webpack
我正在尝试实现 ng2-translate i18n。
dashboard.component.ts
import { Component } from '@angular/core';
import {TranslateService} from 'ng2-translate';
@Component({
selector: 'dashboard-page',
template:`<div>
<h2>{{ 'HOME.TITLE' | translate }}</h2>
<label>
{{ 'HOME.SELECT' | translate }}
<select #langSelect (change)="translate.use(langSelect.value)">
<option *ngFor="let lang of translate.getLangs()" [value]="lang" [selected]="lang === translate.currentLang">{{ lang }}</option>
</select>
</label>
</div>`
})
export class DashboardComponent {
constructor(private translate: TranslateService) {
translate.addLangs(["en", "fr"]);
translate.setDefaultLang('en');
let browserLang = translate.getBrowserLang();
translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
}
}
这个文件的路径是src/main/app/dashboard/dashboard.component.ts
2 个 JSON 文件的路径 - en.json & fr.json 是 src/main/app/assets/i18n.
我在 app.module.ts
中包含了 TranslateModule
但是当我 运行 应用程序时,我收到 en.json 文件未找到 - 404 错误。我正在使用 webpack,在 webpack.common.js 中我有 JSON 的预加载器,就像这样
preLoaders:[
{
test: /\.json$/,
exclude: /node_modules/,
loader: 'json-loader'
}
]
我仍然收到 JSON 文件未找到错误。
根据我所遵循的示例,我不明白在哪个文件中要提及路径 assests\i18n。json。
我也遇到过同样的问题。 Webpack 只包含 'require'-ed 的文件,所以除非有 require('./path/to/file.json') 否则文件不是包括。此外,这样做意味着该文件也将被散列,因此该文件将无法被 ng2-translate util 识别。
我通过使用 CopyWebpackPlugin 解决了这个问题(参见 https://github.com/kevlened/copy-webpack-plugin)通过将以下配置添加到我的 webpack.config.js 文件
var CopyWebpackPlugin = require('copy-webpack-plugin');
...
plugins: [
new CopyWebpackPlugin([ { from: 'src/assets/i18n', to: 'assets/i18n' } ])
]
我还如下配置了翻译模块,因为我的资源是在 /assets/i18n 文件夹下找到的,而不是默认的 /i18n文件夹。
在app.translate.ts(注意函数的导出,这是AoT需要的)
export function createTranslateLoader(http: Http) {
return new TranslateStaticLoader(http, 'assets/i18n', '.json');
}
export const AppTranslateModule: ModuleWithProviders = TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [ Http ]
});
而在我的app.module.ts如下
@NgModule({
imports: [ AppTranslateModule, ... ],
...
})
export class AppModule {
}
注意:到撰写本文时,ng2-translate webpack 示例已损坏。事实上,这个 https://github.com/ocombe/ng2-translate/issues/325
有一个未解决的问题
改变
new CopyWebpackPlugin([ { from: 'src/assets/i18n', to: 'assets/i18n' } ])
至
new CopyWebpackPlugin({ patterns: [ { from: './src/assets/i18n', to: 'assets/i18n' } ] }),
我正在尝试实现 ng2-translate i18n。
dashboard.component.ts
import { Component } from '@angular/core';
import {TranslateService} from 'ng2-translate';
@Component({
selector: 'dashboard-page',
template:`<div>
<h2>{{ 'HOME.TITLE' | translate }}</h2>
<label>
{{ 'HOME.SELECT' | translate }}
<select #langSelect (change)="translate.use(langSelect.value)">
<option *ngFor="let lang of translate.getLangs()" [value]="lang" [selected]="lang === translate.currentLang">{{ lang }}</option>
</select>
</label>
</div>`
})
export class DashboardComponent {
constructor(private translate: TranslateService) {
translate.addLangs(["en", "fr"]);
translate.setDefaultLang('en');
let browserLang = translate.getBrowserLang();
translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
}
}
这个文件的路径是src/main/app/dashboard/dashboard.component.ts
2 个 JSON 文件的路径 - en.json & fr.json 是 src/main/app/assets/i18n.
我在 app.module.ts
中包含了 TranslateModule但是当我 运行 应用程序时,我收到 en.json 文件未找到 - 404 错误。我正在使用 webpack,在 webpack.common.js 中我有 JSON 的预加载器,就像这样
preLoaders:[
{
test: /\.json$/,
exclude: /node_modules/,
loader: 'json-loader'
}
]
我仍然收到 JSON 文件未找到错误。
根据我所遵循的示例,我不明白在哪个文件中要提及路径 assests\i18n。json。
我也遇到过同样的问题。 Webpack 只包含 'require'-ed 的文件,所以除非有 require('./path/to/file.json') 否则文件不是包括。此外,这样做意味着该文件也将被散列,因此该文件将无法被 ng2-translate util 识别。
我通过使用 CopyWebpackPlugin 解决了这个问题(参见 https://github.com/kevlened/copy-webpack-plugin)通过将以下配置添加到我的 webpack.config.js 文件
var CopyWebpackPlugin = require('copy-webpack-plugin');
...
plugins: [
new CopyWebpackPlugin([ { from: 'src/assets/i18n', to: 'assets/i18n' } ])
]
我还如下配置了翻译模块,因为我的资源是在 /assets/i18n 文件夹下找到的,而不是默认的 /i18n文件夹。
在app.translate.ts(注意函数的导出,这是AoT需要的)
export function createTranslateLoader(http: Http) {
return new TranslateStaticLoader(http, 'assets/i18n', '.json');
}
export const AppTranslateModule: ModuleWithProviders = TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [ Http ]
});
而在我的app.module.ts如下
@NgModule({
imports: [ AppTranslateModule, ... ],
...
})
export class AppModule {
}
注意:到撰写本文时,ng2-translate webpack 示例已损坏。事实上,这个 https://github.com/ocombe/ng2-translate/issues/325
有一个未解决的问题改变
new CopyWebpackPlugin([ { from: 'src/assets/i18n', to: 'assets/i18n' } ])
至
new CopyWebpackPlugin({ patterns: [ { from: './src/assets/i18n', to: 'assets/i18n' } ] }),