@opencode/ui 2.0.15 → 2.0.16

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 (101) hide show
  1. package/dist/context/dialog.d.ts +3 -0
  2. package/dist/context/i18n.d.ts +11 -2
  3. package/dist/i18n/ar.d.ts +97 -0
  4. package/dist/i18n/bg.d.ts +57 -0
  5. package/dist/i18n/br.d.ts +67 -0
  6. package/dist/i18n/bs.d.ts +67 -0
  7. package/dist/i18n/da.d.ts +57 -0
  8. package/dist/i18n/de.d.ts +57 -0
  9. package/dist/i18n/en.d.ts +6 -0
  10. package/dist/i18n/es.d.ts +67 -0
  11. package/dist/i18n/fr.d.ts +67 -0
  12. package/dist/i18n/he.d.ts +67 -0
  13. package/dist/i18n/ja.d.ts +57 -0
  14. package/dist/i18n/km.d.ts +57 -0
  15. package/dist/i18n/ko.d.ts +57 -0
  16. package/dist/i18n/lo.d.ts +57 -0
  17. package/dist/i18n/mk.d.ts +57 -0
  18. package/dist/i18n/mn.d.ts +57 -0
  19. package/dist/i18n/my.d.ts +57 -0
  20. package/dist/i18n/pl.d.ts +77 -0
  21. package/dist/i18n/ru.d.ts +77 -0
  22. package/dist/i18n/sr.d.ts +71 -4
  23. package/dist/i18n/tg.d.ts +57 -0
  24. package/dist/i18n/th.d.ts +57 -0
  25. package/dist/i18n/tr.d.ts +57 -0
  26. package/dist/i18n/zh.d.ts +57 -0
  27. package/dist/i18n/zht.d.ts +57 -0
  28. package/dist/overlays/dialog/dialog.d.ts +4 -1
  29. package/package.json +1 -1
  30. package/src/context/dialog.tsx +11 -2
  31. package/src/context/i18n.tsx +49 -5
  32. package/src/i18n/am.ts +57 -0
  33. package/src/i18n/ar.ts +98 -0
  34. package/src/i18n/az.ts +57 -0
  35. package/src/i18n/bg.ts +57 -0
  36. package/src/i18n/bn.ts +61 -0
  37. package/src/i18n/br.ts +69 -0
  38. package/src/i18n/bs.ts +67 -0
  39. package/src/i18n/ca.ts +67 -0
  40. package/src/i18n/cs.ts +77 -0
  41. package/src/i18n/da.ts +58 -0
  42. package/src/i18n/de.ts +58 -0
  43. package/src/i18n/dv.ts +64 -0
  44. package/src/i18n/dz.ts +59 -0
  45. package/src/i18n/el.ts +57 -0
  46. package/src/i18n/en.ts +6 -0
  47. package/src/i18n/es.ts +68 -0
  48. package/src/i18n/et.ts +57 -0
  49. package/src/i18n/fa.ts +59 -0
  50. package/src/i18n/fi.ts +58 -0
  51. package/src/i18n/fo.ts +57 -0
  52. package/src/i18n/fr.ts +68 -0
  53. package/src/i18n/he.ts +68 -0
  54. package/src/i18n/hi.ts +61 -0
  55. package/src/i18n/hr.ts +67 -0
  56. package/src/i18n/hu.ts +57 -0
  57. package/src/i18n/hy.ts +58 -0
  58. package/src/i18n/id.ts +58 -0
  59. package/src/i18n/is.ts +58 -0
  60. package/src/i18n/it.ts +69 -0
  61. package/src/i18n/ja.ts +58 -0
  62. package/src/i18n/ka.ts +58 -0
  63. package/src/i18n/km.ts +61 -3
  64. package/src/i18n/ko.ts +58 -0
  65. package/src/i18n/lo.ts +58 -0
  66. package/src/i18n/lt.ts +77 -0
  67. package/src/i18n/lv.ts +67 -0
  68. package/src/i18n/mk.ts +57 -0
  69. package/src/i18n/mn.ts +57 -0
  70. package/src/i18n/ms.ts +58 -0
  71. package/src/i18n/my.ts +58 -0
  72. package/src/i18n/ne.ts +61 -0
  73. package/src/i18n/nl.ts +58 -0
  74. package/src/i18n/no.ts +58 -0
  75. package/src/i18n/pa.ts +63 -0
  76. package/src/i18n/pl.ts +77 -0
  77. package/src/i18n/ro.ts +68 -0
  78. package/src/i18n/ru.ts +77 -0
  79. package/src/i18n/si.ts +61 -0
  80. package/src/i18n/sk.ts +85 -8
  81. package/src/i18n/sl.ts +85 -8
  82. package/src/i18n/sq.ts +57 -0
  83. package/src/i18n/sr.ts +71 -4
  84. package/src/i18n/sv.ts +58 -0
  85. package/src/i18n/tg.ts +58 -0
  86. package/src/i18n/th.ts +58 -0
  87. package/src/i18n/tk.ts +57 -0
  88. package/src/i18n/tr.ts +57 -0
  89. package/src/i18n/uk.ts +85 -8
  90. package/src/i18n/ur.ts +64 -0
  91. package/src/i18n/uz.ts +59 -2
  92. package/src/i18n/vi.ts +59 -1
  93. package/src/i18n/zh.ts +58 -0
  94. package/src/i18n/zht.ts +58 -0
  95. package/src/overlays/dialog/dialog.tsx +23 -4
  96. package/src/theme/color.ts +1 -1
  97. package/src/theme/themes/catppuccin-frappe.json +20 -40
  98. package/src/theme/themes/catppuccin-macchiato.json +14 -34
  99. package/src/theme/themes/catppuccin.json +7 -7
  100. package/src/theme/themes/kanagawa.json +18 -18
  101. package/src/theme/themes/oc-2.json +1 -1
@@ -108,6 +108,8 @@ export declare const dict: {
108
108
  "ui.promptInput.commands": string;
109
109
  "ui.promptInput.dropFiles": string;
110
110
  "ui.promptInput.removeAttachment": string;
111
+ "ui.promptInput.cancelUpload": string;
112
+ "ui.promptInput.uploading": string;
111
113
  "ui.promptInput.label": string;
112
114
  "ui.promptInput.placeholder.shell": string;
113
115
  "ui.promptInput.placeholder.normal": string;
@@ -190,4 +192,59 @@ export declare const dict: {
190
192
  "ui.toolErrorCard.copyError": string;
191
193
  "ui.message.duration.seconds": string;
192
194
  "ui.message.duration.minutesSeconds": string;
195
+ "ui.messagePart.context.match.one": string;
196
+ "ui.messagePart.context.match.other": string;
197
+ "ui.tool.execute": string;
198
+ "ui.tool.loadedFile": string;
199
+ "ui.tool.loadedSkill": string;
200
+ "ui.tool.shell.writingCommand": string;
201
+ "ui.tool.agent.delegating": string;
202
+ "ui.common.moreCount.one": string;
203
+ "ui.common.moreCount.other": string;
204
+ "ui.sessionTimeline.notice.model": string;
205
+ "ui.sessionTimeline.notice.movedTo": string;
206
+ "ui.sessionTimeline.notice.movedTooltip": string;
207
+ "ui.sessionTimeline.notice.failed": string;
208
+ "ui.sessionTimeline.notice.cancelled": string;
209
+ "ui.sessionTimeline.notice.finished": string;
210
+ "ui.sessionTimeline.notice.instructionsUpdated": string;
211
+ "ui.sessionTimeline.notice.restart": string;
212
+ "ui.promptInput.placeholder.followUp": string;
213
+ "ui.promptInput.steer": string;
214
+ "ui.promptInput.queue": string;
215
+ "ui.promptInput.steerHint": string;
216
+ "ui.tool.loadedSkills.one": string;
217
+ "ui.tool.loadedSkills.other": string;
218
+ "ui.tool.shell.exit": string;
219
+ "ui.tool.shell.timeout": string;
220
+ "ui.tool.shell.cancelled": string;
221
+ "ui.message.thought": string;
222
+ "ui.sessionTimeline.notice.modelSwitched": string;
223
+ "ui.sessionTurn.retry.attemptLabel": string;
224
+ "ui.sessionTurn.retry.attemptRetrying": string;
225
+ "ui.messagePart.context.notice.one": string;
226
+ "ui.messagePart.context.notice.other": string;
227
+ "ui.messagePart.context.thought.one": string;
228
+ "ui.messagePart.context.thought.other": string;
229
+ "ui.promptInput.dropFiles.image": string;
230
+ "ui.promptInput.dropFiles.pdf": string;
231
+ "ui.promptInput.dropFiles.imagePdf": string;
232
+ "ui.promptInput.exitShell": string;
233
+ "ui.sessionTimeline.notice.agentChanged": string;
234
+ "ui.sessionTurn.retry.attemptWaiting.one": string;
235
+ "ui.sessionTurn.retry.attemptWaiting.other": string;
236
+ "ui.sessionTurn.retry.attemptRetryingNow": string;
237
+ "ui.messagePart.compaction.started": string;
238
+ "ui.messagePart.compaction.running": string;
239
+ "ui.messagePart.compaction.failed": string;
240
+ "ui.messagePart.compaction.cancelled": string;
241
+ "ui.messagePart.compaction.interrupted": string;
242
+ "ui.messagePart.providerCompaction": string;
243
+ "ui.messagePart.compaction.usage": string;
244
+ "ui.messagePart.context.updates": string;
245
+ "ui.messagePart.tools.used.one": string;
246
+ "ui.messagePart.tools.used.other": string;
247
+ "ui.tool.browser": string;
248
+ "ui.common.fileCount.one": string;
249
+ "ui.common.fileCount.other": string;
193
250
  };
@@ -1,3 +1,4 @@
1
+ import { Content } from "@kobalte/core/dialog";
1
2
  import { type ComponentProps, type JSXElement, type ParentProps } from "solid-js";
2
3
  import "./dialog.css";
3
4
  export interface DialogProps extends ParentProps {
@@ -7,6 +8,8 @@ export interface DialogProps extends ParentProps {
7
8
  containerClass?: ComponentProps<"div">["class"];
8
9
  classList?: ComponentProps<"div">["classList"];
9
10
  fit?: boolean;
11
+ onCloseAutoFocus?: ComponentProps<typeof Content>["onCloseAutoFocus"];
12
+ preventBackdropDismiss?: boolean;
10
13
  }
11
14
  export interface DialogHeaderProps extends ParentProps {
12
15
  closeLabel?: string;
@@ -14,7 +17,7 @@ export interface DialogHeaderProps extends ParentProps {
14
17
  }
15
18
  export interface DialogTitleGroupProps {
16
19
  title?: JSXElement;
17
- description: JSXElement;
20
+ description?: JSXElement;
18
21
  }
19
22
  export declare function DialogFooter(props: ParentProps): import("solid-js").JSX.Element;
20
23
  export declare function DialogBody(props: ParentProps & {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opencode/ui",
3
- "version": "2.0.15",
3
+ "version": "2.0.16",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -28,6 +28,12 @@ type Active = {
28
28
  }
29
29
 
30
30
  const Context = createContext<ReturnType<typeof init>>()
31
+ // Lets the dialog rendered in a layer opt out of closing on a backdrop click.
32
+ const LayerContext = createContext<{ setBackdropDismiss: (value: boolean) => void }>()
33
+
34
+ export function useDialogLayer() {
35
+ return useContext(LayerContext)
36
+ }
31
37
 
32
38
  function init() {
33
39
  const [stack, setStack] = createSignal<Active[]>([])
@@ -86,6 +92,7 @@ function init() {
86
92
  createRoot((d: () => void) => {
87
93
  dispose = d
88
94
  const [closing, setClosingSignal] = createSignal(false)
95
+ const [backdropDismiss, setBackdropDismiss] = createSignal(true)
89
96
  setClosing = setClosingSignal
90
97
  return (
91
98
  <Kobalte
@@ -100,7 +107,9 @@ function init() {
100
107
  <Kobalte.Overlay
101
108
  data-component="dialog-overlay"
102
109
  style={{ "z-index": String(zIndex) }}
103
- onClick={() => close(id)}
110
+ onClick={() => {
111
+ if (backdropDismiss()) close(id)
112
+ }}
104
113
  />
105
114
  <div
106
115
  data-dialog-layer={layer}
@@ -114,7 +123,7 @@ function init() {
114
123
  "pointer-events": "none",
115
124
  }}
116
125
  >
117
- {element()}
126
+ <LayerContext.Provider value={{ setBackdropDismiss }}>{element()}</LayerContext.Provider>
118
127
  </div>
119
128
  </Kobalte.Portal>
120
129
  </Kobalte>
@@ -9,11 +9,12 @@ export type UiPluralCategory = PluralCategory
9
9
  export type UiI18nPluralLookupKey = PluralLookupKey
10
10
  export type UiI18nLocaleKey = LocaleKey
11
11
  type UiTranslationKey<Value extends string> = Value extends UiI18nPluralLookupKey ? never : Value
12
+ export type UiI18nOrdinaryKey = UiTranslationKey<UiI18nKey>
12
13
 
13
14
  export type UiI18nParams = Record<string, string | number | boolean>
14
15
  export type UiTranslate = <Value extends string>(key: UiTranslationKey<Value>, params?: UiI18nParams) => string
15
16
 
16
- export type UiI18n = {
17
+ export type UiI18nSource = {
17
18
  locale: Accessor<string>
18
19
  layoutLocale?: Accessor<string>
19
20
  t: UiTranslate
@@ -21,6 +22,13 @@ export type UiI18n = {
21
22
  pluralForm?: (key: UiI18nPluralKey, category: UiPluralCategory, params?: UiI18nParams) => string
22
23
  }
23
24
 
25
+ export type UiI18n = UiI18nSource & {
26
+ /** Preserve runtime-generated English copy while using the keyed dictionary for every other locale. */
27
+ tDynamic: (key: UiI18nOrdinaryKey, source: string, params?: UiI18nParams) => string
28
+ list: (items: readonly string[]) => string
29
+ listSeparator: (index: number, count: number) => string
30
+ }
31
+
24
32
  const rules = new Map<string, Intl.PluralRules>()
25
33
 
26
34
  export function pluralCategory(locale: string, count: number): UiPluralCategory {
@@ -36,6 +44,21 @@ export function pluralKey(key: UiI18nPluralKey, category: UiPluralCategory) {
36
44
  return `${key}.${category}` as UiI18nPluralLookupKey
37
45
  }
38
46
 
47
+ export function localizedListSeparator(locale: string, index: number, count: number) {
48
+ if (index <= 0 || index >= count) return ""
49
+ const parts = new Intl.ListFormat(locale, { style: "long", type: "conjunction" }).formatToParts(
50
+ Array.from({ length: count }, (_, item) => String(item)),
51
+ )
52
+ const current = parts.findIndex((part) => part.type === "element" && part.value === String(index))
53
+ const previous = parts.findLastIndex(
54
+ (part, partIndex) => partIndex < current && part.type === "element" && part.value === String(index - 1),
55
+ )
56
+ return parts
57
+ .slice(previous + 1, current)
58
+ .map((part) => part.value)
59
+ .join("")
60
+ }
61
+
39
62
  function resolveTemplate(text: string, params?: UiI18nParams) {
40
63
  if (!params) return text
41
64
  return text.replace(/{{\s*([^}]+?)\s*}}/g, (_, rawKey) => {
@@ -45,7 +68,26 @@ function resolveTemplate(text: string, params?: UiI18nParams) {
45
68
  })
46
69
  }
47
70
 
48
- const fallback: UiI18n = {
71
+ export function createUiI18n(source: UiI18nSource): UiI18n {
72
+ return {
73
+ ...source,
74
+ tDynamic: (key, value, params) =>
75
+ source.locale().toLowerCase().split("-")[0] === "en" ? resolveTemplate(value, params) : source.t(key, params),
76
+ // English tool labels intentionally use comma-only lists; the animated count labels use the same punctuation.
77
+ list: (items) =>
78
+ source.locale().toLowerCase().split("-")[0] === "en"
79
+ ? items.join(", ")
80
+ : new Intl.ListFormat(source.locale(), { style: "long", type: "conjunction" }).format(items),
81
+ listSeparator: (index, count) =>
82
+ source.locale().toLowerCase().split("-")[0] === "en"
83
+ ? index > 0 && index < count
84
+ ? ","
85
+ : ""
86
+ : localizedListSeparator(source.locale(), index, count),
87
+ }
88
+ }
89
+
90
+ const fallbackSource: UiI18nSource = {
49
91
  locale: () => "en",
50
92
  t: (key, params) => {
51
93
  const value = en[key as UiI18nKey] ?? String(key)
@@ -59,13 +101,15 @@ const fallback: UiI18n = {
59
101
  return resolveTemplate(value, params)
60
102
  },
61
103
  }
104
+ const fallback = createUiI18n(fallbackSource)
62
105
 
63
106
  const Context = createContext<UiI18n>(fallback)
64
107
 
65
- function UiI18nProvider(props: ParentProps<{ value: UiI18n }>) {
108
+ function UiI18nProvider(props: ParentProps<{ value: UiI18nSource }>) {
109
+ const value = createUiI18n(props.value)
66
110
  return (
67
- <I18nProvider locale={(props.value.layoutLocale ?? props.value.locale)()}>
68
- <Context.Provider value={props.value}>{props.children}</Context.Provider>
111
+ <I18nProvider locale={(value.layoutLocale ?? value.locale)()}>
112
+ <Context.Provider value={value}>{props.children}</Context.Provider>
69
113
  </I18nProvider>
70
114
  )
71
115
  }
package/src/i18n/am.ts CHANGED
@@ -191,4 +191,61 @@ export const dict: Record<string, string> = {
191
191
  "ui.question.multiHint": "የሚመለከተውን ሁሉንም መልሶች ይምረጡ",
192
192
  "ui.question.singleHint": "አንድ መልስ ምረጥ",
193
193
  "ui.question.custom.placeholder": "መልስዎን ይተይቡ…",
194
+ "ui.messagePart.context.match.one": "({{count}} ተዛማጅ)",
195
+ "ui.messagePart.context.match.other": "({{count}} ተዛማጆች)",
196
+ "ui.tool.execute": "አስፈጽም",
197
+ "ui.tool.loadedFile": "{{path}} ተጭኗል",
198
+ "ui.tool.loadedSkill": "የ{{name}} ክህሎት ተጭኗል",
199
+ "ui.tool.shell.writingCommand": "ትዕዛዝ በመጻፍ ላይ...",
200
+ "ui.tool.agent.delegating": "ለወኪል በማስተላለፍ ላይ...",
201
+ "ui.common.moreCount.one": "+{{count}} ተጨማሪ",
202
+ "ui.common.moreCount.other": "+{{count}} ተጨማሪ",
203
+ "ui.sessionTimeline.notice.model": "ሞዴል",
204
+ "ui.sessionTimeline.notice.movedTo": "ተንቀሳቅሷል ወደ",
205
+ "ui.sessionTimeline.notice.movedTooltip": "የክፍለ ጊዜው የሥራ ማውጫ ተቀይሯል",
206
+ "ui.sessionTimeline.notice.failed": "{{actor}} አልተሳካም",
207
+ "ui.sessionTimeline.notice.cancelled": "{{actor}} ተሰርዟል",
208
+ "ui.sessionTimeline.notice.finished": "{{actor}} ጨርሷል",
209
+ "ui.sessionTimeline.notice.instructionsUpdated": "መመሪያዎች ተዘምነዋል",
210
+ "ui.sessionTimeline.notice.restart": "ከዳግም ማስጀመር በኋላ በመቀጠል ላይ",
211
+ "ui.promptInput.placeholder.followUp": "ተከታይ መልዕክት ያክሉ፣ {{slash}} ለትዕዛዞች፣ {{at}} ለአውድ...",
212
+ "ui.promptInput.steer": "አቅጣጫ ስጥ",
213
+ "ui.promptInput.queue": "ወረፋ",
214
+ "ui.promptInput.steerHint": "ሳያቋርጡ ይላኩ",
215
+ "ui.tool.loadedSkills.one": "የ{{name}} ክህሎት ተጭኗል",
216
+ "ui.tool.loadedSkills.other": "የ{{name}} ክህሎቶች ተጭነዋል",
217
+ "ui.tool.shell.exit": "ትዕዛዙ በኮድ {{code}} ወጥቷል",
218
+ "ui.tool.shell.timeout": "የትዕዛዙ ጊዜ አልፏል",
219
+ "ui.tool.shell.cancelled": "ትዕዛዙ ተሰርዟል",
220
+ "ui.message.thought": "ሐሳብ",
221
+ "ui.sessionTimeline.notice.modelSwitched": "ወደ {{model}} ተቀይሯል",
222
+ "ui.sessionTurn.retry.attemptLabel": "ሙከራ {{attempt}}",
223
+ "ui.sessionTurn.retry.attemptRetrying": "ሙከራ {{attempt}} - {{line}}",
224
+ "ui.messagePart.context.notice.one": "{{count}} ማሳወቂያ",
225
+ "ui.messagePart.context.notice.other": "{{count}} ማሳወቂያዎች",
226
+ "ui.messagePart.context.thought.one": "ሐሳብ",
227
+ "ui.messagePart.context.thought.other": "ሐሳቦች",
228
+ "ui.promptInput.dropFiles.image": "ምስሎችን ወይም ፋይሎችን ለማከል ጣል",
229
+ "ui.promptInput.dropFiles.pdf": "PDF-ዎችን ወይም ፋይሎችን ለማከል ጣል",
230
+ "ui.promptInput.dropFiles.imagePdf": "ምስሎችን፣ PDF-ዎችን ወይም ፋይሎችን ለማከል ጣል",
231
+ "ui.promptInput.exitShell": "ውጣ",
232
+ "ui.sessionTimeline.notice.agentChanged": "ወኪሉ ተቀይሯል",
233
+ "ui.sessionTurn.retry.attemptWaiting.one": "ሙከራ {{attempt}} - በ{{count}} ሰከንድ ውስጥ እንደገና ይሞከራል",
234
+ "ui.sessionTurn.retry.attemptWaiting.other": "ሙከራ {{attempt}} - በ{{count}} ሰከንዶች ውስጥ እንደገና ይሞከራል",
235
+ "ui.sessionTurn.retry.attemptRetryingNow": "ሙከራ {{attempt}} - እንደገና በመሞከር ላይ",
236
+ "ui.messagePart.compaction.started": "ክፍለ ጊዜ መጨናነቅ ተጀመረ",
237
+ "ui.messagePart.compaction.running": "መጠቅለል",
238
+ "ui.messagePart.compaction.failed": "ክፍለ ጊዜ መጨናነቅ አልተሳካም",
239
+ "ui.messagePart.compaction.cancelled": "ክፍለ ጊዜ መጨናነቅ ተሰርዟል።",
240
+ "ui.messagePart.compaction.interrupted": "ክፍለ ጊዜ መጨናነቅ ተቋርጧል",
241
+ "ui.messagePart.providerCompaction": "ክፍለ ጊዜ በአቅራቢው የታመቀ",
242
+ "ui.messagePart.compaction.usage": "{{input}} ውስጥ · {{output}} ወጥቷል",
243
+ "ui.messagePart.tools.used.one": "ጥቅም ላይ የዋለ {{count}} {{tools}}",
244
+ "ui.messagePart.tools.used.other": "ጥቅም ላይ የዋለ {{count}} {{tools}}",
245
+ "ui.tool.browser": "አሳሽ",
246
+ "ui.common.fileCount.one": "{{count}} ፋይል",
247
+ "ui.common.fileCount.other": "{{count}} ፋይሎች",
248
+ "ui.messagePart.context.updates": "ዝማኔዎች",
249
+ "ui.promptInput.cancelUpload": "ስቀላን ሰርዝ",
250
+ "ui.promptInput.uploading": "{{percent}}%",
194
251
  }
package/src/i18n/ar.ts CHANGED
@@ -228,4 +228,102 @@ export const dict = {
228
228
  "ui.toolErrorCard.copyError": "نسخ الخطأ",
229
229
  "ui.message.duration.seconds": "{{count}}ث",
230
230
  "ui.message.duration.minutesSeconds": "{{minutes}}د {{seconds}}ث",
231
+ "ui.messagePart.context.match.zero": "(عدد التطابقات: {{count}})",
232
+ "ui.messagePart.context.match.one": "({{count}} تطابق)",
233
+ "ui.messagePart.context.match.two": "(عدد التطابقات: {{count}})",
234
+ "ui.messagePart.context.match.few": "({{count}} تطابقات)",
235
+ "ui.messagePart.context.match.many": "({{count}} تطابقًا)",
236
+ "ui.messagePart.context.match.other": "(التطابقات: {{count}})",
237
+ "ui.tool.execute": "تنفيذ",
238
+ "ui.tool.loadedFile": "تم تحميل \u2068{{path}}\u2069",
239
+ "ui.tool.loadedSkill": "تم تحميل المهارة \u2068{{name}}\u2069",
240
+ "ui.tool.shell.writingCommand": "جارٍ كتابة الأمر...",
241
+ "ui.tool.agent.delegating": "جارٍ تفويض الوكيل...",
242
+ "ui.common.moreCount.zero": "+{{count}} أخرى",
243
+ "ui.common.moreCount.one": "+{{count}} آخر",
244
+ "ui.common.moreCount.two": "+{{count}} آخران",
245
+ "ui.common.moreCount.few": "+{{count}} أخرى",
246
+ "ui.common.moreCount.many": "+{{count}} أخرى",
247
+ "ui.common.moreCount.other": "+{{count}} أخرى",
248
+ "ui.sessionTimeline.notice.model": "النموذج",
249
+ "ui.sessionTimeline.notice.movedTo": "نُقلت إلى",
250
+ "ui.sessionTimeline.notice.movedTooltip": "تغيّر دليل عمل الجلسة",
251
+ "ui.sessionTimeline.notice.failed": "فشل تشغيل \u2068{{actor}}\u2069",
252
+ "ui.sessionTimeline.notice.cancelled": "أُلغي تشغيل \u2068{{actor}}\u2069",
253
+ "ui.sessionTimeline.notice.finished": "انتهى تشغيل \u2068{{actor}}\u2069",
254
+ "ui.sessionTimeline.notice.instructionsUpdated": "تم تحديث التعليمات",
255
+ "ui.sessionTimeline.notice.restart": "المتابعة بعد إعادة التشغيل",
256
+ "ui.promptInput.placeholder.followUp": "أضف متابعة، \u2068{{slash}}\u2069 للأوامر، و\u2068{{at}}\u2069 للسياق...",
257
+ "ui.promptInput.steer": "توجيه",
258
+ "ui.promptInput.queue": "وضع في قائمة الانتظار",
259
+ "ui.promptInput.steerHint": "إرسال دون مقاطعة",
260
+ "ui.tool.loadedSkills.zero": "لم يتم تحميل أي مهارات من \u2068{{name}}\u2069",
261
+ "ui.tool.loadedSkills.one": "تم تحميل المهارة \u2068{{name}}\u2069",
262
+ "ui.tool.loadedSkills.two": "تم تحميل مهارتَي \u2068{{name}}\u2069",
263
+ "ui.tool.loadedSkills.few": "تم تحميل مهارات \u2068{{name}}\u2069",
264
+ "ui.tool.loadedSkills.many": "تم تحميل مهارات \u2068{{name}}\u2069",
265
+ "ui.tool.loadedSkills.other": "تم تحميل مهارات \u2068{{name}}\u2069",
266
+ "ui.tool.shell.exit": "خرج الأمر بالرمز {{code}}",
267
+ "ui.tool.shell.timeout": "انتهت مهلة الأمر",
268
+ "ui.tool.shell.cancelled": "أُلغي الأمر",
269
+ "ui.message.thought": "فكرة",
270
+ "ui.sessionTimeline.notice.modelSwitched": "تم التبديل إلى \u2068{{model}}\u2069",
271
+ "ui.common.file.zero": "ملفات",
272
+ "ui.common.file.two": "ملفان",
273
+ "ui.common.file.few": "ملفات",
274
+ "ui.common.file.many": "ملفًا",
275
+ "ui.common.fileCount.zero": "\u2068{{count}}\u2069 ملف",
276
+ "ui.common.fileCount.one": "\u2068{{count}}\u2069 ملف",
277
+ "ui.common.fileCount.two": "\u2068{{count}}\u2069 ملفان",
278
+ "ui.common.fileCount.few": "\u2068{{count}}\u2069 ملفات",
279
+ "ui.common.fileCount.many": "\u2068{{count}}\u2069 ملفًا",
280
+ "ui.common.fileCount.other": "\u2068{{count}}\u2069 ملف",
281
+ "ui.common.question.zero": "أسئلة",
282
+ "ui.common.question.two": "سؤالان",
283
+ "ui.common.question.few": "أسئلة",
284
+ "ui.common.question.many": "سؤالًا",
285
+ "ui.sessionTurn.retry.attemptLabel": "المحاولة {{attempt}}",
286
+ "ui.sessionTurn.retry.attemptRetrying": "المحاولة {{attempt}} - \u2068{{line}}\u2069",
287
+ "ui.messagePart.context.notice.zero": "{{count}} إشعار",
288
+ "ui.messagePart.context.notice.one": "{{count}} إشعار",
289
+ "ui.messagePart.context.notice.two": "{{count}} إشعاران",
290
+ "ui.messagePart.context.notice.few": "{{count}} إشعارات",
291
+ "ui.messagePart.context.notice.many": "{{count}} إشعارًا",
292
+ "ui.messagePart.context.notice.other": "{{count}} إشعار",
293
+ "ui.messagePart.context.thought.zero": "أفكار",
294
+ "ui.messagePart.context.thought.one": "فكرة",
295
+ "ui.messagePart.context.thought.two": "فكرتان",
296
+ "ui.messagePart.context.thought.few": "أفكار",
297
+ "ui.messagePart.context.thought.many": "فكرة",
298
+ "ui.messagePart.context.thought.other": "فكرة",
299
+ "ui.promptInput.dropFiles.image": "أفلت الصور أو الملفات لإضافتها",
300
+ "ui.promptInput.dropFiles.pdf": "أفلت ملفات \u2068PDF\u2069 أو الملفات لإضافتها",
301
+ "ui.promptInput.dropFiles.imagePdf": "أفلت الصور أو ملفات \u2068PDF\u2069 أو الملفات لإضافتها",
302
+ "ui.promptInput.exitShell": "خروج",
303
+ "ui.sessionTimeline.notice.agentChanged": "تم تغيير الوكيل",
304
+ "ui.sessionTurn.retry.attemptWaiting.zero": "المحاولة {{attempt}} - إعادة المحاولة بعد {{count}} ث",
305
+ "ui.sessionTurn.retry.attemptWaiting.one": "المحاولة {{attempt}} - إعادة المحاولة بعد {{count}} ث",
306
+ "ui.sessionTurn.retry.attemptWaiting.two": "المحاولة {{attempt}} - إعادة المحاولة بعد {{count}} ث",
307
+ "ui.sessionTurn.retry.attemptWaiting.few": "المحاولة {{attempt}} - إعادة المحاولة بعد {{count}} ث",
308
+ "ui.sessionTurn.retry.attemptWaiting.many": "المحاولة {{attempt}} - إعادة المحاولة بعد {{count}} ث",
309
+ "ui.sessionTurn.retry.attemptWaiting.other": "المحاولة {{attempt}} - إعادة المحاولة بعد {{count}} ث",
310
+ "ui.sessionTurn.retry.attemptRetryingNow": "المحاولة {{attempt}} - جارٍ إعادة المحاولة",
311
+ "ui.messagePart.compaction.started": "بدأ ضغط الجلسة",
312
+ "ui.messagePart.compaction.running": "جارٍ الضغط",
313
+ "ui.messagePart.compaction.failed": "فشل ضغط الجلسة",
314
+ "ui.messagePart.compaction.cancelled": "أُلغي ضغط الجلسة",
315
+ "ui.messagePart.compaction.interrupted": "قوطع ضغط الجلسة",
316
+ "ui.messagePart.providerCompaction": "ضغط موفر الخدمة الجلسة",
317
+ "ui.messagePart.compaction.usage": "{{input}} إدخال · {{output}} إخراج",
318
+ "ui.messagePart.tools.used.one": "استُخدمت {{count}} أداة: \u2068{{tools}}\u2069",
319
+ "ui.messagePart.tools.used.other": "استُخدمت {{count}} أداة: \u2068{{tools}}\u2069",
320
+ "ui.tool.browser": "المتصفح",
321
+ "ui.messagePart.tools.used.zero": "لم تُستخدم أي أداة من أصل \u2068{{count}}\u2069: \u2068{{tools}}\u2069",
322
+ "ui.messagePart.tools.used.two": "استُخدمت {{count}} أداتان: \u2068{{tools}}\u2069",
323
+ "ui.messagePart.tools.used.few": "استُخدمت \u2068{{count}}\u2069 أدوات: \u2068{{tools}}\u2069",
324
+ "ui.messagePart.tools.used.many": "استُخدمت {{count}} أداة: \u2068{{tools}}\u2069",
325
+
326
+ "ui.messagePart.context.updates": "التحديثات",
327
+ "ui.promptInput.cancelUpload": "إلغاء الرفع",
328
+ "ui.promptInput.uploading": "\u2068{{percent}}\u2069%",
231
329
  }
package/src/i18n/az.ts CHANGED
@@ -192,4 +192,61 @@ export const dict: Record<string, string> = {
192
192
  "ui.question.multiHint": "Uyğun gələn bütün cavabları seçin",
193
193
  "ui.question.singleHint": "Bir cavab seçin",
194
194
  "ui.question.custom.placeholder": "Cavabınızı yazın…",
195
+ "ui.messagePart.context.match.one": "({{count}} uyğunluq)",
196
+ "ui.messagePart.context.match.other": "({{count}} uyğunluq)",
197
+ "ui.tool.execute": "İcra et",
198
+ "ui.tool.loadedFile": "{{path}} yükləndi",
199
+ "ui.tool.loadedSkill": "{{name}} bacarığı yükləndi",
200
+ "ui.tool.shell.writingCommand": "Əmr yazılır...",
201
+ "ui.tool.agent.delegating": "Agentə həvalə edilir...",
202
+ "ui.common.moreCount.one": "+{{count}} əlavə",
203
+ "ui.common.moreCount.other": "+{{count}} əlavə",
204
+ "ui.sessionTimeline.notice.model": "Model",
205
+ "ui.sessionTimeline.notice.movedTo": "Köçürüldü",
206
+ "ui.sessionTimeline.notice.movedTooltip": "Sessiyanın iş qovluğu dəyişdirildi",
207
+ "ui.sessionTimeline.notice.failed": "{{actor}} uğursuz oldu",
208
+ "ui.sessionTimeline.notice.cancelled": "{{actor}} ləğv edildi",
209
+ "ui.sessionTimeline.notice.finished": "{{actor}} tamamlandı",
210
+ "ui.sessionTimeline.notice.instructionsUpdated": "Təlimatlar yeniləndi",
211
+ "ui.sessionTimeline.notice.restart": "Yenidən başladıldıqdan sonra davam edir",
212
+ "ui.promptInput.placeholder.followUp": "Davam mesajı əlavə edin, əmrlər üçün {{slash}}, kontekst üçün {{at}}...",
213
+ "ui.promptInput.steer": "İstiqamətləndir",
214
+ "ui.promptInput.queue": "Növbə",
215
+ "ui.promptInput.steerHint": "Dayandırmadan göndər",
216
+ "ui.tool.loadedSkills.one": "{{name}} bacarığı yükləndi",
217
+ "ui.tool.loadedSkills.other": "{{name}} bacarıqları yükləndi",
218
+ "ui.tool.shell.exit": "Əmr {{code}} kodu ilə başa çatdı",
219
+ "ui.tool.shell.timeout": "Əmrin vaxtı bitdi",
220
+ "ui.tool.shell.cancelled": "Əmr ləğv edildi",
221
+ "ui.message.thought": "Düşüncə",
222
+ "ui.sessionTimeline.notice.modelSwitched": "{{model}} modelinə keçildi",
223
+ "ui.sessionTurn.retry.attemptLabel": "Cəhd {{attempt}}",
224
+ "ui.sessionTurn.retry.attemptRetrying": "Cəhd {{attempt}} - {{line}}",
225
+ "ui.messagePart.context.notice.one": "{{count}} bildiriş",
226
+ "ui.messagePart.context.notice.other": "{{count}} bildiriş",
227
+ "ui.messagePart.context.thought.one": "fikir",
228
+ "ui.messagePart.context.thought.other": "fikir",
229
+ "ui.promptInput.dropFiles.image": "Şəkillər və ya fayllar əlavə etmək üçün buraya atın",
230
+ "ui.promptInput.dropFiles.pdf": "PDF-lər və ya fayllar əlavə etmək üçün buraya atın",
231
+ "ui.promptInput.dropFiles.imagePdf": "Şəkillər, PDF-lər və ya fayllar əlavə etmək üçün buraya atın",
232
+ "ui.promptInput.exitShell": "Çıx",
233
+ "ui.sessionTimeline.notice.agentChanged": "Agent dəyişdirildi",
234
+ "ui.sessionTurn.retry.attemptWaiting.one": "Cəhd {{attempt}} - {{count}} saniyə sonra yenidən cəhd edilir",
235
+ "ui.sessionTurn.retry.attemptWaiting.other": "Cəhd {{attempt}} - {{count}} saniyə sonra yenidən cəhd edilir",
236
+ "ui.sessionTurn.retry.attemptRetryingNow": "Cəhd {{attempt}} - yenidən cəhd edilir",
237
+ "ui.messagePart.compaction.started": "Sessiya sıxışdırılması başladı",
238
+ "ui.messagePart.compaction.running": "Sıxışdırılır",
239
+ "ui.messagePart.compaction.failed": "Sessiya sıxışdırılması uğursuz oldu",
240
+ "ui.messagePart.compaction.cancelled": "Sessiya sıxışdırılması ləğv edildi",
241
+ "ui.messagePart.compaction.interrupted": "Sessiya sıxışdırılması dayandırıldı",
242
+ "ui.messagePart.providerCompaction": "Sessiya təminatçı tərəfindən sıxışdırıldı",
243
+ "ui.messagePart.compaction.usage": "{{input}} daxil · {{output}} çıxış",
244
+ "ui.messagePart.tools.used.one": "{{count}} {{tools}} istifadə edildi",
245
+ "ui.messagePart.tools.used.other": "{{count}} {{tools}} istifadə edildi",
246
+ "ui.tool.browser": "Brauzer",
247
+ "ui.common.fileCount.one": "{{count}} fayl",
248
+ "ui.common.fileCount.other": "{{count}} fayl",
249
+ "ui.messagePart.context.updates": "Yeniləmələr",
250
+ "ui.promptInput.cancelUpload": "Yükləməni ləğv et",
251
+ "ui.promptInput.uploading": "{{percent}}%",
195
252
  }
package/src/i18n/bg.ts CHANGED
@@ -192,4 +192,61 @@ export const dict = {
192
192
  "ui.question.multiHint": "Изберете всички приложими отговори",
193
193
  "ui.question.singleHint": "Изберете един отговор",
194
194
  "ui.question.custom.placeholder": "Въведете вашия отговор…",
195
+ "ui.messagePart.context.match.one": "({{count}} съвпадение)",
196
+ "ui.messagePart.context.match.other": "({{count}} съвпадения)",
197
+ "ui.tool.execute": "Изпълни",
198
+ "ui.tool.loadedFile": "Зареден файл {{path}}",
199
+ "ui.tool.loadedSkill": "Заредено умение {{name}}",
200
+ "ui.tool.shell.writingCommand": "Командата се записва...",
201
+ "ui.tool.agent.delegating": "Задачата се възлага на агент...",
202
+ "ui.common.moreCount.one": "+още {{count}}",
203
+ "ui.common.moreCount.other": "+още {{count}}",
204
+ "ui.sessionTimeline.notice.model": "Модел",
205
+ "ui.sessionTimeline.notice.movedTo": "Преместено в",
206
+ "ui.sessionTimeline.notice.movedTooltip": "Работната директория на сесията е променена",
207
+ "ui.sessionTimeline.notice.failed": "{{actor}} завърши неуспешно",
208
+ "ui.sessionTimeline.notice.cancelled": "{{actor}} е отменен",
209
+ "ui.sessionTimeline.notice.finished": "{{actor}} завърши",
210
+ "ui.sessionTimeline.notice.instructionsUpdated": "Инструкциите са актуализирани",
211
+ "ui.sessionTimeline.notice.restart": "Продължаване след рестартиране",
212
+ "ui.promptInput.placeholder.followUp": "Добавете последваща заявка, {{slash}} за команди, {{at}} за контекст...",
213
+ "ui.promptInput.steer": "Насочи",
214
+ "ui.promptInput.queue": "Постави на опашка",
215
+ "ui.promptInput.steerHint": "Изпращане без прекъсване",
216
+ "ui.tool.loadedSkills.one": "Заредено умение {{name}}",
217
+ "ui.tool.loadedSkills.other": "Заредени умения {{name}}",
218
+ "ui.tool.shell.exit": "Командата завърши с код {{code}}",
219
+ "ui.tool.shell.timeout": "Времето за изпълнение на командата изтече",
220
+ "ui.tool.shell.cancelled": "Командата е отменена",
221
+ "ui.message.thought": "Мисъл",
222
+ "ui.sessionTimeline.notice.modelSwitched": "Превключено към {{model}}",
223
+ "ui.sessionTurn.retry.attemptLabel": "Опит {{attempt}}",
224
+ "ui.sessionTurn.retry.attemptRetrying": "Опит {{attempt}} - {{line}}",
225
+ "ui.messagePart.context.notice.one": "{{count}} известие",
226
+ "ui.messagePart.context.notice.other": "{{count}} известия",
227
+ "ui.messagePart.context.thought.one": "Мисъл",
228
+ "ui.messagePart.context.thought.other": "Мисли",
229
+ "ui.promptInput.dropFiles.image": "Пуснете изображения или файлове за добавяне",
230
+ "ui.promptInput.dropFiles.pdf": "Пуснете PDF файлове или други файлове за добавяне",
231
+ "ui.promptInput.dropFiles.imagePdf": "Пуснете изображения, PDF файлове или други файлове за добавяне",
232
+ "ui.promptInput.exitShell": "Изход",
233
+ "ui.sessionTimeline.notice.agentChanged": "Агентът е сменен",
234
+ "ui.sessionTurn.retry.attemptRetryingNow": "Опит {{attempt}} — повторен опит",
235
+ "ui.sessionTurn.retry.attemptWaiting.one": "Опит {{attempt}} — нов опит след {{count}} секунда",
236
+ "ui.sessionTurn.retry.attemptWaiting.other": "Опит {{attempt}} — нов опит след {{count}} секунди",
237
+ "ui.messagePart.compaction.started": "Уплътняването на сесията започна",
238
+ "ui.messagePart.compaction.running": "Уплътняване",
239
+ "ui.messagePart.compaction.failed": "Уплътняването на сесията е неуспешно",
240
+ "ui.messagePart.compaction.cancelled": "Уплътняването на сесията е отменено",
241
+ "ui.messagePart.compaction.interrupted": "Уплътняването на сесията е прекъснато",
242
+ "ui.messagePart.providerCompaction": "Сесията е уплътнена от доставчика",
243
+ "ui.messagePart.compaction.usage": "{{input}} входящи · {{output}} изходящи",
244
+ "ui.messagePart.tools.used.one": "Използван е {{count}} {{tools}}",
245
+ "ui.messagePart.tools.used.other": "Използвани са {{count}} {{tools}}",
246
+ "ui.tool.browser": "Браузър",
247
+ "ui.common.fileCount.one": "{{count}} файл",
248
+ "ui.common.fileCount.other": "{{count}} файла",
249
+ "ui.messagePart.context.updates": "Актуализации",
250
+ "ui.promptInput.cancelUpload": "Отказ от качването",
251
+ "ui.promptInput.uploading": "{{percent}}%",
195
252
  }
package/src/i18n/bn.ts CHANGED
@@ -194,4 +194,65 @@ export const dict: Record<string, string> = {
194
194
  "ui.question.multiHint": "প্রযোজ্য সমস্ত উত্তর নির্বাচন করুন",
195
195
  "ui.question.singleHint": "একটি উত্তর নির্বাচন করুন",
196
196
  "ui.question.custom.placeholder": "আপনার উত্তর টাইপ করুন…",
197
+ "ui.messagePart.context.match.one": "({{count}}টি মিল)",
198
+ "ui.messagePart.context.match.other": "({{count}}টি মিল)",
199
+ "ui.tool.execute": "চালান",
200
+ "ui.tool.loadedFile": "{{path}} লোড হয়েছে",
201
+ "ui.tool.loadedSkill": "{{name}} দক্ষতা লোড হয়েছে",
202
+ "ui.tool.shell.writingCommand": "কমান্ড লেখা হচ্ছে...",
203
+ "ui.tool.agent.delegating": "এজেন্টকে কাজ অর্পণ করা হচ্ছে...",
204
+ "ui.common.moreCount.one": "+আরও {{count}}টি",
205
+ "ui.common.moreCount.other": "+আরও {{count}}টি",
206
+ "ui.sessionTimeline.notice.model": "মডেল",
207
+ "ui.sessionTimeline.notice.movedTo": "সরানো হয়েছে",
208
+ "ui.sessionTimeline.notice.movedTooltip": "সেশনের কার্যকরী ডিরেক্টরি পরিবর্তিত হয়েছে",
209
+ "ui.sessionTimeline.notice.failed": "{{actor}} ব্যর্থ হয়েছে",
210
+ "ui.sessionTimeline.notice.cancelled": "{{actor}} বাতিল হয়েছে",
211
+ "ui.sessionTimeline.notice.finished": "{{actor}} শেষ করেছে",
212
+ "ui.sessionTimeline.notice.instructionsUpdated": "নির্দেশনা আপডেট হয়েছে",
213
+ "ui.sessionTimeline.notice.restart": "পুনরায় চালুর পরে চালিয়ে যাওয়া হচ্ছে",
214
+ "ui.promptInput.placeholder.followUp": "ফলো-আপ যোগ করুন, কমান্ডের জন্য {{slash}}, প্রসঙ্গের জন্য {{at}}...",
215
+ "ui.promptInput.steer": "দিকনির্দেশ দিন",
216
+ "ui.promptInput.queue": "সারিতে রাখুন",
217
+ "ui.promptInput.steerHint": "বাধা না দিয়ে পাঠান",
218
+ "ui.tool.loadedSkills.one": "{{name}} দক্ষতা লোড করা হয়েছে",
219
+ "ui.tool.loadedSkills.other": "{{name}} দক্ষতাগুলি লোড করা হয়েছে",
220
+ "ui.tool.shell.exit": "কমান্ড {{code}} কোড দিয়ে শেষ হয়েছে",
221
+ "ui.tool.shell.timeout": "কমান্ডের সময়সীমা শেষ হয়েছে",
222
+ "ui.tool.shell.cancelled": "কমান্ড বাতিল করা হয়েছে",
223
+ "ui.message.thought": "চিন্তা",
224
+ "ui.sessionTimeline.notice.modelSwitched": "{{model}}-এ পরিবর্তন করা হয়েছে",
225
+
226
+ "ui.sessionTurn.retry.attemptLabel": "প্রচেষ্টা {{attempt}}",
227
+ "ui.sessionTurn.retry.attemptRetrying": "প্রচেষ্টা {{attempt}} - {{line}}",
228
+ "ui.messagePart.context.notice.one": "{{count}}টি বিজ্ঞপ্তি",
229
+ "ui.messagePart.context.notice.other": "{{count}}টি বিজ্ঞপ্তি",
230
+ "ui.promptInput.dropFiles.image": "যোগ করতে ছবি বা ফাইল ছাড়ুন",
231
+ "ui.promptInput.dropFiles.pdf": "যোগ করতে PDF বা ফাইল ছাড়ুন",
232
+ "ui.promptInput.dropFiles.imagePdf": "যোগ করতে ছবি, PDF বা ফাইল ছাড়ুন",
233
+ "ui.promptInput.exitShell": "প্রস্থান করুন",
234
+ "ui.sessionTimeline.notice.agentChanged": "এজেন্ট পরিবর্তিত হয়েছে",
235
+
236
+ "ui.sessionTurn.retry.attemptRetryingNow": "প্রচেষ্টা {{attempt}} - আবার চেষ্টা করা হচ্ছে",
237
+
238
+ "ui.sessionTurn.retry.attemptWaiting.one": "প্রচেষ্টা {{attempt}} - {{count}} সেকেন্ড পরে আবার চেষ্টা করা হচ্ছে",
239
+ "ui.sessionTurn.retry.attemptWaiting.other": "প্রচেষ্টা {{attempt}} - {{count}} সেকেন্ড পরে আবার চেষ্টা করা হচ্ছে",
240
+ "ui.messagePart.compaction.started": "সেশন সংকোচন শুরু হয়েছে",
241
+ "ui.messagePart.compaction.running": "সংকোচন করা হচ্ছে",
242
+ "ui.messagePart.compaction.failed": "সেশন সংকোচন ব্যর্থ হয়েছে",
243
+ "ui.messagePart.compaction.cancelled": "সেশন সংকোচন বাতিল হয়েছে",
244
+ "ui.messagePart.compaction.interrupted": "সেশন সংকোচন বাধাগ্রস্ত হয়েছে",
245
+ "ui.messagePart.providerCompaction": "প্রদানকারী সেশনটি সংকুচিত করেছে",
246
+ "ui.messagePart.compaction.usage": "{{input}} ইন · {{output}} আউট",
247
+ "ui.messagePart.context.thought.one": "চিন্তা",
248
+ "ui.messagePart.context.thought.other": "চিন্তাভাবনা",
249
+ "ui.messagePart.tools.used.one": "{{count}}টি {{tools}} ব্যবহার করা হয়েছে",
250
+ "ui.messagePart.tools.used.other": "{{count}}টি {{tools}} ব্যবহার করা হয়েছে",
251
+ "ui.tool.browser": "ব্রাউজার",
252
+ "ui.common.fileCount.one": "{{count}}টি ফাইল",
253
+ "ui.common.fileCount.other": "{{count}}টি ফাইল",
254
+
255
+ "ui.messagePart.context.updates": "আপডেট",
256
+ "ui.promptInput.cancelUpload": "আপলোড বাতিল করুন",
257
+ "ui.promptInput.uploading": "{{percent}}%",
197
258
  }