@liujitcn/kratos-admin-bi 0.0.0-stage → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +43 -2
  2. package/dist/package/declarations/index.d.ts +1 -0
  3. package/dist/package/declarations/src/api/bi/admin/v1/bi_card.d.ts +18 -0
  4. package/dist/package/declarations/src/api/bi/admin/v1/bi_card.js +46 -0
  5. package/dist/package/declarations/src/api/bi/admin/v1/bi_dashboard.d.ts +17 -0
  6. package/dist/package/declarations/src/api/bi/admin/v1/bi_dashboard.js +30 -0
  7. package/dist/package/declarations/src/api/bi/admin/v1/bi_query.d.ts +11 -0
  8. package/dist/package/declarations/src/api/bi/admin/v1/bi_query.js +41 -0
  9. package/dist/package/declarations/src/api/bi/admin/v1/bi_query_record.d.ts +10 -0
  10. package/dist/package/declarations/src/api/bi/admin/v1/bi_query_record.js +14 -0
  11. package/dist/package/declarations/src/api/bi/admin/v1/bi_source.d.ts +26 -0
  12. package/dist/package/declarations/src/api/bi/admin/v1/bi_source.js +46 -0
  13. package/dist/package/declarations/src/bi-core.d.ts +17 -0
  14. package/dist/package/declarations/src/bi-core.js +22 -0
  15. package/dist/package/declarations/src/bi-dashboard-schema.d.ts +31 -0
  16. package/dist/package/declarations/src/bi-dashboard-schema.js +39 -0
  17. package/dist/package/declarations/src/bi-messages.d.ts +247 -0
  18. package/dist/package/declarations/src/bi-messages.js +247 -0
  19. package/dist/package/declarations/src/bi-response.d.ts +10 -0
  20. package/dist/package/declarations/src/bi-response.js +33 -0
  21. package/dist/package/declarations/src/bi-vue.d.ts +10 -0
  22. package/dist/package/declarations/src/bi-vue.js +10 -0
  23. package/dist/package/declarations/src/card-schema.d.ts +30 -0
  24. package/dist/package/declarations/src/card-schema.js +87 -0
  25. package/dist/package/declarations/src/components/BiCardChartEditor.vue.d.ts +17 -0
  26. package/dist/package/declarations/src/components/BiCardChartEditor.vue.js +527 -0
  27. package/dist/package/declarations/src/components/BiCardFormDialog.vue.d.ts +20 -0
  28. package/dist/package/declarations/src/components/BiCardFormDialog.vue.js +495 -0
  29. package/dist/package/declarations/src/components/BiCardLibrary.vue.d.ts +3 -0
  30. package/dist/package/declarations/src/components/BiCardLibrary.vue.js +807 -0
  31. package/dist/package/declarations/src/components/BiCardVisualization.vue.d.ts +10 -0
  32. package/dist/package/declarations/src/components/BiCardVisualization.vue.js +97 -0
  33. package/dist/package/declarations/src/components/BiChart.vue.d.ts +20 -0
  34. package/dist/package/declarations/src/components/BiChart.vue.js +112 -0
  35. package/dist/package/declarations/src/components/BiDashboard.vue.d.ts +9 -0
  36. package/dist/package/declarations/src/components/BiDashboard.vue.js +81 -0
  37. package/dist/package/declarations/src/components/BiDashboardMenuDialog.vue.d.ts +12 -0
  38. package/dist/package/declarations/src/components/BiDashboardMenuDialog.vue.js +252 -0
  39. package/dist/package/declarations/src/components/BiDataCard.vue.d.ts +36 -0
  40. package/dist/package/declarations/src/components/BiDataCard.vue.js +372 -0
  41. package/dist/package/declarations/src/components/BiDesigner.vue.d.ts +17 -0
  42. package/dist/package/declarations/src/components/BiDesigner.vue.js +666 -0
  43. package/dist/package/declarations/src/components/BiSourceModelDialog.vue.d.ts +17 -0
  44. package/dist/package/declarations/src/components/BiSourceModelDialog.vue.js +2118 -0
  45. package/dist/package/declarations/src/components/BiWorkbenchPreview.vue.d.ts +7 -0
  46. package/dist/package/declarations/src/components/BiWorkbenchPreview.vue.js +176 -0
  47. package/dist/package/declarations/src/components/source-model-layout.d.ts +3 -0
  48. package/dist/package/declarations/src/components/source-model-layout.js +66 -0
  49. package/dist/package/declarations/src/dataset/index.d.ts +7 -0
  50. package/dist/package/declarations/src/dataset/index.js +25 -0
  51. package/dist/package/declarations/src/dataset/labels.d.ts +2 -0
  52. package/dist/package/declarations/src/dataset/labels.js +21 -0
  53. package/dist/package/declarations/src/dataset/transform.d.ts +20 -0
  54. package/dist/package/declarations/src/dataset/transform.js +173 -0
  55. package/dist/package/declarations/src/engine/chart-types.d.ts +14 -0
  56. package/dist/package/declarations/src/engine/chart-types.js +37 -0
  57. package/dist/package/declarations/src/engine/echarts.d.ts +16 -0
  58. package/dist/package/declarations/src/engine/echarts.js +491 -0
  59. package/dist/package/declarations/src/engine/types.d.ts +36 -0
  60. package/dist/package/declarations/src/engine/types.js +20 -0
  61. package/dist/package/declarations/src/env.d.ts +17 -0
  62. package/dist/package/declarations/src/env.js +67 -0
  63. package/dist/package/declarations/src/index.d.ts +1 -0
  64. package/dist/package/declarations/src/index.js +1 -0
  65. package/dist/package/declarations/src/locales/en-US.json +254 -0
  66. package/dist/package/declarations/src/locales/generated.d.ts +1021 -0
  67. package/dist/package/declarations/src/locales/generated.js +13 -0
  68. package/dist/package/declarations/src/locales/ja-JP.json +254 -0
  69. package/dist/package/declarations/src/locales/zh-CN.json +254 -0
  70. package/dist/package/declarations/src/locales/zh-TW.json +254 -0
  71. package/dist/package/declarations/src/module.d.ts +2 -0
  72. package/dist/package/declarations/src/module.js +9 -0
  73. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_card.d.ts +145 -0
  74. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_card.js +6 -0
  75. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_dashboard.d.ts +107 -0
  76. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_dashboard.js +6 -0
  77. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query.d.ts +157 -0
  78. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query.js +6 -0
  79. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query_record.d.ts +83 -0
  80. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_query_record.js +15 -0
  81. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_source.d.ts +301 -0
  82. package/dist/package/declarations/src/rpc/bi/admin/v1/bi_source.js +6 -0
  83. package/dist/package/declarations/src/rpc/common/v1/types.d.ts +60 -0
  84. package/dist/package/declarations/src/rpc/common/v1/types.js +6 -0
  85. package/dist/package/declarations/src/schema/layout.d.ts +7 -0
  86. package/dist/package/declarations/src/schema/layout.js +52 -0
  87. package/dist/package/declarations/src/schema/types.d.ts +83 -0
  88. package/dist/package/declarations/src/schema/types.js +1 -0
  89. package/dist/package/declarations/src/theme/index.d.ts +29 -0
  90. package/dist/package/declarations/src/theme/index.js +83 -0
  91. package/dist/package/declarations/src/theme/palettes.d.ts +7 -0
  92. package/dist/package/declarations/src/theme/palettes.js +28 -0
  93. package/dist/package/declarations/src/theme/presets.d.ts +73 -0
  94. package/dist/package/declarations/src/theme/presets.js +235 -0
  95. package/dist/package/declarations/src/views/card/index.vue.d.ts +3 -0
  96. package/dist/package/declarations/src/views/card/index.vue.js +18 -0
  97. package/dist/package/declarations/src/views/dashboard/index.vue.d.ts +3 -0
  98. package/dist/package/declarations/src/views/dashboard/index.vue.js +107 -0
  99. package/dist/package/declarations/src/views/designer/index.vue.d.ts +3 -0
  100. package/dist/package/declarations/src/views/designer/index.vue.js +332 -0
  101. package/dist/package/declarations/src/views/manage/index.vue.d.ts +3 -0
  102. package/dist/package/declarations/src/views/manage/index.vue.js +325 -0
  103. package/dist/package/declarations/src/views/query/index.vue.d.ts +3 -0
  104. package/dist/package/declarations/src/views/query/index.vue.js +876 -0
  105. package/dist/package/declarations/src/views/source/index.vue.d.ts +3 -0
  106. package/dist/package/declarations/src/views/source/index.vue.js +343 -0
  107. package/dist/package/declarations/src/views/workbench/index.vue.d.ts +3 -0
  108. package/dist/package/declarations/src/views/workbench/index.vue.js +362 -0
  109. package/dist/package/src/api/bi/admin/v1/bi_card.ts +67 -0
  110. package/dist/package/src/api/bi/admin/v1/bi_dashboard.ts +51 -0
  111. package/dist/package/src/api/bi/admin/v1/bi_query.ts +55 -0
  112. package/dist/package/src/api/bi/admin/v1/bi_query_record.ts +25 -0
  113. package/dist/package/src/api/bi/admin/v1/bi_source.ts +80 -0
  114. package/dist/package/src/bi-core.ts +43 -0
  115. package/dist/package/src/bi-dashboard-schema.ts +69 -0
  116. package/dist/package/src/bi-messages.ts +249 -0
  117. package/dist/package/src/bi-response.ts +39 -0
  118. package/dist/package/src/bi-vue.ts +13 -0
  119. package/dist/package/src/card-schema.ts +111 -0
  120. package/dist/package/src/components/BiCardChartEditor.vue +139 -0
  121. package/dist/package/src/components/BiCardFormDialog.vue +289 -0
  122. package/dist/package/src/components/BiCardLibrary.vue +310 -0
  123. package/dist/package/src/components/BiCardVisualization.vue +95 -0
  124. package/dist/package/src/components/BiChart.vue +134 -0
  125. package/dist/package/src/components/BiDashboard.vue +53 -0
  126. package/dist/package/src/components/BiDashboardMenuDialog.vue +177 -0
  127. package/dist/package/src/components/BiDataCard.vue +231 -0
  128. package/dist/package/src/components/BiDesigner.vue +287 -0
  129. package/dist/package/src/components/BiSourceModelDialog.vue +846 -0
  130. package/dist/package/src/components/BiWorkbenchPreview.vue +131 -0
  131. package/dist/package/src/components/source-model-layout.ts +62 -0
  132. package/dist/package/src/dataset/index.ts +28 -0
  133. package/dist/package/src/dataset/labels.ts +19 -0
  134. package/dist/package/src/dataset/transform.ts +189 -0
  135. package/dist/package/src/engine/chart-types.ts +44 -0
  136. package/dist/package/src/engine/echarts.ts +568 -0
  137. package/dist/package/src/engine/types.ts +60 -0
  138. package/dist/package/src/env.ts +82 -0
  139. package/dist/package/src/index.ts +1 -0
  140. package/dist/package/src/locales/en-US.json +254 -0
  141. package/dist/package/src/locales/generated.ts +16 -0
  142. package/dist/package/src/locales/ja-JP.json +254 -0
  143. package/dist/package/src/locales/zh-CN.json +254 -0
  144. package/dist/package/src/locales/zh-TW.json +254 -0
  145. package/dist/package/src/module.ts +12 -0
  146. package/dist/package/src/rpc/bi/admin/v1/bi_card.ts +169 -0
  147. package/dist/package/src/rpc/bi/admin/v1/bi_dashboard.ts +126 -0
  148. package/dist/package/src/rpc/bi/admin/v1/bi_query.ts +187 -0
  149. package/dist/package/src/rpc/bi/admin/v1/bi_query_record.ts +98 -0
  150. package/dist/package/src/rpc/bi/admin/v1/bi_source.ts +338 -0
  151. package/dist/package/src/rpc/common/v1/types.ts +77 -0
  152. package/dist/package/src/schema/layout.ts +54 -0
  153. package/dist/package/src/schema/types.ts +103 -0
  154. package/dist/package/src/styles.scss +1 -0
  155. package/dist/package/src/theme/index.ts +108 -0
  156. package/dist/package/src/theme/palettes.ts +34 -0
  157. package/dist/package/src/theme/presets.ts +278 -0
  158. package/dist/package/src/views/card/index.vue +5 -0
  159. package/dist/package/src/views/dashboard/index.vue +58 -0
  160. package/dist/package/src/views/designer/index.vue +164 -0
  161. package/dist/package/src/views/manage/index.vue +276 -0
  162. package/dist/package/src/views/query/index.vue +593 -0
  163. package/dist/package/src/views/source/index.vue +214 -0
  164. package/dist/package/src/views/workbench/index.vue +208 -0
  165. package/package.json +67 -3
  166. package/tsconfig.json +12 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * BI 运行环境注入:主题跟随 + 数据集 resolver + 语言。
3
+ * 缺省零配置:主题自动跟随 html.dark;static 数据集无需 resolver。
4
+ */
5
+ import { computed, inject, provide, ref } from "vue";
6
+ import type { ComputedRef, InjectionKey } from "vue";
7
+ import { getLocaleText, useLocaleStore } from "@liujitcn/kratos-admin-core";
8
+ import { BI_MESSAGES_EN, BI_MESSAGES_ZH } from "./bi-messages";
9
+ import { resolveTheme, watchDark } from "./bi-core";
10
+ import type { BiResolvedTheme } from "./bi-core";
11
+
12
+ export interface BiEnv {
13
+ /** 宿主主题模式 getter(响应式);缺省自动跟随 html.dark + 系统偏好 */
14
+ themeMode?: () => "light" | "dark" | "auto";
15
+ }
16
+
17
+ const BI_ENV_KEY: InjectionKey<BiEnv> = Symbol("BI_ENV");
18
+
19
+ const DEFAULT_ENV: BiEnv = {};
20
+
21
+ export function provideBiEnv(env: BiEnv) {
22
+ provide(BI_ENV_KEY, env);
23
+ }
24
+
25
+ export function useBiEnv(): BiEnv {
26
+ return inject(BI_ENV_KEY, DEFAULT_ENV);
27
+ }
28
+
29
+ // ============ 主题:模块级单一响应式源 ============
30
+ const darkRef = ref(false);
31
+ let bound = false;
32
+
33
+ function ensureDarkBinding() {
34
+ if (bound || typeof document === "undefined") return;
35
+ bound = true;
36
+ watchDark(dark => {
37
+ darkRef.value = dark;
38
+ });
39
+ }
40
+
41
+ /**
42
+ * 当前图表主题(编译期注入 option)。
43
+ * env.themeMode 缺省时跟随 html.dark + 系统偏好;提供时经 computed 追踪其响应式依赖。
44
+ */
45
+ export function useBiTheme(): ComputedRef<BiResolvedTheme> {
46
+ const env = useBiEnv();
47
+ ensureDarkBinding();
48
+ return computed(() => {
49
+ const fallback = darkRef.value ? "dark" : "light";
50
+ if (!env.themeMode) return resolveTheme(fallback);
51
+ const mode = env.themeMode();
52
+ return resolveTheme(mode === "auto" ? fallback : mode);
53
+ });
54
+ }
55
+
56
+ /** 从嵌套的 BI 内置语言包读取回退文案。 */
57
+ function getBuiltinMessage(messages: Record<string, unknown>, key: string): string {
58
+ const value = key.split(".").reduce<unknown>((current, segment) => {
59
+ if (!current || typeof current !== "object") return undefined;
60
+ return (current as Record<string, unknown>)[segment];
61
+ }, messages);
62
+ return typeof value === "string" ? value : "";
63
+ }
64
+
65
+ /** 对 BI 组件内置文案执行管理端风格的插值。 */
66
+ function interpolate(message: string, params: Record<string, unknown>): string {
67
+ return message.replace(/\{([A-Za-z0-9_]+)\}/g, (_, key: string) => String(params[key] ?? `{${key}}`));
68
+ }
69
+
70
+ /** 使用管理端现有 Vue I18n,并以 BI 内置语言包作为缺省回退。 */
71
+ export function useBiI18n() {
72
+ const { locale } = useLocaleStore();
73
+
74
+ return {
75
+ t(key: string, params: Record<string, unknown> = {}) {
76
+ const currentLocale = locale.value;
77
+ const projectMessage = getLocaleText(currentLocale, key);
78
+ const builtinMessages = currentLocale.toLowerCase().startsWith("zh") ? BI_MESSAGES_ZH : BI_MESSAGES_EN;
79
+ return interpolate(projectMessage || getBuiltinMessage(builtinMessages, key) || key, params);
80
+ }
81
+ };
82
+ }
@@ -0,0 +1 @@
1
+ export { biAdminModule } from "./module";
@@ -0,0 +1,254 @@
1
+ {
2
+ "bi.title": "BI Analysis",
3
+ "bi.query.title": "Ask Data",
4
+ "bi.query.subtitle": "Explore data with business questions",
5
+ "bi.query.guide": "Describe the metrics, time range and dimensions you care about. Save query results as data cards.",
6
+ "bi.query.placeholder": "Ask about your data",
7
+ "bi.query.ask": "Ask",
8
+ "bi.query.voice_input": "Voice input",
9
+ "bi.query.stop_voice_input": "Stop voice input",
10
+ "bi.query.recognizing_voice": "Recognizing speech...",
11
+ "bi.query.voice_unsupported": "Your browser does not support speech recognition",
12
+ "bi.query.microphone_denied": "Microphone access denied. Check your browser permissions",
13
+ "bi.query.voice_failed": "Speech recognition failed. Please try again later",
14
+ "bi.source.title.create": "Create data source",
15
+ "bi.source.title.edit": "Edit data source",
16
+ "bi.source.field.code": "Code",
17
+ "bi.source.field.name": "Name",
18
+ "bi.source.field.description": "Description",
19
+ "bi.source.field.source_name": "Server client name",
20
+ "bi.source.field.driver": "Database driver",
21
+ "bi.source.field.host": "Host",
22
+ "bi.source.field.port": "Port",
23
+ "bi.source.field.database_name": "Database",
24
+ "bi.source.field.username": "Username",
25
+ "bi.source.field.password": "Password",
26
+ "bi.source.field.ssl_mode": "SSL mode",
27
+ "bi.source.field.schema_name": "Schema",
28
+ "bi.source.field.table_name": "Table or view",
29
+ "bi.source.field.tenant_column": "Tenant column",
30
+ "bi.source.field.schema_json": "Semantic JSON",
31
+ "bi.source.field.max_rows": "Max rows",
32
+ "bi.source.placeholder.source_name": "Optional existing server client",
33
+ "bi.source.placeholder.password": "Enter database password",
34
+ "bi.source.placeholder.keep_password": "Leave empty to keep current password",
35
+ "bi.source.validation.code": "Enter data source code",
36
+ "bi.source.validation.name": "Enter data source name",
37
+ "bi.source.validation.driver": "Select a database driver",
38
+ "bi.source.validation.table_name": "Enter a table or view",
39
+ "bi.source.validation.schema_json": "Enter semantic JSON",
40
+ "bi.source.value.configured": "Configured",
41
+ "bi.source.value.not_configured": "Not configured",
42
+ "bi.source.field.connection": "Database connection",
43
+ "bi.source.validation.host": "Enter the database host",
44
+ "bi.source.validation.database_name": "Enter the database name",
45
+ "bi.source.validation.username": "Enter the database username",
46
+ "bi.source.validation.password": "Enter the database password",
47
+ "bi.source.model.title": "Data source model",
48
+ "bi.source.model.step.tables": "Select tables",
49
+ "bi.source.model.step.relations": "Define relationships",
50
+ "bi.source.model.step.fields": "Configure fields",
51
+ "bi.source.model.search_tables": "Search tables or views",
52
+ "bi.source.model.fields_count": "fields",
53
+ "bi.source.model.tables_empty": "No tables are available",
54
+ "bi.source.model.relation_empty": "Select a relationship",
55
+ "bi.source.model.field.base_table": "Fact table",
56
+ "bi.source.model.field.shared_table": "Connection-scoped or shared",
57
+ "bi.source.model.field.relation": "Table relationship",
58
+ "bi.source.model.field.left_column": "Joining field",
59
+ "bi.source.model.field.right_unique_column": "Unique field",
60
+ "bi.source.model.field.join_type": "Join type",
61
+ "bi.source.model.field.dimensions": "Dimensions",
62
+ "bi.source.model.field.measures": "Measures",
63
+ "bi.source.model.field.code": "Semantic code",
64
+ "bi.source.model.field.display_name": "Display name",
65
+ "bi.source.model.field.table": "Table",
66
+ "bi.source.model.field.column": "Database field",
67
+ "bi.source.model.field.type": "Type",
68
+ "bi.source.model.field.filterable": "Filterable",
69
+ "bi.source.model.field.aggregation": "Aggregation",
70
+ "bi.source.model.field.tables": "Selected tables",
71
+ "bi.source.model.action.configure": "Configure model",
72
+ "bi.source.model.action.auto_layout": "Auto layout",
73
+ "bi.source.model.action.add_dimension": "Add dimension",
74
+ "bi.source.model.action.add_measure": "Add measure",
75
+ "bi.source.model.action.previous": "Previous",
76
+ "bi.source.model.action.next": "Next",
77
+ "bi.source.model.action.save": "Save and enable",
78
+ "bi.source.model.action.preview": "Preview query",
79
+ "bi.source.model.action.done": "Done",
80
+ "bi.source.model.validation.select_tables": "Select tables and choose a fact table",
81
+ "bi.source.model.message.saved": "Data source model saved and enabled",
82
+ "bi.source.message.create_success": "Data source created",
83
+ "bi.source.message.update_success": "Data source updated",
84
+ "bi.source.message.delete_success": "Data source deleted",
85
+ "bi.source.dialog.delete_confirm": "Delete data source \"{name}\"?",
86
+ "bi.source.action.test": "Test connection",
87
+ "bi.source.message.test_success": "Data source connection passed",
88
+ "bi.source.message.test_failed": "Data source connection failed",
89
+ "bi.query.empty": "No query result",
90
+ "bi.query.error": "Query failed",
91
+ "bi.query.save_name": "Dashboard name",
92
+ "bi.query.truncated": "Result truncated",
93
+ "bi.dashboard.title": "Dashboard",
94
+ "bi.dashboard.manage": "Dashboard management",
95
+ "bi.dashboard.select_first": "Open a draft from Dashboard management first",
96
+ "bi.dashboard.refresh": "Refresh",
97
+ "bi.dashboard.preview": "Run",
98
+ "bi.dashboard.edit": "Design",
99
+ "bi.dashboard.publish": "Publish",
100
+ "bi.dashboard.delete": "Delete",
101
+ "bi.dashboard.empty": "No dashboards",
102
+ "bi.dashboard.save": "Save draft",
103
+ "bi.dashboard.save_success": "Dashboard draft saved",
104
+ "bi.dashboard.publish_success": "Dashboard published",
105
+ "bi.dashboard.delete_confirm": "Delete this dashboard?",
106
+ "bi.dashboard.status_draft": "Draft",
107
+ "bi.dashboard.status_published": "Published",
108
+ "bi.dashboard.version": "Version",
109
+ "bi.dashboard.updated_at": "Updated at",
110
+ "bi.query_record.action.detail": "View detail",
111
+ "bi.query_record.detail.result": "Query result",
112
+ "bi.query_record.detail.title": "Query details",
113
+ "bi.query_record.field.elapsed_ms": "Elapsed (ms)",
114
+ "bi.query_record.field.error_msg": "Error message",
115
+ "bi.query_record.field.id": "ID",
116
+ "bi.query_record.field.question": "Question",
117
+ "bi.query_record.field.row_count": "Row count",
118
+ "bi.query_record.field.query_json": "Query plan",
119
+ "bi.query_record.field.source_code": "Source code",
120
+ "bi.query_record.field.truncated": "Results truncated",
121
+ "bi.query_record.field.status": "Status",
122
+ "bi.query_record.field.user": "User",
123
+ "bi.query_record.status.failed": "Failed",
124
+ "bi.query_record.status.success": "Success",
125
+ "bi.card.library": "Data cards",
126
+ "bi.card.library_hint": "Create or favorite data cards, then combine them in dashboards.",
127
+ "bi.workbench.title": "My workspace",
128
+ "bi.card.create": "Create card",
129
+ "bi.card.edit": "Edit card",
130
+ "bi.card.add": "Add cards",
131
+ "bi.card.add_short": "Add",
132
+ "bi.card.added": "Added",
133
+ "bi.card.preview": "Preview",
134
+ "bi.card.save": "Save card",
135
+ "bi.card.save_result": "Save as card",
136
+ "bi.card.search": "Search cards or business data",
137
+ "bi.card.all_sources": "All business data",
138
+ "bi.card.total": "{count} cards",
139
+ "bi.card.category.all": "All",
140
+ "bi.card.category.system": "Built-in",
141
+ "bi.card.category.mine": "Created by me",
142
+ "bi.card.category.favorite": "Favorites",
143
+ "bi.card.category.shared": "Shared with me",
144
+ "bi.card.name": "Card name",
145
+ "bi.card.source": "Data source",
146
+ "bi.card.dimensions": "Dimensions",
147
+ "bi.card.measure": "Measures",
148
+ "bi.card.aggregation": "Aggregation",
149
+ "bi.card.add_measure": "Add measure",
150
+ "bi.card.chart_type": "Chart type",
151
+ "bi.card.refresh": "Refresh",
152
+ "bi.card.refresh.0": "Manual",
153
+ "bi.card.refresh.300": "Every 5 minutes",
154
+ "bi.card.share": "Share in project",
155
+ "bi.card.chart.metric": "Metric",
156
+ "bi.card.chart.bar": "Bar",
157
+ "bi.card.chart.line": "Line",
158
+ "bi.card.chart.area": "Area",
159
+ "bi.card.chart.pie": "Pie",
160
+ "bi.card.chart.donut": "Donut",
161
+ "bi.card.chart.gauge": "Gauge",
162
+ "bi.card.aggregation.sum": "Sum",
163
+ "bi.card.aggregation.count": "Count",
164
+ "bi.card.aggregation.avg": "Average",
165
+ "bi.card.aggregation.max": "Maximum",
166
+ "bi.card.aggregation.min": "Minimum",
167
+ "bi.card.favorite": "Favorite {name}",
168
+ "bi.card.unfavorite": "Unfavorite {name}",
169
+ "bi.card.empty": "No cards",
170
+ "bi.card.preview_empty": "Preview to view data",
171
+ "bi.card.chart_tab": "Chart",
172
+ "bi.card.table_tab": "Data",
173
+ "bi.card.retry": "Retry",
174
+ "bi.card.validation.name": "Enter a card name",
175
+ "bi.card.validation.source": "Select a data source",
176
+ "bi.card.validation.measures": "Select a measure",
177
+ "bi.card.saved": "Card saved",
178
+ "bi.card.save_failed": "Save failed",
179
+ "bi.card.delete_failed": "Delete failed",
180
+ "bi.card.delete_confirm": "Delete card “{name}”?",
181
+ "bi.workbench.arrange": "Arrange",
182
+ "bi.workbench.done": "Save layout",
183
+ "bi.workbench.restore": "Restore default layout",
184
+ "bi.workbench.empty": "No favorite dashboards yet",
185
+ "bi.workbench.drag": "Drag to reorder",
186
+ "bi.workbench.move_before": "Move {name} earlier",
187
+ "bi.workbench.move_after": "Move {name} later",
188
+ "bi.workbench.remove": "Remove {name}",
189
+ "bi.query.result": "Query result",
190
+ "bi.query.elapsed": "{ms} ms",
191
+ "bi.card.more": "More actions",
192
+ "bi.card.refresh.86400": "Daily at 02:00",
193
+ "bi.card.period": "Period for {name}",
194
+ "bi.card.period.default": "Card defaults",
195
+ "bi.card.period.recent_days": "Last {days} days",
196
+ "bi.query.assistant": "Analysis assistant",
197
+ "bi.card.categories": "Card categories",
198
+ "bi.card.add_dashboard_success": "Added to dashboard draft",
199
+ "bi.card.add_to_dashboard": "Add to dashboard",
200
+ "bi.card.already_in_dashboard": "This card is already in the dashboard",
201
+ "bi.card.chart_hint": "Chart types depend on result fields. Query and display settings are stored in the card.",
202
+ "bi.card.create_dashboard_first": "Create a dashboard draft first",
203
+ "bi.card.data_zoom": "Data zoom",
204
+ "bi.card.dimension_field": "Category / date field",
205
+ "bi.card.need_dimension": "A category or date field is required",
206
+ "bi.card.need_two_dimensions": "Two category fields and a numeric field are required",
207
+ "bi.card.need_two_numbers": "Two numeric fields are required",
208
+ "bi.card.need_ungrouped": "An ungrouped result is required",
209
+ "bi.card.select_dashboard": "Select a dashboard",
210
+ "bi.card.series_field": "Second category / target field",
211
+ "bi.card.show_label": "Show value labels",
212
+ "bi.card.show_legend": "Show legend",
213
+ "bi.card.source_record": "Source query #{id}",
214
+ "bi.card.stack": "Stack series",
215
+ "bi.card.ungrouped": "Ungrouped",
216
+ "bi.card.value_field": "Value field",
217
+ "bi.dashboard.back_workbench": "Back to workbench",
218
+ "bi.dashboard.card_height": "Card height",
219
+ "bi.dashboard.card_missing": "The card was deleted or is inaccessible. Remove the reference.",
220
+ "bi.dashboard.card_width": "Card width",
221
+ "bi.dashboard.choose_cards": "Choose saved cards from the library",
222
+ "bi.dashboard.code": "Dashboard code",
223
+ "bi.dashboard.code_required": "Enter a dashboard code",
224
+ "bi.dashboard.configure_menu": "Configure menu",
225
+ "bi.dashboard.create": "Create dashboard",
226
+ "bi.dashboard.description": "Description",
227
+ "bi.dashboard.invalid_id": "Select a valid dashboard",
228
+ "bi.dashboard.layout_settings": "Layout settings",
229
+ "bi.dashboard.published_version": "Published version",
230
+ "bi.dashboard.read_only": "This dashboard is read-only",
231
+ "bi.dashboard.theme": "Theme",
232
+ "bi.dashboard.theme_auto": "Follow system",
233
+ "bi.dashboard.theme_dark": "Dark",
234
+ "bi.dashboard.theme_light": "Light",
235
+ "bi.dashboard.width_full": "Full width",
236
+ "bi.dashboard.width_half": "Half width",
237
+ "bi.dashboard.width_quarter": "Quarter width",
238
+ "bi.query.hide_details": "Hide data details",
239
+ "bi.query.history": "Query history",
240
+ "bi.query.result_ready": "Query completed. Preview and save the result card on the right.",
241
+ "bi.workbench.add_dashboard": "Add dashboard",
242
+ "bi.workbench.dashboard_hint": "Open published dashboards to view your business data.",
243
+ "bi.workbench.open_dashboard": "Open dashboard",
244
+ "bi.dashboard.favorite": "Favorite",
245
+ "bi.dashboard.favorited": "Favorited",
246
+ "bi.dashboard.not_favorited": "Not favorited",
247
+ "bi.dashboard.unfavorite": "Unfavorite",
248
+ "bi.workbench.saved": "Dashboard shortcuts saved",
249
+ "bi.query.search_history": "Search query history",
250
+ "bi.card.ask_create": "Create with AI query",
251
+ "bi.card.ask_required": "Ask the AI for source data before saving a card",
252
+ "bi.dashboard.menu_position": "Menu location",
253
+ "bi.dashboard.menu_saved": "Dashboard menu saved"
254
+ }
@@ -0,0 +1,16 @@
1
+ /* 此文件由 scripts/sync_locales.py 生成,请勿手工修改。 */
2
+ import localeZhCn from './zh-CN.json'
3
+ import localeEnUs from './en-US.json'
4
+ import localeJaJp from './ja-JP.json'
5
+ import localeZhTw from './zh-TW.json'
6
+
7
+ export const LOCALE_MESSAGES = {
8
+ 'zh-CN': localeZhCn,
9
+ 'en-US': localeEnUs,
10
+ 'ja-JP': localeJaJp,
11
+ 'zh-TW': localeZhTw,
12
+ } as const satisfies Record<string, Record<string, string>>
13
+
14
+ export type GeneratedLocale = keyof typeof LOCALE_MESSAGES
15
+ export const DEFAULT_LOCALE: GeneratedLocale = 'zh-CN'
16
+ export const SUPPORTED_LOCALES = Object.keys(LOCALE_MESSAGES) as GeneratedLocale[]
@@ -0,0 +1,254 @@
1
+ {
2
+ "bi.title": "BI 分析",
3
+ "bi.query.title": "自然言語分析",
4
+ "bi.query.subtitle": "業務の質問からデータを探索",
5
+ "bi.query.guide": "知りたい指標、期間、分析軸を入力してください。クエリ結果はデータカードとして保存できます。",
6
+ "bi.query.placeholder": "業務データについて質問",
7
+ "bi.query.ask": "質問する",
8
+ "bi.query.voice_input": "音声入力",
9
+ "bi.query.stop_voice_input": "音声入力を停止",
10
+ "bi.query.recognizing_voice": "音声を認識しています...",
11
+ "bi.query.voice_unsupported": "このブラウザは音声認識に対応していません",
12
+ "bi.query.microphone_denied": "マイクへのアクセスが拒否されました。ブラウザの権限を確認してください",
13
+ "bi.query.voice_failed": "音声認識に失敗しました。しばらくしてから再試行してください",
14
+ "bi.source.title.create": "データソースを追加",
15
+ "bi.source.title.edit": "データソースを編集",
16
+ "bi.source.field.code": "コード",
17
+ "bi.source.field.name": "名前",
18
+ "bi.source.field.description": "説明",
19
+ "bi.source.field.source_name": "サーバークライアント名",
20
+ "bi.source.field.driver": "データベースドライバー",
21
+ "bi.source.field.host": "ホスト",
22
+ "bi.source.field.port": "ポート",
23
+ "bi.source.field.database_name": "データベース名",
24
+ "bi.source.field.username": "ユーザー名",
25
+ "bi.source.field.password": "パスワード",
26
+ "bi.source.field.ssl_mode": "SSLモード",
27
+ "bi.source.field.schema_name": "スキーマ",
28
+ "bi.source.field.table_name": "テーブルまたはビュー",
29
+ "bi.source.field.tenant_column": "テナント列",
30
+ "bi.source.field.schema_json": "セマンティックJSON",
31
+ "bi.source.field.max_rows": "最大行数",
32
+ "bi.source.placeholder.source_name": "既存のサーバークライアントは任意",
33
+ "bi.source.placeholder.password": "データベースパスワードを入力",
34
+ "bi.source.placeholder.keep_password": "空欄で現在のパスワードを保持",
35
+ "bi.source.validation.code": "データソースコードを入力",
36
+ "bi.source.validation.name": "データソース名を入力",
37
+ "bi.source.validation.driver": "データベースドライバーを選択",
38
+ "bi.source.validation.table_name": "テーブルまたはビューを入力",
39
+ "bi.source.validation.schema_json": "セマンティックJSONを入力",
40
+ "bi.source.value.configured": "設定済み",
41
+ "bi.source.value.not_configured": "未設定",
42
+ "bi.source.field.connection": "データベース接続",
43
+ "bi.source.validation.host": "データベースのホストを入力してください",
44
+ "bi.source.validation.database_name": "データベース名を入力してください",
45
+ "bi.source.validation.username": "データベースのユーザー名を入力してください",
46
+ "bi.source.validation.password": "データベースのパスワードを入力してください",
47
+ "bi.source.model.title": "データソースモデル",
48
+ "bi.source.model.step.tables": "テーブル選択",
49
+ "bi.source.model.step.relations": "関連付け",
50
+ "bi.source.model.step.fields": "項目設定",
51
+ "bi.source.model.search_tables": "テーブルまたはビューを検索",
52
+ "bi.source.model.fields_count": "項目",
53
+ "bi.source.model.tables_empty": "利用可能なテーブルはありません",
54
+ "bi.source.model.relation_empty": "関連を選択してください",
55
+ "bi.source.model.field.base_table": "ファクトテーブル",
56
+ "bi.source.model.field.shared_table": "接続分離または共有テーブル",
57
+ "bi.source.model.field.relation": "テーブル関連",
58
+ "bi.source.model.field.left_column": "結合フィールド",
59
+ "bi.source.model.field.right_unique_column": "一意フィールド",
60
+ "bi.source.model.field.join_type": "結合方式",
61
+ "bi.source.model.field.dimensions": "ディメンション",
62
+ "bi.source.model.field.measures": "指標",
63
+ "bi.source.model.field.code": "セマンティックコード",
64
+ "bi.source.model.field.display_name": "表示名",
65
+ "bi.source.model.field.table": "所属テーブル",
66
+ "bi.source.model.field.column": "データベース項目",
67
+ "bi.source.model.field.type": "型",
68
+ "bi.source.model.field.filterable": "フィルター可",
69
+ "bi.source.model.field.aggregation": "集計方法",
70
+ "bi.source.model.field.tables": "選択テーブル",
71
+ "bi.source.model.action.configure": "モデル設定",
72
+ "bi.source.model.action.auto_layout": "自動レイアウト",
73
+ "bi.source.model.action.add_dimension": "ディメンション追加",
74
+ "bi.source.model.action.add_measure": "指標追加",
75
+ "bi.source.model.action.previous": "前へ",
76
+ "bi.source.model.action.next": "次へ",
77
+ "bi.source.model.action.save": "保存して有効化",
78
+ "bi.source.model.action.preview": "クエリプレビュー",
79
+ "bi.source.model.action.done": "完了",
80
+ "bi.source.model.validation.select_tables": "テーブルを選択してファクトテーブルを指定してください",
81
+ "bi.source.model.message.saved": "データソースモデルを保存して有効化しました",
82
+ "bi.source.message.create_success": "データソースを作成しました",
83
+ "bi.source.message.update_success": "データソースを更新しました",
84
+ "bi.source.message.delete_success": "データソースを削除しました",
85
+ "bi.source.dialog.delete_confirm": "データソース「{name}」を削除しますか?",
86
+ "bi.source.action.test": "接続をテスト",
87
+ "bi.source.message.test_success": "データソース接続に成功しました",
88
+ "bi.source.message.test_failed": "データソース接続に失敗しました",
89
+ "bi.query.empty": "結果はありません",
90
+ "bi.query.error": "クエリに失敗しました",
91
+ "bi.query.save_name": "ダッシュボード名",
92
+ "bi.query.truncated": "結果は切り詰められました",
93
+ "bi.dashboard.title": "ダッシュボード",
94
+ "bi.dashboard.manage": "ダッシュボード管理",
95
+ "bi.dashboard.select_first": "先にダッシュボード管理から下書きを開いてください",
96
+ "bi.dashboard.refresh": "更新",
97
+ "bi.dashboard.preview": "実行",
98
+ "bi.dashboard.edit": "設計",
99
+ "bi.dashboard.publish": "公開",
100
+ "bi.dashboard.delete": "削除",
101
+ "bi.dashboard.empty": "ダッシュボードはありません",
102
+ "bi.dashboard.save": "下書きを保存",
103
+ "bi.dashboard.save_success": "下書きを保存しました",
104
+ "bi.dashboard.publish_success": "ダッシュボードを公開しました",
105
+ "bi.dashboard.delete_confirm": "このダッシュボードを削除しますか?",
106
+ "bi.dashboard.status_draft": "下書き",
107
+ "bi.dashboard.status_published": "公開済み",
108
+ "bi.dashboard.version": "バージョン",
109
+ "bi.dashboard.updated_at": "更新日時",
110
+ "bi.query_record.action.detail": "詳細を表示",
111
+ "bi.query_record.detail.result": "検索結果",
112
+ "bi.query_record.detail.title": "クエリ詳細",
113
+ "bi.query_record.field.elapsed_ms": "所要時間(ms)",
114
+ "bi.query_record.field.error_msg": "失敗原因",
115
+ "bi.query_record.field.id": "レコードID",
116
+ "bi.query_record.field.question": "質問内容",
117
+ "bi.query_record.field.row_count": "結果行数",
118
+ "bi.query_record.field.query_json": "クエリ計画",
119
+ "bi.query_record.field.source_code": "データソースコード",
120
+ "bi.query_record.field.truncated": "結果が切り詰められました",
121
+ "bi.query_record.field.status": "ステータス",
122
+ "bi.query_record.field.user": "ユーザー",
123
+ "bi.query_record.status.failed": "失敗",
124
+ "bi.query_record.status.success": "成功",
125
+ "bi.card.library": "データカード",
126
+ "bi.card.library_hint": "データカードを作成・お気に入り登録し、ダッシュボードに組み合わせて表示できます。",
127
+ "bi.workbench.title": "マイワークスペース",
128
+ "bi.card.create": "カードを作成",
129
+ "bi.card.edit": "カードを編集",
130
+ "bi.card.add": "カードを追加",
131
+ "bi.card.add_short": "追加",
132
+ "bi.card.added": "追加済み",
133
+ "bi.card.preview": "プレビュー",
134
+ "bi.card.save": "カードを保存",
135
+ "bi.card.save_result": "カードとして保存",
136
+ "bi.card.search": "カード名や業務データで検索",
137
+ "bi.card.all_sources": "すべての業務データ",
138
+ "bi.card.total": "{count} 件のカード",
139
+ "bi.card.category.all": "すべて",
140
+ "bi.card.category.system": "システム",
141
+ "bi.card.category.mine": "自分が作成",
142
+ "bi.card.category.favorite": "お気に入り",
143
+ "bi.card.category.shared": "共有されたカード",
144
+ "bi.card.name": "カード名",
145
+ "bi.card.source": "データソース",
146
+ "bi.card.dimensions": "ディメンション",
147
+ "bi.card.measure": "メジャー",
148
+ "bi.card.aggregation": "集計方法",
149
+ "bi.card.add_measure": "メジャーを追加",
150
+ "bi.card.chart_type": "グラフ種類",
151
+ "bi.card.refresh": "更新間隔",
152
+ "bi.card.refresh.0": "手動",
153
+ "bi.card.refresh.300": "5分ごと",
154
+ "bi.card.share": "プロジェクト内で共有",
155
+ "bi.card.chart.metric": "数値カード",
156
+ "bi.card.chart.bar": "棒グラフ",
157
+ "bi.card.chart.line": "折れ線グラフ",
158
+ "bi.card.chart.area": "面グラフ",
159
+ "bi.card.chart.pie": "円グラフ",
160
+ "bi.card.chart.donut": "ドーナツグラフ",
161
+ "bi.card.chart.gauge": "ゲージ",
162
+ "bi.card.aggregation.sum": "合計",
163
+ "bi.card.aggregation.count": "件数",
164
+ "bi.card.aggregation.avg": "平均",
165
+ "bi.card.aggregation.max": "最大値",
166
+ "bi.card.aggregation.min": "最小値",
167
+ "bi.card.favorite": "{name}をお気に入りに追加",
168
+ "bi.card.unfavorite": "{name}のお気に入りを解除",
169
+ "bi.card.empty": "カードがありません",
170
+ "bi.card.preview_empty": "プレビューでデータを表示",
171
+ "bi.card.chart_tab": "グラフ",
172
+ "bi.card.table_tab": "データ",
173
+ "bi.card.retry": "再試行",
174
+ "bi.card.validation.name": "カード名を入力してください",
175
+ "bi.card.validation.source": "データソースを選択してください",
176
+ "bi.card.validation.measures": "メジャーを選択してください",
177
+ "bi.card.saved": "カードを保存しました",
178
+ "bi.card.save_failed": "保存に失敗しました",
179
+ "bi.card.delete_failed": "削除に失敗しました",
180
+ "bi.card.delete_confirm": "カード「{name}」を削除しますか?",
181
+ "bi.workbench.arrange": "レイアウトを調整",
182
+ "bi.workbench.done": "レイアウトを保存",
183
+ "bi.workbench.restore": "既定レイアウトに戻す",
184
+ "bi.workbench.empty": "お気に入りのダッシュボードはありません",
185
+ "bi.workbench.drag": "ドラッグして並べ替え",
186
+ "bi.workbench.move_before": "{name}を前へ移動",
187
+ "bi.workbench.move_after": "{name}を後ろへ移動",
188
+ "bi.workbench.remove": "{name}を削除",
189
+ "bi.query.result": "クエリ結果",
190
+ "bi.query.elapsed": "{ms} ms",
191
+ "bi.card.more": "その他の操作",
192
+ "bi.card.refresh.86400": "毎日02:00",
193
+ "bi.card.period": "{name}の集計期間",
194
+ "bi.card.period.default": "カード設定に従う",
195
+ "bi.card.period.recent_days": "直近{days}日",
196
+ "bi.query.assistant": "分析アシスタント",
197
+ "bi.card.categories": "カード分類",
198
+ "bi.card.add_dashboard_success": "ダッシュボードの下書きに追加しました",
199
+ "bi.card.add_to_dashboard": "ダッシュボードに追加",
200
+ "bi.card.already_in_dashboard": "このカードは追加済みです",
201
+ "bi.card.chart_hint": "図表の種類は結果フィールドに応じて利用できます。設定はカードに保存されます。",
202
+ "bi.card.create_dashboard_first": "先にダッシュボードの下書きを作成してください",
203
+ "bi.card.data_zoom": "データズーム",
204
+ "bi.card.dimension_field": "カテゴリ / 日付フィールド",
205
+ "bi.card.need_dimension": "カテゴリまたは日付フィールドが必要です",
206
+ "bi.card.need_two_dimensions": "2つのカテゴリと数値フィールドが必要です",
207
+ "bi.card.need_two_numbers": "2つの数値フィールドが必要です",
208
+ "bi.card.need_ungrouped": "グループ化しない結果が必要です",
209
+ "bi.card.select_dashboard": "ダッシュボードを選択してください",
210
+ "bi.card.series_field": "第2カテゴリ / 対象フィールド",
211
+ "bi.card.show_label": "値ラベルを表示",
212
+ "bi.card.show_legend": "凡例を表示",
213
+ "bi.card.source_record": "元のクエリ #{id}",
214
+ "bi.card.stack": "積み上げ表示",
215
+ "bi.card.ungrouped": "グループ化なし",
216
+ "bi.card.value_field": "数値フィールド",
217
+ "bi.dashboard.back_workbench": "ワークスペースに戻る",
218
+ "bi.dashboard.card_height": "カードの高さ",
219
+ "bi.dashboard.card_missing": "カードは削除されたか、アクセスできません。参照を削除してください。",
220
+ "bi.dashboard.card_width": "カードの幅",
221
+ "bi.dashboard.choose_cards": "ライブラリから保存済みカードを選択",
222
+ "bi.dashboard.code": "ダッシュボードコード",
223
+ "bi.dashboard.code_required": "ダッシュボードコードを入力してください",
224
+ "bi.dashboard.configure_menu": "メニュー設定",
225
+ "bi.dashboard.create": "ダッシュボードを作成",
226
+ "bi.dashboard.description": "説明",
227
+ "bi.dashboard.invalid_id": "有効なダッシュボードを選択してください",
228
+ "bi.dashboard.layout_settings": "レイアウト設定",
229
+ "bi.dashboard.published_version": "公開バージョン",
230
+ "bi.dashboard.read_only": "このダッシュボードは閲覧専用です",
231
+ "bi.dashboard.theme": "テーマ",
232
+ "bi.dashboard.theme_auto": "システムに合わせる",
233
+ "bi.dashboard.theme_dark": "ダーク",
234
+ "bi.dashboard.theme_light": "ライト",
235
+ "bi.dashboard.width_full": "全幅",
236
+ "bi.dashboard.width_half": "半幅",
237
+ "bi.dashboard.width_quarter": "4分の1幅",
238
+ "bi.query.hide_details": "データ詳細を閉じる",
239
+ "bi.query.history": "クエリ履歴",
240
+ "bi.query.result_ready": "クエリが完了しました。右側で結果カードを確認・保存できます。",
241
+ "bi.workbench.add_dashboard": "ダッシュボードを追加",
242
+ "bi.workbench.dashboard_hint": "公開済みダッシュボードから業務データを確認します。",
243
+ "bi.workbench.open_dashboard": "ダッシュボードを開く",
244
+ "bi.dashboard.favorite": "お気に入りに追加",
245
+ "bi.dashboard.favorited": "登録済み",
246
+ "bi.dashboard.not_favorited": "未登録",
247
+ "bi.dashboard.unfavorite": "お気に入りを解除",
248
+ "bi.workbench.saved": "ダッシュボードのショートカットを保存しました",
249
+ "bi.query.search_history": "クエリ履歴を検索",
250
+ "bi.card.ask_create": "AIデータクエリで作成",
251
+ "bi.card.ask_required": "AIデータクエリで実データを取得してから保存してください",
252
+ "bi.dashboard.menu_position": "配置先",
253
+ "bi.dashboard.menu_saved": "ダッシュボードメニューを保存しました"
254
+ }