2016-12-01 5 views
2

私はを使用しており、提案通りにmessages.xlfの出力をデフォルトの場所(新しいディレクトリ:\app\locale)以外のフォルダに移動しました。Angular i18nを実行しているときにmessages.xlf出力場所を設定するにはどうすればよいですか?

私も新しく追加されたアプリ/ localeディレクトリに

>npm run i18n 

を再実行すると、messages.xlfファイルがデフォルトの場所に出力されます。

出力を再生成するたびに移動させないように、出力messages.xlfファイルを出力する場所を指定するにはどうすればよいですか?

答えて

3

あなたは、出力ファイルをする角度をコンパイラに伝えるためにあなたのtsconfig.jsonに新しいオプションを追加することができます。あなたが国際化プログラムを確認して実行

{ 
    "compilerOptions": { 
    //your normal options... 
    }, 
    "angularCompilerOptions": { 
    "genDir": "./app/locale" 
    } 
} 

tsconfig.jsonの場所を含めます。

node_modules\.bin>ng-xi18n -p ../../src/tsconfig.json 
+0

素晴らしい!これは、 'npm run i18n'によってピックアップされ、typescriptコンパイルには影響しません。他のファイルがその場所に出力されているかどうか調べてみましょう。 – StuperUser

1

これは便利ですか?それは、単純なコードサンプルよりもだ感じる http://rolandoldengarm.com/index.php/2016/10/17/angular-2-automated-i18n-workflow-using-gulp/

この回答の便利な側面は、国際化の出力を取得し、指定されたロケールmessages.xlfに合流ローランドOldengarmの一気のコマンドでは、自動的にファイル:

npm i --save-dev gulp-cheerio gulp-modify-file gulp-rename gulp-run merge-stream run-sequence 

最終SE:私は一気プラグインのカップルを使用しています、あなたがdevDependenciesとして追加する必要がありますgulpタスクのt: var sourceElements = []; gulp.task( 'i18n-get-source'、function(){ 返信gulp.src( './ src/i18n/messages.en.xlf') .pipe(cheerio({ run:function($ 、ファイル){

$('trans-unit').each(function() { 
sourceElements.push($(this)); 
}); 
}, 
parserOptions: { 
xmlMode: true 
} 
})); 
}); 

gulp.task('i18n-merge-to-translations', ['i18n-get-source'], function() { 
var languages = ['zh']; 
var tasks = []; 
for(var language of languages) { 
var path = "./src/i18n/messages." + language + ".xlf"; 
tasks.push(
gulp.src(path) 
.pipe(cheerio({ 
run: function ($, file) { 
var sourceIds = []; 
for (var sourceElement of sourceElements) { 
var id = $(sourceElement).attr('id'); 
sourceIds.push(id); 
var targetElement = $('#' + id); 
if (targetElement.length == 0) { 
// missing translation 
$('body').append(sourceElement); 
} 
} 
// now remove all redundant elements (i.e. removed) 
$('trans-unit').map((function() { 
var id = $(this).attr('id'); 
var existing = sourceIds.find((item) => { return item == id}); 

if (!existing) { 
console.log("REMOVING"); 
// remove it 
$('#' + id).remove(); 
} 
})); 


} , 
parserOptions: { 
xmlMode: true 
} 
})) 
.pipe(gulp.dest('./src/i18n'))); 
} 
return mergeStream(tasks); 
}) 


// run ng-xi18n 
gulp.task('i18n-extract-xlf', function() { 
return run('ng-xi18n').exec(); 
}); 



// create .ts files for all .xlf files so we can import it 
gulp.task('i18n-xlf2ts', function() { 
return gulp.src("./src/i18n/*.xlf") 
.pipe(rename(function (path) { 
path.extname = ".ts" 
})) 
.pipe(modifyFile(function (content, path, file) { 
var filename = path.replace(/^.*[\\\/]/, '') 
var language = filename.split(".")[1].toUpperCase(); 
return "export const TRANSLATION_" + language + " = `" + content + "`;"; 
})) 
.pipe(gulp.dest("./src/i18n")); 
}); 

// copy all source values to the target value as a default translation and make that our English translation 
gulp.task('i18n-default', function() { 
return gulp.src('./messages.xlf') 
.pipe(cheerio({ 
run: function ($, file) { 
// Each file will be run through cheerio and each corresponding `$` will be passed here. 
// `file` is the gulp file object 

$('source').each(function() { 
var source = $(this); 
var target = source.parent().find('target'); 
//source.text(source.text().toUpperCase()); 
target.html(source.html()); 
}); 
}, 
parserOptions: { 
xmlMode: true 
} 

})) 
.pipe(rename('messages.en.xlf')) 
.pipe(gulp.dest("./src/i18n")) 
}); 
+0

**決して**は答えにリンクを提供しません。 – Mistalis

関連する問題