Google Cloud Translation API를 로컬 Node.js에서 사용해 보세요.

Google Cloud Translation API를 로컬 Node.js에서 액세스해 보았습니다.

전회(라고 해도 이미 1년 반전입니다만) 파이썬에서 시도했지만 이번에는 Node.js입니다.

Cloud Translation API 사용



Google Cloud 콘솔에 브라우저에서 액세스하여 사용할 프로젝트의 Cloud Translation API를 사용 설정합니다.



참고로 활성화하지 않고 액세스하면 다음과 같은 오류가 발생했습니다.
PERMISSION_DENIED: Cloud Translation API has not been used in project xxxxxxxxxxxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/translate.googleapis.com/overview?project=xxxxxxxxxxxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

인증 설정



Google Cloud Platform의 콘솔 화면에서 IAM & Admin의 Service accounts라는 메뉴에서 작업하여 Create key로 키를 만들고 JSON 파일을 다운로드합니다. 그 JSON 파일을 다음과 같이 환경 변수로 지정해 둡니다.
$ export GOOGLE_APPLICATION_CREDENTIALS=$HOME/path/to/key.json

패키지 설치


$ npm install @google-cloud/translate

소스 코드


const { TranslationServiceClient } = require("@google-cloud/translate").v3;

const projectId = "xxxxxxxx";
const location = "us-central1";

// 言語判定
async function detectLanguage(text) {
    const translationClient = new TranslationServiceClient();
    const req = {
        parent: translationClient.locationPath(projectId, location),
        content: text,
        mimeType: "text/plain",
    };
    const res = await translationClient.detectLanguage(req);
    let sourceLang = null;
    for (const elem of res) {
        if (elem == null) // なぜかnullがレスポンスに含まれる
            continue;
        return elem["languages"][0]["languageCode"];
    }
}

// 翻訳
async function translate(text, sourceLang, targetLang) {
    const translationClient = new TranslationServiceClient();
    const req = {
        parent: translationClient.locationPath(projectId, location),
        contents: [text],
        mimeType: "text/plain",
        sourceLanguageCode: sourceLang,
        targetLanguageCode: targetLang,
    };
    const res = await translationClient.translateText(req);
    for (const elem of res) {
        if (elem == null) // なぜかnullがレスポンスに含まれる
            continue;
        return elem["translations"][0]["translatedText"];
    }
}

async function sample(text) {
    console.log("original: " + text);

    // 言語の判定
    const sourceLang = await detectLanguage(text);

    // 翻訳
    for (const targetLang of ["en", "ja", "zh-TW", "zh-CN", "ko"]) {
        if (targetLang == sourceLang) // Target language can't be equal to source language. というエラーを防ぐため
            continue;
        const targetText = await translate(text, sourceLang, targetLang);
        console.log(targetLang + ": " + targetText);
    }

    console.log();
}

const texts = [
    "Hello, world!",
    "Firebase is Google's mobile platform that helps you quickly develop high-quality apps and grow your business.",
    "Vue是一套用于构建用户界面的渐进式框架。",
];

async function main() {
    for (const text of texts) {
        await sample(text);
    }
}

main().catch(err => {
    console.log(err);
});

실행 결과


$ node sample.js
original: Hello, world!
ja: こんにちは世界!
zh-TW: 你好世界!
zh-CN: 你好世界!
ko: 안녕, 세상!

original: Firebase is Google's mobile platform that helps you quickly develop high-quality apps and grow your business.
ja: Firebaseは、高品質のアプリをすばやく開発してビジネスを成長させるのに役立つGoogleのモバイルプラットフォームです。
zh-TW: Firebase是Google的移動平台,可幫助您快速開發高質量的應用程序並發展業務。
zh-CN: Firebase是Google的移动平台,可帮助您快速开发高质量的应用程序并发展业务。
ko: Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이되는 Google의 모바일 플랫폼입니다.

original: Vue是一套用于构建用户界面的渐进式框架。
en: Vue is a progressive framework for building user interfaces.
ja: Vueは、ユーザーインターフェイスを構築するための進歩的なフレームワークです。
zh-TW: Vue是一套用於構建用戶界面的漸進式框架。
ko: Vue는 사용자 인터페이스 구축을위한 진보적 인 프레임 워크입니다.

참고



자바스크립트용 Google Cloud Translation API 참조는 여기입니다.
  • TranslationServiceClient - Documentation
  • 좋은 웹페이지 즐겨찾기