80
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

この記事はモチベーションクラウドシリーズアドベントカレンダー2021の4日目の記事です。

はじめまして。リンクアンドモチベーションの野田です。
弊社で開発しているモチベーションクラウドは現在「日本語、英語、中国語(簡体字・繁体字)、インドネシア語」に対応しています。
多言語対応を行う上で、考慮が抜けがちな点をまとめたので参考にしていただければと思います。

多言語対応とは?

本記事が指す多言語対応とは、特定の国の言語や文化に依存しないようにプロダクトを対応させることを指します。
多言語対応と言っても、ただ表示する文言を翻訳して表示すればいいのではありません。
ユーザーが利用する国の文化を理解した上で、顧客に価値が届くようにプロダクトを作る必要があります。

前提

本記事で扱うプロダクトはWebブラウザ上で動作するアプリケーションを対象とします。

地域によって変化するデータの持ち方

物の名前や金額など、地域によって表示が変わるデータをDBに保存する場合、単一の言語を扱う場合とは異なる構造でDBに保持する必要があります。
例えば、商品の名前や金額をDBに保存する場合、単一言語だと下記のように一つのテーブルに全ての情報をまとめることができますが、多言語対応する場合は下記のように言語毎に変化するデータを切り出してテーブルにするのが一般的です。

Screen Shot 2021-12-03 at 5.53.18.png

言語を特定できるカラム(上記ではlanguage)を持たせてリクエストされた言語のデータを取得できるようにします。
関連するテーブルが多くなり当然パフォーマンスは落ちてしまうので、適切にインデックスを貼りましょう。

句読点などの表現

Screen Shot 2021-12-03 at 5.58.37.png
上記の画像は中国語(繁体字)の文言なのですが、「。」や「、」などの句読点が上下真ん中の位置に表示されます。
このように、同じ文字を扱っていても言語によって表示を変える必要があるケースが存在します。
例で挙げた繁体字の句読点などはブラウザ側で自動的に表示をしてくれる場合も多いので、HTMLのlang属性に表示したい言語を正しく指定するようにしましょう。

ブラウザの自動翻訳

Chrome等のブラウザでは表示されているページの言語を認識し、ユーザーが普段利用している言語に自動翻訳してくれる機能が存在します。
この機能を利用するためには、HTMLのlang属性が正しく設定されていることが前提になります。
逆にlang属性を設定していないと日本語のページなのに他の言語と判定されてしまう場合もあるので注意しましょう。
Screen Shot 2021-12-03 at 6.35.05.png

RTL言語

アラビア語やヘブライ語など文章を右から左に読む言語をRTL(right-to-left)言語と言います。
RTL言語の場合文章の表示だけでなく、画面全体のレイアウト自体も右から左に変更する必要があります。

ダウンロード.png
CSSのdirectionプロパティ等を利用すると文章を右から左に表示することができます。

.rtl-text {
    direction: rtl;
}

タイムゾーン

終わりに

多言語対応は一度行ってしまえば言語を追加するだけで済む場合もありますが、そうでない場合も多くあります。
言葉や文化を理由にしてプロダクトを通して顧客へ届ける価値が増減してしまうような事態は生みたくないので、
言葉や文化に関わらず顧客に寄り添った開発をすることが大事だと改めて認識することができました。

80
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?