Lookerでの二か国語対応のはじめかた

#はじめに
Lookerで二か国語対応（日本語/英語対応）をやってみた内容についてご紹介いたします。
Lookerはドキュメントがしっかりしていますので、関連するドキュメントをたどりながら、自分が二か国語対応するときに迷った部分をちょっとだけ補足していくというスタイルで進めさせていただきます。
ちなみに、執筆時点のLookerバージョンは6.22.18です。

#Lookerの二か国語対応（環境設定）
Looker本体はユーザー属性にある`Locale`を設定するだけで二か国語対応できます。
ロケールの設定は管理者が設定する方法と、ユーザーが各自で設定する方法があります。

管理者がユーザーの`Locale`を設定する場合はこちら
　　→ [ロケールへのユーザーの割り当て](https://docs.looker.com/ja/data-modeling/learning-lookml/model-localization#%E3%83%AD%E3%82%B1%E3%83%BC%E3%83%AB%E3%81%B8%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6)

ユーザーが自分で`Locale`を設定する場合はこちら
　　→ [Changing Standard Account Settings](https://docs.looker.com/ja/sharing-and-publishing/user-menu#changing_standard_account_settings)

ただし、私の環境ではユーザーが自分では`Locale`設定を変更できないようになっていました。
もし変更できないようになっているのであれば、以下の手順で変更できるようにすることができます。（設定変更にはAdmin権限が必要です）

1. Admin > User Attributeをクリック
2. `locale`のAction「edit」ボタンをクリック
<img width="1078" alt="UserAttributes_locale.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532542/3aa91033-9a27-0947-45b9-de8cf062052b.png">
3. User Accessの設定を「edit」にして「Save」ボタンをクリック
<img width="1078" alt="UserAttributes_locale_UserAccess.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532542/68bda0eb-79d0-383e-2c6a-dcf9c963c559.png">

#LookMLの二か国語対応
LookMLで記述するモデルの二か国語対応はLookerのドキュメントにある通りに進めることで簡単にできました。

ドキュメントはこちら
　　→ [LookMLモデルのローカライズ](https://docs.looker.com/ja/data-modeling/learning-lookml/model-localization)

設定は
1. プロジェクトのマニフェストファイルへのローカライズ設定の追加
2. ロケールストリングファイルの作成
3. モデルファイルでのローカライズされた要素の使用
の順で進めると分かりやすいと思います。

### 1. マニフェストファイルへのローカライズ設定の追加

マニフェストファイルに以下の記述を追加します。

```manifest.lkml
localization_settings: {
  default_locale: en
  localization_level: permissive
}
```

プロジェクトマニフェストファイルをまだ作っていない場合には、マニュアルの手順に従って作成しましょう。
　　→ [マニフェストファイルの作成](https://docs.looker.com/ja/data-modeling/learning-lookml/model-localization#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E3%83%9E%E3%83%8B%E3%83%95%E3%82%A7%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%B8%E3%81%AE%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%A9%E3%82%A4%E3%82%BA%E8%A8%AD%E5%AE%9A%E3%81%AE%E8%BF%BD%E5%8A%A0)

`default_locale`の設定はお好みで。
`localization_level`設定は`permissive`がおすすめです。
きっちりしたい人は`strict`にしても良いですが、`strict`にすると検証などのためにちょっと`view`に`dimension`を追加しようというときでもロケールストリングを設定しなければならず、開発がとても面倒になります。

### 2. ロケールストリングファイルの作成

ロケールストリングファイルは以下の手順で作成します。
1. 開発モードになっていることを確認します。
2. IDEで、[Add]の横にある[+]アイコンをクリックします。
3. [Create Locale String File]を選択します。

<img width="1078" alt="CreateLocaleStringFile.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532542/bbd109ec-9ae4-3725-bfd0-bb9269245066.png">

ファイル名は「ロケール名 + .strings」にします。
例えば「en.strings」であれば`Locale`が`en`に設定されている時に表示される文字列を格納するファイルになります。
日本語と英語の表示をしたい場合には「en.strings」「ja_JP.strings」の2ファイルを作成します。

### 3. モデルファイルでのローカライズされた要素の使用

ここが肝心な部分、ローカライズされた要素の使用です。
とあるviewファイルのとある`dimension`で`label`を日本語で設定していますが、これをロケールに応じて切り替えたいとします。

```user.view.lkml
  dimension: user_id {
    label: "ユーザーID"
    type: string
    sql: ${TABLE}.user_id ;;
  }
```

先ほど作成したロケールストリングファイルに下記のように文字列を追加し、

```ja_JP.strings
"user_id_label" = "ユーザーID"
```

```en.strings
"user_id_label" = "User ID"
```

`dimension`の`label`の記述をロケールストリングファイルで定義したもの（この例では`user_id_label`）に書き換えます。

```user.view.lkml
  dimension: user_id {
    label: "user_id_label"
    type: string
    sql: ${TABLE}.user_id ;;
  }
```

#データ内容の二か国語対応
自分が取り扱っているデータでは以下のようなマスターデータがありまして、`Locale`の設定内容に合わせて`name_ja_JP`と`name_en`のどちらを表示させるか切り替えたい、という要望がありました。

| plan_code | name_en  | name_ja_JP |
|----------:|:---------|:-----------|
| 1         | Economy  | エコノミー    |
| 2         | Standard | スタンダード  |
| 3         | Premium  | プレミアム    |

そこで`dimension`の設定を下記のようにして対応しました。

```view.lkml
  dimension: name {
    type: string
    sql:
      {% if _user_attributes['locale'] == 'ja_JP' %}
        ${TABLE}.name_ja_JP
      {% else %}
        ${TABLE}.name_en
      {% endif %} ;;
  }
```

どんな環境でも使えるという訳ではありませんが、似たような要件に遭遇したときには参考にしてもらえたらと思います。

関連するマニュアルは下記の通りです。

`{% if %}``{% else %}``{% endif %}`について詳しく知りたい場合はこちら
　　→ [Liquid Control flow](https://shopify.github.io/liquid/tags/control-flow/)
　　→ [Liquid Operators](https://shopify.github.io/liquid/basics/operators/)

`_user_attributes['locale']`について詳しく知りたい場合はこちら
　　→ [Liquid Variable Definitions](https://docs.looker.com/ja/reference/liquid-variables#liquid_variable_definitions)

#おわりに
以上で設定は完了です。
かなり簡単に二か国語対応を始められるという印象を持ちました。

実際に二か国語対応をしてみると、ラベルなどに表示する文字列を一元管理できるため、表記の揺らぎがなくなる（揺らぎに気づきやすくなる）というメリットもありました。
これによりデータの統制（データ表記の統制）が取れて運用しやすくなるのかなと思っています。

きっちり統制してしっかり運用するためにも、ロケールストリング設定をきちんと管理していく必要がありますので、文字列の定義やストリングファイル内の作りをどうするのがベストなのか、私も探りながら運用して行こうと思っています。