ええと、あなたは何も返さず、内側の関数からのものだけを返しますが、外側の関数はそうではありません。CSV が同期している場合は、次のようにします。
function translate(lng, str)
{
var translation = '';
csv().from(__dirname + '/../application/_common/lng/' + lng + '.csv', {delimiter: ';'})
.transform( function(row, index) {
if(row[0] == str) {
return row[1];
}
})
.on('data', function(data) {
translation = data;
})
.on('end', function() { return translation; }); // This just returns something from the inner function, which has no effect.
return translation; // actually return the translation
}
CSV が _asynchronous の場合、少し難しくなります。これを行う:
function translate(lng, str, callback) // Note the extra parameter
{
var translation = '';
csv().from(__dirname + '/../application/_common/lng/' + lng + '.csv', {delimiter: ';'})
.transform( function(row, index) {
if(row[0] == str) {
return row[1];
}
})
.on('data', function(data) {
translation = data;
})
.on('end', function() { callback(translation); }); // call the callback
}
これで、次のように呼び出すことができます。
var translation;
translate('en', 'translate_me', function(val){ translation = val; });