多言語対応の時代
今からつくるWEBアプリは多言語対応しないとまずいですよね、
ユーザーが日本人だけとは限らないので。
多言語対応といったらGoogle翻訳ですよね、それをAPIとして自分のアプリでも利用するということを今回行いたいと思います。
全体像
最後にある動画をみていただけたら全体像はわかるかと思います💦
事前準備
Laravelプロジェクトフォルダを作成し、その後、コマンドをうつのみでふつうの多言語対応は可能です。がそれだけだと、もともと決まった文字列のみしか対応できません。
しかし、事前にその状態をつくってほしいので、下記画面を参考に、一応の多言語対応をするのが事前準備です。
まあ、中身みたらわかるんですけど、やることはコマンドを3つ打つのみです。
一応詳細はうえのURLから遷移する画面で確認してください。
コマンドは書いときます。
composer require askdkc/breezejp --dev
php artisan breezejp
php artisan breezejp --langswitch
一応うえのコマンドの意味
routeファイルを確認すると、おそらく
// Language Switcher Route 言語切替用ルートだよ
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
})->name("language");
追加されていると思います。
http://127.0.0.1:8000/language/ja
http://127.0.0.1:8000/language/en
のようなURLを開発モードでうつと、上から日本語、英語に切り替わります。
しかし、これらの切り替え言語は、
laravel/lang配下にある
ja.json
en.json
ファイルにかかれている文字列を変換するのみです。
一例↓
でも、これのみだと事前に登録された言葉しか翻訳できません。
なにかの日本語を記入され,DBに登録し、英語Verの画面で出力しても、VIEWファイルでは
DBの値のままでしか出力されません。だから、Google翻訳機能をつかいたくなるんですよね。
では、本題にいきます。
Google Translate Packageをインストールしましょう
Google 翻訳機能をAPIで利用しようとすると課金するほうばかりヒットします。
しかし、課金するためにクレジットカード情報を入力するのは気が引けるので、
課金しない方法をさぐるとこのパッケージをインストールする方法に辿り着きました。
composer require stichoza/google-translate-php
そんなのわかってるといわれるかもしれませんが、このコマンドはもちろんLaravelプロジェクトフォルダのパスまで到達し実行してください。
青字のinfoが出てきてたら成功ですね。
確認する必要はないですが、composer.jsonや、composer.lockにいろいろ追記されてますね。
Laravel/config/app.phpに追記
'aliases' => Facade::defaultAliases()->merge([
'GoogleTranslate' => Stichoza\GoogleTranslate\GoogleTranslate::class
])->toArray(),
意味的には、ailasesを追加してます、多分。これのおかげでVIEWファイルでは、
{{ GoogleTranslate::trans('いったい、なんなんだ、あいつは', app()->getLocale()) }}
黄色線のような書き方をするだけで、第一引数の値を、第二引数の言語コードで翻訳します。
なので、英語に翻訳したいときには、第二引数に”en”といれると、
中国語でVIEWファイルにだしたいときは、
となります。これでVIEWファイルにでてくる文字列を多言語対応可能ですが、
コントーラーでもこの機能をもちいてDBにそもそも翻訳された文字列をいれたいときもあるかと思います。
ContollerでもGoogle翻訳APIを使おう
まずは、Google翻訳機能を利用したいContollerファイルのうえのほうでuseしましょう
use Stichoza\GoogleTranslate\GoogleTranslate;
これで準備はおわりました。
では、実際につかいましょうか。下のように書きます。
GoogleTranslate::trans("翻訳したい文字列", "言語のコード")
実際にアプリの動きを確認しましょう。
今回は、単純に記事を投稿するだけのアプリですが、日本語で記事にタイトルをいれたのに、DB内には
中国語と英語でそれぞれ保存するようにしました。
最後に
Google翻訳のAPIを利用しようとして、自分は課金するほうを先に登録してしまったのですよね(笑)
まあでも、文字数で課金額がきまるらしいですけど、
500,000文字までが無料で、500,001文字以降は、1,000,000文字あたり20ドルとからしいんですけど、
まあ、安いとはおもうんですが、Googleさんにはわるいですが、自分は無課金でドラクエウォークもやってるんで、ここも極力全部無課金でいきたいです。
そして、Googleさんが悪用しないとはわかってますが入力したクレジットカード情報を削除してくれたらうれしいんですが(笑)
返信がありません