Skip to content

Latest commit

 

History

History
380 lines (276 loc) · 23.8 KB

README.md

File metadata and controls

380 lines (276 loc) · 23.8 KB

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

Почему я не могу запустить все свое приложение или сайт через Google Translate и получить базовый перевод на другой язык?

Теперь вы можете!

Название hokeylization — это словосочетание, означающее «фальшивая локализация».

Это несколько фальшиво, потому что очень просто: он отправляет строки в Google Translate.

И это просто, но также очень мощно. Он имеет специальную поддержку документов HTML, шаблоны HandlebarsJS, и файлы Markdown.

Вы можете перевести:

  • объект JavaScript, содержащий сообщения
  • любое количество файлов или каталогов, всегда рекурсивный обход каталогов

Прочтите это на другом языке

Этот документ README.md был переведен с помощью самого инструмента хокейлизации на все языки, поддерживаемые 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 Translate.

Задайте для переменной среды 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

Перевод каталога текстовых файлов

Вы также можете перевести каталог файлов. хокейлизация будет рекурсивно посещать каждый файл в каталоге и запустите его содержимое через 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`, чтобы явно исключить файлы, которые в противном случае совпадали бы

Вы можете перечислить несколько регулярных выражений, разделенных пробелами

Обычно используется: --excludes node_modules dist \.git build tmp

Руль

Строки для перевода могут содержать шаблоны {{ handlebars }} с двумя или тремя фигурными скобками.

Вероятно, вы НЕ хотите, чтобы содержимое этих шаблонов было переведено.

Передайте -H / --handlebars , и все в пределах {{ ... }} не будет переведено

Уценка

Markdown не является ни текстом, ни html, поэтому у Google Translate есть некоторые трудности с ним.

-M / --markdown включает специальную обработку файлов уценки.

С файлами уценки, если вы не используете флаг -M , вы, вероятно, обнаружите следующие проблемы:

  • Битые ссылки. В переводе символ пробела появляется после окончания описания ссылки уценки ( ] ), но до того, как его целевая ссылка начинается (с ( ). Это приводит к неправильному отображению уценки, и ссылка ломается при просмотре документа.
  • Блоки кода переводятся. Google переводчик не знает, что уценка считает кодом, а что нет
  • Неверный интервал для блоков кода с отступом. Интервал трудно сохранить при переводе
  • Вещи внутри 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 , чтобы показать справку

Пакетные команды 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», «уценка», «текст» или путь к вашему собственному шаблону HandlebarsJS

Если вы указываете свой собственный шаблон, вы также должны указать файл (не каталог) для -I / --index вариант

Развлекайтесь, переводя языки!