Защо не мога да стартирам цялото си приложение или сайт през Google Translate и да получа основен превод на друг език?
Сега ти можеш!
Името hokeylization
е портманто, което означава „локализация на hokey“
Това е донякъде шеговито, защото е много просто: изпраща низове до Google Translate
И това е просто, но и много мощно. Има специална поддръжка за HTML документи, HandlebarsJS шаблони, и Markdown файлове.
Можете да преведете:
- JavaScript обект, съдържащ съобщения
- произволен брой файлове или директории, като винаги се преминава през директории рекурсивно
Този документ README.md е преведен с помощта на самия инструмент за hokeylization на всеки език, поддържан от Google Translate!
Сигурен съм, че не е перфектно, но се надявам да е по-добре от нищо!
🇸🇦 арабски 🇧🇩 бенгалски 🇩🇪 немски 🇺🇸 английски 🇪🇸 испански 🇫🇷 френски 🇹🇩 Хауса 🇮🇳 хинди 🇮🇩 индонезийски 🇮🇹 италиански 🇯🇵 японски 🇰🇷 корейски 🇮🇳 маранти 🇵🇱 полски 🇧🇷 португалски 🇷🇺 руски 🇰🇪 суахили 🇵🇭 Тагалог 🇹🇷 турски 🇵🇰 урду 🇻🇳 виетнамски 🇨🇳 китайски
Този конкретен превод на оригинала README може да има недостатъци -- корекциите са добре дошли! Моля, изпратете заявка за изтегляне в GitHub, или ако не ви е удобно да правите това, отворете проблем
Когато създавате нов проблем в GitHub относно превод, моля, направете следното:
- включете URL адреса на страницата (копирайте/поставете от адресната лента на браузъра)
- включете точния грешен текст (копирайте/поставете от браузъра)
- моля, опишете какво не е наред -- преводът неправилен ли е? форматирането повредено ли е по някакъв начин?
- любезно предложете предложение за по-добър превод или как текстът да бъде правилно форматиран
- Благодаря ти!
- Източник
- Подкрепа и финансиране
- Инсталация
- Настройка
- Превод на ресурсен файл с низове на JavaScript
- Превод на директория с текстови файлове
- [Други опции](#Други опции)
- [Пакетни команди JSON](#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 Преводач
Задайте променливата на средата 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
е регулярен израз (внимавайте за правилата за цитиране на shell!), който указва
кои файлове трябва да бъдат преведени
Когато се съмнявате, можете да комбинирате тази опция с -n
/ --dry-run
за да видите кои файлове ще бъдат преведени
Понякога вашият -m
съвпада с твърде много файлове. Използвайте опцията -e
/ --excludes
--excludes` за изрично изключване
файлове, които иначе биха съвпаднали
Можете да посочите няколко регулярни израза, разделени с интервали
Обичайна употреба би била: --excludes node_modules dist \.git build tmp
Низовете за превод могат да съдържат шаблони {{ handlebars }}
с две или три фигурни скоби
Вероятно НЕ искате нещата в тези шаблони да бъдат преведени
Подавайте флага -H
/ --handlebars
и всичко в рамките на {{ ... }}
няма да бъде преведено
Markdown не е нито текст, нито html, така че Google Translate има известни затруднения с него
-M
/ --markdown
позволява специална обработка на файловете за маркиране
При файловете за маркиране, ако не използвате флага -M
, вероятно ще откриете следните проблеми:
- Неработещи връзки. В превода знакът за интервал се появява след края на описанието на връзката за маркиране (с
]
), но преди да започне целевата връзка (с(
). Това води до неправилно изобразяване на маркдауна и връзката е повреден при преглед на документа. - Кодовите блокове се превеждат. Google translate не знае кое маркдаун счита кода и кое не
- Неправилно разстояние за кодови блокове с отстъп. Разстоянието е трудно да се запази в превода
- Нещата вътре в
backticks
ще бъдат преведени, когато почти винаги искате те да бъдат буквални стойности
Когато -M
/ --markdown
е активиран:
- Моделът
](
ще бъде кондензиран до](
като по този начин ще се коригират прекъснатите маркдаун връзки - Обвивка „без превод“ ще бъде поставена около кодови блокове с отстъп, запазвайки правилния отстъп и гарантирайки, че не са преведени
- Обвивка „no translate“ ще бъде поставена около текста в
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
опция