User Tools

Site Tools


ru:google_translate

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
ru:google_translate [2019/03/10 06:30] – [Translation of New Entries] adminru:google_translate [2026/11/03 20:55] (current) – Document translation settings, Custom adapter and standalone API example admin
Line 1: Line 1:
-====== Google translate ======+====== Перевод текстов ======
  
-В скрипт встроена возможность автоматически перевести ваши тексты на другие языки используя Google Translate API. Обратите внимание что его использование платное (Google берет за это деньги, а не скрипт) и для этого вам понадобится зайти на https://developers.google.com/translate/v2/faq и получить свой **Server API Key**. Обратите внимание, именно Server, а не Browser.+Если у вас несколько языковых версий сайта, SCJ позволяет переводить тексты галер и категорий автоматически через сторонние (Google , DeepL) или свои сервисы.
  
-===== Translation of Existing DB =====+===== Настройка =====
  
-Вероятно у вас уже есть готовая база, которую вы хотели бы перевести. Для этого надо зайти в ssh на том домене, где нужен перевод в scj/bin и запустить +Откройте **Rotation → Settings → Translators**.
  
-  php rotation.php action=translate+  - Выберите адаптер: **Google**, **DeepL** или **Custom**. 
 +  - Укажите ключ выбранного сервиса в поле **API key**. 
 +  - Выберите исходный язык. **Auto** передаёт определение языка сервису. 
 +  
  
-Обратите внимание, что если сайт, на котором вы запускаете команду - слейв, то и результаты будут сохранены туда же. Это удобно тем например, что например у вас есть мастер с английскими описаниями. Вы добавляете слейв и переводите его описания на немецкий например.+По умолчанию выбран Custom, исходный язык — English (en). Custom это пример если вы хотите сделать свой сервис переводов.
  
-После запуска комманды скрипт спросит вас какое поле вы хотите переводить (да, если у вас есть и альт и деск к галере то перевод надо будет запустить 2 раза), а так же в какое поле сохранять результат. А так же API key который вам надо получить до начала данного процесса.+Google и DeepL используют ваши учётные записи соответствующих сервисов. Регаемся у них и получаем свой бесплатный ключ.
  
-**После этого он спросит в каком режиме пеерводить - stops, log, fast** stops - значит делаем остановку после каждой фразы, если перевод не подходит - можно интерактивно его поправить и нажать ентер дабы его сохранить в базу. log - это перевод без запроса подтверждения, но с выводом текста, fast - ничего не спрашивает, ничего не выводит лишнего, только максимально быстро переводит.+===== Перевод отдельного поля =====
  
-Обратите внимание, что конектиться в шел лучше с использованием UTF иначе вы можете видеть не все символы.+Около всех текстовых полей есть значок перевода. Скрипт переведёт **текущий текст именно этого поля**, включая ещё не сохранённые изменения, на язык выбранного сайта.
  
-===== Translation of New Entries =====+Результат появится в том же поле. Чтобы записать его, нажмите обычную кнопку Save формы. 
  
-Для перевода новых описаний добавлен возможно несколько более сложный, чем нажать пару кнопок, но по прочтению данного пункта станет ясно в чем дело.+===== Перевод существующих и новых галер =====
  
-Надо настроить перевод нужных полей (возможно вы хотите переводить только description например) в [[Import Replacements]]. +Для существующих галер выберите **Fields to translate** в Translators и сохраните настройки. Затем откройте **Rotation → Settings → Multilingual → Existing languages** и запустите **Translate** для нужного языка. 
 + 
 +Массовый перевод берёт текст исходного сайта и перезаписывает выбранные поля языкового сайта.  
 + 
 +Для категорий используйте **AutoTranslate All** на странице категорий. После подтверждения будут перезаписаны переводимые поля всех категорий для языковых сайтов. 
 + 
 +Для новых галер включите **Rotation → Settings → Grabber Settings → Translate to Existing lngs**. По умолчанию опция выключена. После успешного первоначального граббинга скрипт переводит недостающие языковые поля согласно Fields to translate. Уже переданный непустой перевод сохраняется; повторный граббинг сам по себе этот перевод не запускает. 
 + 
 +===== Как сделать свой вариант (Custom) ===== 
 + 
 +Адаптер находится в ''includes/libs/translators/Custom.php''. По умолчанию он обращается к серверному примеру:
  
 <code> <code>
 +examples/translation-api/index.php
 +</code>
  
-If this field = URL +Адрес строится из настроенного адреса сайта и папки SCJ. Например, для установки в /scj конечный URL будет таким:
-Contains this value = http (те по факту все добавляемые галеры) +
-Then Search For - * (* тут значит полностью все поле) +
-in This Field - Custom Vars 1 (те заменять данное поле) +
-And Replace it With - external::http://YOURDOMAIN/scj/bin/rotation.php?action=translate_text&text={DESCRIPTION}&source_lng=en&target_lng=de&api_key=YOUR_API_KEY (заменяем мы результатом который возвратит этот урл)+
  
-Что значит для каждой импортируемой галеры скрипт запросит указанный урл и поле Custom Vars1 будет заменено значением которое вернет этот урл. Те в Custom Vars 1  - у нас будет немецкий перевод текста из деска. +<code> 
 +https://example.com/scj/examples/translation-api/index.php 
 +</code>
  
-В данном урле есть следующие особенности+Цепочка вызова: кнопка в админке → сервер SCJ → Custom → HTTP API → ответ в поле. 
 + 
 +**Пример не выполняет настоящий перевод.** Он возвращает исходный текст с префиксом языка, например ''[de] Hello world''. Это позволяет сначала проверить соединение и формат обмена. 
 + 
 +Для проверки сохраните ''demo-key'' в настройках Custom и нажмите значок перевода у заполненного поля. Если вы ранее очистили ключ, введите его снова и нажмите Save. 
 + 
 +===== Протокол API и проверка через curl ===== 
 + 
 +Например  Custom отправляет POST с JSON и заголовком X-Api-Key. Замените домен и папку в команде адресом своей установки: 
 + 
 +<code bash> 
 +curl 'https://example.com/scj/examples/translation-api/index.php' \ 
 +  -H 'Content-Type: application/json' \ 
 +  -H 'X-Api-Key: demo-key' \ 
 +  --data '{"text":"Hello world","source":"en","target":"de"}' 
 +</code>
  
-  * В начале стоит external:: - это специальный префикс, который дает скрипту понять что надо запросить внешний урл, а не просто заменить данным текстом поле. +Ответ примера:
-  * YOURDOMAIN - .... +
-  * {DESCRIPTION} - будет заменено непосредственно на описание галеры +
-  * source_lng=en&target_lng=de - где вам надо подставить значения откуда куда вы переводите. +
-  * YOUR_API_KEY - заменить на ваш ключ+
  
 +<code json>
 +{"text":"[de] Hello world"}
 </code> </code>
  
-Таким образом при добавлении контента к нему будут применено данное правило и каждая новая галера будет получать перевод в деска в поле Custom Vars 1 .+  * ''text'' — исходный текст в UTF-8; пробелы, плюсы, проценты и строка «0» сохраняются. 
 +  * ''source'' — исходный язык, например en, или auto. 
 +  * ''target'' — язык результата, например de; auto здесь не допускается.
  
-Обратите внимание, что в качестве поля куда сохранять результат можно выбрать поля слейва. Те если у вас мастер английский, а слейв немецкий - достаточно на мастере настроить данное правиль и сохранять результат в description (slave name) и на слейве галеры будут переведенными.+Успешный ответ должен иметь HTTP-статус 200 и строковое поле text. Ошибку API возвращает с другим HTTP-статусом и JSON-полем error. Custom не подставляет исходный текст вместо неудавшегося перевода.
  
-Почему делано через Import Replacements: возможности такого перевода довольно ограничены и он не всегда хорош. Кроме того возможно вы заходитете как-то иначе организовать перевод, возможно кешировать результаты каких-то фраз и тп. Таким образом можно будет всегда вписать свой УРЛ, условно external::http://YOURDOMAIN/my_script.phptext={DESCRIPTION} который будет переводить лучше или каким-то образом дополнительно обрабатывать строку. 
  
-Кроме того, как видно в этом АПИ ключ хранится в базе. Если вы задумаете кому-то передать базу, это будет не лучшей идеей тк кто-то сможет узнать ваш ключ. Вы можете например напистаь отдельный скрипт для перевода и хранить ключ там, на другом серваке и тп - как угодно. 
  
-Те такой вариант дает множество вариантов работы с импортируемым текстом. 
ru/google_translate.txt · Last modified: by admin