バイリンガルなkintone使いの人たちへ

#はじめに
こちらは [kintone Advent Calendar 2016](http://qiita.com/advent-calendar/2016/kintone) の13日目の記事です。

kintone(とcybozu.com)のローカライズ周りのお話を記載したいと思います。
普段、あまり触る機会が無い箇所かもしれませんが、ハマってしまうところがあったので記載していこうかなと思いました。

#アプリレベルでのローカライズ
##設定画面
まず、アプリのローカライズから紹介します。
もうすでにご存知だとは思いますが、kintoneのアプリには『言語ごとの名称』という機能があります(以後、『ローカライズ機能』と呼びます)。

こちらを開くと、何やらタブやテキストボックスが多く表示される画面に案内されます。
こちらの設定で、アプリのローカライズの設定が行えます。
![bi1.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/d5603ae9-1c20-a6f3-f7dc-5a1419fe527f.png)

グローバルな環境のシナリオではありますが、もしチームの中で日本語しか読めないユーザと英語しか読めないユーザが同じアプリを扱う場合、こちらのローカライズ機能がものすごく役に立ちます。
機能としては、**表示するアプリの内容をユーザの言語設定に合わせて表示**してくれます。

![bi2.png](https://qiita-image-store.s3.amazonaws.com/0/100542/b0c8c448-5c1d-0fef-76c7-907f26f0ac0e.png)


同じ内容を見ているのに、ユーザに合わせて見やすいように表示してくれますね。なんとも便利！

##知って欲しいこと

このローカライズの機能はとても優秀な機能です！
ですが、万能では無い面もあるので、下記の注意点を把握しながら使用していきましょう。

###注意1:アプリの設定画面はローカライズされない

まず、アプリの設定画面とローカライズ機能の関連性を見ていきたいと思います。
下記のステップの通りにアプリの作成をしていきましょう：
　1. 自分のユーザ設定を日本語にする
　2. 適当なアプリを作成する
　3. プロセス管理の設定でプロセス管理を有効にする
　4. ローカライズ設定で出来る限り英語のローカライズをする
　![bi3.png](https://qiita-image-store.s3.amazonaws.com/0/100542/0bed0209-0c4b-d768-efa5-e2644d7f3f91.png)
　5. アプリを公開し、レコードを追加する



さて、良い感じにローカライズ出来ましたでしょうか。
一度アプリを保存し、公開してみましょう。そして自分のユーザ言語を英語に変更し、UIを確認しましょう。
![bi6.png](https://qiita-image-store.s3.amazonaws.com/0/100542/703d6aaa-f29f-3f87-b121-2cbf4b84ef1b.png)
![bi7.png](https://qiita-image-store.s3.amazonaws.com/0/100542/44e1aed7-1d42-e0db-3320-ac62687fd9e5.png)

良い感じに設定されましたでしょうか。
では、ちょっとまた設定画面に戻ってみましょう。
新しいビューを作成するためにビューの追加をポチっと・・・
![bi8.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/c56a6be5-fff4-205e-d99c-23e0b7a4ba74.png)

あ・・・！あれ？
こ、これは何でしょう。全部日本語！？言語設定を英語にしてるのに日本語が表示される？？

そうなんです。これにまず注意しましょう。初見だとちょっと混乱します。

他の設定画面でも同じなのですが、基本的に設定画面ではローカライズが適用されません。今回は、ユーザの言語設定が日本語だった時にアプリを作成しました。なので、アプリの内容も基本的に日本語で表示されます。その後にユーザの言語設定を英語にしたからって、フィールド名の変化などがされるわけではありません。

普段困らないような仕様かもしれませんが、もし英語しか分からない人がアプリの管理者になった場合は大変です。
このような状況に出くわした場合、悪いことは言いません。**今すぐにアプリの作成を中止し、言語設定を英語にして、アプリを作り直してください。**

『いや、でも大丈夫！作り直すなんて面倒くさい。英語しか分からない人がいるんだったら、もうアプリ内の中で日本語で記載したものを全て英語にしなおせば、なんとか修正できるはず！』と思いましたでしょうか。

確かに、一理あります。このまま全部英語にして、ローカライズ設定には日本語の文言を明記していく方法ですね。

では、このような設定を試みるとどうなるかを見ていきましょう。

###注意2:フォームの『レコード番号』『作成者』『更新者』『作成日時』『更新日時』に手を入れる必要がある
現在、ユーザの設定が英語になっているので、フォームの設定画面を開くとフィールドコンポーネントが全部英語で表示されます。
![bi18.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/eaa15f7f-7c87-2a43-3b44-b9697e9d3e8b.png)

たた、『レコード番号』『作成者』『更新者』『作成日時』『更新日時』は表示が英語になっているだけであって、実際にドラッグアンドドロップすると、日本語で表記されます。
![bi19.gif](https://qiita-image-store.s3.amazonaws.com/0/100542/8037e07d-6951-7452-06cd-54710dab6e6c.gif)

これ、結構謎い動作ですよね・・・
まぁでも、一度フォームに出して、名前を変更して保存すればちゃんと英語での表示が保たれます。
ここで英語に変更すれば、他の設定画面でも英語で表示されるようになります。

###注意3:ビュー設定の『(すべて)』は日本語表記のみ
次はビューの設定です。
ビューの設定の中には、デフォルトで作成される『（すべて）』というビューがあります。
![bi9.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/cba13742-e6ba-3f4b-c3da-914306245712.png)

こちら、設定画面上で英語に変更する術がないです。詰みます。ヽ(･ω･)/ｽﾞｺｰ

###注意4:プロセス管理の『ステータス』と『作業者』は日本語表記のみ
次はプロセス管理の設定です。
プロセス管理で扱う文言を全部英語にすれば解決ですよね？そんなふうに考えていた時期が俺にもありました・・・

まぁ、実際に全部英語に変更してから、ビューの作成画面などを開いてみましょう。
![bi11.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/8f626524-ce79-4a55-39f3-c63472490505.png)

(ﾟДﾟ)ﾌｧｯ!?
「ステータス」と「作業者」が日本語のままじゃないかーい！！
そう・・・もうおわかりのように、設定画面で「ステータス」と「作業者」の名前を変更することは出来ません。詰みます。


###注意5:REST APIのレスポンス内の『ステータス』『作業者』は日本語表記のみ
では次に、レコード取得のAPIを投げて見ましょう。
![bi12.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/ae1f0ac7-0667-96e3-9c37-501b88704ad0.png)

むむ。recordオブジェクトの中が日本語ですねぇ・・・でもこれはあたりまえですね。だってフィールドのフィールドコードが表示されていて、そこをまだ英語化してないですから。なので、ここはフィールドコードを全部英語に変更してみてまたAPIを投げてみましょう。
![bi13.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/e1d808c3-e986-58a8-70bd-c67377c845fd.png)

／(^o^)＼ ﾌｧｰ
・・・あ、あれーーー？？「ステータス」と「作業者」！？またお前らか！？

そう、またこいつらなんです。「ステータス」と「作業者」の名前を変更することが出来ないので、こちらのアプリに対してAPIを投げると日本語表示のフィールドコードが帰って来ます。英語が返ってくるようにできません。詰みます。


##注意のまとめ
上記で記載したとおり、仕様を知っていないとなんとも悲しいことが起きる可能性があることを、皆様に知ってほしかったです。
特に、アプリをお客様のために作成する方がいましたら、この仕様はしっかりと知った上で作成をお願いします。そして、同じ間違えをしても、無理やりローカライズせずに、言語設定を変更していちからアプリを作成してください。

※ちなみにですが、『ステータス』、『作業者』、『（すべて）』の文言は、アプリ作成時のユーザ文言によってデフォルトの名前が変わります。もし英語設定で作成した場合、これらのデフォルトの名前は『Status』、『Assignee』、『(All fields)』になります。


#ユーザのローカライズ
ユーザ設定にもローカライズ機能があります。
『別言語での表示名』という設定で、他の言語を設定しているユーザから自分がどう表示されるのが決められます。
![bi14.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/8b726ac0-8060-66fb-0d70-494ae7138cbf.png)

ここで名前を設定すれば、例えば英語しかわからないユーザがユーザの情報を見ても、名前が英語で表示されるようになります。便利ですね！
![bi15.png](https://qiita-image-store.s3.amazonaws.com/0/100542/1041e2ea-cfb5-b8d7-a90f-c69f2780509b.png)

メンションする時の名前にもローカライズが反映されますので、使いやすいですね
![bi16.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/93e1b515-df17-342f-fb84-8f4c43b4b2c3.png)


#システムレベルでのローカライズ
さて、最後にシステムロケールについての話をします。
ここからの話は、かなり『誰得？』のような話ではありますが、もし海外でkintoneを扱う技術者であれば、一度だけ目を通して頂けると、後々問題にぶつかったときにデバッグがしやすくなると思います。

では話を戻します。
cybozu.com にはシステムのロケールを設定する画面が存在します。管理者しかアクセスできない『共通管理』のメニューの中の『ローカライズ』という設定部分です。こちらをクリックすると『ローカライズの設定』という画面が出てきます。

![bi17.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/dcff6427-d9cd-8d53-aa45-aa32f50e127f.png)

お客様のためにkintoneの環境を構築している場合、ここの言語とお客様の言語を合わせてください(英語しか理解されない方でしたら、英語に設定してください)。

ここは何の設定かというと、**監査ログのメール通知の文言**でしたり、**ユーザ追加/編集画面でパスワード変更をした際の通知メールの文言**に関わってきます。
『あれ・・・後者の場合って、ユーザが設定している言語設定に合わせてその言語でメール遅れば良いんじゃね？』と思いたいところですが、ユーザの言語設定の中に『Webブラウザーの設定に従う』というやっかいな設定があります。ユーザの言語設定がそれに設定されていると、cybozu.comはどの言語でメールを送るべきか判断が出来なくなるので、このシステムローケールに設定されている言語に合わせて送ることになってます。イッカス―(☝ ՞ਊ ՞)☝

そしてシステムローケールについてもう一つ重用な役割があります。
それは**REST APIをユーザ認証で叩いた際の挙動**です。

・ユーザ認証でREST APIを叩く
・accept-languageヘッダが指定されていない
・ユーザ認証をしたユーザの言語設定が『Webブラウザーの設定に従う』になっている
・エラーが返るようなAPIを叩いた

以上の4つの条件がそろった場合、これもまたcybozu.comはどの言語でエラーメッセージを返すべきかが判断出来ません。ということで、システムローケールを確認し、その言語に設定されている言語に合わせてエラーメッセージの文言が返ってくるようになっています。
英語しか分からないユーザに対して日本語でエラーが返ってくるのを防ぐためですね٩( 'ω' )و

『英語でコミュニケーションするユーザ向けにkintoneの開発をしていたらエラーが全部日本語で返ってきてしまっている』というような状況に今後出くわした場合は、こちらのシステムローケールを英語になっていることを確認しましょう。

#終わりに
長くはなりましたけれど、バイリンガルなkintoneユーザが出くわしそうなローカライズ周りの機能について説明させて頂きました。
kintoneアプリについては、設定画面だけローカライズがカバーしない、というところを認識しましょう。非管理者でアプリを使用するユーザにとっては、ローカライズ機能は上手く作動します。片方の言語しか理解出来ないユーザがアプリ管理者となると、問題が発生するので、気をつけましょう。

イケてないところをピックアップしちゃった感じですが、実際にkintoneとcybozu.comの様々なローカライズの機能はイケていると思います。かなりパワフルな機能です。
今後、アプリだけではなくスペースでのローカライズ対応なども期待しています。

みなさん、使ってみては如何でしょうか٩( 'ω' )و