Зошто не можам да ја стартувам целата моја апликација или страница преку Google Translate и да добијам основен превод на друг јазик?
Сега, можеш!
Името hokeylization
е портманто, што значи „локализација на хокеј“
Донекаде е хокеј бидејќи е многу едноставен: испраќа низи до Google Translate
И едноставно е, но и многу моќно. Има специјална поддршка за HTML документи, Шаблони за HandlebarsJS, и датотеки Markdown.
Можете да преведете:
- објект JavaScript што содржи пораки
- кој било број на датотеки или директориуми, секогаш поминувајќи низ директориуми рекурзивно
Овој документ на README.md е преведен, користејќи ја самата алатка за хокејлизација секој јазик поддржан од Google Translate!
Сигурен сум дека не е совршено, но се надевам дека е подобро од ништо!
🇸🇦 Арапски 🇧🇩 бенгалски 🇩🇪 германски 🇺🇸 англиски 🇪🇸 шпански 🇫🇷 Француски 🇹🇩 Хауса 🇮🇳 хинди 🇮🇩 индонезиски 🇮🇹 италијански 🇯🇵 Јапонски 🇰🇷 корејски 🇮🇳 Маранти 🇵🇱 полски 🇧🇷 португалски 🇷🇺 руски 🇰🇪 свахили 🇵🇭 тагалог 🇹🇷 турски 🇵🇰 урду 🇻🇳 виетнамски 🇨🇳 кинески
Овој конкретен превод на оригиналот 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 (може да биде забавно)
Ако работите од изворниот код, можете да ги ставите и во датотека .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
е листа на ISO јазични кодови одделени со запирки
поддржано од Google Translate
Ако излезната датотека веќе постои, таа ќе се испита за да се утврди кои клучеви веќе постојат. Постоечките клучеви нема да се преведат. Ќе се генерираат и додадат преводи за клучевите што недостасуваат до крајот на објектот JS. Целата датотека секогаш се препишува.
За присилно преведување на сите копчиња, користете ја -f
/ --force
Можете исто така да преведете директориум со датотеки. хокејлизацијата рекурзивно ќе ја посети секоја датотека во директориумот и извршете ја неговата содржина преку Google Translate и зачувајте го излезот до датотека со идентично име во посебно дрво на директориуми
Кога целта на вашиот превод е директориум, овој режим е овозможен
Опцијата -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/es
“ иtemplates/email/de
ќе бидат креирани (ако не постојат) - Секоја датотека во
templates/email/en
ќе биде преведена на шпански и германски - Постоечките излезни датотеки нема да се регенерираат освен ако не користите
-f
/--force
- Ќе завршите со идентична структура на директориуми и датотеки во
es
иde
како што имате подen
Поминете -n
/ --dry-run
за да се прикаже што би се направило, но всушност не правете повици API или пишувајте датотеки
Поминете -f
/ --force
за секогаш да ги регенерирате преводите, дури и ако тие веќе постојат
Поминете -m
/ --match
за да ги ограничите датотеките што се обработуваат кога се извршуваат во режим на директориум
Можеби не секогаш сакате да ја преведете секоја датотека од вашиот изворен директориум во вашиот целен директориум
Вредноста на -m
/ --match
е регекс (пазете правила за цитирање на школка!) што одредува
кои датотеки треба да се преведат
Кога се сомневате, можете да ја комбинирате оваа опција со -n
/ --dry-run
за да видите кои датотеки ќе бидат преведени
Понекогаш вашиот -m
се совпаѓа со премногу датотеки. Користете ја -e
/ --excludes
за експлицитно исклучување
датотеки кои инаку би се совпаѓале
Можете да наведете повеќе регекси, одделени со празни места
Вообичаена употреба би била: --excludes node_modules dist \.git build tmp
Низите што треба да се преведат може да содржат шаблони {{ handlebars }}
, со две или три кадрави загради
Веројатно НЕ сакате работите во тие шаблони да бидат преведени
Поминете го -H
/ --handlebars
и сè во рамките на {{ ... }}
нема да се преведе
Markdown не е ниту текст ниту HTML, така што Google Translate има одредени тешкотии со него
-M
/ --markdown
овозможува посебно ракување со датотеките за обележување
Со датотеките за обележување, ако не го користите знамето -M
, веројатно ќе ги најдете овие проблеми:
- Скршени врски. Во преводот, знакот празно место се појавува по завршувањето на описот на врската за означување (со
]
), но пред да започне неговата целна врска (со(
). Ова предизвикува ознаката да се прикажува погрешно, а врската е скршен при прегледување на документот. - Код блоковите се преведуваат. Google translate не знае што се смета за код за означување, а што не
- Неправилно растојание за вовлечените кодни блокови. Тешко е да се зачува растојанието во преводот
- Работите во
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` во тој директориум
Датотеката 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
опција