Подтвердить что ты не робот

Как создать кнопку переадресации microsoft/google для каждого div отдельно?

Как создать кнопку перехода на Microsoft или Google для каждого div?

Каждый div имеет контент на другом языке, и я хотел бы добавить кнопку перевода для каждого div и заставить его отвечать только на этот div, как кнопка в следующей ссылке.

http://www.bing.com/widget/translator

Но когда я использую код, упомянутый в ссылке выше, он переводит всю веб-страницу. Я хотел бы перевести каждый div отдельно, нажав соответствующую кнопку перевода.

Можно ли сделать то же самое с помощью google translate?
Любой переводчик в порядке со мной. Незлая помощь. Спасибо.

Это как сообщение пользователя появляется на моем веб-сайте. enter image description here

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

Каждый из моих div имеет id.

enter image description here

4b9b3361

Ответ 1

Ниже я расскажу, как начать работу с Microsoft Translator API. Сама же функциональность может быть реализована с помощью Google Translate API, но мне было как-то проще с MS, поскольку они бесплатно предлагают 2M символов/ежемесячный перевод, тогда как Google взимает минимум 1 $за тестирование.

Требования:

  • Зарегистрируйтесь для бесплатной подписки на Microsoft Translator. Для этого вам будет предложено создать новую учетную запись MS или войти в систему с существующей.

  • Зарегистрируйте свое приложение на Azure Datamarket.

    Пример регистрации. Примечание. Здесь два важных поля: Идентификатор клиента и Клиентский секрет, который вам понадобится для запросов доступа к токенам.

    enter image description here

Реализация:

Прежде всего, каждый запрос API должен включать токен доступа. Срок действия составляет 10 минут, поэтому вам придется обновить их до истечения срока их действия. В идеале процесс должен выполняться на стороне сервера, чтобы защитить секрет клиента и результат (токен + время истечения) отправить обратно в веб-приложение.

Node.js пример:

var request = require("request");

var options = { 
  method: 'POST',
  url: 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/',
  form: { 
     // Client ID & Client secret values (see screenshot)
     client_id: 'translator_3000',      
     client_secret: 'ZP8LzjZkKuFAb2qa05+3nNq+uOcqzWK7e3J6qCN1mtg=', 
     scope: 'http://api.microsofttranslator.com',
     grant_type: 'client_credentials' 
  } 
};

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});

Ответ содержит несколько полей, включая access_token, используйте его значение для дальнейших запросов.

{
  "token_type": "http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0",
  "access_token": "http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=translator_3000&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=https%3a%2f%2fdatamarket.accesscontrol.windows.net%2f&Audience=http%3a%2f%2fapi.microsofttranslator.com&ExpiresOn=1435405881&Issuer=https%3a%2f%2fdatamarket.accesscontrol.windows.net%2f&HMACSHA256=st9LJ0F8CKSa6Ls59gQN0EqMWLFed5ftkJiOCVXE4ns%3d",
  "expires_in": "600",
  "scope": "http://api.microsofttranslator.com"
}

Теперь, когда у нас есть токен доступа, это время для запроса на перевод. Примечание. Это запросы JSONP, а токен доступа предоставляется с использованием параметра строки запроса appId в формате Bearer <token> (разделенном пробелом). Строка запроса также включает в себя параметр text - текст вашего сообщения и параметр to - код языка, выбранный пользователем, список всех поддерживаемых кодов и языковых имен, которые вы также можете получить из API.

Вот пример:

var settings = {
  "url": "https://api.microsofttranslator.com/v2/Ajax.svc/Translate",
  "method": "GET",
  "dataType": "jsonp",
  "jsonp" : "oncomplete",
  "data" : {
    "text" : "Good Morning StackOverflow",
    "to" : "uk",
    "appId" : "Bearer http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=translator_3000&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=https%3a%2f%2fdatamarket.accesscontrol.windows.net%2f&Audience=http%3a%2f%2fapi.microsofttranslator.com&ExpiresOn=1435405881&Issuer=https%3a%2f%2fdatamarket.accesscontrol.windows.net%2f&HMACSHA256=st9LJ0F8CKSa6Ls59gQN0EqMWLFed5ftkJiOCVXE4ns%3d"
  }
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

Ответ - это переводимая строка, которая должна быть заменена исходным текстом:

"Доброго ранку StackOverflow"

И, наконец, все коды языков:

http://api.microsofttranslator.com/V2/Ajax.svc/GetLanguagesForTranslate

и дружественные имена для выбранных кодов:

http://api.microsofttranslator.com/V2/Ajax.svc/GetLanguageNames?locale=en&languageCodes=["en", "de", "es", "uk"]

Официальная документация.

Ответ 2

Используйте элемент класса <div class="micropost293">, показанный ниже.

<div class="micropost293"><p>Тестирование</p>
<div class="micropost293_control" lang="en"></div>
    <script>
function googleSectionalElementInit() {
  new google.translate.SectionalElement({
    sectionalNodeClassName: 'micropost293',
    controlNodeClassName: 'micropost293_control',
    background: '#f4fa58'
  }, 'google_sectional_element');
}
</script>
</div>

//Place this Script at bottom of page.
    <script src="//translate.google.com/translate_a/element.js?cb=googleSectionalElementInit&ug=section&hl=en"></script>