Django User g11n
=========================================================================================

Djangoは *i18n* 及び *l10n* に対応しています。しかし、デフォルトの機能としてユーザーのタイムゾーン及び地域を設定する項目は存在しません。

Django User g11n (*globalization*)は、ユーザーにタイムゾーンと地域を設定するためのフィールドと、それらを適切に扱うためのミドルウェアを提供します。

<img src="https://raw.githubusercontent.com/wiki/salexkidd/django-user-g11n/imgs/example.gif" width="800px">

根底のアイディアは以下のURLを参照してください。

[See the Django documentation for more information](https://stackoverflow.com/questions/10235956/django-1-4-how-to-automatically-get-users-timezone-from-client)

- Support Django 2 and 3
- Support Python3.7, 3.8 (Maybe 2.7. Not tested)

# インストール方法

pypiからパッケージをインストールします

```shell
$ pip install django-user-g11n
```

## カスタムユーザーモデルを作成します

ユーザーをカスタムするためのアプリケーションを作成します。詳細はDjangoのドキュメントを参照してください。
[詳細はDjangoのドキュメントを参照してください](https://docs.djangoproject.com/en/3.0/topics/auth/customizing/)

```
$ manage.py startapp accounts
```

作成したアプリケーションのmodels.pyに以下を追記します。

```python
from django.contrib.auth import models as auth_models
from user_g11n.models import UserLanguageSupportMixin, UserTimeZoneSupportMixin


class User(UserTimeZoneSupportMixin,
           UserLanguageSupportMixin,
           auth_models.AbstractUser):
    pass
```

## settings.py

### INSTALLED_APPS

INSTALLED_APPSにユーザー拡張を施したアプリケーションと、user_g11n を追加します。

```python
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    .
    .
    .
    'accounts',  # <= ユーザー拡張用のモデルを含んだアプリケーション
    'user_g11n', # <= 追加
)
```

### MIDDLEWARE

MIDDLEWARE(またはMIDDLEWARE_CLASSES)にミドルウェアを追加します。

```python
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    .
    .
    .
    'user_g11n.middleware.UserLanguageMiddleware', # <= 追加
    'user_g11n.middleware.UserTimeZoneMiddleware', # <= 追加
]
```

### AUTH_USER_MODELの変更

AUTH_USER_MODELを変更または追加します。

```python
AUTH_USER_MODEL = 'accounts.User'
```

### I18N, L10N & TIME_ZONEの設定

I18N, L10N, TZの設定を変更します。

```python
USE_I18N = True

USE_L10N = True

USE_TZ = True

TIME_ZONE = "Asia/Tokyo" # Change to your local timezone
```

## migrate

Migrationを行い変更を適応します。

```
$ ./manage.py migrate
```

# Demo

Dockerの設定を用意しています。以下のコマンドを用いて起動してください。起動が完了したら [http://localhost:8000](http://localhost:8000) にアクセスしてください。

```
$ docker-compose up
```

