【问题标题】:Extract translations from HTML & JS files从 HTML 和 JS 文件中提取翻译
【发布时间】:2017-09-03 17:07:09
【问题描述】:

我有一个项目,我正在使用 Angular 1.6,并且我正在使用 angular-translate 使项目国际化。

Angular-translate 已安装、配置和工作,如果我添加一些文本,例如:

{{'Test' | translate}}
<span translate>Test</span>

手动key“测试”添加到文件es.jsonen.json中,角度翻译键没有问题。

现在我正在尝试自动化从 HTML 和 JS 文件中提取所有已翻译键的过程。

我一直在挖掘,发现了这两个包:

  • gulp-angular-translate-extract
  • gulp-angular-translate-extractor

我的 gulpfile.js 有一个名为“watch”的任务,这个任务是监视 JS 和 HTML 文件的变化。我的想法是在监视任务中调用另一个任务“翻译”。

我尝试使用上述 2 个库创建任务“翻译”。我用这些库尝试了几种配置,但这些库都没有提取翻译并将它们添加到 en.json 和 es.json 中。

这是我尝试过的小例子:

gulp-angular-translate-extract

var angularTranslate = require('gulp-angular-translate-extract');

gulp.task('translate', function () {
    return gulp.src(['./src/app/**/*.html', './src/app/**/*.js'])
        .pipe(angularTranslate({
            lang: ['en', 'es'],
            dest: 'src/app/locale/',
            suffix: '.json',
            prefix: '',
        }))
});

gulp-angular-translate-extractor

var extractTranslate = require('gulp-angular-translate-extractor');

gulp.task('taskName', function () {
  var i18nsrc = ['./src/app/**/*.html', './src/app/**/*.js'];  // your source files  
  var i18ndest = './src/app/locale'; //destination directory
  return gulp.src(i18nsrc)
      .pipe(extractTranslate({
        defaultLang: 'en',         
          lang: ['en', 'es'],
          dest: i18ndest,
          prefix: '',
          suffix: '.json',
          safeMode: false,
          stringifyOptions: true,
      }))
      .pipe(gulp.dest(i18ndest));
});

通过上述配置,每次修改HTML或JS文件时都会调用翻译任务,但是翻译键没有提取,我的意思是翻译的键不会自动添加到es.jsonen.json

  • 我在这里缺少什么?我是否缺少一些额外的 gulp 配置?

【问题讨论】:

    标签: javascript angularjs json gulp angular-translate


    【解决方案1】:

    解决了!我设法使用包 gulp-angular-translate-extractor

    使其工作

    似乎主要问题是相对路径:

    # Source paths
    ./src/app/**/*.html
    ./src/app/**/*.js
    
    # Dest paths
    ./src/app/locale
    

    我更新了配置以使用下一个路径,并且翻译提取没有问题:

    var extractTranslate = require('gulp-angular-translate-extractor');
    
    gulp.task('translate', function () {
      var i18nsrc = [path.join(conf.paths.src, '/app/**/*.html'), path.join(conf.paths.src, '/app/**/*.js')];  // your source files  
      var i18ndest = path.join(conf.paths.src, '/app/locale/')
      return gulp.src(i18nsrc)
          .pipe(extractTranslate({
            defaultLang: 'en',         
              lang: ['en', 'es'],
              dest: i18ndest,
              prefix: '',
              suffix: '.json',
              safeMode: false,
              stringifyOptions: true,
          }))
          .pipe(gulp.dest(i18ndest));
    });
    

    与我的问题代码的主要区别在于我使用了下一条路径:

    # Source paths
    path.join(conf.paths.src, '/app/**/*.html')
    path.join(conf.paths.src, '/app/**/*.js')
    
    # Dest paths
    path.join(conf.paths.src, './src/app/locale')
    

    像 conf.paths.src 这样的变量:

    conf.js

    exports.paths = {
      src: 'src',
      dist: 'release',
      devDist: 'dev-release',
      tmp: '.tmp',
      e2e: 'e2e'
    };
    

    【讨论】:

      猜你喜欢
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多