如何分别为每个 div 创建 microsoft/google 翻译按钮?
How to create microsoft/google translate button for each div separately?
如何为每个 div 创建 Microsoft 或 google 翻译按钮?
每个 div 都有不同语言的内容,我想为每个 div 添加一个翻译按钮,并使其仅响应 div ,如下面的按钮link.
http://www.bing.com/widget/translator
但是当我使用上面link中提到的代码时,它翻译了整个网页。我想通过单击相应的翻译按钮分别翻译每个 div。
可以使用 google 翻译轻松完成同样的事情吗?
任何翻译都适合我。请帮忙。谢谢。
这就是用户 post 在我网站上的显示方式。
我想为每个 div 设置一个翻译按钮,以便用户可以将每个 div 翻译成他们想要的任何语言。
我的每个div都有一个id。
下面我在解释如何开始使用微软翻译API。完全相同的功能可以通过 Google 翻译 API 实现,但是使用 MS 对我来说更容易一些,因为他们提供 2M characters/monthly 免费翻译,而 Google 至少收费 1 $ 用于测试。
先决条件:
在 Microsoft Translator 上注册免费订阅。为此,您将被要求创建新的 MS 帐户或使用现有帐户登录。
在 Azure Datamarket 上注册您的应用程序。
注册示例。注意:这里有两个重要字段 Client ID 和 Client secret 您将需要它们来访问令牌请求。
实施:
首先,对 API 的每个请求都应包含访问令牌。到期时间为 10 分钟,因此您必须在到期前更新它们。理想情况下,该过程应在后端完成,以保护您的客户端机密和结果(令牌 + 过期时间)发送回 Web 应用程序。
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 请求,访问令牌是使用格式为 Bearer <token>
的查询字符串参数 appId
(由 space 分隔)提供的。查询字符串还包括 text
参数 - 您的 post 和 to
参数的文本 - 用户选择的语言代码,所有支持的代码列表和您可以从 [=73= 获得的语言友好名称] 还有。
示例如下:
var settings = {
"url": "https://api.microsofttranslator.com/v2/Ajax.svc/Translate",
"method": "GET",
"dataType": "jsonp",
"jsonp" : "oncomplete",
"data" : {
"text" : "Good Morning Whosebug",
"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);
});
响应是要替换为 post 原始文本的翻译字符串:
"Доброго ранку Whosebug"
最后,所有语言代码:
http://api.microsofttranslator.com/V2/Ajax.svc/GetLanguagesForTranslate
所选代码的友好名称:
http://api.microsofttranslator.com/V2/Ajax.svc/GetLanguageNames?locale=en&languageCodes=["en", "de", "es", "uk"]
使用如下所示的 Class 元素 <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>
如何为每个 div 创建 Microsoft 或 google 翻译按钮?
每个 div 都有不同语言的内容,我想为每个 div 添加一个翻译按钮,并使其仅响应 div ,如下面的按钮link.
http://www.bing.com/widget/translator
但是当我使用上面link中提到的代码时,它翻译了整个网页。我想通过单击相应的翻译按钮分别翻译每个 div。
可以使用 google 翻译轻松完成同样的事情吗?
任何翻译都适合我。请帮忙。谢谢。
这就是用户 post 在我网站上的显示方式。
我想为每个 div 设置一个翻译按钮,以便用户可以将每个 div 翻译成他们想要的任何语言。
我的每个div都有一个id。
下面我在解释如何开始使用微软翻译API。完全相同的功能可以通过 Google 翻译 API 实现,但是使用 MS 对我来说更容易一些,因为他们提供 2M characters/monthly 免费翻译,而 Google 至少收费 1 $ 用于测试。
先决条件:
在 Microsoft Translator 上注册免费订阅。为此,您将被要求创建新的 MS 帐户或使用现有帐户登录。
在 Azure Datamarket 上注册您的应用程序。
注册示例。注意:这里有两个重要字段 Client ID 和 Client secret 您将需要它们来访问令牌请求。
实施:
首先,对 API 的每个请求都应包含访问令牌。到期时间为 10 分钟,因此您必须在到期前更新它们。理想情况下,该过程应在后端完成,以保护您的客户端机密和结果(令牌 + 过期时间)发送回 Web 应用程序。
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 请求,访问令牌是使用格式为 Bearer <token>
的查询字符串参数 appId
(由 space 分隔)提供的。查询字符串还包括 text
参数 - 您的 post 和 to
参数的文本 - 用户选择的语言代码,所有支持的代码列表和您可以从 [=73= 获得的语言友好名称] 还有。
示例如下:
var settings = {
"url": "https://api.microsofttranslator.com/v2/Ajax.svc/Translate",
"method": "GET",
"dataType": "jsonp",
"jsonp" : "oncomplete",
"data" : {
"text" : "Good Morning Whosebug",
"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);
});
响应是要替换为 post 原始文本的翻译字符串:
"Доброго ранку Whosebug"
最后,所有语言代码:
http://api.microsofttranslator.com/V2/Ajax.svc/GetLanguagesForTranslate
所选代码的友好名称:
http://api.microsofttranslator.com/V2/Ajax.svc/GetLanguageNames?locale=en&languageCodes=["en", "de", "es", "uk"]
使用如下所示的 Class 元素 <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>