Skip to content

Latest commit

 

History

History
380 lines (276 loc) · 13.4 KB

README.md

File metadata and controls

380 lines (276 loc) · 13.4 KB

霍基化

为什么我不能通过谷歌翻译运行我的整个应用程序或网站并获得另一种语言的基本翻译?

现在你可以!

hokeylization这个名字是一个portmanteau,意思是“hokey本地化”

它有点做作,因为它非常简单:它将字符串发送到谷歌翻译

它很简单,但也非常强大。它对 HTML 文档有特殊的支持, HandlebarsJS 模板, 和 Markdown 文件。

你可以翻译:

  • 一个包含消息的 JavaScript 对象
  • 任意数量的文件或目录,总是递归遍历目录

用另一种语言阅读

此 README.md 文档已使用 hokeyization 工具本身翻译成 谷歌翻译支持的所有语言

我敢肯定它并不完美,但我希望它总比没有好!

🇸🇦 阿拉伯语 🇧🇩 孟加拉语 🇩🇪 德语 🇺🇸英文 🇪🇸 西班牙语 🇫🇷 法语 🇹🇩豪萨语 🇮🇳印地语 🇮🇩 印尼语 🇮🇹 意大利语 🇯🇵 日语 🇰🇷韩语 🇮🇳 马兰地语 🇵🇱波兰语 🇧🇷 葡萄牙语 🇷🇺 俄语 🇰🇪 斯瓦希里语 🇵🇭 他加禄语 🇹🇷 土耳其语 🇵🇰乌尔都语 🇻🇳 越南语 🇨🇳 中文

README 的这个翻译有问题吗?

原始 README 的特殊翻译 可能有缺陷 -- 非常欢迎更正! 请发送 GitHub 上的拉取请求, 或者如果你不习惯这样做,打开一个问题

当您创建有关翻译的新 GitHub 问题时,请执行以下操作:

  • 包括页面 URL(从浏览器地址栏复制/粘贴) *包括错误的确切文本(从浏览器复制/粘贴)
  • 请描述问题所在——翻译不正确吗?格式是否以某种方式损坏?
  • 请提供更好的翻译建议,或文本应如何正确格式化
  • 谢谢!

# 内容

## 资源

支持和资金

我正在努力成为一名专业的开源软件开发人员。我一直在工作 从事软件行业多年,我创办了成功的公司,并把它们卖给了上市公司。 最近我失业了,我真的没有其他工作要做

所以我将尝试编写有用的软件,看看是否可行

如果您喜欢使用这个软件,我会很高兴收到 最小的 通过 Patreon 的每月贡献

谢谢!

## 安装 要使用命令行工具,请使用npmyarn安装:

npm install -g hokeylization
yarn global add hokeylization

要用作库,请安装lite版本,它要小得多:

npm install -g hokeylization-lite
yarn global add hokeylization-lite

然后查看hokey命令的帮助:

hokey --help
hokey -h

想要以您的语言或其他语言查看输出?

hokey尝试从 shell 的环境变量中自动检测语言

您可以通过设置LC_ALL环境变量来强制使用一种语言:

LC_ALL=it hokey --help

请注意,如果您安装了hokeylization-lite ,命令帮助仅提供英文版本

## 设置 设置GOOGLE_TRANSLATE_PROJECT_ID环境变量以识别您的 Google 翻译项目

GOOGLE_APPLICATION_CREDENTIALS环境变量设置为您下载的 JSON 凭据 在弄清楚身份验证如何在谷歌云上工作之后(这可能很有趣)

如果您从源代码运行,您也可以将它们放在源代码中的.env文件中 它们将在运行时通过 dotenv 加载的目录

翻译一个 JavaScript 字符串资源文件

您的字符串表必须位于以下两种形式之一的 JavaScript 文件中:

ES6 导出:

export default {
  string_key: "some value",
  another_key: "another value",
  ... more keys ...
}

CommonJS 导出

module.exports = {
  string_key: "some value",
  another_key: "another value",
  ... more keys ...
}

如果这个文件被命名为myfile.en.js ,你可以将它翻译成西班牙语和德语:

hokey -l es,de -o myfile.LANG.js myfile.en.js

上面的LANG ”是特殊的——它是这个工具中的保留字!

LANG被替换为输出文件的语言代码

因此,上面的命令创建了文件:

myfile.es.js
myfile.de.js

-l / --languages选项是以逗号分隔的 ISO 语言代码列表 谷歌翻译支持

如果输出文件已经存在,它将被检查以确定哪些键已经存在。 现有密钥将不会被翻译。将生成并附加缺少键的翻译 到 JS 对象的末尾。整个文件总是被重写。

要强制重新翻译所有键,请使用-f / --force选项

翻译文本文件目录

您还可以翻译文件目录。 hokeyization 将递归地访问每个 目录中的文件并通过谷歌翻译运行其内容,并保存输出 到单独目录树中的同名文件

当翻译的目标是目录时,启用此模式

-o / --outfile选项指定输出目录

大警告:翻译目录时,不要指定输出目录 那是在您的输入目录中!如果您这样做,您将:

  • 引发无限递归
  • 增加您的 Google 账单 *填满你的磁盘
  • 少一些乐趣

这是不应该做的示例:

hokey -l es -o templates/es templates # <--- DON'T DO THIS!

当它运行时,翻译后的文件被写入templates/es ,从而成为新的 要翻译的源文件,因为它们在templates/下——这个过程继续 永远不要这样做!

####正确用法 好的,假设您在目录中有一些电子邮件模板:

templates/email/en/welcome.txt
templates/email/en/welcome.html
templates/email/en/verify-account.txt
templates/email/en/verify-account.html
templates/email/en/reset-password.txt
templates/email/en/reset-password.html

要将所有这些翻译成西班牙语和德语,请运行:

hokey -l es,de -o templates/email/LANG templates/email/en

上面的LANG是一个保留字,会被替换为ISO语言代码

以上运行时会发生什么:

  • templates/email/estemplates/email/de目录将被创建(如果它们不存在)
  • templates/email/en中的每个文件都将被翻译成西班牙语和德语
  • 除非使用-f / --force ,否则不会重新生成现有的输出文件
  • 你会在esde中得到相同的目录结构和文件,就像在en下一样

其他选项

试运行

通过-n / --dry-run来显示将要执行的操作,但实际上并不进行任何 API 调用或写入任何文件

### 力量 传递-f / --force以始终重新生成翻译,即使它们已经存在

### 匹配 通过-m / --match限制在目录模式下运行时处理的文件

您可能并不总是希望将源目录中的 every 文件翻译到目标目录

-m / --match选项的值是一个正则表达式(注意 shell 引用规则!),它指定 应该翻译哪些文件

如有疑问,您可以将此选项与-n / --dry-run以查看要翻译的文件

排除

有时你的-m匹配了太多的文件。使用-e / --excludes选项显式排除 否则会匹配的文件

您可以列出多个正则表达式,用空格分隔

一个常见的用法是: --excludes node_modules dist \.git build tmp

车把

要翻译的字符串可能包含{{ handlebars }}模板,带有两个或三个花括号

您可能希望翻译这些模板中的内容

通过-H / --handlebars标志, {{ ... }}中的任何内容都不会被翻译

降价

Markdown 既不是文本也不是 html,所以谷歌翻译有一些困难

-M / --markdown标志启用对降价文件的特殊处理

对于 markdown 文件,如果不使用-M标志,你可能会发现这些问题: *断开的链接。在翻译中,markdown 链接描述结束后会出现一个空格字符(带有] )但是 在其目标链接开始之前(使用( )。这会导致降价不正确地呈现,并且链接 查看文档时损坏。

  • 代码块被翻译。谷歌翻译不知道 Markdown 考虑什么代码,什么不考虑
  • 缩进代码块的间距不正确。翻译中很难保留间距
  • backticks里面的东西会被翻译,当你几乎总是希望它们是字面值时

当启用-M / --markdown标志时:

  • 模式](将被压缩为](从而修复损坏的 Markdown 链接
  • 将在缩进的代码块周围放置一个“不翻译”包装器,保留适当的缩进并确保它们不被翻译
  • 将在backticks内的文本周围放置一个“不翻译”包装,以确保它们不被翻译

处理方式

通常所有内容都作为纯文本处理

如果您的内容是 HTML,除非您传递-p html / --process-as html选项,否则它将被破坏

### 筛选 对于喜欢冒险的人:在处理目录中的文件时,可以通过-F / --filter选项 在将输出写入文件系统之前过滤输出

此选项的值必须是导出名为filter的函数的 JS 文件的路径

filter函数必须是async因为await将被调用

在文件写入磁盘之前,整个文件内容将作为字符串传递给filter函数

filter函数的返回值是实际写入存储的值

因此,您可以完全控制最终将要写入的内容

filter脚本将在以下位置查找(使用.js将附加到过滤器 名称,除非它已经以.js

  • 当前目录
  • 当前目录中名为.hokey-filters的目录
  • 一个名为${HOME}/.hokey-filters ,其中${HOME}是当前用户的主目录
  • 内置filters目录

过滤器参数

filter字符串可以是多个单词。在这种情况下,第一个单词是过滤器名称,并且 剩余的单词将作为参数传递给filter函数

### 帮助 使用-h / --help显示帮助

JSON 批处理命令

使用-j / --json选项,您可以运行多个协调的hokey命令

按照惯例,这个文件被称为hokey.json ,但你可以随意命名它

如果您将目录作为-j选项传递, hokey将在该目录中查找hokey.json

JSON 文件应包含一个对象。在该对象中,其属性名称与 命令行选项,加上一个名为hokey的附加属性

hokey属性是要运行的命令数组。这些命令中声明的属性将 覆盖外部对象中的任何重复声明。

hokey数组中的每个对象中,您应该指定一个name以及输入和输出文件

这是一个hokey.json的示例

{
    "inputLanguage": "en",
    "languages": "es,fr,ja", # can also be an array of strings
    "force": false,
    "match": null,
    "processAs": null,
    "excludes": ["exclude-1", "exclude-2"],
    "handlebars": false,
    "markdown": false,
    "regular": false,
    "dryRun": false,
    "filter": "theFilter.js",
    "hokey": [
      {
        "name": "locale names",
        "infile": "messages/locales_en.js",
        "outfile": "messages/locales_LANG.js",
        "handlebars": true
      },
      {
        "name": "CLI messages",
        "infile": "messages/en_messages.js",
        "outfile": "messages/LANG_messages.js",
        "handlebars": true
      },
      {
        "name": "README",
        "infile": "README.md",
        "outfile": "lang/LANG/",
        "excludes": ["lang/", "node_modules/", "\\.git/", "tmp/"],
        "filter": "relativizeMarkdownLinks lang",
        "markdown": true,
        "index": "lang/README.md"
      }
    ]
}

多个输入文件

将文件路径数组作为infiles ,而不是单个路径infile ,如下例所示:

{
  ... [
    {
      "name": "my docs",
      "infiles": ["README.md", "INSTALL.md", "TUTORIAL.md"],
      "outfile": "docs/LANG/",
      "markdown": true
  ]
}

索引

当翻译成多种语言时, hokey可以创建一个索引文件,列出所有的翻译 并提供他们的链接

生成索引时,只能有一个输入源

传递-I / --index选项,值是生成索引文件的地方,可以是文件 或目录。如果是目录,将使用基于模板的默认文件名(见下文)

使用-A / --index-template来确定索引输出的格式。您可以指定'html', 'markdown'、'text' 或您自己的 HandlebarsJS 模板的文件路径

如果指定自己的模板,还必须为-I / --index指定一个文件(不是目录) 选项

享受翻译语言的乐趣!