是否有工具或任务运行器可以使用一种语言获取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或任何规定语言,目的地等的东西。
答案 0 :(得分:0)
查看get-translation或grunt-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
中的每个文件,如果这是一个有价值的项目,我们会创建变量contents
和update
我们将用于放置旧版和新版分别是文件的内容。然后我们打开文件并填写这些变量。在第20行,我们清空文件,然后在第22-24行的最后一个块中,我们将更新字符串写入文件。我使用File.open(item, "w") {}
而不是.truncate(0)
,因为我使用后一个选项将随机Unicode字符添加到文件的内容中。同样,在翻译过程中覆盖文件并不理想。在新目的地制作副本会更好,但我没有这样做。
Ruby脚本返回了一行缩小的HTML并打破了Smarty的模板化,所以我使用了grunt-prettify和grunt-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']);
};
由于它的项目特定,我遗漏了更多的查找/替换内容。这个解决方案在原始问题中几乎完成了我想要的工作。我做了一些手动移动文件,以完成它的名义,但我相信我会使用这种前进的变体,并认为它是一项正在进行的工作。