Skip to content

Latest commit

 

History

History
380 lines (276 loc) · 23.4 KB

README.md

File metadata and controls

380 lines (276 loc) · 23.4 KB

Хокеилизация

Защо не мога да стартирам цялото си приложение или сайт през Google Translate и да получа основен превод на друг език?

Сега ти можеш!

Името hokeylization е портманто, което означава „локализация на hokey“

Това е донякъде шеговито, защото е много просто: изпраща низове до Google Translate

И това е просто, но и много мощно. Има специална поддръжка за HTML документи, HandlebarsJS шаблони, и Markdown файлове.

Можете да преведете:

  • JavaScript обект, съдържащ съобщения
  • произволен брой файлове или директории, като винаги се преминава през директории рекурсивно

Прочетете това на друг език

Този документ README.md е преведен с помощта на самия инструмент за hokeylization на всеки език, поддържан от Google Translate!

Сигурен съм, че не е перфектно, но се надявам да е по-добре от нищо!

🇸🇦 арабски 🇧🇩 бенгалски 🇩🇪 немски 🇺🇸 английски 🇪🇸 испански 🇫🇷 френски 🇹🇩 Хауса 🇮🇳 хинди 🇮🇩 индонезийски 🇮🇹 италиански 🇯🇵 японски 🇰🇷 корейски 🇮🇳 маранти 🇵🇱 полски 🇧🇷 португалски 🇷🇺 руски 🇰🇪 суахили 🇵🇭 Тагалог 🇹🇷 турски 🇵🇰 урду 🇻🇳 виетнамски 🇨🇳 китайски

Има ли проблем с този превод на README?

Този конкретен превод на оригинала README може да има недостатъци -- корекциите са добре дошли! Моля, изпратете заявка за изтегляне в GitHub, или ако не ви е удобно да правите това, отворете проблем

Когато създавате нов проблем в GitHub относно превод, моля, направете следното:

  • включете URL адреса на страницата (копирайте/поставете от адресната лента на браузъра)
  • включете точния грешен текст (копирайте/поставете от браузъра)
  • моля, опишете какво не е наред -- преводът неправилен ли е? форматирането повредено ли е по някакъв начин?
  • любезно предложете предложение за по-добър превод или как текстът да бъде правилно форматиран
  • Благодаря ти!

Съдържание

Източник

Подкрепа и финансиране

Опитвам се да бъда професионален разработчик на софтуер с отворен код. Работил съм в в софтуерната индустрия в продължение на много години, основах успешни компании и ги продадох на публични компании. Наскоро загубих работата си и всъщност нямам никаква друга работа

Така че ще се опитам да напиша полезен софтуер и да видя дали работи

Ако обичате да използвате този софтуер, ще се радвам да получа дори най-малката месечна вноска чрез 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

Вашата таблица с низове трябва да бъде в 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

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 , за да покажете помощ

Пакетни команди JSON

С опцията -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 опция

Забавлявайте се, превеждайки езици!