質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

3回答

1382閲覧

UnityでSQLiteで管理しているデータの、多言語対応時のデータの持ち方。

hinatahinata

総合スコア29

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2020/02/21 01:29

現在Unityでスマホ向けアプリを制作しております。
SQLite(SQLiteUnityKitを使用)を使用してデータベースから
複数のテーブルを結合して検索をし、結果を返しTextに表示等をおこなっています。

テーブル構成(実際にはテーブル数は30以上あります)

キャラクターテーブル

chara_idnamedescription
1太郎説明1
2二郎説明2
3三郎説明3
.........

武器テーブル

wepon_idnamedescription
1説明1
2説明2
3説明3
.........

キャラと武器の対応テーブル

chara_idwepon_id
11
22
33
......

実現したいこと

現在日本語のみに対応しているのですが、多言語対応をしたいと思っています。
その際に以下の方法を考えたのですが、どのように実装すれば管理しやすいでしょうか。
下記3パターンを考えてみたのですが、これ以外にもおすすめの方法などありましたらご教授お願いいたします。


#####1. 各言語ごとにデータベースファイルを分け、読み込むデータベースファイルをスクリプトで切り替える。
db_ja.db db_en.db を別ファイルで作成。

void OpenDataBase(Language lang) { string dbName = "db_ja.db"; switch (lang) { case Language.Japanese: dbName = "db_ja.db"; break; case Language.English: dbName = "db_en.db" break; } sqlDB = new SqliteDatabase(dbName); }

※ただしこの場合、文字列以外のデータが各DBファイルで重複するので、DBファイルの容量が増えてしまうのが懸念。


#####2. 文字列を別テーブルで定義し、各テーブルは文字列テーブルのidを参照。検索時に得たい言語を指定して検索。
文字定義テーブル
|string_id|ja|en|...|
|:--|:--|
|1|太郎|tarou|
|2|二郎|jirou|
|3|三郎|saburou|
|...|...|

※これだと全てのテーブルの文字列が1つにまとまってしまうので、実際は各テーブル毎の文字列定義テーブルを作る?

各テーブルはstring_idを参照。
var weponName = GetWeponName(id,language)のように検索する。


#####3. 各テーブルにname_ja name_enのように対応言語ごとの列を作成
キャラクターテーブル

chara_idname_janame_en
1太郎tarou
2二郎jirou
3三郎saburou
.........

これはないですね・・・。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stdio

2020/02/21 01:48 編集

一番簡単なのは「言語のテーブル」で分けて、そのidをnameに書いておくという手段ですね... キャラクターテーブルとキャラクターランゲージーテーブルで分けておくかな? それなら、管理もしやすくなるとは思います。 なんだこの2次解析は...
hinatahinata

2020/02/22 08:33

確かにその実装が簡単そうですね。 ありがとうございます。
guest

回答3

0

各言語ごとにデータベースファイルを分け、読み込むデータベースファイルをスクリプトで切り替える。

まず、これはないでしょう。

データ容量よりも(まぁ、たかが知れていると思いますが)、テキストでないデータを修正する場合には、全てのファイルを変更しなければなりません。
そうなると、「日本語版では問題ないけど、英語版では不具合が出る」などという間違いを生む可能性があります。

もっとも、「今日中に多国語言語対応してね」なんて言われたら、このやり方を取らざるを得ないとは思いますけどね。

自分だったら、言語のテーブルは一つにして、言語毎にカラムを作らずにします。

string_idlang_idtext
1jp太郎
1entarou
2jp次郎
2enjirou

言語のテーブルを一つにする理由ですが、このような翻訳作業は大抵、全ての翻訳が必要なテキストを特定の翻訳者に丸投げすると思います。
ですので、翻訳が必要となるデータはひとまとめにしておいた方が管理しやすいでしょう。

また、翻訳が必要なテキストは、何もゲームデータにある物とは限りません。
例えば、ゲームタイトル名とか、ユーザに問い合わせる時の選択肢のテキストとか、いろいろあると思います。
そのような事のために、単に文字列のIDと言語から翻訳のテキストを引いてくる仕組みを作っておくべきです。

言語毎にカラムを作らない理由は、サポートする言語が増えた時にテーブルを作り直す必要が出てくるので、それを避けるためです。

投稿2020/02/21 11:39

katsuko

総合スコア3469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hinatahinata

2020/02/22 08:32

ありがとうございます。 確かに翻訳の外注も視野にいれておりましたので大変参考になりました。
guest

0

1の亜種で、キャラクターテーブルなど多言語が必要なテーブルは空もしくはデフォルトにしておいて、言語切替の時に時に言語別に作っておいたテーブルからコピーする。

投稿2020/02/21 03:41

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hihijiji

2020/02/22 02:03

皆さんRDBの常識に捕らわれすぎているようです。 組み込みDBは原則的にシングルユーザなので、いつでもどこでもほかの処理を止めてメンテナンスに入れます。 これが最適とは言いませんが、もうちょっと組み込みDBらしい発想があっても良いかと思います。
hinatahinata

2020/02/22 08:32

おっしゃる通り組み込みなので、こういった考え方もできるのですね。 大変参考になりました。 ありがとうございます。
guest

0

ベストアンサー

多言語対応 DB設計の考察

お空から「多言語システム作れよ」と言われたら設計責任者が目を通すための記事

が参考になれば。

データ量が増えて行くシステムなら早めにMySQLやそのフォークのMariaDBに移行しておいた方が吉かも?

投稿2020/02/21 03:09

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hinatahinata

2020/02/22 08:31

ありがとうございます。 皆様の色々なご意見、全て大変参考になりましたので 一番早く投稿いただいたOrlofskyさんをベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問