Tokyo2020 カレンダーと i18n モジュール

[week]: https://github.com/kaz-utashiro/App-week
[optex]: https://github.com/kaz-utashiro/optex
[Getopt::EX]: https://github.com/kaz-utashiro/Getopt-EX
[Getopt::EX::i18n]: https://github.com/kaz-utashiro/Getopt-EX-i18n
[termcolor]: https://github.com/kaz-utashiro/Getopt-EX-termcolor
[Getopt::EX::Colormap]: https://metacpan.org/pod/Getopt::EX::Colormap

# 読むのが面倒な人向けのまとめ

`week` コマンドをインストールして `~/.weekrc` をこう設定するといいよ、何ができるかは `week -l` を見て、という話。

```~/.weekrc
option default --i18n-v --theme tokyo2020
```

# week コマンドの続き

<img width="764" alt="スクリーンショット 2020-06-15 10.31.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/1e5d324a-dbaa-4aaa-b2b8-0629968599c4.png">

以前の記事。

- [ターミナルで使える色っぽいカレンダー - Qiita](https://qiita.com/kaz-utashiro/items/603f4bca39e397afc91c)
- [ライオンズカラーのカレンダーと termcolor モジュール - Qiita](https://qiita.com/kaz-utashiro/items/38cb50a4d0cd34b6cce6)

# --tokyo2020 オプション

来年開催予定の東京オリンピックの成功を祈って `--tokyo2020` オプションを作ってみた。

<img width="764" alt="スクリーンショット 2020-06-15 10.31.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/1e5d324a-dbaa-4aaa-b2b8-0629968599c4.png">

<img width="764" alt="スクリーンショット 2020-06-15 10.31.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/05fe39b1-f5f0-9ac7-9d9e-3c3917f1a57d.png">

配色については、公式発表されているデータに加え、このサイトを参考にさせて頂いた。プログラムを変更して、曜日毎に異なる色を設定できるようにして、月曜から金曜日に五輪カラーを割り当てた。それ以外はエンブレムカラーだが、こうしてみるとエンブレムの藍色以外、東京五輪特有の色というのは使われていないのだなと思った。

- [オリンピック五輪と2020年東京五輪エンブレム＆装飾デザイン色・カラーコード | 綾糸.net](https://ayaito.net/webtips/color_code/5166/)

他のカラーテーマでは曜日の色は定義していないので、先に --tokyo2020 オプションを適用すると結果的に曜日の色だけが残り、これはこれでいい感じだ[^colormap]。

[^colormap]: 色の定義は曜日の行全体と、各曜日の文字に設定可能だ。`Getopt::EX::Colormap` モジュールは、このように色の設定範囲がオーバーラップしている場合、狭い範囲の色を保ったまま全体に色付けすることができる。これは、あまり他のライブラリには見られない特徴ではないかと思う。

<img width="764" alt="スクリーンショット 2020-06-15 10.47.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/8582b7d1-21e8-422e-8394-ce8a43c1a848.png">

ところで、この記事で使っている画像は iTerm2 の24ビットカラーで表示したものだ。前の記事にも書いたように week コマンドは24ビット表現で色を指定することができるが、通常は 6x6x6 の216色に変換して表示する。macOS 標準のターミナルで実行するとこのように表示される。

<img width="762" alt="スクリーンショット 2020-06-28 07.20.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/43a82f2d-37ea-53b9-5cac-1d55a51ed819.png">

エンブレムの微妙な色 (`#ee334e`) は表現できず、赤っぽくなってしまう[^RGB24]。Tokyo2020 のイメージとは少し違うのだが、クリスマスっぽくって結構いいんじゃないかとも思っている。

[^RGB24]: これは変換アルゴリズムの問題でもあり、現在は `#ee334e` は `400` にマップされる。これを `501` にすると24ビットカラーに近い色になるので、そうなるようなアルゴリズムを検討しているところ。

## 追記

その後、[Getopt::EX::Colormap] の[アルゴリズム](https://github.com/kaz-utashiro/Getopt-EX/commit/6f12905ccf665142ac4db3231cdbbd5ed2beae4b#diff-897ae502cbbb0f618d4d13a29c23eb9f5d3a61bc2fd906220c86e4be27c12daa)を見直して、`#ee334e` が `501` にマップされるようになった。バージョン 0.13 以降では、次のように表示されるはずだ。若干明るいが、以前よりはだいぶ近くなったのではないだろうか。

<img width="762" alt="スクリーンショット 2020-06-29 11.30.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/82c9e4c6-196f-61c8-7793-e0f64aee449f.png">

# i18n モジュール

オリンピックなのだから、カレンダーも国際色豊かにしたい。week コマンドは cal コマンドの結果を加工しているので、何もせずとも locale 対応している。というか、どんな文字列が来ても処理できるよう、それなりに工夫している。だからこんな風に環境変数を設定すれば簡単に各国のカレンダーを表示できる。

<img width="762" alt="スクリーンショット 2020-06-15 12.30.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/c3c05315-eacd-5850-24d3-8343cc396e5a.png">

i18n モジュールは、この作業を簡単にするものだ。自国語の設定はログイン時に一度やっておけばいいが、馴染みのない国のロケールコードを知るのは簡単ではない。たとえば、ブラジルの場合 `pt_BR` を指定するなんて普通の日本人は覚えてないだろう。でもブラジルが BR であることは知っているかもしれない。-M18n モジュールをロードすると、以下のオプションが設定されて `--br` でブラジルのカレンダーを表示することができる。

```
option --BR    &setenv(LANG=pt_BR) # Brazil / Portuguese
option --br    &setenv(LANG=pt_BR) # Brazil / Portuguese
option --pt_BR &setenv(LANG=pt_BR) # Brazil / Portuguese
option --ptbr  &setenv(LANG=pt_BR) # Brazil / Portuguese
```

<img width="762" alt="スクリーンショット 2020-06-15 12.41.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/527ee06c-b11b-ffdd-741d-fabe16730843.png">

オプションの一覧は `week -l` で表示することができる。macOS 10.15 (Catalina) で実行すると次のようになる。詳しい説明は [Getopt::EX::i18n] を見ていただきたい。

```
$ week -l
option --AM    &setenv(LANG=hy_AM) # Armenia / Armenian
option --hy    &setenv(LANG=hy_AM) # Armenia / Armenian
option --hy_AM &setenv(LANG=hy_AM) # Armenia / Armenian
option --hyam  &setenv(LANG=hy_AM) # Armenia / Armenian
option --AT    &setenv(LANG=de_AT) # Austria / German
option --at    &setenv(LANG=de_AT) # Austria / German
option --de_AT &setenv(LANG=de_AT) # Austria / German
option --deat  &setenv(LANG=de_AT) # Austria / German
option --AU    &setenv(LANG=en_AU) # Australia / English
option --au    &setenv(LANG=en_AU) # Australia / English
option --en    &setenv(LANG=en_AU) # Australia / English
option --en_AU &setenv(LANG=en_AU) # Australia / English
option --enau  &setenv(LANG=en_AU) # Australia / English
option --fr_BE &setenv(LANG=fr_BE) # Belgium / French
option --frbe  &setenv(LANG=fr_BE) # Belgium / French
option --nl_BE &setenv(LANG=nl_BE) # Belgium / Dutch
option --nlbe  &setenv(LANG=nl_BE) # Belgium / Dutch
option --BG    &setenv(LANG=bg_BG) # Bulgaria / Bulgarian
option --bg    &setenv(LANG=bg_BG) # Bulgaria / Bulgarian
option --bg_BG &setenv(LANG=bg_BG) # Bulgaria / Bulgarian
option --bgbg  &setenv(LANG=bg_BG) # Bulgaria / Bulgarian
option --BR    &setenv(LANG=pt_BR) # Brazil / Portuguese
option --br    &setenv(LANG=pt_BR) # Brazil / Portuguese
option --pt_BR &setenv(LANG=pt_BR) # Brazil / Portuguese
option --ptbr  &setenv(LANG=pt_BR) # Brazil / Portuguese
option --BY    &setenv(LANG=be_BY) # Belarus / Belarusian
option --be    &setenv(LANG=be_BY) # Belarus / Belarusian
option --be_BY &setenv(LANG=be_BY) # Belarus / Belarusian
option --beby  &setenv(LANG=be_BY) # Belarus / Belarusian
option --by    &setenv(LANG=be_BY) # Belarus / Belarusian
option --en_CA &setenv(LANG=en_CA) # Canada / English
option --enca  &setenv(LANG=en_CA) # Canada / English
option --fr_CA &setenv(LANG=fr_CA) # Canada / French
option --frca  &setenv(LANG=fr_CA) # Canada / French
option --de_CH &setenv(LANG=de_CH) # Switzerland / German
option --dech  &setenv(LANG=de_CH) # Switzerland / German
option --fr_CH &setenv(LANG=fr_CH) # Switzerland / French
option --frch  &setenv(LANG=fr_CH) # Switzerland / French
option --it_CH &setenv(LANG=it_CH) # Switzerland / Italian
option --itch  &setenv(LANG=it_CH) # Switzerland / Italian
option --CN    &setenv(LANG=zh_CN) # China / Chinese
option --cn    &setenv(LANG=zh_CN) # China / Chinese
option --zh    &setenv(LANG=zh_CN) # China / Chinese
option --zh_CN &setenv(LANG=zh_CN) # China / Chinese
option --zhcn  &setenv(LANG=zh_CN) # China / Chinese
option --CZ    &setenv(LANG=cs_CZ) # Czech Republic / Czech
option --cs    &setenv(LANG=cs_CZ) # Czech Republic / Czech
option --cs_CZ &setenv(LANG=cs_CZ) # Czech Republic / Czech
option --cscz  &setenv(LANG=cs_CZ) # Czech Republic / Czech
option --cz    &setenv(LANG=cs_CZ) # Czech Republic / Czech
option --DE    &setenv(LANG=de_DE) # Germany / German
option --de    &setenv(LANG=de_DE) # Germany / German
option --de_DE &setenv(LANG=de_DE) # Germany / German
option --dede  &setenv(LANG=de_DE) # Germany / German
option --DK    &setenv(LANG=da_DK) # Denmark / Danish
option --da    &setenv(LANG=da_DK) # Denmark / Danish
option --da_DK &setenv(LANG=da_DK) # Denmark / Danish
option --dadk  &setenv(LANG=da_DK) # Denmark / Danish
option --dk    &setenv(LANG=da_DK) # Denmark / Danish
option --EE    &setenv(LANG=et_EE) # Estonia / Estonian
option --ee    &setenv(LANG=et_EE) # Estonia / Estonian
option --et    &setenv(LANG=et_EE) # Estonia / Estonian
option --et_EE &setenv(LANG=et_EE) # Estonia / Estonian
option --etee  &setenv(LANG=et_EE) # Estonia / Estonian
option --ES    &setenv(LANG=es_ES) # Spain / Spanish
option --ca    &setenv(LANG=ca_ES) # Spain / Catalan; Valencian
option --ca_ES &setenv(LANG=ca_ES) # Spain / Catalan; Valencian
option --caes  &setenv(LANG=ca_ES) # Spain / Catalan; Valencian
option --es    &setenv(LANG=es_ES) # Spain / Spanish
option --es_ES &setenv(LANG=es_ES) # Spain / Spanish
option --eses  &setenv(LANG=es_ES) # Spain / Spanish
option --eu    &setenv(LANG=eu_ES) # Spain / Basque
option --eu_ES &setenv(LANG=eu_ES) # Spain / Basque
option --eues  &setenv(LANG=eu_ES) # Spain / Basque
option --ET    &setenv(LANG=am_ET) # Ethiopia / Amharic
option --am    &setenv(LANG=am_ET) # Ethiopia / Amharic
option --am_ET &setenv(LANG=am_ET) # Ethiopia / Amharic
option --amet  &setenv(LANG=am_ET) # Ethiopia / Amharic
option --FI    &setenv(LANG=fi_FI) # Finland / Finnish
option --fi    &setenv(LANG=fi_FI) # Finland / Finnish
option --fi_FI &setenv(LANG=fi_FI) # Finland / Finnish
option --fifi  &setenv(LANG=fi_FI) # Finland / Finnish
option --FR    &setenv(LANG=fr_FR) # France / French
option --fr    &setenv(LANG=fr_FR) # France / French
option --fr_FR &setenv(LANG=fr_FR) # France / French
option --frfr  &setenv(LANG=fr_FR) # France / French
option --GB    &setenv(LANG=en_GB) # United Kingdom / English
option --en_GB &setenv(LANG=en_GB) # United Kingdom / English
option --engb  &setenv(LANG=en_GB) # United Kingdom / English
option --gb    &setenv(LANG=en_GB) # United Kingdom / English
option --GR    &setenv(LANG=el_GR) # Greece / Greek, Modern (1453-)
option --el    &setenv(LANG=el_GR) # Greece / Greek, Modern (1453-)
option --el_GR &setenv(LANG=el_GR) # Greece / Greek, Modern (1453-)
option --elgr  &setenv(LANG=el_GR) # Greece / Greek, Modern (1453-)
option --gr    &setenv(LANG=el_GR) # Greece / Greek, Modern (1453-)
option --HK    &setenv(LANG=zh_HK) # Hong Kong / Chinese
option --hk    &setenv(LANG=zh_HK) # Hong Kong / Chinese
option --zh_HK &setenv(LANG=zh_HK) # Hong Kong / Chinese
option --zhhk  &setenv(LANG=zh_HK) # Hong Kong / Chinese
option --HR    &setenv(LANG=hr_HR) # Croatia / Croatian
option --hr    &setenv(LANG=hr_HR) # Croatia / Croatian
option --hr_HR &setenv(LANG=hr_HR) # Croatia / Croatian
option --hrhr  &setenv(LANG=hr_HR) # Croatia / Croatian
option --HU    &setenv(LANG=hu_HU) # Hungary / Hungarian
option --hu    &setenv(LANG=hu_HU) # Hungary / Hungarian
option --hu_HU &setenv(LANG=hu_HU) # Hungary / Hungarian
option --huhu  &setenv(LANG=hu_HU) # Hungary / Hungarian
option --IE    &setenv(LANG=en_IE) # Ireland / English
option --en_IE &setenv(LANG=en_IE) # Ireland / English
option --enie  &setenv(LANG=en_IE) # Ireland / English
option --ie    &setenv(LANG=en_IE) # Ireland / English
option --IL    &setenv(LANG=he_IL) # Israel / Hebrew
option --he    &setenv(LANG=he_IL) # Israel / Hebrew
option --he_IL &setenv(LANG=he_IL) # Israel / Hebrew
option --heil  &setenv(LANG=he_IL) # Israel / Hebrew
option --il    &setenv(LANG=he_IL) # Israel / Hebrew
option --IS    &setenv(LANG=is_IS) # Iceland / Icelandic
option --is    &setenv(LANG=is_IS) # Iceland / Icelandic
option --is_IS &setenv(LANG=is_IS) # Iceland / Icelandic
option --isis  &setenv(LANG=is_IS) # Iceland / Icelandic
option --IT    &setenv(LANG=it_IT) # Italy / Italian
option --it    &setenv(LANG=it_IT) # Italy / Italian
option --it_IT &setenv(LANG=it_IT) # Italy / Italian
option --itit  &setenv(LANG=it_IT) # Italy / Italian
option --JP    &setenv(LANG=ja_JP) # Japan / Japanese
option --ja    &setenv(LANG=ja_JP) # Japan / Japanese
option --ja_JP &setenv(LANG=ja_JP) # Japan / Japanese
option --jajp  &setenv(LANG=ja_JP) # Japan / Japanese
option --jp    &setenv(LANG=ja_JP) # Japan / Japanese
option --KR    &setenv(LANG=ko_KR) # Korea, Republic of / Korean
option --ko    &setenv(LANG=ko_KR) # Korea, Republic of / Korean
option --ko_KR &setenv(LANG=ko_KR) # Korea, Republic of / Korean
option --kokr  &setenv(LANG=ko_KR) # Korea, Republic of / Korean
option --kr    &setenv(LANG=ko_KR) # Korea, Republic of / Korean
option --KZ    &setenv(LANG=kk_KZ) # Kazakhstan / Kazakh
option --kk    &setenv(LANG=kk_KZ) # Kazakhstan / Kazakh
option --kk_KZ &setenv(LANG=kk_KZ) # Kazakhstan / Kazakh
option --kkkz  &setenv(LANG=kk_KZ) # Kazakhstan / Kazakh
option --kz    &setenv(LANG=kk_KZ) # Kazakhstan / Kazakh
option --LT    &setenv(LANG=lt_LT) # Lithuania / Lithuanian
option --lt    &setenv(LANG=lt_LT) # Lithuania / Lithuanian
option --lt_LT &setenv(LANG=lt_LT) # Lithuania / Lithuanian
option --ltlt  &setenv(LANG=lt_LT) # Lithuania / Lithuanian
option --NL    &setenv(LANG=nl_NL) # Netherlands / Dutch
option --nl    &setenv(LANG=nl_NL) # Netherlands / Dutch
option --nl_NL &setenv(LANG=nl_NL) # Netherlands / Dutch
option --nlnl  &setenv(LANG=nl_NL) # Netherlands / Dutch
option --NO    &setenv(LANG=no_NO) # Norway / Norwegian
option --no    &setenv(LANG=no_NO) # Norway / Norwegian
option --no_NO &setenv(LANG=no_NO) # Norway / Norwegian
option --nono  &setenv(LANG=no_NO) # Norway / Norwegian
option --NZ    &setenv(LANG=en_NZ) # New Zealand / English
option --en_NZ &setenv(LANG=en_NZ) # New Zealand / English
option --ennz  &setenv(LANG=en_NZ) # New Zealand / English
option --nz    &setenv(LANG=en_NZ) # New Zealand / English
option --PL    &setenv(LANG=pl_PL) # Poland / Polish
option --pl    &setenv(LANG=pl_PL) # Poland / Polish
option --pl_PL &setenv(LANG=pl_PL) # Poland / Polish
option --plpl  &setenv(LANG=pl_PL) # Poland / Polish
option --PT    &setenv(LANG=pt_PT) # Portugal / Portuguese
option --pt    &setenv(LANG=pt_PT) # Portugal / Portuguese
option --pt_PT &setenv(LANG=pt_PT) # Portugal / Portuguese
option --ptpt  &setenv(LANG=pt_PT) # Portugal / Portuguese
option --RO    &setenv(LANG=ro_RO) # Romania / Romanian
option --ro    &setenv(LANG=ro_RO) # Romania / Romanian
option --ro_RO &setenv(LANG=ro_RO) # Romania / Romanian
option --roro  &setenv(LANG=ro_RO) # Romania / Romanian
option --RU    &setenv(LANG=ru_RU) # Russian Federation / Russian
option --ru    &setenv(LANG=ru_RU) # Russian Federation / Russian
option --ru_RU &setenv(LANG=ru_RU) # Russian Federation / Russian
option --ruru  &setenv(LANG=ru_RU) # Russian Federation / Russian
option --SE    &setenv(LANG=sv_SE) # Sweden / Swedish
option --se    &setenv(LANG=sv_SE) # Sweden / Swedish
option --sv    &setenv(LANG=sv_SE) # Sweden / Swedish
option --sv_SE &setenv(LANG=sv_SE) # Sweden / Swedish
option --svse  &setenv(LANG=sv_SE) # Sweden / Swedish
option --SI    &setenv(LANG=sl_SI) # Slovenia / Slovenian
option --si    &setenv(LANG=sl_SI) # Slovenia / Slovenian
option --sl    &setenv(LANG=sl_SI) # Slovenia / Slovenian
option --sl_SI &setenv(LANG=sl_SI) # Slovenia / Slovenian
option --slsi  &setenv(LANG=sl_SI) # Slovenia / Slovenian
option --SK    &setenv(LANG=sk_SK) # Slovakia / Slovak
option --sk    &setenv(LANG=sk_SK) # Slovakia / Slovak
option --sk_SK &setenv(LANG=sk_SK) # Slovakia / Slovak
option --sksk  &setenv(LANG=sk_SK) # Slovakia / Slovak
option --TR    &setenv(LANG=tr_TR) # Turkey / Turkish
option --tr    &setenv(LANG=tr_TR) # Turkey / Turkish
option --tr_TR &setenv(LANG=tr_TR) # Turkey / Turkish
option --trtr  &setenv(LANG=tr_TR) # Turkey / Turkish
option --TW    &setenv(LANG=zh_TW) # Taiwan, Province of China / Chinese
option --tw    &setenv(LANG=zh_TW) # Taiwan, Province of China / Chinese
option --zh_TW &setenv(LANG=zh_TW) # Taiwan, Province of China / Chinese
option --zhtw  &setenv(LANG=zh_TW) # Taiwan, Province of China / Chinese
option --UA    &setenv(LANG=uk_UA) # Ukraine / Ukrainian
option --ua    &setenv(LANG=uk_UA) # Ukraine / Ukrainian
option --uk    &setenv(LANG=uk_UA) # Ukraine / Ukrainian
option --uk_UA &setenv(LANG=uk_UA) # Ukraine / Ukrainian
option --ukua  &setenv(LANG=uk_UA) # Ukraine / Ukrainian
option --US    &setenv(LANG=en_US) # United States / English
option --en_US &setenv(LANG=en_US) # United States / English
option --enus  &setenv(LANG=en_US) # United States / English
option --us    &setenv(LANG=en_US) # United States / English
option --YU    &setenv(LANG=sr_YU) # Yugoslavia / Serbian
option --sr    &setenv(LANG=sr_YU) # Yugoslavia / Serbian
option --sr_YU &setenv(LANG=sr_YU) # Yugoslavia / Serbian
option --sryu  &setenv(LANG=sr_YU) # Yugoslavia / Serbian
option --yu    &setenv(LANG=sr_YU) # Yugoslavia / Serbian
option --ZA    &setenv(LANG=af_ZA) # South Africa / Afrikaans
option --af    &setenv(LANG=af_ZA) # South Africa / Afrikaans
option --af_ZA &setenv(LANG=af_ZA) # South Africa / Afrikaans
option --afza  &setenv(LANG=af_ZA) # South Africa / Afrikaans
option --za    &setenv(LANG=af_ZA) # South Africa / Afrikaans
```

このモジュールは week コマンド専用ではなく、[Getopt::EX] を利用するすべてのコマンドで使うことができる。さらに汎用の [optex] コマンドを使えば、任意のコマンドを実行することが可能だ。

```
$ optex -Mi18n::setopt=verbose date --it
LANG=it_IT (Italian / Italy)
Gio  4 Giu 2020 16:47:33 JST
```

# 設定

`default.pm` で以下のように設定してあるので、`--i18n` と `--i18n-v` というオプションが利用可能になっている。両者の違いは、ロケール情報を最初に表示するかどうかだ。

```App/week/default.pm
option --i18n   -Mi18n::setopt(dash=0,long=0,listopt=-l)
option --i18n-v -Mi18n::setopt(dash=0,long=0,verbose,listopt=-l)
autoload --i18n -l
```

`~/.weekrc` を以下のようにしておけば、デフォルトのテーマを `tokyo2020` にし、明るい端末では `--tokyo2020` が、暗い端末では `--tokyo2020-rev` が自動的に設定される。

```~/.weekrc
option default --i18n-v --theme tokyo2020
```

# インストール

cpan で公開しているので、cpanm (cpanminus) を使ってインストールします。

```
$ curl -sL http://cpanmin.us | perl - App::week
```

# 各国のカレンダー

デバッグのためにいろいろな国のカレンダーを見ていたのだが、これが結構面白い。もちろん言葉はさっぱりわからないが、なにしろカレンダーなので意味はわかっている。一番のお勧めは何かと聞かれたらエストニアだろうか。

## なんとなく気に入ったカレンダー

### Czech Republic / Czech

チェコ。毛が生えてるw

<img width="592" alt="cs_CZ.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/cs_CZ.png">

### Estonia / Estonian

エストニア。曜日が一文字で不安定なところが愛せる。

<img width="592" alt="et_EE.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/et_EE.png">

### Spain / Basque

バスク語。基本的に曜日が小文字で始まるとなんとなく可愛い。a, b, g, o など、まるっぽい字が多いせいもあるだろうか。

<img width="592" alt="eu_ES.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/eu_ES.png">

### Finland / Finnish

フィンランド。テンテンがいい。

<img width="592" alt="fi_FI.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/fi_FI.png">

### Hungary / Hungarian

<img width="592" alt="hu_HU.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/hu_HU.png">

### Iceland / Icelandic

<img width="592" alt="is_IS.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/is_IS.png">

### Lithuania / Lithuanian

リトアニア。草生えてるw

<img width="592" alt="lt_LT.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/lt_LT.png">

### Netherlands / Dutch

うさこちゃんの国。

<img width="592" alt="nl_NL.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/nl_NL.png">

### Norway / Norwegian

オランダ語と似ているが、土曜日だけ似てない。

<img width="592" alt="no_NO.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/no_NO.png">

### Poland / Polish

<img width="592" alt="pl_PL.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/pl_PL.png">

### Sweden / Swedish

<img width="592" alt="sv_SE.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/sv_SE.png">

### Slovenia / Slovenian

<img width="592" alt="sl_SI.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/sl_SI.png">

### Slovakia / Slovak
<img width="592" alt="sk_SK.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/sk_SK.png">

### Yugoslavia / Serbian
<img width="592" alt="sr_YU.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/sr_YU.png">

## 文字が判別できないカレンダー

### Armenia / Armenian

アルメニア。

<img width="592" alt="hy_AM.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/hy_AM.png">

### Ethiopia / Amharic

エチオピア。
枠からはみ出てるし... しかも日曜日は右に、金曜日は左に...

<img width="592" alt="am_ET.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/am_ET.png">

### Israel / Hebrew

イスラエル。正しく表示されているのか判断できず。
ちなみに、これは iTerm だとちゃんと表示できますが、Apple_Terminal では表示が壊れます。

<img width="592" alt="he_IL.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/he_IL.png">


## かっこいいカレンダー

ギリシャ、カコイイ。ΔとかΣとかが日常で使われてるのかと思ったり。ギリシャでも円周率はπなんだろうか。なんだろうなあ。

### Greece / Greek, Modern (1453-)
<img width="592" alt="el_GR.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/el_GR.png">

### Kazakhstan / Kazakh

金曜日とかキツキツw

<img width="592" alt="kk_KZ.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/kk_KZ.png">


## キリル文字っぽいカレンダー

### Bulgaria / Bulgarian
<img width="592" alt="bg_BG.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/bg_BG.png">

### Belarus / Belarusian
<img width="592" alt="be_BY.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/be_BY.png">

### Russian Federation / Russian
<img width="592" alt="ru_RU.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/ru_RU.png">

### Ukraine / Ukrainian
<img width="592" alt="uk_UA.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/uk_UA.png">

## アジア

漢字の国でも、それぞれ微妙に違う。香港と台湾は同じか。

### China / Chinese
<img width="592" alt="zh_CN.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/zh_CN.png">

### Hong Kong / Chinese
<img width="592" alt="zh_HK.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/zh_HK.png">

### Japan / Japanese
<img width="592" alt="ja_JP.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/ja_JP.png">

### Korea, Republic of / Korean
<img width="592" alt="ko_KR.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/ko_KR.png">

### Taiwan, Province of China / Chinese
<img width="592" alt="zh_TW.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/zh_TW.png">

## 英語圏

これは、全部同じっぽい。ただし、OS によっては `Tu` と `Th` 以外を1文字で表示したり、右寄せと左寄せが違ったりとバリエーションがあって、テストコードを書くのには結構苦労したのだ。テストは `LANG=C` でしかしてないので、他の言語についてはわからない。

### Australia / English
<img width="592" alt="en_AU.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/en_AU.png">

### Canada / English
<img width="592" alt="en_CA.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/en_CA.png">

### United Kingdom / English
<img width="592" alt="en_GB.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/en_GB.png">

### Ireland / English
<img width="592" alt="en_IE.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/en_IE.png">

### New Zealand / English
<img width="592" alt="en_NZ.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/en_NZ.png">

### United States / English
<img width="592" alt="en_US.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/en_US.png">

### South Africa / Afrikaans
<img width="592" alt="af_ZA.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/af_ZA.png">

## その他

### Austria / German
<img width="592" alt="de_AT.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/de_AT.png">

### Belgium / French
<img width="592" alt="fr_BE.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/fr_BE.png">

### Belgium / Dutch
<img width="592" alt="nl_BE.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/nl_BE.png">

### Brazil / Portuguese

月曜と金曜、水曜と木曜が同じだ。いいのか？

<img width="592" alt="pt_BR.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/pt_BR.png">

### Canada / French
<img width="592" alt="fr_CA.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/fr_CA.png">

### Switzerland / German
<img width="592" alt="de_CH.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/de_CH.png">

### Switzerland / French
<img width="592" alt="fr_CH.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/fr_CH.png">

### Switzerland / Italian
<img width="592" alt="it_CH.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/it_CH.png">

### Germany / German
<img width="592" alt="de_DE.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/de_DE.png">

### Denmark / Danish
<img width="592" alt="da_DK.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/da_DK.png">

### Spain / Catalan; Valencian

曜日が全部 `d` ではじまる。

<img width="592" alt="ca_ES.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/ca_ES.png">

### Spain / Spanish
<img width="592" alt="es_ES.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/es_ES.png">

### France / French
<img width="592" alt="fr_FR.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/fr_FR.png">

### Croatia / Croatian
<img width="592" alt="hr_HR.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/hr_HR.png">

### Italy / Italian
<img width="592" alt="it_IT.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/it_IT.png">

### Portugal / Portuguese
<img width="592" alt="pt_PT.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/pt_PT.png">
### Romania / Romanian
<img width="592" alt="ro_RO.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/ro_RO.png">

### Turkey / Turkish
<img width="592" alt="tr_TR.png" src="https://raw.githubusercontent.com/kaz-utashiro/App-week/master/docs/imags/tr_TR.png">