Wêrom kin ik myn hiele app of side net fia Google Translate útfiere en in basisoersetting yn in oare taal krije?
No kinsto!
De namme hokeylization
is in portmanteau, wat 'hokey-lokalisaasje' betsjut
It is wat hokey, om't it heul ienfâldich is: it stjoert snaren nei Google Translate
En it is ienfâldich, mar ek tige krêftich. It hat spesjale stipe foar HTML-dokuminten, HandlebarsJS sjabloanen, en Markdown bestannen.
Jo kinne oersette:
- in JavaScript-objekt mei berjochten
- elk oantal bestannen as mappen, altyd rekursyf troch troch mappen
Dit README.md-dokumint is oerset, mei it hokeylisearringsark sels, yn elke taal stipe troch Google Translate!
Ik bin der wis fan dat it net perfekt is, mar ik hoopje dat it better is as neat!
🇸🇦 Arabysk 🇧🇩 Bengali 🇩🇪 Dútsk 🇺🇸 Ingelsk 🇪🇸 Spaansk 🇫🇷 Frânsk 🇹🇩 Hausa 🇮🇳 Hindi 🇮🇩 Yndonesysk 🇮🇹 Italjaansk 🇯🇵 Japansk 🇰🇷 Koreaansk 🇮🇳 Marathi 🇵🇱 Poalsk 🇧🇷 Portugeesk 🇷🇺 Russysk 🇰🇪 Swahili 🇵🇭 Tagalog 🇹🇷 Turksk 🇵🇰 Urdu 🇻🇳 Fietnameesk 🇨🇳 Sineesk
Dizze bysûndere oersetting fan it orizjinele README kin defekt wêze -- korreksjes binne tige wolkom! Stjoer asjebleaft in pull request on GitHub, of as jo it net noflik binne om dat te dwaan, iepenje in probleem
As jo in nij GitHub-probleem oanmeitsje oer in oersetting, dwaan dan:
- befetsje de side-URL (kopiearje / plakke fan browseradresbalke)
- befetsje de krekte tekst dy't ferkeard is (kopiearje / plakke fan browser)
- beskriuw asjebleaft wat der mis is -- is de oersetting ferkeard? is de opmaak op ien of oare manier brutsen?
- biede freonlik in suggestje foar in bettere oersetting, of hoe't de tekst goed opmakke wurde moat
- Dankewol!
- Boarne
- Support and Funding
- Ynstallaasje
- Setup
- Oersette fan in JavaScript-string-boarnebestân
- It oersetten fan in map mei tekstbestannen
- Oare opsjes
- JSON-batch-kommando's
Ik besykje in profesjonele ûntwikkelder fan iepen boarne software te wêzen. Ik haw wurke yn de software yndustry foar in protte jierren, Ik haw begûn suksesfolle bedriuwen en ferkocht se oan iepenbiere bedriuwen. Koartlyn bin ik myn baan kwytrekke, en ik haw eins gjin oar wurk opsteld
Dat ik sil besykje nuttige software te skriuwen en te sjen oft dat wurket
As jo genietsje fan in gebrûk dizze sêftguod, Ik soe wêze sa bliid te ûntfangen sels de lytste moanlikse bydrage fia Patreon
Dankewol!
Om it kommandorigelark te brûken, ynstallearje mei npm
of yarn
:
npm install -g hokeylization
yarn global add hokeylization
Om as bibleteek te brûken, ynstallearje de lite
ferzje, dy't folle lytser is:
npm install -g hokeylization-lite
yarn global add hokeylization-lite
Sjoch dan nei help foar it kommando hokey
:
hokey --help
hokey -h
Wolle jo útfier yn jo taal of in oare taal sjen?
hokey
besiket de taal automatysk te ûntdekken fan de omjouwingsfariabelen fan jo shell
Jo kinne in taal twinge troch de omjouwingsfariabele LC_ALL
yn te stellen:
LC_ALL=it hokey --help
Tink derom dat as jo hokeylization-lite
ynstalleare hawwe, is kommandohelp allinich yn it Ingelsk beskikber
Stel de omjouwingsfariabele GOOGLE_TRANSLATE_PROJECT_ID
yn om jo Google Translate-projekt te identifisearjen
Stel de omjouwingsfariabele GOOGLE_APPLICATION_CREDENTIALS
yn op de JSON-bewizen dy't jo ynladen hawwe
nei it útfine hoe't autentikaasje wurket op Google Cloud (it kin leuk wêze)
As jo fanút de boarnekoade rinne, kinne jo dizze ek yn in .env
-bestân yn de boarne pleatse
map sille se by runtime laden wurde fia dotenv
Jo tekenrigetabel moat wêze yn in JavaScript-bestân yn ien fan dizze twa foarmen:
ES6 eksport:
export default {
string_key: "some value",
another_key: "another value",
... more keys ...
}
CommonJS eksport
module.exports = {
string_key: "some value",
another_key: "another value",
... more keys ...
}
As dit bestân myfile.en.js
, kinne jo it oersette nei it Spaansk en Dútsk mei:
hokey -l es,de -o myfile.LANG.js myfile.en.js
De LANG
yn it boppesteande is spesjaal - it is in reservearre wurd yn dit ark!
De LANG
wurdt ferfongen troch de taalkoade foar de útfierbestannen
Sa makket it boppeste kommando de bestannen:
myfile.es.js
myfile.de.js
De opsje -l
/ --languages
is in komma-skieden list mei ISO-taalkoades
stipe troch Google Translate
As it útfiertriem al bestiet, sil it ûndersocht wurde om te bepalen hokker kaaien al bestean. Besteande kaaien wurde net oerset. Oersetten foar ûntbrekkende kaaien wurde oanmakke en taheakke oan 'e ein fan it JS foarwerp. De hiele triem wurdt altyd oerskreaun.
Om alle kaaien opnij te oersetten, brûk de opsje -f
/ --force
Jo kinne ek in triemtafel oersette. hokeylization sil rekursyf besykje eltse bestân yn 'e map en útfiere de ynhâld fia Google Translate, en bewarje de útfier nei in identyk neamde triem yn in aparte triemtafelbeam
As it doel fan jo oersetting in map is, is dizze modus ynskeakele
De opsje -o
/ --outfile
spesifisearret de útfiermap
** GROTE warskôging **: By it oersetten fan mappen, **NET ** spesifisearje in útfiermap dat is binnen jo ynfiermap! As jo dit dogge, sille jo:
- induce ûneinige rekursje
- útfiere jo Google rekken
- folje dyn skiif
- minder wille hawwe
Hjir is in foarbyld fan wat net te dwaan:
hokey -l es -o templates/es templates # <--- DON'T DO THIS!
As dit rint, wurde oersette triemmen skreaun nei templates/es
, en wurde sa nij
boarnebestannen om te oersetten, om't se ûnder templates/
steane -- dit proses giet troch
foar altyd, doch it net!
OK, lit ús sizze dat jo wat e-postsjabloanen hawwe yn in map:
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
Om al dizze oer te setten nei Spaansk en Dútsk, útfiere:
hokey -l es,de -o templates/email/LANG templates/email/en
Yn it boppesteande is LANG
in reservearre wurd en sil ferfongen wurde troch de ISO-taalkoade
Wat bart der as it boppesteande rint:
- De
templates/email/es
entemplates/email/de
sille oanmakke wurde (as se net besteane) - Elk bestân yn
templates/email/en
sil oerset wurde yn it Spaansk en Dútsk - Besteande útfierbestannen sille net wurde regenerearre, útsein as jo
-f
/--force
- Jo sille einigje mei in identike mapstruktuer en bestannen binnen
es
ende
lykas jo hawwe ûnderen
Pass -n
/ --dry-run
troch om wer te jaan wat der dien wurde soe, mar meitsje gjin API-oproppen of skriuw gjin bestannen
Pass -f
/ --force
troch om oersettingen altyd opnij te meitsjen, sels as se al bestean
Pass -m
/ --match
troch om de ferwurke bestannen te beheinen by it útfieren fan yn mapmodus
Jo kinne miskien net altyd elk bestân yn jo boarnemap oersette nei jo doelmap
De wearde fan -m
/ --match
opsje is in regex (pas op shell quoting regels!) dy't spesifisearret
hokker triemmen moatte wurde oerset
By twifel kinne jo dizze opsje kombinearje mei -n
/ --dry-run
om te sjen hokker triemmen oerset wurde
Soms komt jo -m
oerien mei tefolle bestannen. Brûk de opsje -e
/ --excludes
om eksplisyt út te sluten
bestannen dy't oars oerienkomme soene
Jo kinne meardere regexes listje, skieden troch spaasjes
In gewoan gebrûk soe wêze: --excludes node_modules dist \.git build tmp
De oer te setten snaren kinne {{ handlebars }}
-sjabloanen befetsje, itsij mei twa of trije krulbeugels
Jo wolle wierskynlik NET dat it guod yn dy sjabloanen oerset wurde
Trochjaan de flagge -H
/ --handlebars
, en alles binnen {{ ... }}
sil net oerset wurde
Markdown is gjin tekst noch html, dus Google Translate hat der wat swierrichheden mei
De flagge -M
/ --markdown
makket spesjale ôfhanneling mooglik foar markdown-bestannen
Mei markdown-bestannen, as jo de flagge -M
net brûke, sille jo wierskynlik dizze problemen fine:
- Broken keppelings. Yn 'e oersetting ferskynt in spaasjekarakter nei't in markdown-keppelingsbeskriuwing einiget (mei
]
) mar foardat de doelkeppeling begjint (mei(
). Dit soarget dat de markdown ferkeard werjûn wurdt, en de keppeling is brutsen by it besjen fan it dokumint. - Koadeblokken wurde oerset. Google Translate wit net wat markdown as koade beskôget en wat it net
- Ferkearde ôfstân foar ynspringende koadeblokken. Spaasje is lestich te behâlden yn oersetting
- Dingen yn
backticks
sille oerset wurde, as jo hast altyd wolle dat se letterlike wearden binne
As de flagge -M
/ --markdown
is ynskeakele:
- It patroan
](
sil kondinsearre wurde ta](
sadat de brutsen markdown-keppelings reparearje - In omslach "gjin oersetten" sil pleatst wurde om ynspringende koadeblokken, it behâld fan juste ynspringen en garandearret dat se net oerset wurde
- In "no translate" wrapper sil pleatst wurde om tekst binnen
backticks
om te soargjen dat se net oerset wurde
Normaal wurdt alles ferwurke as platte tekst
As jo ynhâld HTML is, sil it fersmoarge wurde, útsein as jo de -p html
/ --process-as html
Foar de aventoerlike: by it ferwurkjen fan bestannen yn in map, kinne jo de opsje -F
/ --filter
om de útfier te filterjen foardat it nei it bestânsysteem skreaun wurdt
De wearde fan dizze opsje moat in paad wêze nei in JS-bestân dat in funksje mei de namme filter
De funksje filter
' moat async
om't await
oanroppen wurde sil
Foardat bestannen nei skiif skreaun wurde, sil de hiele triemynhâld trochjûn wurde nei de funksje filter
as in tekenrige
De filter
fan 'e funksje 'filter' is wat wirklik nei opslach skreaun wurdt
Sa hawwe jo totale kontrôle oer wat úteinlik skreaun wurde sil
It filter
skript sil socht wurde op de folgjende lokaasjes (mei .js
wurdt taheakke oan it filter
namme, útsein as it al einiget op .js
)
- De hjoeddeistige map
- In map mei de namme
.hokey-filters
binnen de hjoeddeiske map - In map mei de namme
${HOME}/.hokey-filters
, wêrby${HOME}
de thúsmap fan de hjoeddeiske brûker is - De ynboude filtermap
De filter
tekenrige kin meardere wurden wêze. Yn dit gefal is it earste wurd de filternamme, en
de oerbleaune wurden wurde trochjûn as arguminten nei de funksje filter
Brûk -h
/ --help
om help te sjen
Mei de opsje -j
/ --json
kinne jo meardere koördinearre hokey
kommando's útfiere
Troch konvinsje wurdt dizze triem hokey.json
neamd, mar jo kinne it neame wat jo wolle
As jo in map as de opsje hokey
-j
sil hokey
sykje nei in hokey.json
yn dy map
It JSON-bestân moat ien objekt befetsje. Binnen dat objekt binne syn eigendomsnammen itselde as
de kommando-rigelopsjes, plus ien ekstra eigenskip mei de namme hokey
De eigenskip hokey
is in array fan kommando's om út te fieren. De eigenskippen ferklearre binnen dizze kommando's sille
oerskriuwe alle dûbele deklaraasjes yn it bûtenste objekt.
Binnen elk objekt yn 'e array hokey
moatte jo in name
namme' opjaan, en de ynfier- en útfierbestannen
Hjir is in foarbyld fan in 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"
}
]
}
Trochjaan in array fan triempaden as infiles
ynstee fan in inkeld paad infile
, lykas yn dit foarbyld:
{
... [
{
"name": "my docs",
"infiles": ["README.md", "INSTALL.md", "TUTORIAL.md"],
"outfile": "docs/LANG/",
"markdown": true
]
}
By it oersetten nei in protte talen kin hokey
in yndeksbestân oanmeitsje dy't alle makke oersettingen oplist
en jout keppelings nei harren
By it generearjen fan yndeksen kinne jo mar ien ynfierboarne hawwe
Gean de opsje -I
/ --index
, de wearde is wêr't it yndeksbestân oanmakke wurdt, dat kin in triem wêze
of in map. As it in map is, sil in standert bestânsnamme brûkt wurde, basearre op it sjabloan (sjoch hjirûnder)
Brûk de -A
/ --index-template
om te bepalen hoe't de yndeksútfier opmakke is. Jo kinne 'html' opjaan,
'markdown', 'text', of it bestânpaad nei jo eigen HandlebarsJS sjabloan
As jo jo eigen sjabloan oantsjutte, moatte jo ek in bestân opjaan (net in map) foar de -I
/ --index
opsje