2016-12-01 1 views
2

J'utilise angular's i18n tools et j'ai déplacé la sortie messages.xlf dans un dossier différent de l'emplacement par défaut (un nouveau répertoire: \app\locale), comme suggéré.Comment définir l'emplacement de sortie de messages.xlf lors de l'exécution de Angular i18n?

Quand j'exécutez à nouveau

>npm run i18n 

même dans le répertoire nouvellement ajouté app/paramètres régionaux, le fichier est messages.xlf sortie à l'emplacement par défaut.

Comment puis-je spécifier l'emplacement de sortie du fichier de sortie messages.xlf pour éviter de devoir le déplacer chaque fois que je le régénère?

Répondre

3

vous pouvez ajouter une nouvelle option à votre tsconfig.json pour indiquer au compilateur angulaire où la sortie du fichier.

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

Lorsque vous exécutez le programme i18n assurez-vous pour inclure l'emplacement tsconfig.json

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

Super! Ceci est récupéré par 'npm run i18n' et n'affecte pas la compilation de caractères dactylographiés. Je garderai un œil pour voir si d'autres fichiers sont sortis à cet endroit. – StuperUser

1

Est-ce utile? Sentez-vous qu'il est plus qu'un simple exemple de code http://rolandoldengarm.com/index.php/2016/10/17/angular-2-automated-i18n-workflow-using-gulp/

L'aspect utile de cette réponse est les commandes Gulp de Roland Oldengarm qui prennent la sortie du i18n et se fond dans les paramètres régionaux spécifiés messages.xlf automatiquement les fichiers:

J'utilise quelques plugins Gulp, vous devrez ajouter devDependencies avec:

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

La finale se t de tâches gulp: var sourceElements = []; gulp.task ('i18n-get-source', fonction() { retourne gulp.src ('./src/1818/messages.en.xlf') .pipe ({ run: function ($ , fichier) {

$('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

** Jamais ** fournir juste un lien sur une réponse. – Mistalis