Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

多言語へ対応する #31

Open
kokoichi206 opened this issue Oct 29, 2022 · 6 comments
Open

多言語へ対応する #31

kokoichi206 opened this issue Oct 29, 2022 · 6 comments

Comments

@kokoichi206
Copy link
Member

kokoichi206 commented Oct 29, 2022

android-project-46group/android#76

  • 各テーブルで、日本語の横に英語のカラムを作成
    • 言語が増えるたびにテーブルを変更せなあかんのでだめ
  • 多言語対応用に別テーブルを作成する。
    • この案で考える
@kokoichi206
Copy link
Member Author

kokoichi206 commented Oct 29, 2022

Links

@kokoichi206
Copy link
Member Author

kokoichi206 commented Oct 29, 2022

既存の影響を抑えつつ、多言語対応用に別テーブルを作成する。

カラム検討

現状

erDiagram

member_infos {
  bigint member_info_id PK
  bigint member_id FK
  string birthday "ユーザー名"
}
Loading

テーブル案

現状のテーブルが使えそうな形になっていたので(これは何の理由により、いい感じになってる?)、locale を追加とかで何とかなるかも。

UK 貼ったほうがいいかはやってみてからかな?

erDiagram

member_infos }|--|| locales : "1人の言語地域は1以上のメンバー情報を持つ"
members ||--|{ member_infos : "1人のメンバーは1以上のメンバー情報を持つ"

member_infos {
  bigint member_info_id PK
  string locale FK "UK for 2 FK columns"
  bigint member_id FK "UK for 2 FK columns"
  string birthday
}

locales {
  bigint locale_id PK
  string name FK
}

members {
}
Loading

@kokoichi206
Copy link
Member Author

kokoichi206 commented Oct 29, 2022

確認

2つの値を合わせて PK にしたい

新規制約作成

ALTER TABLE table_name ADD PRIMARY KEY(coloumn_name1, coloumn_name2);

削除はどうしたらいい?
元の制約名がわからんのやけど

PostgreSQL で現在の制約確認

$ psql -h localhost -p 5432 -U ubuntu -d sakamichi

=> SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = 'public' AND table_name = 'member_infos';

表示例

 constraint_catalog | constraint_schema |    constraint_name    | table_catalog | table_schema |  table_name  | constraint_type | is_deferrable | initially_deferred | enforced 
--------------------+-------------------+-----------------------+---------------+--------------+--------------+-----------------+---------------+--------------------+----------
 sakamichi          | public            | member_infos_pkey     | sakamichi     | public       | member_infos | PRIMARY KEY     | NO            | NO                 | YES
 sakamichi          | public            | fk_member_info        | sakamichi     | public       | member_infos | FOREIGN KEY     | NO            | NO                 | YES
 sakamichi          | public            | 2200_27573_1_not_null | sakamichi     | public       | member_infos | CHECK           | NO            | NO                 | YES
 sakamichi          | public            | 2200_27573_2_not_null | sakamichi     | public       | member_infos | CHECK           | NO            | NO                 | YES
 sakamichi          | public            | 2200_27573_3_not_null | sakamichi     | public       | member_infos | CHECK           | NO            | NO                 | YES
 sakamichi          | public            | 2200_27573_4_not_null | sakamichi     | public       | member_infos | CHECK           | NO            | NO                 | YES
 sakamichi          | public            | 2200_27573_5_not_null | sakamichi     | public       | member_infos | CHECK           | NO            | NO                 | YES
 sakamichi          | public            | 2200_27573_6_not_null | sakamichi     | public       | member_infos | CHECK           | NO            | NO                 | YES

PK の名前は member_infos_pkey とわかる。

元の制約削除

ALTER TABLE member_infos DROP CONSTRAINT member_infos_pkey;

@kokoichi206
Copy link
Member Author

kokoichi206 commented Oct 30, 2022

Header の Accept-Language 情報をみる

HTTP 通信の Header の言語設定については RFC4647 で取り決めがされている

調べ方

この辺の公式ページをもとに調査

	lang, _ := r.Cookie("lang")
	accept := r.Header.Get("Accept-Language")
	fmt.Println(accept)
	tag, _ := language.MatchStrings(server.matcher, lang.String(), accept)
	fmt.Println(tag.String()[0:2])

結果

chrome: en-US,en;q=0.9,ja-JP;q=0.8,ja;q=0.7

Android(日本語): nil -> default ja is selected
Android(英語): nil -> default ja is selected

Android で Retrofit リクエスト時に、Interceptor を利用して Header を付与した場合。

header の値 → tag
Android(日本語): ja_JP -> ja-u-rg-jpzzzz
Android(英語): en_US -> en-u-rg-uszzzz

Links

@kokoichi206
Copy link
Member Author

kokoichi206 commented Oct 30, 2022

問題があるかも
フロントでソートや絞ったりする時、結局その情報がいるかも

@kokoichi206
Copy link
Member Author

継続検討

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant