Skip to content

Latest commit

 

History

History
380 lines (276 loc) · 25.2 KB

README.md

File metadata and controls

380 lines (276 loc) · 25.2 KB

Hokeyization

Γιατί δεν μπορώ να εκτελέσω ολόκληρη την εφαρμογή ή τον ιστότοπό μου μέσω του Google Translate και να λάβω μια βασική μετάφραση σε άλλη γλώσσα;

Τώρα μπορείς!

Το όνομα hokeylization είναι ένα portmanteau, που σημαίνει "τοποθέτηση hokey"

Είναι κάπως χαζό γιατί είναι πολύ απλό: στέλνει συμβολοσειρές στο Google Translate

Και είναι απλό, αλλά και πολύ δυνατό. Έχει ειδική υποστήριξη για έγγραφα HTML, πρότυπα HandlebarsJS, και αρχεία Markdown.

Μπορείτε να μεταφράσετε:

  • ένα αντικείμενο JavaScript που περιέχει μηνύματα
  • οποιοσδήποτε αριθμός αρχείων ή καταλόγων, πάντα διασχίζοντας καταλόγους αναδρομικά

Διαβάστε αυτό σε άλλη γλώσσα

Αυτό το έγγραφο README.md έχει μεταφραστεί, χρησιμοποιώντας το ίδιο το εργαλείο hokeylization, σε κάθε γλώσσα που υποστηρίζεται από τη Μετάφραση Google!

Είμαι σίγουρος ότι δεν είναι τέλειο, αλλά ελπίζω να είναι καλύτερο από το τίποτα!

🇸🇦 Αραβικά 🇧🇩 Μπενγκάλι 🇩🇪 Γερμανικά 🇺🇸 Αγγλικά 🇪🇸 Ισπανικά 🇫🇷 Γαλλικά 🇹🇩 Hausa 🇮🇳 Χίντι 🇮🇩 Ινδονησιακά 🇮🇹 Ιταλικά 🇯🇵 Ιαπωνικά 🇰🇷 Κορεάτικα 🇮🇳 Μαράνθι 🇵🇱 Πολωνικά 🇧🇷 Πορτογαλικά 🇷🇺 Ρωσικά 🇰🇪 Σουαχίλι 🇵🇭 Ταγκαλόγκ 🇹🇷 Τουρκικά 🇵🇰 Ουρντού 🇻🇳 Βιετναμέζικα 🇨🇳 Κινέζικα

Υπάρχει πρόβλημα με αυτή τη μετάφραση του README;

Αυτή η συγκεκριμένη μετάφραση του πρωτότυπου README μπορεί να είναι ελαττωματικά -- οι διορθώσεις είναι πολύ ευπρόσδεκτες! Στείλτε ένα αίτημα έλξης στο GitHub, ή αν δεν αισθάνεστε άνετα να το κάνετε αυτό, ανοίξτε ένα θέμα

Όταν δημιουργείτε ένα νέο ζήτημα GitHub σχετικά με μια μετάφραση, κάντε τα εξής:

  • συμπεριλάβετε τη διεύθυνση URL της σελίδας (αντιγραφή/επικόλληση από τη γραμμή διευθύνσεων του προγράμματος περιήγησης)
  • συμπεριλάβετε το ακριβές κείμενο που είναι λάθος (αντιγραφή/επικόλληση από το πρόγραμμα περιήγησης)
  • παρακαλώ περιγράψτε τι είναι λάθος -- είναι λάθος η μετάφραση; είναι κάπως χαλασμένη η μορφοποίηση;
  • Προσφέρετε ευγενικά μια πρόταση για καλύτερη μετάφραση ή πώς το κείμενο πρέπει να μορφοποιηθεί σωστά
  • Ευχαριστώ!

Περιεχόμενα

Πηγή

Υποστήριξη και Χρηματοδότηση

Προσπαθώ να γίνω επαγγελματίας προγραμματιστής λογισμικού ανοιχτού κώδικα. Έχω εργαστεί σε στη βιομηχανία λογισμικού εδώ και πολλά χρόνια, έχω ξεκινήσει επιτυχημένες εταιρείες και τις πούλησα σε δημόσιες εταιρείες. Πρόσφατα έχασα τη δουλειά μου και δεν έχω καμία άλλη δουλειά στη σειρά

Θα προσπαθήσω λοιπόν να γράψω χρήσιμο λογισμικό και να δω αν λειτουργεί

Εάν σας αρέσει να χρησιμοποιείτε αυτό το λογισμικό, θα χαρώ πολύ να λάβω ακόμη και το μικρότερη μηνιαία συνεισφορά μέσω Patreon

Ευχαριστώ!

Εγκατάσταση

Για να χρησιμοποιήσετε το εργαλείο γραμμής εντολών, εγκαταστήστε χρησιμοποιώντας npm ή yarn :

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 προσπαθεί να ανιχνεύσει τη γλώσσα αυτόματα από τις μεταβλητές περιβάλλοντος του κελύφους σας

Μπορείτε να επιβάλετε μια γλώσσα ορίζοντας τη μεταβλητή περιβάλλοντος LC_ALL :

LC_ALL=it hokey --help

Σημειώστε ότι εάν έχετε εγκαταστήσει hokeylization-lite " , η βοήθεια εντολών είναι διαθέσιμη μόνο στα Αγγλικά

Ρύθμιση

Ορίστε τη μεταβλητή περιβάλλοντος GOOGLE_TRANSLATE_PROJECT_ID για να προσδιορίσετε το έργο σας στο Google Translate

Ορίστε τη μεταβλητή περιβάλλοντος GOOGLE_APPLICATION_CREDENTIALS στα διαπιστευτήρια JSON που κατεβάσατε αφού καταλάβετε πώς λειτουργεί ο έλεγχος ταυτότητας στο Google cloud (μπορεί να είναι διασκεδαστικό)

Εάν εκτελείτε από τον πηγαίο κώδικα, μπορείτε επίσης να τα τοποθετήσετε σε ένα αρχείο .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 -l είναι μια λίστα κωδικών γλώσσας ISO διαχωρισμένη με κόμμα υποστηρίζεται από τη Μετάφραση Google

Εάν το αρχείο εξόδου υπάρχει ήδη, θα εξεταστεί για να καθοριστεί ποια κλειδιά υπάρχουν ήδη. Τα υπάρχοντα κλειδιά δεν θα μεταφραστούν. Θα δημιουργηθούν και θα προστεθούν μεταφράσεις για τα κλειδιά που λείπουν στο τέλος του αντικειμένου JS. Ολόκληρο το αρχείο πάντα ξαναγράφεται.

Για αναγκαστική επαναμετάφραση όλων των πλήκτρων, χρησιμοποιήστε την επιλογή -f » / --force

Μετάφραση καταλόγου αρχείων κειμένου

Μπορείτε επίσης να μεταφράσετε έναν κατάλογο αρχείων. Το hokeylization θα επισκέπτεται αναδρομικά κάθε αρχείο στον κατάλογο και εκτελέστε τα περιεχόμενά του μέσω της Μετάφρασης Google και αποθηκεύστε το αποτέλεσμα σε ένα αρχείο με το ίδιο όνομα σε ξεχωριστό δέντρο καταλόγου

Όταν ο στόχος της μετάφρασής σας είναι ένας κατάλογος, αυτή η λειτουργία είναι ενεργοποιημένη

Η -o » / --outfile καθορίζει τον κατάλογο εξόδου

ΜΕΓΑΛΗ ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Κατά τη μετάφραση καταλόγων, ΜΗΝ καθορίζετε έναν κατάλογο εξόδου που βρίσκεται στον κατάλογο εισόδου σας! Εάν το κάνετε αυτό, θα:

  • προκαλούν άπειρη αναδρομή
  • εκτελέστε τον λογαριασμό σας στο Google
  • Γεμίστε το δίσκο σας
  • διασκεδάστε λιγότερο

Ακολουθεί ένα παράδειγμα του τι δεν πρέπει να κάνετε:

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

Όταν εκτελείται αυτό, τα μεταφρασμένα αρχεία γράφονται σε templates/es και έτσι γίνονται νέα αρχεία προέλευσης για μετάφραση, καθώς βρίσκονται στην templates/ -- αυτή η διαδικασία συνεχίζεται για πάντα, μην το κάνεις!

Σωστή χρήση

Εντάξει, ας υποθέσουμε ότι έχετε μερικά πρότυπα email σε έναν κατάλογο:

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/es » και templates/email/de (εάν δεν υπάρχουν)
  • Κάθε αρχείο στα templates/email/en θα μεταφραστεί στα Ισπανικά και τα Γερμανικά
  • Τα υπάρχοντα αρχεία εξόδου δεν θα αναγεννηθούν εκτός και αν χρησιμοποιήσετε "-f" / --force -f
  • Θα καταλήξετε με πανομοιότυπη δομή καταλόγου και αρχεία μέσα στα es και de όπως έχετε στο en

Αλλες επιλογές

Ξηρό τρέξιμο

Περάστε "-n" / " -n --dry-run για να εμφανίσετε τι θα γίνει, αλλά στην πραγματικότητα μην πραγματοποιήσετε κλήσεις API ή μην γράψετε αρχεία

Δύναμη

Περάστε "-f" / --force -f να αναδημιουργείτε πάντα μεταφράσεις, ακόμα κι αν υπάρχουν ήδη

Αγώνας

Περάστε -m / --match για να περιορίσετε τα αρχεία που υποβάλλονται σε επεξεργασία όταν εκτελούνται σε λειτουργία καταλόγου

Μπορεί να μην θέλετε πάντα να μεταφράζετε κάθε αρχείο στον κατάλογο προέλευσης στον κατάλογο προορισμού σας

Η τιμή της -m / --match είναι ένα regex (προσοχή κανόνες αναφοράς κελύφους!) που καθορίζει ποια αρχεία πρέπει να μεταφραστούν

Σε περίπτωση αμφιβολίας, μπορείτε να συνδυάσετε αυτήν την επιλογή με το -n / --dry-run για να δείτε ποια αρχεία θα μεταφραστούν

Εξαιρείται

Μερικές φορές το -m σας ταιριάζει με πάρα πολλά αρχεία. Χρησιμοποιήστε την επιλογή «-e» / --excludes -e » για ρητή εξαίρεση αρχεία που διαφορετικά θα ταίριαζαν

Μπορείτε να παραθέσετε πολλαπλά regexes, διαχωρισμένα με κενά

Μια κοινή χρήση θα ήταν: --excludes node_modules dist \.git build tmp

Τιμόνι

Οι συμβολοσειρές προς μετάφραση μπορεί να περιέχουν πρότυπα {{ handlebars }} , είτε με δύο ή τρεις σγουρές αγκύλες

Πιθανότατα ΔΕΝ θέλετε να μεταφραστούν τα πράγματα μέσα σε αυτά τα πρότυπα

Περάστε τη -H / --handlebars και οτιδήποτε εντός του {{ ... }} δεν θα μεταφραστεί

Markdown

Το Markdown δεν είναι ούτε κείμενο ούτε html, επομένως το Google Translate έχει κάποιες δυσκολίες με αυτό

Η -M » / --markdown επιτρέπει τον ειδικό χειρισμό για τα αρχεία σήμανσης

Με τα αρχεία σήμανσης, εάν δεν χρησιμοποιείτε τη σημαία -M , πιθανότατα θα βρείτε αυτά τα προβλήματα:

  • Κατεστραμμένοι σύνδεσμοι. Στη μετάφραση, εμφανίζεται ένας χαρακτήρας διαστήματος μετά το τέλος μιας περιγραφής συνδέσμου σήμανσης (με ] ) αλλά πριν ξεκινήσει ο σύνδεσμος-στόχος του (με ( ). Αυτό προκαλεί τη λανθασμένη απόδοση της σήμανσης και του συνδέσμου είναι σπασμένο κατά την προβολή του εγγράφου.
  • Τα μπλοκ κώδικα μεταφράζονται. Το Google translate δεν γνωρίζει τι θεωρεί το markdown κώδικα και τι όχι
  • Λανθασμένη απόσταση για μπλοκ κώδικα με εσοχή. Το διάστημα είναι δύσκολο να διατηρηθεί στη μετάφραση
  • Τα πράγματα μέσα στα backticks θα μεταφραστούν, όταν σχεδόν πάντα θέλετε να είναι κυριολεκτικές τιμές

Όταν η -M » / --markdown είναι ενεργοποιημένη:

  • Το μοτίβο ]( θα συμπυκνωθεί σε ]( διορθώνοντας έτσι τους κατεστραμμένους συνδέσμους σήμανσης
  • Ένα περιτύλιγμα "χωρίς μετάφραση" θα τοποθετηθεί γύρω από μπλοκ κώδικα με εσοχή, διατηρώντας τη σωστή εσοχή και διασφαλίζοντας ότι δεν μεταφράζονται
  • Ένα περιτύλιγμα "χωρίς μετάφραση" θα τοποθετηθεί γύρω από το κείμενο εντός backticks για να διασφαλιστεί ότι δεν μεταφράζονται

Διαδικασία-ως

Κανονικά όλα επεξεργάζονται ως απλό κείμενο

Εάν το περιεχόμενό σας είναι HTML, θα παραμορφωθεί εκτός και αν περάσετε την επιλογή -p html " / --process-as html "

Φίλτρο

Για τους τολμηρούς: κατά την επεξεργασία αρχείων σε έναν κατάλογο, μπορείτε να περάσετε την επιλογή -F » / --filter για να φιλτράρετε την έξοδο πριν εγγραφεί στο σύστημα αρχείων

Η τιμή αυτής της επιλογής πρέπει να είναι μια διαδρομή προς ένα αρχείο JS που εξάγει μια συνάρτηση με το όνομα filter

Η filter πρέπει να είναι async " επειδή θα κληθεί η λειτουργία "αναμονή await .

Πριν εγγραφούν τα αρχεία στο δίσκο, ολόκληρο το περιεχόμενο του αρχείου θα περάσει στη συνάρτηση filter ως συμβολοσειρά

Η επιστρεφόμενη τιμή από τη συνάρτηση filter είναι αυτή που θα γραφτεί πραγματικά στο χώρο αποθήκευσης

Έτσι, έχετε τον απόλυτο έλεγχο του τι θα γραφτεί τελικά

Το σενάριο filter θα αναζητηθεί στις ακόλουθες τοποθεσίες (με .js θα προστεθεί στο φίλτρο όνομα, εκτός αν τελειώνει ήδη σε .js )

  • Ο τρέχων κατάλογος
  • Ένας κατάλογος με το όνομα .hokey-filters στον τρέχοντα κατάλογο
  • Ένας κατάλογος με το όνομα ${HOME}/.hokey-filters , όπου το ${HOME} είναι ο κεντρικός κατάλογος του τρέχοντος χρήστη
  • Ο ενσωματωμένος κατάλογος φίλτρων

Παράμετροι φίλτρου

Η συμβολοσειρά filter μπορεί να είναι πολλές λέξεις. Σε αυτήν την περίπτωση, η πρώτη λέξη είναι το όνομα του φίλτρου και οι υπόλοιπες λέξεις θα περάσουν ως ορίσματα στη συνάρτηση filter

Βοήθεια

Χρησιμοποιήστε -h / --help για να δείξετε βοήθεια

εντολές παρτίδας JSON

Με την -j » / --json , μπορείτε να εκτελέσετε πολλαπλές συντονισμένες εντολές hokey

Κατά σύμβαση αυτό το αρχείο ονομάζεται hokey.json , αλλά μπορείτε να το ονομάσετε όπως θέλετε

Εάν μεταβιβάσετε έναν κατάλογο ως επιλογή "-j", το hokey θα αναζητήσει ένα hokey.json -j αυτόν τον κατάλογο

Το αρχείο 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" / " -A --index-template για να προσδιορίσετε πώς μορφοποιείται η έξοδος ευρετηρίου. Μπορείτε να ορίσετε 'html', 'markdown', 'text' ή τη διαδρομή αρχείου προς το δικό σας πρότυπο HandlebarsJS

Εάν καθορίσετε το δικό σας πρότυπο, πρέπει επίσης να καθορίσετε ένα αρχείο (όχι έναν κατάλογο) για το -I / --index επιλογή

Να περάσετε διασκεδαστικά μεταφράζοντας γλώσσες!