Γιατί δεν μπορώ να εκτελέσω ολόκληρη την εφαρμογή ή τον ιστότοπό μου μέσω του Google Translate και να λάβω μια βασική μετάφραση σε άλλη γλώσσα;
Τώρα μπορείς!
Το όνομα hokeylization
είναι ένα portmanteau, που σημαίνει "τοποθέτηση hokey"
Είναι κάπως χαζό γιατί είναι πολύ απλό: στέλνει συμβολοσειρές στο Google Translate
Και είναι απλό, αλλά και πολύ δυνατό. Έχει ειδική υποστήριξη για έγγραφα HTML, πρότυπα HandlebarsJS, και αρχεία Markdown.
Μπορείτε να μεταφράσετε:
- ένα αντικείμενο JavaScript που περιέχει μηνύματα
- οποιοσδήποτε αριθμός αρχείων ή καταλόγων, πάντα διασχίζοντας καταλόγους αναδρομικά
Αυτό το έγγραφο README.md έχει μεταφραστεί, χρησιμοποιώντας το ίδιο το εργαλείο hokeylization, σε κάθε γλώσσα που υποστηρίζεται από τη Μετάφραση Google!
Είμαι σίγουρος ότι δεν είναι τέλειο, αλλά ελπίζω να είναι καλύτερο από το τίποτα!
🇸🇦 Αραβικά 🇧🇩 Μπενγκάλι 🇩🇪 Γερμανικά 🇺🇸 Αγγλικά 🇪🇸 Ισπανικά 🇫🇷 Γαλλικά 🇹🇩 Hausa 🇮🇳 Χίντι 🇮🇩 Ινδονησιακά 🇮🇹 Ιταλικά 🇯🇵 Ιαπωνικά 🇰🇷 Κορεάτικα 🇮🇳 Μαράνθι 🇵🇱 Πολωνικά 🇧🇷 Πορτογαλικά 🇷🇺 Ρωσικά 🇰🇪 Σουαχίλι 🇵🇭 Ταγκαλόγκ 🇹🇷 Τουρκικά 🇵🇰 Ουρντού 🇻🇳 Βιετναμέζικα 🇨🇳 Κινέζικα
Αυτή η συγκεκριμένη μετάφραση του πρωτότυπου README μπορεί να είναι ελαττωματικά -- οι διορθώσεις είναι πολύ ευπρόσδεκτες! Στείλτε ένα αίτημα έλξης στο GitHub, ή αν δεν αισθάνεστε άνετα να το κάνετε αυτό, ανοίξτε ένα θέμα
Όταν δημιουργείτε ένα νέο ζήτημα GitHub σχετικά με μια μετάφραση, κάντε τα εξής:
- συμπεριλάβετε τη διεύθυνση URL της σελίδας (αντιγραφή/επικόλληση από τη γραμμή διευθύνσεων του προγράμματος περιήγησης)
- συμπεριλάβετε το ακριβές κείμενο που είναι λάθος (αντιγραφή/επικόλληση από το πρόγραμμα περιήγησης)
- παρακαλώ περιγράψτε τι είναι λάθος -- είναι λάθος η μετάφραση; είναι κάπως χαλασμένη η μορφοποίηση;
- Προσφέρετε ευγενικά μια πρόταση για καλύτερη μετάφραση ή πώς το κείμενο πρέπει να μορφοποιηθεί σωστά
- Ευχαριστώ!
- Πηγή
- Υποστήριξη και Χρηματοδότηση
- Εγκατάσταση
- Ρύθμιση
- Μετάφραση αρχείου πόρου συμβολοσειράς JavaScript
- Μετάφραση καταλόγου αρχείων κειμένου
- Άλλες επιλογές
- Εντολές παρτίδας JSON
Προσπαθώ να γίνω επαγγελματίας προγραμματιστής λογισμικού ανοιχτού κώδικα. Έχω εργαστεί σε στη βιομηχανία λογισμικού εδώ και πολλά χρόνια, έχω ξεκινήσει επιτυχημένες εταιρείες και τις πούλησα σε δημόσιες εταιρείες. Πρόσφατα έχασα τη δουλειά μου και δεν έχω καμία άλλη δουλειά στη σειρά
Θα προσπαθήσω λοιπόν να γράψω χρήσιμο λογισμικό και να δω αν λειτουργεί
Εάν σας αρέσει να χρησιμοποιείτε αυτό το λογισμικό, θα χαρώ πολύ να λάβω ακόμη και το μικρότερη μηνιαία συνεισφορά μέσω 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 σε μία από τις εξής δύο μορφές:
Εξαγωγή 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 δεν είναι ούτε κείμενο ούτε 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
για να δείξετε βοήθεια
Με την -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
επιλογή