我三天前为一家当地公司开了一个新的Angular项目,他们今天告诉我他们希望他们的网络应用程序是法语和英语。
所以我找到了angular-gettext模块,这似乎是一个很好的解决方案。
我跟着他们official tutorial(使用Grunt),尽管遇到了一些困难,我找到了没有错误的方法......但它仍然不适合我!
我在index.html
文件中添加了一些带有translate
指令的文本,以便测试我的配置。实际上,此文件不包含除<app-root></app-root>
应答之外的任何内容。
因此,让我的Gruntfile.js
及其两项任务开始:
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
nggettext_extract: {
pot: {
files: {
'po/template.pot': ['src/*.html'] // the index.html file is here
}
},
},
nggettext_compile: {
all: {
options: {
module: 'myApp'
},
files: {
'src/js/translations.js': ['po/*.po']
}
},
},
});
grunt.loadNpmTasks('grunt-angular-gettext');
// Default task(s).
grunt.registerTask('extract', ['nggettext_extract']);
grunt.registerTask('extract', ['nggettext_compile']);
grunt.registerTask('default', []);
};
我在myApp
文件中使用以下代码声明了app.js
模块:
var app = angular.module("myApp", [gettext]);
app.run(function (gettextCatalog) {
gettextCatalog.setCurrentLanguage('fr');
});
因此,当我运行grunt nggettext_extract
和grunt nggettext_compile
命令时,一切正常,我的po folder
包含我的template.pot
文件,js folder
包含我的translations.js
{1}}文件。我使用poedit software
进行了翻译,结果是我的fr.po
文件。
这是我生成的translations.js
文件:
angular.module('myApp').run(['gettextCatalog', function (gettextCatalog) {
/* jshint -W100 */
gettextCatalog.setStrings('fr', {"Welcome ladies and gentleman":"Messieurs et Mesdames bienvenues","Welcome to the test zone":"Bienvenue dans la zone de test"});
/* jshint +W100 */
}]);
本教程希望我在<script>
文件中添加index.html
,但使用angular-cli
我将其添加到angular-cli.json
文件中:
"scripts": [
"../node_modules/chart.js/dist/Chart.js",
"../node_modules/hammerjs/hammer.min.js",
"../node_modules/angular-gettext/dist/angular-gettext.min.js",
"./js/translations.js",
"./app.js"
],
所以对我来说,我做了一切,我的句子应该用法语而不是英语,但它不起作用......如果你能帮助我,那就太好了!
答案 0 :(得分:0)
Angular-gettext适用于AngularJS(即1.x),不适用于Angular(即2+)。 NG和angular-cli具有令人敬畏的内置i18n支持,请参阅:https://angular.io/guide/i18n