こんにちは。武井です。
多言語化の罠
前回のアプリ一覧プラグインの記事でサラッと多言語化対応したと書きましたが、
これに意外な罠がありましたので、共有しておきしたいと思います。
アプリ自体に「言語」設定はない
これは意外に引っかかります。
言語設定は常に「ユーザー」にあるのです。
kintoneの言語はすべて「ユーザーがどの言語に設定しているか」にかかって来ます。
すなわち、
kintone.getLoginUser().language
の返り値が「ja」なら日本語、「zh」なら中国語、「en」なら英語設定のユーザーということになります。
しかし、アプリにも言語で可変の要素があった
kintoneの仕様として、アプリ作成者の言語設定によって、アプリのデフォルトフィールドコードが変化します。
以下、その一覧を公開しますので、ご参考ください。
■言語別フィールドコード一覧
日本語:レコード番号 中国語:记录编号 英語:Record_number 日本語:更新者 中国語:更新人 英語:Updated_by 日本語:作成者 中国語:创建人 英語:Created_by 日本語:更新日時 中国語:更新时间 英語:Updated_datetime 日本語:作成日時 中国語:创建时间 英語:Created_datetime 日本語:ステータス 中国語:状态 英語:Status 日本語:作業者 中国語:执行者 英語:Assignee 日本語:カテゴリー 中国語:类别 英語:Categories
問題の諸相
このデフォルトフィールドコードの設定だけは、ユーザーの言語設定に依拠しません。
この認識のズレによってどのような問題が発生するかというと、
中国語設定のユーザーが作成したアプリのレコードの「作成日時」フィールドデータを取得しようとしても、
「record.作成日時.value」では取得できず、「record.创建时间.value」でなければ取得できないことになります。
アプリの設定で、「言語ごとの名称」で各言語フィールド名の設定ができますが、
ユーザーの言語設定によって切り替わるのはあくまでフィールド名です。
フィールドコードは、ユーザーの言語設定にかかわらず、
アプリの作成者の言語設定のままになってしまいます。
取得する手段としては、
取得したレコードの「record.フィールドコード.type」が「CREATED_TIME」であるフィールドを総当たりで調べていけば、
フィールドコードの如何にかかわらず、それが作成日時フィールドであると目星をつけることができます。
kintone API GET時にレコード番号が「record.$id.value」と、
フィールドコードにかかわらず取得できるように、
すべての「デフォルトフィールド」についても、代替取得手段を用意していただけると、
カスタマイズ利用者には嬉しいかもしれません。
加えて、アプリ作成時の問題もあるので、デフォルトフィールドコードは総じて英語で統一されると、多国籍で使用する環境の場合は、便利になる余地があるかもしれません。