Skip to content

Commit 581c3b7

Browse files
jmdobrystephenplusplus
authored andcommitted
Add support for target option to translate.getLanguages.
1 parent 950b924 commit 581c3b7

File tree

4 files changed

+125
-17
lines changed

4 files changed

+125
-17
lines changed

packages/translate/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"translate"
5151
],
5252
"dependencies": {
53-
"@google-cloud/common": "^0.1.0",
53+
"@google-cloud/common": "^0.2.0",
5454
"arrify": "^1.0.0",
5555
"extend": "^3.0.0",
5656
"is": "^3.0.1",

packages/translate/src/index.js

Lines changed: 68 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -164,36 +164,93 @@ Translate.prototype.detect = function(input, callback) {
164164
/**
165165
* Get an array of all supported languages.
166166
*
167-
* @resource [Discover Supported Languages]{@link https://cloud.google.com/translate/v2/using_rest#supported-languages}
167+
* @resource [Discovering Supported Languages]{@link https://cloud.google.com/translate/v2/discovering-supported-languages-with-rest}
168168
*
169+
* @param {string=} target - Get the language names in a language other than
170+
* English.
169171
* @param {function} callback - The callback function.
170172
* @param {?error} callback.err - An error returned while making this request.
171-
* @param {string[]} callback.languages - The supported ISO 639-1 language
172-
* codes.
173+
* @param {object[]} callback.languages - The languages supported by the API.
174+
* @param {string} callback.languages[].code - The [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1)
175+
* language code.
176+
* @param {string} callback.languages[].name - The language name. This can be
177+
* translated into your preferred language with the `target` option
178+
* described above.
173179
* @param {object} callback.apiResponse - Raw API response.
174180
*
175181
* @example
176182
* translate.getLanguages(function(err, languages) {
177183
* if (!err) {
178184
* // languages = [
179-
* // 'af',
180-
* // 'ar',
181-
* // 'az',
185+
* // {
186+
* // code: 'af',
187+
* // name: 'Afrikaans'
188+
* // },
189+
* // {
190+
* // code: 'ar',
191+
* // name: 'Arabic'
192+
* // },
193+
* // {
194+
* // code: 'az',
195+
* // name: 'Azerbaijani'
196+
* // },
197+
* // ...
198+
* // ]
199+
* }
200+
* });
201+
*
202+
* //-
203+
* // Get the language names in a language other than English.
204+
* //-
205+
* translate.getLanguages('es', function(err, languages) {
206+
* if (!err) {
207+
* // languages = [
208+
* // {
209+
* // code: 'af',
210+
* // name: 'afrikáans'
211+
* // },
212+
* // {
213+
* // code: 'ar',
214+
* // name: 'árabe'
215+
* // },
216+
* // {
217+
* // code: 'az',
218+
* // name: 'azerí'
219+
* // },
182220
* // ...
183221
* // ]
184222
* }
185223
* });
186224
*/
187-
Translate.prototype.getLanguages = function(callback) {
188-
this.request({
189-
uri: '/languages'
190-
}, function(err, resp) {
225+
Translate.prototype.getLanguages = function(target, callback) {
226+
if (is.fn(target)) {
227+
callback = target;
228+
target = 'en';
229+
}
230+
231+
var reqOpts = {
232+
uri: '/languages',
233+
useQuerystring: true,
234+
qs: {}
235+
};
236+
237+
if (target && is.string(target)) {
238+
reqOpts.qs.target = target;
239+
}
240+
241+
this.request(reqOpts, function(err, resp) {
191242
if (err) {
192243
callback(err, null, resp);
193244
return;
194245
}
195246

196-
var languages = resp.data.languages.map(prop('language'));
247+
var languages = resp.data.languages.map(function(language) {
248+
return {
249+
code: language.language,
250+
name: language.name
251+
};
252+
});
253+
197254
callback(null, languages, resp);
198255
});
199256
};

packages/translate/system-test/translate.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,33 @@ var API_KEY = process.env.GCLOUD_TESTS_API_KEY;
102102
it('should get a list of supported languages', function(done) {
103103
translate.getLanguages(function(err, languages) {
104104
assert.ifError(err);
105-
assert(languages.length > 0);
105+
106+
var englishResult = languages.filter(function(language) {
107+
return language.code === 'en';
108+
})[0];
109+
110+
assert.deepEqual(englishResult, {
111+
code: 'en',
112+
name: 'English'
113+
});
114+
115+
done();
116+
});
117+
});
118+
119+
it('should accept a target language', function(done) {
120+
translate.getLanguages('es', function(err, languages) {
121+
assert.ifError(err);
122+
123+
var englishResult = languages.filter(function(language) {
124+
return language.code === 'en';
125+
})[0];
126+
127+
assert.deepEqual(englishResult, {
128+
code: 'en',
129+
name: 'inglés'
130+
});
131+
106132
done();
107133
});
108134
});

packages/translate/test/index.js

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
var assert = require('assert');
2020
var extend = require('extend');
21-
var prop = require('propprop');
2221
var proxyquire = require('proxyquire');
2322
var util = require('@google-cloud/common').util;
2423

@@ -182,12 +181,27 @@ describe('Translate', function() {
182181
it('should make the correct API request', function(done) {
183182
translate.request = function(reqOpts) {
184183
assert.strictEqual(reqOpts.uri, '/languages');
184+
assert.deepEqual(reqOpts.qs, {
185+
target: 'en'
186+
});
185187
done();
186188
};
187189

188190
translate.getLanguages(assert.ifError);
189191
});
190192

193+
it('should make the correct API request with target', function(done) {
194+
translate.request = function(reqOpts) {
195+
assert.strictEqual(reqOpts.uri, '/languages');
196+
assert.deepEqual(reqOpts.qs, {
197+
target: 'es'
198+
});
199+
done();
200+
};
201+
202+
translate.getLanguages('es', assert.ifError);
203+
});
204+
191205
describe('error', function() {
192206
var error = new Error('Error.');
193207
var apiResponse = {};
@@ -213,16 +227,27 @@ describe('Translate', function() {
213227
data: {
214228
languages: [
215229
{
216-
language: 'en'
230+
language: 'en',
231+
name: 'English'
217232
},
218233
{
219-
language: 'es'
234+
language: 'es',
235+
name: 'Spanish'
220236
}
221237
]
222238
}
223239
};
224240

225-
var expectedResults = apiResponse.data.languages.map(prop('language'));
241+
var expectedResults = [
242+
{
243+
code: 'en',
244+
name: 'English'
245+
},
246+
{
247+
code: 'es',
248+
name: 'Spanish'
249+
}
250+
];
226251

227252
beforeEach(function() {
228253
translate.request = function(reqOpts, callback) {

0 commit comments

Comments
 (0)