-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: update supported maximum text length for translation & add scri…
…pt to fetch config from bing website
- Loading branch information
1 parent
926e2e7
commit 0ed46a4
Showing
11 changed files
with
250 additions
and
79 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
# bing-translate-api | ||
[![NPM version](https://img.shields.io/npm/v/bing-translate-api.svg?style=flat)](https://www.npmjs.org/package/bing-translate-api) | ||
[![Auto Test](https://github.com/plainheart/bing-translate-api/actions/workflows/autotest.yml/badge.svg)](https://github.com/plainheart/bing-translate-api/actions/workflows/autotest.yml) | ||
[![NPM Downloads](https://img.shields.io/npm/dm/bing-translate-api.svg)](https://npmcharts.com/compare/bing-translate-api?minimal=true) | ||
[![License](https://img.shields.io/npm/l/bing-translate-api.svg)](https://github.com/plainheart/bing-translate-api/blob/master/LICENSE) | ||
|
||
A **simple** and **free** API for [Bing Translator](https://bing.com/translator) for Node.js. | ||
|
||
## Install | ||
|
||
``` | ||
npm install bing-translate-api | ||
``` | ||
|
||
## Usage | ||
|
||
From auto-detected language to English: | ||
|
||
```js | ||
const { translate } = require('bing-translate-api'); | ||
|
||
translate('你好', null, 'en').then(res => { | ||
console.log(res.translation); | ||
}).catch(err => { | ||
console.error(err); | ||
}); | ||
``` | ||
|
||
Translation result | ||
|
||
```js | ||
{ | ||
// original text | ||
"text": "你好", | ||
// user-specified language code | ||
"userLang": "auto-detect", | ||
// translated text | ||
"translation": "Hello", | ||
// `correctedText` is returned only when `correct` is set as `true` | ||
// supported since v1.1.0 | ||
"correctedText": "", | ||
// detected language | ||
"language": { | ||
// language code of translated text | ||
"to": "en", | ||
// detected language code of original text | ||
"from": "zh-Hans", | ||
// score of language detection | ||
// supported since v1.1.0 | ||
"score": 1 | ||
} | ||
} | ||
``` | ||
|
||
## API | ||
|
||
### translate(text, [from], [to], [correct], [raw], [userAgent], [proxyAgents]) | ||
|
||
#### _text_ | ||
Type: `string` | ||
|
||
The text to be translated, can't be blank. The **maximum** text length is **{{maxTextLen}}**. | ||
|
||
##### _from_ | ||
Type: `string` Default: `auto-detect` | ||
|
||
The language code of source text. | ||
|
||
**MUST** be `auto-detect` or one of the codes/names (not case sensitive) contained in [lang.json](src/lang.json) | ||
|
||
##### _to_ | ||
Type: `string` Default: `en` | ||
|
||
The language in which the text should be translated. | ||
|
||
**MUST** be one of the codes/names (not case sensitive) contained in [lang.json](src/lang.json). | ||
|
||
##### _correct_ | ||
Type: `boolean` Default: `false` Since: `v1.1.0` | ||
|
||
Whether to correct the input text. | ||
|
||
Note that: | ||
1) There is currently a **limit** of **{{maxCorrectableTextLen}} characters** for correction service. | ||
2) **Only** [the languages in the list](src/config.json#L7-L28) are supported to be corrected. | ||
|
||
##### _raw_ | ||
Type: `boolean` Default: `false` | ||
|
||
Whether the translation result contains raw response from Bing API. | ||
|
||
##### _userAgent_ | ||
Type: `string` | ||
|
||
The header value of `user-agent` used in API requests. | ||
|
||
Default: | ||
``` | ||
{{userAgent}} | ||
``` | ||
|
||
##### _proxyAgents_ | ||
Type: [`Got['Agents']`](https://github.com/sindresorhus/got/blob/v11.8.6/source/core/index.ts#L60-L64) Default: `undefined` Since: `v2.4.0` | ||
|
||
Set [agents](https://github.com/sindresorhus/got/blob/main/documentation/tips.md#proxying) of [`got`](https://github.com/sindresorhus/got) for proxy. | ||
|
||
## License | ||
|
||
MIT © 2021-2023 [plainheart](https://github.com/plainheart). | ||
|
||
## Thanks | ||
|
||
Great thanks to [Bing Translator](https://bing.com/translator) for providing so excellent translation service. | ||
|
||
## Related projects | ||
- [Capacitor Bing Translator](https://github.com/sabereen/capacitor-bing-translator) - A fork of this project that works in [Capacitor](https://capacitorjs.com). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
const got = require('got') | ||
const cheerio = require('cheerio') | ||
const fs = require('node:fs') | ||
const path = require('node:path') | ||
|
||
const DEFAULT_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36' | ||
|
||
;(async () => { | ||
const { body } = await got('https://bing.com/translator', { | ||
headers: { | ||
'Accept-Language': 'en-US,en' | ||
} | ||
}) | ||
|
||
// fetch config | ||
const richTranslateParams = JSON.parse( | ||
body.match(/params_RichTranslate\s?=\s?([^;]+);/)[1] | ||
) | ||
const config = { | ||
websiteEndpoint: richTranslateParams[1], | ||
translateEndpoint: richTranslateParams[0], | ||
spellCheckEndpoint: richTranslateParams[33], | ||
maxTextLen: richTranslateParams[5], | ||
maxCorrectableTextLen: richTranslateParams[30], | ||
correctableLangs: richTranslateParams[31], | ||
userAgent: DEFAULT_USER_AGENT | ||
} | ||
fs.writeFileSync( | ||
path.resolve(__dirname, '../src/config.json'), | ||
JSON.stringify(config, null, 2), | ||
{ charset: 'utf-8' } | ||
) | ||
console.log('✔️ Generated config\n', config) | ||
|
||
// fetch supported languages | ||
const $ = cheerio.load(body) | ||
const options = $('#t_tgtAllLang').children('option') | ||
const langMap = {} | ||
for (let i = 0, len = options.length, option; i < len; i++) { | ||
option = $(options[i]) | ||
langMap[option.attr('value')] = option.text().trim() | ||
} | ||
fs.writeFileSync( | ||
path.resolve(__dirname, '../src/lang.json'), | ||
JSON.stringify(langMap, null, 2), | ||
{ charset: 'utf-8' } | ||
) | ||
console.log() | ||
console.log('✔️ Generated language map\n', langMap) | ||
console.log() | ||
|
||
// update ts definition | ||
require('./generate-dts') | ||
|
||
console.log() | ||
|
||
// generate README | ||
require('./generate-readme') | ||
})() |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
const fs = require('node:fs') | ||
const path = require('node:path') | ||
const config = require('../src/config') | ||
|
||
// generate README from template | ||
let readmeTpl = fs.readFileSync(path.resolve(__dirname, './README.tpl.md'), 'utf-8') | ||
Object.entries(config).forEach(([key, value]) => { | ||
readmeTpl = readmeTpl.replace(`{{${key}}}`, value) | ||
}) | ||
|
||
fs.writeFileSync( | ||
path.resolve(__dirname, '../README.md'), | ||
'<!-- AUTO-GENERATED. SEE scripts/README.tpl.md FOR ORIGINAL TEMPLATE -->\n\n' | ||
+ readmeTpl, | ||
{ charset: 'utf-8' } | ||
) | ||
|
||
console.log('✔️ Generated README.md from template') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
{ | ||
"websiteEndpoint": "/translator", | ||
"translateEndpoint": "/ttranslatev3?isVertical=1&", | ||
"spellCheckEndpoint": "/tspellcheckv3?isVertical=1&", | ||
"maxTextLen": 5000, | ||
"maxCorrectableTextLen": 50, | ||
"correctableLangs": [ | ||
"da", | ||
"en", | ||
"nl", | ||
"fi", | ||
"fr", | ||
"fr-CA", | ||
"de", | ||
"it", | ||
"ja", | ||
"ko", | ||
"no", | ||
"pl", | ||
"pt", | ||
"pt-PT", | ||
"ru", | ||
"es", | ||
"sv", | ||
"tr", | ||
"zh-Hant", | ||
"zh-Hans" | ||
], | ||
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.