Почему я не могу запустить все свое приложение или сайт через Google Translate и получить базовый перевод на другой язык?
Теперь вы можете!
Название hokeylization
— это словосочетание, означающее «фальшивая локализация».
Это несколько фальшиво, потому что очень просто: он отправляет строки в Google Translate.
И это просто, но также очень мощно. Он имеет специальную поддержку документов HTML, шаблоны HandlebarsJS, и файлы Markdown.
Вы можете перевести:
- объект JavaScript, содержащий сообщения
- любое количество файлов или каталогов, всегда рекурсивный обход каталогов
Этот документ README.md был переведен с помощью самого инструмента хокейлизации на все языки, поддерживаемые 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 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`, чтобы явно исключить
файлы, которые в противном случае совпадали бы
Вы можете перечислить несколько регулярных выражений, разделенных пробелами
Обычно используется: --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
, чтобы показать справку
С -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
вариант