Skip to content

Commit 337c8e1

Browse files
committed
fix(@angular-devkit/build-angular): support global locale data with development server
1 parent a2ebf14 commit 337c8e1

File tree

2 files changed

+44
-21
lines changed

2 files changed

+44
-21
lines changed

packages/angular_devkit/build_angular/src/dev-server/index.ts

+37-21
Original file line numberDiff line numberDiff line change
@@ -65,25 +65,27 @@ async function createI18nPlugins(
6565

6666
const diagnostics = new localizeDiag.Diagnostics();
6767

68-
if (translation) {
69-
const es2015 = await import(
70-
// tslint:disable-next-line: trailing-comma no-implicit-dependencies
71-
'@angular/localize/src/tools/src/translate/source_files/es2015_translate_plugin'
72-
);
73-
plugins.push(
74-
// tslint:disable-next-line: no-any
75-
es2015.makeEs2015TranslatePlugin(diagnostics, translation as any, { missingTranslation }),
76-
);
68+
const es2015 = await import(
69+
// tslint:disable-next-line: trailing-comma no-implicit-dependencies
70+
'@angular/localize/src/tools/src/translate/source_files/es2015_translate_plugin'
71+
);
72+
plugins.push(
73+
// tslint:disable-next-line: no-any
74+
es2015.makeEs2015TranslatePlugin(diagnostics, (translation || {}) as any, {
75+
missingTranslation: translation === undefined ? 'ignore' : missingTranslation,
76+
}),
77+
);
7778

78-
const es5 = await import(
79-
// tslint:disable-next-line: trailing-comma no-implicit-dependencies
80-
'@angular/localize/src/tools/src/translate/source_files/es5_translate_plugin'
81-
);
82-
plugins.push(
83-
// tslint:disable-next-line: no-any
84-
es5.makeEs5TranslatePlugin(diagnostics, translation as any, { missingTranslation }),
85-
);
86-
}
79+
const es5 = await import(
80+
// tslint:disable-next-line: trailing-comma no-implicit-dependencies
81+
'@angular/localize/src/tools/src/translate/source_files/es5_translate_plugin'
82+
);
83+
plugins.push(
84+
// tslint:disable-next-line: no-any
85+
es5.makeEs5TranslatePlugin(diagnostics, (translation || {}) as any, {
86+
missingTranslation: translation === undefined ? 'ignore' : missingTranslation,
87+
}),
88+
);
8789

8890
const inlineLocale = await import(
8991
// tslint:disable-next-line: trailing-comma no-implicit-dependencies
@@ -173,14 +175,29 @@ export function serveWebpackBrowser(
173175
}
174176

175177
const locale = [...i18n.inlineLocales][0];
176-
const translation = i18n.locales[locale] && i18n.locales[locale].translation;
178+
const localeDescription = i18n.locales[locale] && i18n.locales[locale];
177179

178180
const { plugins, diagnostics } = await createI18nPlugins(
179181
locale,
180-
translation,
182+
localeDescription && localeDescription.translation,
181183
browserOptions.i18nMissingTranslation,
182184
);
183185

186+
// Modify main entrypoint to include locale data
187+
if (
188+
localeDescription &&
189+
localeDescription.dataPath &&
190+
typeof config.entry === 'object' &&
191+
!Array.isArray(config.entry) &&
192+
config.entry['main']
193+
) {
194+
if (Array.isArray(config.entry['main'])) {
195+
config.entry['main'].unshift(localeDescription.dataPath);
196+
} else {
197+
config.entry['main'] = [localeDescription.dataPath, config.entry['main']];
198+
}
199+
}
200+
184201
// Get the insertion point for the i18n babel loader rule
185202
// This is currently dependent on the rule order/construction in common.ts
186203
// A future refactor of the webpack configuration definition will improve this situation
@@ -212,7 +229,6 @@ export function serveWebpackBrowser(
212229
// Add a plugin to inject the i18n diagnostics
213230
// tslint:disable-next-line: no-non-null-assertion
214231
webpackConfig.plugins!.push({
215-
// tslint:disable-next-line:no-any
216232
apply: (compiler: webpack.Compiler) => {
217233
compiler.hooks.thisCompilation.tap('build-angular', compilation => {
218234
compilation.hooks.finishModules.tap('build-angular', () => {

packages/angular_devkit/build_angular/src/utils/i18n-options.ts

+7
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,13 @@ export async function configureI18nBuild<T extends BrowserBuilderSchema | Server
121121
context.logger.warn(`Option 'localize' is not supported with View Engine.`);
122122
}
123123

124+
// Clear deprecated options when using Ivy to prevent unintended behavior
125+
if (usingIvy) {
126+
buildOptions.i18nFile = undefined;
127+
buildOptions.i18nFormat = undefined;
128+
buildOptions.i18nLocale = undefined;
129+
}
130+
124131
if (i18n.inlineLocales.size > 0) {
125132
const projectRoot = path.join(context.workspaceRoot, (metadata.root as string) || '');
126133
const localeDataBasePath = findLocaleDataBasePath(projectRoot);

0 commit comments

Comments
 (0)