Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat(compiler-cli): adding i18nVersion to ngc
  • Loading branch information
ocombe committed Jul 17, 2017
commit 0f842fd9364e48b020dd4516eca3102aa82d5fa1
48 changes: 19 additions & 29 deletions packages/compiler-cli/src/codegen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import {MissingTranslationStrategy} from '@angular/core';
import {AngularCompilerOptions, NgcCliOptions} from '@angular/tsc-wrapped';
import {readFileSync} from 'fs';
import * as ts from 'typescript';

import {CompilerHost, CompilerHostContext, ModuleResolutionHostAdapter} from './compiler_host';
import {normalizeI18nFormat, normalizeI18nVersion, normalizeMissingTranslation} from './i18n_options';
import {PathMappedCompilerHost} from './path_mapped_compiler_host';

const GENERATED_META_FILES = /\.json$/;
Expand Down Expand Up @@ -70,41 +70,31 @@ export class CodeGenerator {
ngCompilerHost = usePathMapping ? new PathMappedCompilerHost(program, options, context) :
new CompilerHost(program, options, context);
}
let transContent: string = '';
if (cliOptions.i18nFile) {
if (!cliOptions.locale) {
throw new Error(
`The translation file (${cliOptions.i18nFile}) locale must be provided. Use the --locale option.`);
}
transContent = readFileSync(cliOptions.i18nFile, 'utf8');
}
let missingTranslation = MissingTranslationStrategy.Warning;
if (cliOptions.missingTranslation) {
switch (cliOptions.missingTranslation) {
case 'error':
missingTranslation = MissingTranslationStrategy.Error;
break;
case 'warning':
missingTranslation = MissingTranslationStrategy.Warning;
break;
case 'ignore':
missingTranslation = MissingTranslationStrategy.Ignore;
break;
default:
throw new Error(
`Unknown option for missingTranslation (${cliOptions.missingTranslation}). Use either error, warning or ignore.`);
}
}

let missingTranslation = normalizeMissingTranslation(cliOptions.missingTranslation);
let transContent = getTranslations(cliOptions.i18nFile);

if (!transContent) {
missingTranslation = MissingTranslationStrategy.Ignore
}

const {compiler: aotCompiler} = compiler.createAotCompiler(ngCompilerHost, {
translations: transContent,
i18nFormat: cliOptions.i18nFormat,
locale: cliOptions.locale, missingTranslation,
missingTranslation: missingTranslation,
i18nFormat: normalizeI18nFormat(cliOptions.i18nFormat),
locale: cliOptions.locale,
i18nVersion: normalizeI18nVersion(cliOptions.i18nVersion),
enableLegacyTemplate: options.enableLegacyTemplate !== false,
enableSummariesForJit: options.enableSummariesForJit !== false,
});

return new CodeGenerator(options, program, tsCompilerHost, aotCompiler, ngCompilerHost);
}
}

/** @internal */
export function getTranslations(i18nFile: string | null): string {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

readFileOrEmptyString

if (i18nFile) {
return readFileSync(i18nFile, 'utf8');
}
return '';
}
21 changes: 20 additions & 1 deletion packages/compiler-cli/src/i18n_options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* found in the LICENSE file at https://angular.io/license
*/

import {I18nVersion} from '@angular/core';
import {I18nVersion, MissingTranslationStrategy} from '@angular/core';
import * as glob from 'glob';


Expand Down Expand Up @@ -45,3 +45,22 @@ export function normalizeFiles(files?: string | null) {

return glob.sync(files);
}

/** @internal */
export function normalizeMissingTranslation(missingTranslation?: string | null):
MissingTranslationStrategy {
if (missingTranslation) {
switch (missingTranslation) {
case 'error':
return MissingTranslationStrategy.Error;
case 'warning':
return MissingTranslationStrategy.Warning;
case 'ignore':
return MissingTranslationStrategy.Ignore;
default:
throw new Error(
`Unknown option for missingTranslation (${missingTranslation}). Use either error, warning or ignore.`);
}
}
return MissingTranslationStrategy.Warning;
}
10 changes: 6 additions & 4 deletions packages/compiler-cli/src/ngtools_api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export interface NgTools_InternalApi_NG2_CodeGen_Options {
i18nFormat?: string;
i18nFile?: string;
locale?: string;
i18nVersion?: string;
missingTranslation?: string;

readResource: (fileName: string) => Promise<string>;
Expand Down Expand Up @@ -109,10 +110,11 @@ export class NgTools_InternalApi_NG_2 {
new CustomLoaderModuleResolutionHostAdapter(options.readResource, options.host);

const cliOptions: NgcCliOptions = {
i18nFormat: options.i18nFormat !,
i18nFile: options.i18nFile !,
locale: options.locale !,
missingTranslation: options.missingTranslation !,
i18nFormat: options.i18nFormat || null,
i18nFile: options.i18nFile || null,
locale: options.locale || null,
i18nVersion: options.i18nVersion || null,
missingTranslation: options.missingTranslation || null,
basePath: options.basePath
};
const ngOptions = options.angularCompilerOptions;
Expand Down
11 changes: 4 additions & 7 deletions packages/compiler/src/aot/compiler_factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* found in the LICENSE file at https://angular.io/license
*/

import {I18nVersion, MissingTranslationStrategy, ViewEncapsulation, ɵConsole as Console} from '@angular/core';
import {I18nVersion, ViewEncapsulation, ɵConsole as Console} from '@angular/core';

import {CompilerConfig} from '../config';
import {DirectiveNormalizer} from '../directive_normalizer';
Expand All @@ -30,19 +30,16 @@ import {AotCompiler} from './compiler';
import {AotCompilerHost} from './compiler_host';
import {AotCompilerOptions} from './compiler_options';
import {StaticReflector} from './static_reflector';
import {StaticSymbol, StaticSymbolCache} from './static_symbol';
import {StaticSymbolCache} from './static_symbol';
import {StaticSymbolResolver} from './static_symbol_resolver';
import {AotSummaryResolver} from './summary_resolver';



/**
* Creates a new AotCompiler based on options and a host.
*/
export function createAotCompiler(compilerHost: AotCompilerHost, options: AotCompilerOptions):
{compiler: AotCompiler, reflector: StaticReflector} {
let translations: string = options.translations || '';

const urlResolver = createOfflineCompileUrlResolver();
const symbolCache = new StaticSymbolCache();
const summaryResolver = new AotSummaryResolver(compilerHost, symbolCache);
Expand All @@ -51,8 +48,8 @@ export function createAotCompiler(compilerHost: AotCompilerHost, options: AotCom
const console = new Console();
const i18nFormat = options.i18nFormat || 'xlf';
const htmlParser = new I18NHtmlParser(
new HtmlParser(), I18nVersion.V0, translations, i18nFormat, options.missingTranslation,
console);
new HtmlParser(), options.i18nVersion || I18nVersion.V0, options.translations, i18nFormat,
options.missingTranslation, console);
const config = new CompilerConfig({
defaultEncapsulation: ViewEncapsulation.Emulated,
useJit: false,
Expand Down
7 changes: 4 additions & 3 deletions packages/compiler/src/aot/compiler_options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@
* found in the LICENSE file at https://angular.io/license
*/

import {MissingTranslationStrategy} from '@angular/core';
import {I18nVersion, MissingTranslationStrategy} from '@angular/core';

export interface AotCompilerOptions {
locale?: string;
locale?: string|null;
i18nFormat?: string;
translations?: string;
missingTranslation?: MissingTranslationStrategy;
i18nVersion?: I18nVersion;
enableLegacyTemplate?: boolean;
enableSummariesForJit?: boolean
enableSummariesForJit?: boolean;
}
9 changes: 3 additions & 6 deletions packages/compiler/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@
* found in the LICENSE file at https://angular.io/license
*/

import {InjectionToken, MissingTranslationStrategy, ViewEncapsulation, isDevMode} from '@angular/core';

import {CompileIdentifierMetadata} from './compile_metadata';
import {Identifiers} from './identifiers';
import {MissingTranslationStrategy, ViewEncapsulation} from '@angular/core';


export class CompilerConfig {
Expand All @@ -21,7 +18,7 @@ export class CompilerConfig {
public missingTranslation: MissingTranslationStrategy|null;

constructor(
{defaultEncapsulation = ViewEncapsulation.Emulated, useJit = true, missingTranslation,
{defaultEncapsulation = ViewEncapsulation.Emulated, useJit = true, missingTranslation = null,
enableLegacyTemplate}: {
defaultEncapsulation?: ViewEncapsulation,
useJit?: boolean,
Expand All @@ -30,7 +27,7 @@ export class CompilerConfig {
} = {}) {
this.defaultEncapsulation = defaultEncapsulation;
this.useJit = !!useJit;
this.missingTranslation = missingTranslation || null;
this.missingTranslation = missingTranslation;
this.enableLegacyTemplate = enableLegacyTemplate !== false;
}
}
15 changes: 9 additions & 6 deletions tools/@angular/tsc-wrapped/src/cli_options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,23 +31,26 @@ export class I18nExtractionCliOptions extends CliOptions {
}

export class NgcCliOptions extends CliOptions {
public i18nFormat: string;
public i18nFile: string;
public locale: string;
public missingTranslation: string;
i18nFormat: string|null;
i18nFile: string|null;
locale: string|null;
missingTranslation: string|null;
i18nVersion: string|null;

constructor({i18nFormat = null, i18nFile = null, locale = null, missingTranslation = null,
basePath = null}: {
i18nVersion = null, basePath = null}: {
i18nFormat?: string,
i18nFile?: string,
locale?: string,
missingTranslation?: string,
basePath?: string
i18nVersion?: string,
basePath?: string,
}) {
super({basePath: basePath});
this.i18nFormat = i18nFormat;
this.i18nFile = i18nFile;
this.locale = locale;
this.missingTranslation = missingTranslation;
this.i18nVersion = i18nVersion;
}
}