在HTML代码中可以使用哪些工具翻译(人类)语言?

时间:2014-07-02 15:14:56

标签: html internationalization gruntjs translation

是否有工具或任务运行器可以使用一种语言获取HTML文档,解析一般/特定HTML标记中的内容,通过Google翻译运行该内容,然后将其放回到正确位置的标记中新文件?基本上,消化一个源文件并以不同(非计算机)语言输出多个变体。

我所希望的是:

index.html

<!DOCTYPE html>
<html>
<body>
    привет мир!
</body>
</html>

获取编译为:

en/index.html

<!DOCTYPE html>
<html>
<body>
    Hello World!
</body>
</html>

ru/index.html

<!DOCTYPE html>
<html>
<body>
    привет мир!
</body>
</html>

ch/index.html

<!DOCTYPE html>
<html>
<body>
    你好世界!
</body>
</html>

我显然不介意设置某种Gruntfile或任何规定语言,目的地等的东西。

2 个答案:

答案 0 :(得分:0)

查看get-translationgrunt-google-translate。谷歌翻译也很简单REST API,您可以从头开始编写自己的插件或使用类似grunt-restful的内容。

答案 1 :(得分:0)

我能够使用Ruby和Grunt拼凑出一个解决方案。这可以重构为更强大,但它是一个有效的解决方案,所以我运行它。请记住,翻译脚本会覆盖源文件。只有Grunt开始在新目的地制作副本。

使用easy_translate Rub gem我写了这个脚本:

#!/usr/bin/ruby

require 'easy_translate'

EasyTranslate.api_key = '' # Get from google

target_path = '' # path to translate

Dir.glob(target_path) do |item|
  next if item == '.' or item == '..' or item == '.svn'

  contents = ""
  update = ""

  File.open(item, "r") do |file|
    contents += file.read
    update += EasyTranslate.translate(contents, :from => :russian, :to => :en)
  end

  File.open(item, "w"){ }

  File.open(item, "w") do |file|
    file.write(update)
  end
end

仔细研究target_path中的每个文件,如果这是一个有价值的项目,我们会创建变量contentsupdate我们将用于放置旧版和新版分别是文件的内容。然后我们打开文件并填写这些变量。在第20行,我们清空文件,然后在第22-24行的最后一个块中,我们将更新字符串写入文件。我使用File.open(item, "w") {}而不是.truncate(0),因为我使用后一个选项将随机Unicode字符添加到文件的内容中。同样,在翻译过程中覆盖文件并不理想。在新目的地制作副本会更好,但我没有这样做。

Ruby脚本返回了一行缩小的HTML并打破了Smarty的模板化,所以我使用了grunt-prettifygrunt-text-replace用来美化HTML以便于使用,并使Smarty的内容再次起作用。 Gruntfile看起来像这样:

module.exports = function(grunt) {

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    'prettify': {
      options: {
        indent: 4,
        indent_char: ' ',
        wrap_line_length: 0,
        brace_style: 'expand',
        "unformatted": [
          "a",
          "code",
          "pre"
        ]
      },
      all: {
        expand: true,
        cwd: 'static_ugly',
        ext: '.html',
        src: ['*.html'],
        dest: 'static_pretty'
      }
    },

    'replace': {
      fix_smarty: {
        src: ['static_pretty/*.html'],
        overwrite: true,
        replacements: [{
          from: '{/ Strip',
          to: '{/strip'
        },{
          from: '{$ This-> setLayout ',
          to: '{$this->setLayout'
        },{
          from: '{$ this- > setPageTitle ',
          to: '{$this->setPageTitle'
        },{
          from: '$ this-> setPageTitle ',
          to: '$this->setPageTitle'
        },{
          from: '{$ smarty.block.footer ',
          to: '{$smarty.block.footer'
        }]
      }
    }

  });

  grunt.loadNpmTasks('grunt-prettify');
  grunt.loadNpmTasks('grunt-text-replace');
  grunt.registerTask('default', ['prettify', 'replace']);
};

由于它的项目特定,我遗漏了更多的查找/替换内容。这个解决方案在原始问题中几乎完成了我想要的工作。我做了一些手动移动文件,以完成它的名义,但我相信我会使用这种前进的变体,并认为它是一项正在进行的工作。