Skip to content

Latest commit

 

History

History
380 lines (276 loc) · 18.3 KB

README.md

File metadata and controls

380 lines (276 loc) · 18.3 KB

Hokeyzation

Tại sao tôi không thể chạy toàn bộ ứng dụng hoặc trang web của mình thông qua Google Dịch và nhận bản dịch cơ bản sang ngôn ngữ khác?

Bây giờ bạn có thể!

Tên hokeylization là một từ ghép, có nghĩa là 'bản địa hóa hokey'

Nó hơi khó vì nó rất đơn giản: nó gửi chuỗi đến Google Dịch

Và nó đơn giản, nhưng cũng rất mạnh mẽ. Nó có hỗ trợ đặc biệt cho các tài liệu HTML, HandlebarsJS mẫu, và các tệp Markdown.

Bạn có thể dịch:

  • một đối tượng JavaScript chứa các thông báo
  • bất kỳ số lượng tệp hoặc thư mục nào, luôn duyệt qua các thư mục một cách đệ quy

Đọc sách này bằng ngôn ngữ khác

Tài liệu README.md này đã được dịch, sử dụng chính công cụ hokeyzation, sang ** mọi ngôn ngữ được Google Dịch hỗ trợ! **

Tôi chắc chắn rằng nó không hoàn hảo, nhưng tôi hy vọng nó còn hơn không!

[🇸🇦 tiếng Ả Rập](lang / ar / README.md) [🇧🇩 Bengali](lang / bn / README.md) [🇩🇪 tiếng Đức](lang / de / README.md) [🇺🇸 Tiếng Anh](lang / en / README.md) [🇪🇸 Tiếng Tây Ban Nha](lang / es / README.md) [🇫🇷 tiếng Pháp](lang / fr / README.md) [🇹🇩 Hausa](lang / ha / README.md) [🇮🇳 Hindi](lang / hi / README.md) [🇮🇩 tiếng Indonesia](lang / id / README.md) [🇮🇹 tiếng Ý](lang / it / README.md) [🇯🇵 Tiếng Nhật](lang / ja / README.md) [🇰🇷 Korean](lang / ko / README.md) [🇮🇳 Marathi](lang / mr / README.md) [🇵🇱 Tiếng Ba Lan](lang / pl / README.md) [🇧🇷 tiếng Bồ Đào Nha](lang / pt / README.md) [🇷🇺 tiếng Nga](lang / ru / README.md) [🇰🇪 Swahili](lang / sw / README.md) [🇵🇭 Tagalog](lang / tl / README.md) [🇹🇷 tiếng Thổ Nhĩ Kỳ](lang / tr / README.md) [🇵🇰 Urdu](lang / ur / README.md) [🇻🇳 Vietnamese](lang / vi / README.md) [🇨🇳 Tiếng Trung](lang / zh / README.md)

** [📚 ... Tất cả các ngôn ngữ ...](lang / README.md) **

Bản dịch README này có vấn đề gì không?

Bản dịch cụ thể này của bản gốc README có thể có sai sót - * rất hoan nghênh việc sửa chữa! * Vui lòng gửi yêu cầu kéo trên GitHub, hoặc nếu bạn không cảm thấy thoải mái khi làm điều đó, hãy mở sự cố

Khi bạn tạo một vấn đề GitHub mới về bản dịch, vui lòng thực hiện:

  • bao gồm URL của trang (sao chép / dán từ thanh địa chỉ trình duyệt)
  • bao gồm văn bản chính xác bị sai (sao chép / dán từ trình duyệt)
  • vui lòng mô tả những gì là sai - bản dịch không chính xác? định dạng có bị hỏng bằng cách nào đó không?
  • vui lòng đưa ra gợi ý về bản dịch tốt hơn hoặc cách văn bản phải được định dạng đúng
  • Cảm ơn bạn!

Nội dung

  • [Nguồn](# Nguồn)
  • [Hỗ trợ và Tài trợ](# Hỗ trợ và Tài trợ)
  • [Cài đặt](# Cài đặt)
  • [Thiết lập thiết lập)
  • [Dịch tệp tài nguyên chuỗi JavaScript](# Dịch-a-JavaScript-chuỗi-tài nguyên-tệp)
  • [Dịch thư mục tệp văn bản](# Dịch-một-thư-mục-của-tệp-văn-bản)
  • [Tùy chọn khác](# Tùy chọn khác)
  • [Lệnh hàng loạt JSON](# lệnh hàng loạt JSON)

Nguồn

Hỗ trợ và Tài trợ

Tôi đang cố gắng trở thành một nhà phát triển phần mềm nguồn mở chuyên nghiệp. Tôi đã làm việc ở ngành công nghiệp phần mềm trong nhiều năm, tôi đã thành lập các công ty thành công và bán chúng cho các công ty đại chúng. Gần đây, tôi bị mất việc và tôi không thực sự có bất kỳ công việc nào khác.

Vì vậy, tôi sẽ thử viết phần mềm hữu ích và xem nó có hoạt động không

Nếu bạn thích sử dụng phần mềm này, tôi sẽ rất vui khi nhận được nhỏ nhất đóng góp hàng tháng qua Patreon

Cảm ơn bạn!

Cài đặt

Để sử dụng công cụ dòng lệnh, hãy cài đặt bằng cách sử dụng npm yarn :

npm install -g hokeylization
yarn global add hokeylization

Để sử dụng làm thư viện, hãy cài đặt phiên bản lite nhỏ hơn nhiều:

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

Sau đó, xem trợ giúp cho lệnh hokey :

hokey --help
hokey -h

Bạn muốn xem đầu ra bằng ngôn ngữ của bạn hoặc một ngôn ngữ khác?

hokey cố gắng phát hiện ngôn ngữ tự động từ các biến môi trường của trình bao của bạn

Bạn có thể buộc một ngôn ngữ bằng cách đặt biến môi trường LC_ALL :

LC_ALL=it hokey --help

Lưu ý rằng nếu bạn đã cài đặt hokeylization-lite , trợ giúp lệnh chỉ có sẵn bằng tiếng Anh

Thành lập

Đặt biến môi trường GOOGLE_TRANSLATE_PROJECT_ID để xác định dự án Google Dịch của bạn

Đặt biến môi trường GOOGLE_APPLICATION_CREDENTIALS thành thông tin đăng nhập JSON mà bạn đã tải xuống sau khi tìm ra cách xác thực hoạt động trên đám mây của Google (có thể rất thú vị)

Nếu bạn đang chạy từ mã nguồn, bạn cũng có thể đặt chúng vào tệp .env trong nguồn thư mục chúng sẽ được tải trong thời gian chạy qua dotenv

Dịch tệp tài nguyên chuỗi JavaScript

Bảng chuỗi của bạn ** phải ** ở trong tệp JavaScript ở một trong hai dạng sau:

Xuất ES6:

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

Xuất khẩu CommonJS

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

Nếu tệp này được đặt tên là myfile.en.js , bạn có thể dịch nó sang tiếng Tây Ban Nha và tiếng Đức bằng:

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

LANG trong phần trên là đặc biệt - nó là một từ dành riêng trong công cụ này!

LANG được thay thế bằng mã ngôn ngữ cho các tệp đầu ra

Do đó, lệnh trên tạo các tệp:

myfile.es.js
myfile.de.js

Tùy chọn -l / --languages là danh sách mã ngôn ngữ ISO được phân tách bằng dấu phẩy được hỗ trợ bởi Google Dịch

Nếu tệp đầu ra đã tồn tại, nó sẽ được kiểm tra để xác định khóa nào đã tồn tại. Các khóa hiện có sẽ không được dịch. Bản dịch cho các khóa bị thiếu sẽ được tạo và thêm vào vào cuối đối tượng JS. Toàn bộ tệp luôn được viết lại.

Để buộc dịch lại tất cả các phím, hãy sử dụng tùy chọn -f / --force -f

Dịch thư mục tệp văn bản

Bạn cũng có thể dịch một thư mục các tệp. hokeyption sẽ truy cập đệ quy mỗi tệp trong thư mục và chạy nội dung của nó thông qua Google Dịch và lưu kết quả đầu ra đến một tệp được đặt tên giống hệt nhau trong một cây thư mục riêng biệt

Khi mục tiêu bản dịch của bạn là một thư mục, chế độ này được bật

Tùy chọn -o / --outfile chỉ định thư mục đầu ra

** CẢNH BÁO LỚN **: Khi dịch các thư mục, ** KHÔNG ** chỉ định một thư mục đầu ra đó là trong thư mục đầu vào của bạn! Nếu bạn làm điều này, bạn sẽ:

  • tạo ra đệ quy vô hạn
  • chạy hết hóa đơn Google của bạn
  • lấp đầy đĩa của bạn
  • bớt vui vẻ

Đây là một ví dụ về những việc * không nên làm *:

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

Khi điều này chạy, các tệp đã dịch được ghi vào templates/es , và do đó trở nên mới các tệp nguồn để dịch, vì chúng nằm dưới templates/ - quá trình này tiếp tục mãi mãi không làm được!

Cách sử dụng đúng

OK, giả sử bạn có một số mẫu email trong một thư mục:

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

Để dịch tất cả những thứ này sang tiếng Tây Ban Nha và tiếng Đức, hãy chạy:

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

Ở trên, LANG là một từ dành riêng và sẽ được thay thế bằng mã ngôn ngữ ISO

Điều gì xảy ra khi ở trên chạy:

  • Các templates/email/es templates/email/de sẽ được tạo (nếu chúng không tồn tại)
  • Mọi tệp trong templates/email/en sẽ được dịch sang tiếng Tây Ban Nha và tiếng Đức
  • Các tệp đầu ra hiện có sẽ không được tạo lại trừ khi bạn sử dụng -f -f/--force`
  • Bạn sẽ kết thúc với một cấu trúc thư mục giống hệt nhau và các tệp trong es de như bạn có trong en

Sự lựa chọn khác

Chạy khô

-n / --dry-run để hiển thị những gì sẽ được thực hiện, nhưng không thực sự thực hiện bất kỳ lệnh gọi API nào hoặc ghi bất kỳ tệp nào

Lực lượng

Truyền -f / --force -f luôn tạo lại các bản dịch, ngay cả khi chúng đã tồn tại

Cuộc thi đấu

-m / --match để giới hạn các tệp được xử lý khi chạy ở chế độ thư mục

Có thể không phải lúc nào bạn cũng muốn dịch * mọi tệp * trong thư mục nguồn sang thư mục đích của mình

Giá trị của tùy chọn -m / --match là một regex (hãy cẩn thận với các quy tắc trích dẫn shell!) Chỉ định những tập tin nào nên được dịch

Khi nghi ngờ, bạn có thể kết hợp tùy chọn này với -n / --dry-run để xem tệp nào sẽ được dịch

Không bao gồm

Đôi khi -m của bạn khớp với quá nhiều tệp. Sử dụng tùy chọn -e / --excludes để loại trừ rõ ràng các tệp nếu không sẽ khớp

Bạn có thể liệt kê nhiều regex, được phân tách bằng dấu cách

Cách sử dụng phổ biến sẽ là: --excludes node_modules dist \.git build tmp

Ghi đông

Các chuỗi cần dịch có thể chứa các mẫu {{ handlebars }} , có hai hoặc ba dấu ngoặc nhọn

Bạn có thể * KHÔNG NÊN * muốn nội dung bên trong các mẫu đó được dịch

Chuyển cờ -H / --handlebars và bất kỳ thứ gì trong {{ ... }} sẽ không được dịch

Markdown

Markdown không phải là văn bản hay html, vì vậy Google Dịch gặp một số khó khăn với nó

-M / --markdown cho phép xử lý đặc biệt đối với các tệp đánh dấu

Với các tệp đánh dấu, nếu bạn không sử dụng cờ -M , bạn có thể sẽ gặp các vấn đề sau:

  • Liên kết bị hỏng. Trong bản dịch, một ký tự khoảng trắng xuất hiện sau khi mô tả liên kết đánh dấu kết thúc (với ] ) nhưng trước khi liên kết đích của nó bắt đầu (với ( ). Điều này làm cho dấu xuống hiển thị không chính xác và liên kết bị hỏng khi xem tài liệu.
  • Các khối mã được dịch. Google dịch không biết mã nào coi là mã và mã nào thì không
  • Khoảng cách không chính xác cho các khối mã thụt lề. Khoảng cách rất khó giữ trong bản dịch
  • Những thứ bên trong backticks sẽ được dịch, khi bạn hầu như luôn muốn chúng là giá trị theo nghĩa đen

Khi cờ -M / --markdown được bật:

  • Mẫu ]( sẽ được cô đọng thành ]( do đó sửa các liên kết đánh dấu bị hỏng
  • Một trình bao bọc "không dịch" sẽ được đặt xung quanh các khối mã được thụt lề, duy trì thụt lề phù hợp và đảm bảo chúng không được dịch
  • Một trình bao bọc "không dịch" sẽ được đặt xung quanh văn bản trong backticks để đảm bảo rằng chúng không được dịch

Xử lý dưới dạng

Thông thường mọi thứ được xử lý dưới dạng văn bản thuần túy

Nếu nội dung của bạn là HTML, nó sẽ bị xáo trộn trừ khi bạn vượt qua tùy chọn -p html / --process-as html

Lọc

Đối với những người thích mạo hiểm: khi xử lý các tệp trong một thư mục, bạn có thể chuyển tùy chọn -F / --filter để lọc đầu ra trước khi nó được ghi vào hệ thống tệp

Giá trị của tùy chọn này phải là đường dẫn đến tệp JS xuất một hàm có tên là filter

Hàm filter phải asyncawait sẽ được gọi trên nó

Trước khi tệp được ghi vào đĩa, toàn bộ nội dung tệp sẽ được chuyển đến hàm filter dưới dạng chuỗi

Giá trị trả về từ hàm filter là giá trị thực sự sẽ được ghi vào bộ nhớ

Do đó, bạn có toàn quyền kiểm soát những gì cuối cùng sẽ được viết

Tập lệnh filter sẽ được tìm kiếm ở các vị trí sau ( .js sẽ được thêm vào bộ lọc tên, trừ khi nó đã kết thúc bằng .js )

  • Thư mục hiện tại
  • Một thư mục có tên .hokey-filters trong thư mục hiện tại
  • Thư mục có tên ${HOME}/.hokey-filters , trong đó ${HOME}` là thư mục chính của người dùng hiện tại
  • [Thư mục bộ lọc] tích hợp sẵn (https://github.com/cobbzilla/hokeyption/tree/master/util/filter)

Tham số Bộ lọc

Chuỗi filter có thể là nhiều từ. Trong trường hợp này, từ đầu tiên là tên bộ lọc và các từ còn lại sẽ được chuyển làm đối số cho hàm filter

Cứu giúp

Sử dụng -h / --help để hiển thị trợ giúp

Các lệnh hàng loạt JSON

Với tùy chọn -j / --json , bạn có thể chạy nhiều lệnh hokey phối hợp

Theo quy ước, tệp này được gọi là hokey.json , nhưng bạn có thể đặt tên nó bất cứ thứ gì bạn muốn

Nếu bạn chuyển một thư mục dưới dạng tùy chọn -j,hokeysẽ tìm kiếm mộthokey.json` trong thư mục đó

Tệp JSON phải chứa một đối tượng. Trong đối tượng đó, tên thuộc tính của nó giống như các tùy chọn dòng lệnh, cộng với một thuộc tính bổ sung có tên là hokey

Thuộc tính hokey là một mảng lệnh để chạy. Các thuộc tính được khai báo trong các lệnh này sẽ ghi đè mọi khai báo trùng lặp trong đối tượng bên ngoài.

Trong mỗi đối tượng trong mảng name hokey , bạn nên chỉ định một tên và các tệp đầu vào và đầu ra

Đây là một ví dụ về 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"
      }
    ]
}

Nhiều tệp đầu vào

Truyền một mảng đường dẫn tệp dưới dạng infiles tệp tin" thay vì một đường dẫn duy nhất infile , như trong ví dụ này:

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

Chỉ mục

Khi dịch sang nhiều ngôn ngữ, hokey có thể tạo một tệp chỉ mục liệt kê tất cả các bản dịch đã thực hiện và cung cấp các liên kết đến chúng

  • Khi tạo chỉ mục, bạn chỉ có thể có một nguồn đầu vào *

Chuyển tùy chọn -I / --index , giá trị là nơi tệp chỉ mục sẽ được tạo, có thể là một tệp hoặc một thư mục. Nếu đó là một thư mục, tên tệp mặc định sẽ được sử dụng, dựa trên mẫu (xem bên dưới)

Sử dụng -A / --index-template để xác định cách định dạng đầu ra chỉ mục. Bạn có thể chỉ định 'html', 'markdown', 'text' hoặc đường dẫn tệp đến mẫu HandlebarsJS của riêng bạn

Nếu bạn chỉ định mẫu của riêng mình, bạn cũng phải chỉ định một tệp (không phải thư mục) cho -I / --index quyền mua

Chúc bạn có thời gian vui vẻ khi dịch ngôn ngữ!