Чаму я не магу запусціць усё сваё прыкладанне або сайт праз Google Translate і атрымаць базавы пераклад на іншую мову?
Цяпер вы можаце!
Назва hokeylization
з'яўляецца portmanteau, што азначае 'лакалізацыя hokey'
Гэта ў некаторай ступені хітра, таму што вельмі проста: ён адпраўляе радкі ў Google Translate
І гэта проста, але таксама вельмі магутна. Ён мае спецыяльную падтрымку дакументаў HTML, HandlebarsJS шаблоны, і файлы Markdown.
Вы можаце перакласці:
- аб'ект JavaScript, які змяшчае паведамленні
- любую колькасць файлаў або каталогаў, заўсёды рэкурсіўны пераход па каталогах
Гэты дакумент README.md быў перакладзены з дапамогай самога інструмента hokeylization на усе мовы, якія падтрымліваюцца 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
Вы таксама можаце перакласці каталог файлаў. hokeylization будзе рэкурсіўна наведваць кожны файл у каталогу і запусціце яго змесціва праз 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 не ведае, што ўцэнка ўлічвае код, а што не
- Няправільны інтэрвал для блокаў кода з водступам. Інтэрвал цяжка захаваць у перакладзе
- Рэчы ўнутры
backticks
будуць перакладзены, калі вы амаль заўсёды хочаце, каб яны былі літаральнымі значэннямі
Калі сцяг -M
/ --markdown
уключаны:
- Шаблон
](
будзе скарочаны да](
, такім чынам выпраўляючы непрацуючыя спасылкі ўцэнкі - Абгортка "no translate" будзе размешчана вакол блокаў кода з водступам, захоўваючы правільны водступ і гарантуючы, што яны не перакладаюцца
- Абгортка "no translate" будзе размешчана вакол тэксту ў
backticks
, каб пераканацца, што яны не перакладаюцца
Звычайна ўсё апрацоўваецца як звычайны тэкст
Калі ваш кантэнт з'яўляецца HTML, ён будзе сапсаваны, калі вы не перадасце параметр -p html
/ --process-as html
Для аматараў прыгод: пры апрацоўцы файлаў у каталогу вы можаце перадаць -F
/ --filter
--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
варыянт