Sfoglia il codice sorgente

feat(delayed): add i18n support for delayed

firest 3 anni fa
parent
commit
d02ac812e6

+ 164 - 0
apps/emqx_modules/i18n/emqx_delayed_api_i18n.conf

@@ -0,0 +1,164 @@
+emqx_delayed_api {
+
+  view_status_api {
+    desc {
+      en: "Get delayed status"
+      zh: "查看慢订阅状态"
+    }
+  }
+
+  update_api {
+    desc {
+      en: "Enable or disable delayed, set max delayed messages"
+      zh: "开启或者关闭功能,或者设置延迟消息数量上限"
+    }
+  }
+
+  update_success {
+    desc {
+      en: "Enable or disable delayed successfully"
+      zh: "开启或者关闭功能操作成功"
+    }
+  }
+
+  illegality_limit {
+    desc {
+      en: "Max limit illegality"
+      zh: "数量上限不合法"
+    }
+  }
+
+  get_message_api {
+    desc {
+      en: "View delayed message"
+      zh: "查看延迟消息"
+    }
+  }
+
+  node {
+    desc {
+      en: "The node where message from"
+      zh: "消息的来源节点"
+    }
+  }
+
+  msgid {
+    desc {
+      en: "Delayed Message ID"
+      zh: "延迟消息 ID"
+    }
+  }
+
+  bad_msgid_format {
+    desc {
+      en: "Bad Message ID format"
+      zh: "消息 ID 格式错误"
+    }
+  }
+
+  msgid_not_found {
+    desc {
+      en: "Message ID not found"
+      zh: "未找到对应消息"
+    }
+  }
+
+  delete_api {
+    desc {
+      en: "Delete delayed message"
+      zh: "删除延迟消息"
+    }
+  }
+
+  list_api {
+    desc {
+      en: "List delayed messages"
+      zh: "查看延迟消息列表"
+    }
+  }
+
+  view_page {
+    desc {
+      en: "View page"
+      zh: "查看的页数"
+    }
+  }
+
+  view_limit {
+    desc {
+      en: "Page limit"
+      zh: "每页数量"
+    }
+  }
+
+  count {
+    desc {
+      en: "Count of delayed messages"
+      zh: "延迟消息总数"
+    }
+  }
+
+  publish_at {
+    desc {
+      en: "Clinet publish message time, in RFC 3339 format"
+      zh: "客户端发送时间, RFC 3339 格式"
+    }
+  }
+
+  delayed_interval {
+    desc {
+      en: "Delayed interval(second)"
+      zh: "延迟时间(秒)"
+    }
+  }
+
+  delayed_remaining {
+    desc {
+      en: "Delayed remaining(second)"
+      zh: "剩余时间(秒)"
+    }
+  }
+
+  expected_at {
+    desc {
+      en: "Expect publish time, in RFC 3339 format"
+      zh: "期望的发送时间, RFC 3339 格式"
+    }
+  }
+
+  topic {
+    desc {
+      en: "Topic"
+      zh: "主题"
+    }
+  }
+
+  qos {
+    desc {
+      en: "QoS"
+      zh: "QoS"
+    }
+  }
+
+  from_clientid {
+    desc {
+      en: "From ClientID"
+      zh: "消息的 ClientID"
+    }
+  }
+
+  from_username {
+    desc {
+      en: "From Username"
+      zh: "消息的 Username"
+    }
+  }
+
+  payload {
+    desc {
+      en: "Payload, base64 encoded. Payload will be set to 'PAYLOAD_TO_LARGE' if its length is larger than 2048 bytes"
+      zh: "消息内容, base64 格式。如果消息的大小超过 2048 字节,则消息内容会被设置为 'PAYLOAD_TO_LARGE'"
+    }
+  }
+
+}

+ 13 - 0
apps/emqx_modules/i18n/emqx_modules_schema_i18n.conf

@@ -71,4 +71,17 @@ all:全部重写主题"""
     }
   }
 
+  enable {
+    desc {
+      en: "Enable this feature"
+      zh: "是否开启该功能"
+    }
+  }
+
+  max_delayed_messages {
+    desc {
+      en: "Maximum number of delayed messages (0 is no limit)."
+      zh: "延迟消息的数量上限(0 代表无限)"
+    }
+  }
 }

+ 33 - 37
apps/emqx_modules/src/emqx_delayed_api.erl

@@ -19,13 +19,11 @@
 -behaviour(minirest_api).
 
 -include_lib("typerefl/include/types.hrl").
+-include_lib("hocon/include/hoconsc.hrl").
 -include("emqx_modules.hrl").
 
 -import(hoconsc, [mk/2, ref/1, ref/2]).
 
--define(MAX_PAYLOAD_LENGTH, 2048).
--define(PAYLOAD_TOO_LARGE, <<"PAYLOAD_TOO_LARGE">>).
-
 -export([
     status/2,
     delayed_messages/2,
@@ -43,6 +41,9 @@
 
 -export([api_spec/0]).
 
+-define(MAX_PAYLOAD_LENGTH, 2048).
+-define(PAYLOAD_TOO_LARGE, <<"PAYLOAD_TOO_LARGE">>).
+
 -define(INTERNAL_ERROR, 'INTERNAL_ERROR').
 -define(BAD_REQUEST, 'BAD_REQUEST').
 
@@ -65,24 +66,23 @@ schema("/mqtt/delayed") ->
         'operationId' => status,
         get => #{
             tags => ?API_TAG_MQTT,
-            description => <<"Get delayed status">>,
-            summary => <<"Get delayed status">>,
+            description => ?DESC(view_status_api),
             responses => #{
                 200 => ref(emqx_modules_schema, "delayed")
             }
         },
         put => #{
             tags => ?API_TAG_MQTT,
-            description => <<"Enable or disable delayed, set max delayed messages">>,
+            description => ?DESC(update_api),
             'requestBody' => ref(emqx_modules_schema, "delayed"),
             responses => #{
                 200 => mk(
                     ref(emqx_modules_schema, "delayed"),
-                    #{desc => <<"Enable or disable delayed successfully">>}
+                    #{desc => ?DESC(update_success)}
                 ),
                 400 => emqx_dashboard_swagger:error_codes(
                     [?BAD_REQUEST],
-                    <<"Max limit illegality">>
+                    ?DESC(illegality_limit)
                 )
             }
         }
@@ -92,47 +92,47 @@ schema("/mqtt/delayed/messages/:node/:msgid") ->
         'operationId' => delayed_message,
         get => #{
             tags => ?API_TAG_MQTT,
-            description => <<"Get delayed message">>,
+            description => ?DESC(get_message_api),
             parameters => [
                 {node,
                     mk(
                         binary(),
-                        #{in => path, desc => <<"The node where message from">>}
+                        #{in => path, desc => ?DESC(node)}
                     )},
-                {msgid, mk(binary(), #{in => path, desc => <<"Delay message ID">>})}
+                {msgid, mk(binary(), #{in => path, desc => ?DESC(msgid)})}
             ],
             responses => #{
                 200 => ref("message_without_payload"),
                 400 => emqx_dashboard_swagger:error_codes(
                     [?MESSAGE_ID_SCHEMA_ERROR, ?INVALID_NODE],
-                    <<"Bad MsgId format">>
+                    ?DESC(bad_msgid_format)
                 ),
                 404 => emqx_dashboard_swagger:error_codes(
                     [?MESSAGE_ID_NOT_FOUND],
-                    <<"MsgId not found">>
+                    ?DESC(msgid_not_found)
                 )
             }
         },
         delete => #{
             tags => ?API_TAG_MQTT,
-            description => <<"Delete delayed message">>,
+            description => ?DESC(delete_api),
             parameters => [
                 {node,
                     mk(
                         binary(),
-                        #{in => path, desc => <<"The node where message from">>}
+                        #{in => path, desc => ?DESC(node)}
                     )},
-                {msgid, mk(binary(), #{in => path, desc => <<"Delay message ID">>})}
+                {msgid, mk(binary(), #{in => path, desc => ?DESC(msgid)})}
             ],
             responses => #{
                 204 => <<"Delete delayed message success">>,
                 400 => emqx_dashboard_swagger:error_codes(
                     [?MESSAGE_ID_SCHEMA_ERROR, ?INVALID_NODE],
-                    <<"Bad MsgId format">>
+                    ?DESC(bad_msgid_format)
                 ),
                 404 => emqx_dashboard_swagger:error_codes(
                     [?MESSAGE_ID_NOT_FOUND],
-                    <<"MsgId not found">>
+                    ?DESC(msgid_not_found)
                 )
             }
         }
@@ -142,16 +142,16 @@ schema("/mqtt/delayed/messages") ->
         'operationId' => delayed_messages,
         get => #{
             tags => ?API_TAG_MQTT,
-            description => <<"List delayed messages">>,
+            description => ?DESC(list_api),
             parameters => [ref(emqx_dashboard_swagger, page), ref(emqx_dashboard_swagger, limit)],
             responses => #{
                 200 =>
                     [
                         {data, mk(hoconsc:array(ref("message")), #{})},
                         {meta, [
-                            {page, mk(pos_integer(), #{})},
-                            {limit, mk(pos_integer(), #{})},
-                            {count, mk(non_neg_integer(), #{})}
+                            {page, mk(pos_integer(), #{desc => ?DESC(view_page)})},
+                            {limit, mk(pos_integer(), #{desc => ?DESC(view_limit)})},
+                            {count, mk(non_neg_integer(), #{desc => ?DESC(count)})}
                         ]}
                     ]
             }
@@ -160,24 +160,20 @@ schema("/mqtt/delayed/messages") ->
 
 fields("message_without_payload") ->
     [
-        {msgid, mk(integer(), #{desc => <<"Message Id (MQTT message id hash)">>})},
-        {node, mk(binary(), #{desc => <<"The node where message from">>})},
-        {publish_at, mk(binary(), #{desc => <<"Client publish message time, rfc 3339">>})},
-        {delayed_interval, mk(pos_integer(), #{desc => <<"Delayed interval, second">>})},
-        {delayed_remaining, mk(non_neg_integer(), #{desc => <<"Delayed remaining, second">>})},
-        {expected_at, mk(binary(), #{desc => <<"Expect publish time, rfc 3339">>})},
-        {topic, mk(binary(), #{desc => <<"Topic">>, example => <<"/sys/#">>})},
-        {qos, mk(emqx_schema:qos(), #{desc => <<"QoS">>})},
-        {from_clientid, mk(binary(), #{desc => <<"From ClientId">>})},
-        {from_username, mk(binary(), #{desc => <<"From Username">>})}
+        {msgid, mk(integer(), #{desc => ?DESC(msgid)})},
+        {node, mk(binary(), #{desc => ?DESC(node)})},
+        {publish_at, mk(binary(), #{desc => ?DESC(publish_at)})},
+        {delayed_interval, mk(pos_integer(), #{desc => ?DESC(delayed_interval)})},
+        {delayed_remaining, mk(non_neg_integer(), #{desc => ?DESC(delayed_remaining)})},
+        {expected_at, mk(binary(), #{desc => ?DESC(expected_at)})},
+        {topic, mk(binary(), #{desc => ?DESC(topic), example => <<"/sys/#">>})},
+        {qos, mk(emqx_schema:qos(), #{desc => ?DESC(qos)})},
+        {from_clientid, mk(binary(), #{desc => ?DESC(from_clientid)})},
+        {from_username, mk(binary(), #{desc => ?DESC(from_username)})}
     ];
 fields("message") ->
-    PayloadDesc = io_lib:format(
-        "Payload, base64 encoded. Payload will be set to ~p if its length is larger than ~p",
-        [?PAYLOAD_TOO_LARGE, ?MAX_PAYLOAD_LENGTH]
-    ),
     fields("message_without_payload") ++
-        [{payload, mk(binary(), #{desc => iolist_to_binary(PayloadDesc)})}].
+        [{payload, mk(binary(), #{desc => ?DESC(payload)})}].
 
 %%--------------------------------------------------------------------
 %% HTTP API

+ 2 - 3
apps/emqx_modules/src/emqx_modules_schema.erl

@@ -42,9 +42,8 @@ fields("telemetry") ->
     [{enable, hoconsc:mk(boolean(), #{default => false, desc => "Enable telemetry."})}];
 fields("delayed") ->
     [
-        {enable, hoconsc:mk(boolean(), #{default => false, desc => "Enable `delayed` module."})},
-        {max_delayed_messages,
-            sc(integer(), #{desc => "Maximum number of delayed messages (0 is no limit)."})}
+        {enable, hoconsc:mk(boolean(), #{default => false, desc => ?DESC(enable)})},
+        {max_delayed_messages, sc(integer(), #{desc => ?DESC(max_delayed_messages)})}
     ];
 fields("rewrite") ->
     [