「rex0220 kSQL アクションプラグイン」の実践編です。
kintone は利用者ごとに表示言語を選べます。このプラグイン自身の文言も、日本語・英語・中国語(簡体字)に合わせて切り替わります。
ところが、アプリ管理者が設定で書いた文字は切り替わりません。英語で使っている人の画面でも、ボタン名が「請求データを作成・更新」と日本語のまま出ていました。区分の見出しも、実行時に聞く札も、画面に出すメッセージも同じです。
この記事は、その文字も利用者の言語で出す方法です。
シリーズ: 概要 / ① 詳細画面 / ② 一覧 / ③ 集計 / ④ 運用 / ⑤ 事例 / ⑥ イベント / ⑦ オーサリング / ⑧ 請求データ / ⑨ 締めの画面 / ⑩ どこに出すか / ⑪ 多言語(この記事) / ⑫ オーサリング改善
先に結論
| 設定した文字 | 言語ごとに出し分けられるか |
|---|---|
| アクションの名前 | ○ |
| アクションの説明(パネルに出る 2 行) | ○ |
| パネルの帯の名前 | ○ |
| 区分の見出し・メニュー名 | ○ |
| 実行時に聞くダイアログの札 | ○ |
| 実行時に聞く選択肢の見え方 | ○(値は変わりません) |
| 画面に出すメッセージ(押せないとき・結果・SQL で止めたとき) | ○(共通の文にまとめて) |
| 設定の備考(NOTE) | ×(設定する人しか見ません) |
| ログに残る名前 | ×(わざと翻訳しません) |
入れ方は 2 つだけです。
- 多言語の列 … 名前や札のように、その場所にしかない文字。設定の表に 日 / 英 / 中 の列を足して書きます
- 共通の文(メッセージ) … 画面に出す文。別の表にまとめて置き、計算式や SQL から名前で呼びます
入れた言語だけ切り替わります。 英語を入れていないアクションは、英語の利用者にも日本語のまま出ます。全部そろえなくても、よく押すものから少しずつ入れられます。
そして 共通の文は 1 言語でも役に立ちます。同じ文を複数のアクションで使い回せて、直すのは 1 か所。どこで使っているかも設定画面で分かり、使っている文は誤って消せません。多言語を使わない会社でも、ここだけ取り入れる価値があります。
もう 1 つ、kintone 自身の設定にも注意すべきものがあります。ドロップダウンやステータスに kintone の「言語ごとの表示名」を付けていると、kintone の API が受け付ける値・返す値まで言語で変わります。プラグインはそこを読み替えるので、SQL には項目の設定画面に見えている名称(既定の名称)を書けば大丈夫です。詳しくは後ろの「kintone 側の『言語ごとの表示名』」で説明します。
これまで何が 1 言語だったか
プラグインの画面のうち、文字の出どころは 2 つあります。
| 出どころ | 例 | 以前 |
|---|---|---|
| プラグインが持っている文言 | [保存する][キャンセル]「n 件を書き込みます」 | 3 言語で切り替わっていた |
| アプリ管理者が設定で書いた文字 | ボタン名「請求データを作成・更新」、区分「受注」 | 書いたとおりに出るだけ |
後者は、設定した人が書いたデータです。プラグインには翻訳のしようがありません。そこで、書く欄を言語のぶんだけ用意することにしました。
見分ける言語は 3 つです
kintone の表示言語は、日本語・英語・中国語(簡体字)・中国語(繁体字)・スペイン語・ポルトガル語・タイ語・マレー語から選べます。このうち、このプラグインが見分けるのは 日本語・英語・中国語(簡体字)の 3 つです。
ほかの言語を選んでいる人には、プラグインの画面は英語になります。設定した文字も「英(en)」の欄が使われ、英が空なら既定が出ます。
繁体字の利用者に簡体字が出ることはありません。 kintone が返す言語のコードは簡体字が zh、繁体字が zh-TW で別物なので、繁体字は「ほかの言語」と同じ扱いになります。
仕組み 1: 多言語の列
設定画面のツールバーに「列」の選択があります。これを「多言語」にすると、表に 日(ja) / 英(en) / 中(zh) の列が出ます。
左の「名前」が既定(言語の指定がないときに出る文字)、右の 3 列がそれぞれの言語です。空の欄は既定に落ちます。
この選択は保存されません。設定を開いたときは既定の列だけが出ます。ふだんは日本語だけ見ていて、多言語を入れるときに切り替える、という使い方を想定しています。
同じ切り替えが[パネル・区分]と[メッセージ]のダイアログにもあり(「多言語の列を出す」のチェック)、3 か所は連動します。片方で出すともう片方でも出ます。
パネル名は「既定 / 日 / 英 / 中」の 4 欄、区分は表の 3 列です。
仕組み 2: 共通の文(メッセージ)
名前や札は「その場所にしかない文字」なので、列で足りました。画面に出す文は事情が違います。
- 同じ文を複数のアクションで使うことがあります(「対象がありません」など)
- 文の中に件数を埋めたいことがあります(「5 件を書き込みました」)
- SQL の中(
ASSERTで止めるときの文)にも出したいことがあります
そこで、文だけを共通設定の表にまとめます。ツールバーの[メッセージ]で開きます。
| 列 | 中身 |
|---|---|
| コード |
m_ で始まる名前。小文字と数字と _ だけ |
| 書き方 | 計算式と SQL での呼び方(下の表のとおり。自動で出ます) |
| 文(既定) | 言語の指定がないときに出る文。空にはできません |
| 日(ja) / 英(en) / 中(zh) | 各言語の文。空なら「文(既定)」が出ます |
| 使われ方 | どのアクションのどこで使っているか。使っていなければ「使われていません」 |
呼び方は書く場所で変わります
覚えることは 1 行です。名前は m_ で始める。計算式では $、SQL では @ を付ける。
| 書く場所 | 形 |
|---|---|
| 設定(メッセージの表) | m_done |
| 計算式 | $m_done |
| SQL(kSQL) | @m_done |
記号が 2 つに分かれているのは、計算式と kSQL でもともとの書き方が違うからです。計算式では $id や $val と同じ仲間、kSQL では @cust と同じ変数の仲間になります。
どちらの記号も kintone の項目コードには使えない文字なので、アプリの項目と名前がぶつかることはありません。
件数を埋める
結果メッセージは計算式なので、文字をつなげられます。
REPLACE($m_done, "{n}", $result_total)
{n} は目印として文に書いておくだけの文字です。$result_total は書き込んだ合計件数です(⑧ 請求データ編)。
日本語で「{n} 件を書き込みました」、英語で Wrote {n} records、中国語で「已写入 {n} 条」と書いておけば、同じ 1 本の計算式のまま 3 言語で出ます。
| 利用者の言語 | 出る文 |
|---|---|
| 日本語 | 5 件を書き込みました |
| 英語 | Wrote 5 records |
| 中国語 | 已写入 5 条 |
1 言語でも役に立ちます
多言語を使わない会社でも、共通の文には意味があります。
- 同じ文を 5 つのアクションで使っているとき、直すのは 1 か所で済みます
- 「使われ方」の列で、その文がどこで使われているかが分かります
- 使っている文は消せません・コードも変えられません。設定画面が止めて、どのアクションのどこで使っているかを出します
前と後
実際に直してみます。「請求データを作成・更新」は、顧客コードと請求対象月が入っていないと押せません。そのときに出す文を、以前は計算式に直接書いていました。
前(実行条件 NG のメッセージ)
"顧客コードと請求対象月を入れてから実行してください"
これだと、英語の利用者にも中国語の利用者にも、この日本語がそのまま出ます。
後
メッセージの表に 1 行足して、
| コード | 文(既定) | 英(en) | 中(zh) |
|---|---|---|---|
m_need_input |
顧客コードと請求対象月を入れてから実行してください | Enter the customer code and billing month first | 请先填写客户代码和账单月份 |
計算式をこう書き換えます。
$m_need_input
これだけです。式は短くなり、文は 3 言語になりました。
どこに効くか・効かないか
| 設定 | 出る所 |
|---|---|
| アクションの名前 | ボタン・メニュー項目・パネルのカード・各ダイアログの題・処理中の表示 |
| アクションの説明 | パネルのカードの説明 |
| パネルの名前 | 一覧パネルの帯 |
| 区分の名称 | 区分の見出し・モバイルのメニュー名 |
| 入力の札 | 実行時に聞くダイアログ |
| 入力の選択肢 | 実行時に聞く選択肢(見え方だけ) |
| メッセージ | 押せないときの文・結果の文・SQL で止めたときの文 |
効かないものが 2 つあります。どちらもわざとです。
設定の備考(NOTE)と、設定画面の中の説明
設定する人しか見ません。アプリ管理者は 1 人か 2 人なので、言語を分ける意味がありません。
ログに残る名前
ログアプリに書く名前は翻訳しません(④ 運用編)。
翻訳すると、同じアクションのログが、押した人によって違う名前で残ります。「請求データを作成・更新」で絞り込んでも、英語の人が押した分は出てきません。後で数えるためのものなので、名前は 1 つに固定しています。
画面に出す文字だけが言語ごとに切り替わり、記録は常に既定の名前です。
選択肢は「見え方」だけ
実行時に聞く選択肢は、SQL に入る値は変わりません。足すのは見え方(ラベル)だけです。
| 値(SQL に入る) | 日本語の見え方 | 英語の見え方 | |
|---|---|---|---|
| 1 つ目 | draft |
未確定 | Draft |
| 2 つ目 | fixed |
確定済 | Fixed |
値まで言語で変わると、英語の人が押したときだけ SQL の結果が変わってしまいます。そうならないようにしてあります。
ここで言う「選択肢」は、プラグインが実行時に聞くダイアログの選択肢です。kintone の項目(ドロップダウンなど)の選択肢には別の話があるので、次で説明します。
kintone 側の「言語ごとの表示名」と SQL
ここまではプラグインの設定の話でした。kintone 自身にも似た設定があります。
ドロップダウン・ラジオボタン・チェックボックス・複数選択の選択肢と、プロセス管理のステータスは、kintone の項目の設定で「言語ごとの表示名」を付けられます。日本語の人には「未処理」、英語の人には Not started と見える、というものです。
この設定をした項目を SQL で扱うときに、迷うところがあります。画面に出ている文字を書くのか、設定画面に並んでいる文字を書くのかです。
結論を先に書きます。
SQL には、いつでも「項目の設定画面に並んでいる値」(既定の名称)を書きます。
SELECT で取り出した値も既定の名称で返ってきます。言語のことは忘れてかまいません。
以下は、ラジオボタン「区分」に sample1 / sample2 という選択肢があり、日本語の表示名として 例1 / 例2 を付けたアプリで見ていきます。
| どこで見た値か | 何が入っているか |
|---|---|
| 項目の設定画面の選択肢 |
sample1 ← これを SQL に書きます
|
| レコード画面(日本語の人) | 例1 |
| レコード画面(英語の人) | 英語の表示名 |
SELECT で取得すると値は何になるか
既定の名称です。 画面に出ている表示名ではありません。
SELECT 顧客コード, 区分 FROM LAPP_受注;
これで 区分 に入るのは sample1 で、日本語の人が押しても英語の人が押しても同じです。画面には 例1 と出ていても、SQL の中では sample1 になります。
だから取り出した値をそのまま比べられます。
-- 取り出した値と比べる。書くのは既定の名称
SELECT 顧客コード FROM LAPP_受注 WHERE 区分 = 'sample1';
WHERE に指定する値
既定の名称です。 表示名は書きません。
-- 絞り込む
SELECT COUNT(*) AS 件数 FROM LAPP_受注 WHERE 区分 = 'sample1';
-- 複数の選択肢は IN で並べる
SELECT COUNT(*) AS 件数 FROM LAPP_受注 WHERE 区分 IN ('sample1', 'sample2');
-- 除くときは <> か NOT IN
SELECT COUNT(*) AS 件数 FROM LAPP_受注 WHERE 区分 <> 'sample2';
-- プロセス管理のステータスも同じ(既定の名称を書く)
SELECT COUNT(*) AS 件数 FROM LAPP_受注 WHERE ステータス = '未処理';
パラメーターで渡すときも、入るのは既定の名称です。実行時に聞く選択肢は「値」に既定の名称を入れ、見え方だけを言語ごとに書きます(前の「選択肢は『見え方』だけ」の表)。
DECLARE @kbn = '';
SELECT COUNT(*) AS 件数 FROM LAPP_受注 WHERE 区分 = @kbn;
やってはいけないのがこれです。
-- × 画面に出ている表示名を書いてしまった。エラーにならず、いつでも 0 件
SELECT COUNT(*) AS 件数 FROM LAPP_受注 WHERE 区分 = '例1';
この間違いはエラーになりません。 SQL としては正しいので、文法の検査も通ります。ただ、いつ押しても 0 件になるだけです。いちばん気づきにくい形なので、選択肢の値は項目の設定画面を見ながら書き写すのをお勧めします。
レコードを複製するとき(取得と SET)
受注を別のアプリに取り込む、同じアプリで控えを作る、といった複製です。取り出してそのまま渡せば複製できます。読み替えは書きません。
-- 取得(SELECT)→ そのまま渡す(INSERT の列)
DECLARE @_record = '';
INSERT INTO LAPP_取込 (顧客コード, 区分, 金額)
SELECT 顧客コード, 区分, 金額 FROM LAPP_受注 WHERE $id = @_record;
既にあるレコードに書くときも同じで、SET に渡す値も既定の名称です。
-- 値を決めて SET する
UPDATE LAPP_受注 SET 区分 = 'sample2' WHERE 顧客コード = 'C930';
-- 実行時に聞いた値を SET する(入力の選択肢の「値」は既定の名称)
DECLARE @kbn = '';
DECLARE @cust = '';
UPDATE LAPP_受注 SET 区分 = @kbn WHERE 顧客コード = @cust;
複製元と複製先で表示名の文字が違っていてもかまいません。例1 と ケース1 のように違う文字を付けていても、選択肢そのもの(既定の名称)が同じならそのまま複製できます。
| 複製元と複製先 | そのまま複製できるか |
|---|---|
| 同じアプリの中で複製する | ○ |
| 別のアプリ。選択肢が同じで、表示名の文字だけ違う | ○ |
| 別のアプリ。選択肢そのものが違う | ×(読み替えを書く) |
最後の行だけ、SQL で読み替えます。複製元が sample1 / sample2、複製先が 区分A / 区分B のときです。
INSERT INTO LAPP_集計 (顧客コード, 区分, 金額)
SELECT 顧客コード,
CASE WHEN 区分 = 'sample1' THEN '区分A'
WHEN 区分 = 'sample2' THEN '区分B' END AS 区分,
金額
FROM LAPP_受注;
CASE WHEN <条件> THEN の形で書きます。 CASE 区分 WHEN 'sample1' THEN … という短い書き方は使えません(保存のときに止まります)。
読み替えが何か所も出てくるときは、先に一時テーブルで値を揃えてしまうほうが見通しがよくなります。読み替えを 1 か所だけに書いて、あとは素直な複製にできます。
CREATE TEMP TABLE #src AS
SELECT 顧客コード,
CASE WHEN 区分 = 'sample1' THEN '区分A'
WHEN 区分 = 'sample2' THEN '区分B' END AS 区分,
金額
FROM LAPP_受注;
UPSERT INTO LAPP_集計 (顧客コード, 区分, 金額)
SELECT 顧客コード, 区分, 金額 FROM #src
ON DUPLICATE (顧客コード);
書き込む文が 2 つ以上あるときや、読み替える項目が 2 つ以上あるときに向きます。UPSERT のキーにする項目は、書き込み先のアプリで「値の重複を禁止する」を立てておいてください(立てていないと実行時に止まります)。
読み替えを忘れても、黙って変な値が入ることはありません。「定義外の選択肢があります」と出て 1 件も書かれずに止まります。
複製そのものの注意として、素の INSERT は押すたびに増えます。2 回押しても 1 件にしたいときは UPSERT でキーを決めてください(検査でも注意が出ます)。
サブテーブルの中の選択肢も同じです。言語ごとの表示名を付けていないアプリでは、何も変わりません(これまでどおりです)。
表示名のほうを使いたいとき
「テキスト項目に区分の名前を書き込みたい」「結果の文に『例1を処理しました』と出したい」というときです。SQL で取れるのは既定の名称(sample1)なので、そのまま連結すると 区分は sample1 という文字になってしまいます。
先に考えていただきたいことがあります。 表示名は押した人の言語で変わります。テキスト項目に書き込むと、同じ処理なのに押した人によって違う文字が残ります(日本語の人なら 例1、英語の人なら Case 1)。あとで絞り込めない・数えられないので、データとして残す文字は既定の名称のほうが安全です。ログに残す名前を翻訳しないのと同じ理由です。
それでも人が読むための文に使いたいときは、共通の文を使います。選択肢 1 つにつきコードを 1 つ作ります。
| コード | 文(既定) | 英(en) | 中(zh) |
|---|---|---|---|
m_kbn1 |
例1 | Case 1 | 例1 |
m_kbn2 |
例2 | Case 2 | 例2 |
あとは既定の名称で選んで、文のほうを連結します。
DECLARE @m_kbn1 = '';
DECLARE @m_kbn2 = '';
DECLARE @cust = '';
UPDATE LAPP_受注
SET 処理メモ = CASE WHEN 区分 = 'sample1' THEN ('区分は ' || @m_kbn1)
WHEN 区分 = 'sample2' THEN ('区分は ' || @m_kbn2)
END
WHERE 顧客コード = @cust;
日本語の人が押すと 区分は 例1、英語の人が押すと 区分は Case 1 が入ります。判定は既定の名称(sample1)で、出す文だけが言語で変わるのが要点です。
この例の 処理メモ は、人が読むための覚え書きの項目だと思ってください。上に書いたとおり、絞り込みや集計に使う項目には入れないでください。そういう項目には既定の名称を入れます。
書き方に 2 つ癖があります。
-
CASEのTHENに変数をそのまま置けません。('区分は ' || @m_kbn1)のように式にして括弧で囲みます(THEN @m_kbn1だけだと保存のときに止まります) -
CONCAT()の引数にCASEは書けません。 逆向きにして、CASEの中でCONCAT()を使います
なお上の例は、前置きの 区分は が SQL に直接書いてあるのでそこだけ日本語のままです。英語の人には 区分は Case 1 と混ざります。気になるときは文ごと共通の文に入れてしまうと、全部が切り替わります。
| コード | 文(既定) | 英(en) | 中(zh) |
|---|---|---|---|
m_kbn1 |
区分は 例1 | Division: Case 1 | 区分是 例1 |
m_kbn2 |
区分は 例2 | Division: Case 2 | 区分是 例2 |
SET 処理メモ = CASE WHEN 区分 = 'sample1' THEN (@m_kbn1 || '')
WHEN 区分 = 'sample2' THEN (@m_kbn2 || '')
END
|| '' を付けているのは、さきほどの「THEN に変数をそのまま置けない」ためです。
画面に出すだけの文(押せないときの文・結果の文・ASSERT の文面)なら、選択肢と関係なく共通の文をそのまま書けます(「仕組み 2」)。
なお設定画面の[実行計画]には、SQL に書いたとおりの値(既定の名称)が出ます。kintone へ送るときに表示名へ読み替えるので、計画に出る文字と実際に送る文字は違います。
表示条件や実行条件(計算式)も同じです
ここまで SQL の話をしてきましたが、計算式で選択肢を見るときも既定の名称です。
ラジオボタン = "sample1"
表示条件・実行条件・パラメーターの式・結果メッセージ、どれも同じです。画面には サンプル1 と出ていても、式の中では sample1 になります。
だから覚えることは 1 つだけです。
設定にはいつでも、項目の設定画面に並んでいる値(既定の名称)を書く。
SQL と計算式で規則が割れていないので、「ここは表示名だったかな」と迷う場面はありません。
書き間違いは設定画面が見つけます
[SQL を検査]を押すと、その項目の選択肢に無い値を書いていたら注意が出ます。アプリの項目定義と突き合わせているので、表示名のほうを書いてしまったときに、ここで引っかかります。AI に設定を作ってもらうとき(⑦ オーサリング編)は、オーサリングツール 0.10.1 以降で同じ検査が効きます。
鳴るのは[SQL を検査]を押したときだけです。 保存しただけでは出ません(アプリの項目定義を取りに行くのは検査のときだけにしてあるためです)。選択肢を SQL に書いたら、保存の前に 1 回押してください。
ただしどの項目か決められないときは何も言いません。別のアプリに同じ項目コードがあって、片方では選択肢・片方では文字列、というような設定です。要らない注意で「また出た」と流されるほうが困るので、黙るようにしてあります。
落ちる先は項目ごとに違います
繁体字の利用者で確かめたところ、同じ人の画面でも項目ごとに違う言語の名称が返りました。選択肢は 英・日・中(簡体字)を埋め、ステータスは 英・日 だけを埋めたアプリでの結果です。
| 項目 | 返った名称 | 落ちた先 |
|---|---|---|
| ラジオボタン | 例1 / 例2 | 中国語(簡体字)(列が埋まっているため) |
| ステータス | 未処理 / 処理中 / 完了 | 既定の名称(中国語の列が空のため) |
これはプラグインの多言語の列とは違う規則です(あちらは必ず既定に落ちます。次の節)。読み替えの対応表は、プラグインが推測せずに kintone に聞いて作っています。
なおステータスを条件に使う設定は、実機で 1 回動かして確かめてください。kintone 側で、名称を指定しても絞り込めない組み合わせが見つかっています(公式の資料にも記載がありません)。
勧める設計
言語ごとの表示名が要る選択肢は「画面に見せるためのもの」と割り切って、SQL で使うキーは言語設定をしない文字列 1 行の項目(コード値)を別に 1 つ持たせるのがいちばん素直です。アプリをまたいだ突き合わせ、CSV の受け渡し、ほかのツールとの連携まで含めて困りません。
空のときの落ち方
その言語の欄が空なら、既定が出ます。 空白だけの欄も空とみなします。
ここで 1 つ注意があります。英語や日本語には落ちません。
| 設定 | 日本語の人 | 英語の人 | 中国語の人 |
|---|---|---|---|
既定「この顧客を集計」/ 英 Aggregate this customer / 中「汇总此客户」 |
この顧客を集計 | Aggregate this customer | 汇总此客户 |
| 既定「顧客ごとにまとめて集計」(英・中は空) | 顧客ごとにまとめて集計 | 顧客ごとにまとめて集計 | 顧客ごとにまとめて集計 |
プラグイン自身の文言は「その言語の文が無ければ英語」という落ち方をしますが、設定した文字は違う規則です。落ちる先は必ず「既定」の 1 か所だけにしてあります。
こうしてあるのは、入れた分だけ確実に切り替わるようにするためです。英語に落ちる作りだと、英語を入れていない中国語の人の画面に英語が混ざって、「どこを直せばいいか」が分からなくなります。
設定の手順
- 設定画面のツールバーで「列」を「多言語」にします
- 名前の 日(ja) / 英(en) / 中(zh) に文字を入れます。空のままにした言語は既定が出ます
- 画面に出す文は[メッセージ]で作ります。コードを決めて(
m_は自動で付きます)、文(既定)と各言語を入れます - 計算式では
$を付けて、SQL では@を付けて呼びます
[パネル・区分]のパネル名と区分、各アクションの[パラメーターと入力]の札も、同じ「多言語の列を出す」で切り替えて入れます。
最後に[保存する]と[運用環境に反映]です。
実際の画面
同じアプリ・同じ設定のまま、ログインユーザーの言語だけを変えたところです。
帯の名前(アクション / Actions / 操作)、区分(受注・請求・保守 / Order・Billing・Maintenance / 订单・账单・维护)、ボタン名が切り替わっています。
英語と中国語を入れていないボタンは、日本語のまま並んでいます。全部そろえなくても使えるのが分かると思います。
実行時に聞くダイアログも同じです。
この画面は混ざっています。ボタン名「請求を全体再計算」は英語を入れていないので日本語のまま、札の Billing month (YYYY-MM) は入れてあるので英語です。入れた欄だけが切り替わるようすがそのまま見えます。
上限と気をつけること
| メッセージの件数 | 50 件まで |
| 1 つの文の長さ | 200 字まで(4 列ともそれぞれ 200 字) |
| 多言語の列の長さ | 既定の列と同じ |
そのほか。
- 英語の名前は長くなりがちです。 パネルのボタンに収まらないと「…」で切れます(押す前に吹き出しで全文は読めます)。幅は[パネル・区分]の「ボタンの幅」で広げられますが、幅は全言語で共通なので、英語の名前のほうを短くするほうが早いことが多いです。日本語で 10 字の名前が、英語だと 25 字を超えることがあります
- 使っている文は消せません。コードも変えられません。 設定画面が止めて、どのアクションのどこで使っているかを出します(式や SQL を機械で書き換えることはしません)
- 区分の名称はキーです。 表示名を日本語で変えても、アクションの割り当てや一覧ごとの出し方は付いてきます。多言語の列に入れるのは表示名だけです
-
パラメーター名と入力名に
m_は使えません。 メッセージと名前がぶつかるためです - 設定ファイルを一部置換・追加で取り込むとき、今の設定にあるコードは上書きしません。ファイルにしか無いコードは足され、中身が違うものは「衝突」として知らせます(取り込んでいないアクションの表示が変わらないように)
- 設定が大きくなりすぎると保存で止まります。日本語や中国語は 1 字でも大きく数えるので、メッセージを 50 件びっしり入れるより、よく出る文から入れてください
1 回しか使わない文で、表に足すほどでもないときは、計算式の中で分けることもできます。
IF(LOGIN_INFO("language") = "en", "Out of stock", "在庫が足りません")
ただし 3 言語ぶん書くと式が読みにくくなるので、ふだんはメッセージの表をお勧めします。
SQL のメッセージ
SQL の中で止めるとき(ASSERT)と、何もせず終わるとき(EXIT SUCCESS IF)の文も、メッセージの表から呼べます。
DECLARE @m_no_stock = '';
ASSERT (SELECT COUNT(*) FROM LAPP_在庫 WHERE 残数 < 0) = 0, @m_no_stock;
DECLARE の 1 行が要ります。これを書いておくと、実行のときに利用者の言語の文が入ります。
- 表に無いコードを書くと、保存で止まります(何も出ないボタンにならないように)
-
DECLAREを書き忘れても、保存で止まります - 業務のパラメーター(
@custなど)はメッセージの代わりに書けません。保存で止まります。画面に出す文は自分のメッセージの表からしか引かないので、書いても何も出ないためです
業務データの値を画面に出さないのは、このプラグイン全体の決まりです(④ 運用編)。メッセージの表に書いた文だけが例外で、設定した人が書いた文なので出してよいという扱いです。
まとめ
- 設定した人が書いた文字も、利用者の言語で出せます(日・英・中)
- 入れ方は 2 つ。多言語の列(名前・札・区分)と、共通の文(画面に出す文)
- 共通の文は
m_で始まる名前。計算式では$、SQL では@を付けて呼びます - 1 言語でも役に立ちます。同じ文を使い回せて、直すのは 1 か所。「使われ方」でどこで使っているかも分かります
- 入れた言語だけ切り替わります。 空なら既定が出ます(英語や日本語には落ちません)
- ログに残る名前は翻訳しません。 同じアクションのログが人によって違う名前で残らないようにするためです
- kintone の項目に「言語ごとの表示名」を付けていても、SQL にも計算式にも既定の名称(項目の設定画面に見えている値)を書きます。プラグインが読み替えます。表示名を書くとエラーにならず 0 件になります。[SQL を検査]を押せば選択肢の値を確かめられますが、保存だけでは鳴らず、どの項目か決められないときは検出できません
- レコードの複製は、読んだ値をそのまま書けば通ります。 読み替えが要るのは、複製元と複製先で既定の名称そのものが違うときだけです
- 表示名のほうを使いたいときは、既定の名称で選んで共通の文を連結します。 ただし押した人の言語で変わる文字を、データとして残さないように
関連記事
- rex0220 kSQL アクションプラグイン
- ① 詳細画面編(ボタンとイベント)
- ② 一覧編(選択したレコードをまとめて処理する)
- ③ 集計編(顧客別集計とテーブルへの書き戻し)
- ④ 運用編(ログアプリ・二重実行の防止・権限)
- ⑤ 事例編(10 万件を集計して Dashboard Pro で見る)
- ⑥ イベント編(保存・ステータス変更・削除で自動実行する)
- ⑦ オーサリング編(設定を AI に作ってもらう)
- ⑧ 請求データ編(全体再計算で整合性を保つ)
- ⑨ 締めの画面編(押し忘れに気づくダッシュボード)
- ⑩ 画面のどこに出すか(ボタン・メニュー・パネルの使い分け)
- ⑪ 日本語・英語・中国語で使う(共通の文と多言語)(この記事)
- ⑫ オーサリング改善編(AI に使わせて見つけた穴)
- 事例集(やりたいことから探す)

![[パネル・区分]のパネル名(既定/日/英/中)と区分の表](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F100572%2F75914974-74d3-45a1-970a-0a457bd0910d.jpeg?ixlib=rb-4.1.1&auto=format&gif-q=60&q=75&s=bae87a7ef9889f0852646f3f84ea87af)
![[メッセージ]のダイアログ(書き方・各言語の文・使われ方)](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F100572%2F37dda56b-cbf2-40a7-ad22-cbd27f460696.jpeg?ixlib=rb-4.1.1&auto=format&gif-q=60&q=75&s=d4b03edf37c5d259054ad236609e3a5a)



