sitero 0.9.3 → 0.10.0

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 (141) hide show
  1. package/dist/src/cms/client/applications/ui/use-nav-items.js +4 -3
  2. package/dist/src/cms/client/infrastructure/i18n/intor-config.js +2 -1
  3. package/dist/src/cms/client/infrastructure/i18n/messages/index.js +3 -1
  4. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/features/authentication/admin.js +132 -0
  5. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/features/index.js +5 -0
  6. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/index.js +8 -0
  7. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/main/index.js +30 -0
  8. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/admin-refresh-token.js +18 -0
  9. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/admin.js +87 -0
  10. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/file.js +78 -0
  11. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/index.js +34 -0
  12. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/post.js +81 -0
  13. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/seo-metadata.js +11 -0
  14. package/dist/src/cms/client/infrastructure/i18n/messages/vi-VN/ui/index.js +186 -0
  15. package/dist/src/cms/client/interfaces/components/resources/admin/admin-table.js +1 -1
  16. package/dist/src/cms/client/interfaces/components/resources/config/config-edit-content.js +2 -1
  17. package/dist/src/cms/client/interfaces/components/resources/config/config-show-content.js +2 -1
  18. package/dist/src/cms/client/interfaces/components/resources/file/file-table.js +1 -1
  19. package/dist/src/cms/client/interfaces/components/resources/page/content/page-edit-content.js +2 -1
  20. package/dist/src/cms/client/interfaces/components/resources/page/content/page-show-content.js +2 -1
  21. package/dist/src/cms/client/interfaces/components/resources/post/category/category-card.js +5 -1
  22. package/dist/src/cms/client/interfaces/components/resources/post/category/category-table.js +6 -2
  23. package/dist/src/cms/client/interfaces/components/resources/post/content/post-create-content.js +3 -2
  24. package/dist/src/cms/client/interfaces/components/resources/post/content/post-edit-content.js +3 -2
  25. package/dist/src/cms/client/interfaces/components/resources/post/content/resolve-control-field-label.js +2 -4
  26. package/dist/src/cms/client/interfaces/components/resources/post/post-card.js +2 -1
  27. package/dist/src/cms/client/interfaces/components/resources/post/post-table.js +6 -2
  28. package/dist/src/cms/client/interfaces/components/resources/post/tag/tag-table.js +1 -1
  29. package/dist/src/cms/client/interfaces/components/ui/inputs/editor/base/base-editor.js +2 -1
  30. package/dist/src/cms/client/interfaces/components/ui/inputs/editor/resolve-editor-locale.js +6 -0
  31. package/dist/src/cms/client/interfaces/components/ui/layouts/navbar/i18n-selector.js +4 -5
  32. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicKey_/category/_id_/edit/page.js +2 -1
  33. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicKey_/category/_id_/page.js +2 -1
  34. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicKey_/category/create/page.js +2 -1
  35. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicKey_/page.js +2 -1
  36. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicKey_/post/_id_/edit/page.js +2 -1
  37. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicKey_/post/_id_/page.js +2 -1
  38. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicKey_/post/create/page.js +2 -1
  39. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicKey_/subcategory/_id_/edit/page.js +2 -1
  40. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicKey_/subcategory/_id_/page.js +2 -1
  41. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicKey_/subcategory/create/page.js +2 -1
  42. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/page.js +2 -1
  43. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/_id_/relations/page.js +3 -2
  44. package/dist/src/cms/client/interfaces/pages/dashboard/website/inquiry/_id_/page.js +9 -1
  45. package/dist/src/cms/client/interfaces/pages/dashboard/website/inquiry/page.js +2 -1
  46. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-config/_slug_/edit/page.js +2 -1
  47. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-config/_slug_/page.js +2 -1
  48. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-config/page.js +2 -1
  49. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/_slug_/edit/page.js +2 -1
  50. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/_slug_/page.js +2 -1
  51. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/page.js +2 -1
  52. package/dist/src/constants/cms-locale.js +2 -1
  53. package/dist/src/core/infrastructure/email/react-email-composer.js +2 -1
  54. package/dist/src/shared/resolve-cms-text.js +7 -0
  55. package/dist/types/export/index.d.ts +1 -1
  56. package/dist/types/export/index.d.ts.map +1 -1
  57. package/dist/types/src/cms/client/applications/ui/use-nav-items.d.ts.map +1 -1
  58. package/dist/types/src/cms/client/infrastructure/i18n/intor-config.d.ts.map +1 -1
  59. package/dist/types/src/cms/client/infrastructure/i18n/messages/index.d.ts +1060 -0
  60. package/dist/types/src/cms/client/infrastructure/i18n/messages/index.d.ts.map +1 -1
  61. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/features/authentication/admin.d.ts +169 -0
  62. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/features/authentication/admin.d.ts.map +1 -0
  63. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/features/index.d.ts +173 -0
  64. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/features/index.d.ts.map +1 -0
  65. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/index.d.ts +1061 -0
  66. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/index.d.ts.map +1 -0
  67. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/main/index.d.ts +27 -0
  68. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/main/index.d.ts.map +1 -0
  69. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/admin-refresh-token.d.ts +43 -0
  70. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/admin-refresh-token.d.ts.map +1 -0
  71. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/admin.d.ts +126 -0
  72. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/admin.d.ts.map +1 -0
  73. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/file.d.ts +153 -0
  74. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/file.d.ts.map +1 -0
  75. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/index.d.ts +525 -0
  76. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/index.d.ts.map +1 -0
  77. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/post.d.ts +142 -0
  78. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/post.d.ts.map +1 -0
  79. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/seo-metadata.d.ts +16 -0
  80. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/resources/seo-metadata.d.ts.map +1 -0
  81. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/ui/index.d.ts +337 -0
  82. package/dist/types/src/cms/client/infrastructure/i18n/messages/vi-VN/ui/index.d.ts.map +1 -0
  83. package/dist/types/src/cms/client/interfaces/components/resources/config/config-edit-content.d.ts.map +1 -1
  84. package/dist/types/src/cms/client/interfaces/components/resources/config/config-show-content.d.ts.map +1 -1
  85. package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-edit-content.d.ts.map +1 -1
  86. package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-show-content.d.ts.map +1 -1
  87. package/dist/types/src/cms/client/interfaces/components/resources/page/content/types.d.ts +2 -1
  88. package/dist/types/src/cms/client/interfaces/components/resources/page/content/types.d.ts.map +1 -1
  89. package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-card.d.ts.map +1 -1
  90. package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-table.d.ts.map +1 -1
  91. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-create-content.d.ts +2 -2
  92. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-create-content.d.ts.map +1 -1
  93. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-edit-content.d.ts +2 -2
  94. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-edit-content.d.ts.map +1 -1
  95. package/dist/types/src/cms/client/interfaces/components/resources/post/content/resolve-control-field-label.d.ts.map +1 -1
  96. package/dist/types/src/cms/client/interfaces/components/resources/post/content/types.d.ts +3 -2
  97. package/dist/types/src/cms/client/interfaces/components/resources/post/content/types.d.ts.map +1 -1
  98. package/dist/types/src/cms/client/interfaces/components/resources/post/post-card.d.ts.map +1 -1
  99. package/dist/types/src/cms/client/interfaces/components/resources/post/post-table.d.ts.map +1 -1
  100. package/dist/types/src/cms/client/interfaces/components/ui/inputs/editor/base/base-editor.d.ts.map +1 -1
  101. package/dist/types/src/cms/client/interfaces/components/ui/inputs/editor/resolve-editor-locale.d.ts +3 -0
  102. package/dist/types/src/cms/client/interfaces/components/ui/inputs/editor/resolve-editor-locale.d.ts.map +1 -0
  103. package/dist/types/src/cms/client/interfaces/components/ui/layouts/navbar/i18n-selector.d.ts.map +1 -1
  104. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicKey]/category/[id]/edit/page.d.ts.map +1 -1
  105. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicKey]/category/[id]/page.d.ts.map +1 -1
  106. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicKey]/category/create/page.d.ts.map +1 -1
  107. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicKey]/page.d.ts.map +1 -1
  108. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicKey]/post/[id]/edit/page.d.ts.map +1 -1
  109. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicKey]/post/[id]/page.d.ts.map +1 -1
  110. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicKey]/post/create/page.d.ts.map +1 -1
  111. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicKey]/subcategory/[id]/edit/page.d.ts.map +1 -1
  112. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicKey]/subcategory/[id]/page.d.ts.map +1 -1
  113. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicKey]/subcategory/create/page.d.ts.map +1 -1
  114. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/page.d.ts.map +1 -1
  115. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/storage/file/[id]/relations/page.d.ts.map +1 -1
  116. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/inquiry/[id]/page.d.ts.map +1 -1
  117. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/inquiry/page.d.ts.map +1 -1
  118. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-config/[slug]/edit/page.d.ts.map +1 -1
  119. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-config/[slug]/page.d.ts.map +1 -1
  120. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-config/page.d.ts.map +1 -1
  121. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/edit/page.d.ts.map +1 -1
  122. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/page.d.ts.map +1 -1
  123. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/page.d.ts.map +1 -1
  124. package/dist/types/src/config/configs.d.ts +3 -3
  125. package/dist/types/src/config/configs.d.ts.map +1 -1
  126. package/dist/types/src/config/index.d.ts +1 -0
  127. package/dist/types/src/config/index.d.ts.map +1 -1
  128. package/dist/types/src/config/inquiry.d.ts +2 -2
  129. package/dist/types/src/config/inquiry.d.ts.map +1 -1
  130. package/dist/types/src/config/pages.d.ts +2 -2
  131. package/dist/types/src/config/pages.d.ts.map +1 -1
  132. package/dist/types/src/config/shared.d.ts +4 -0
  133. package/dist/types/src/config/shared.d.ts.map +1 -1
  134. package/dist/types/src/config/topics.d.ts +2 -2
  135. package/dist/types/src/config/topics.d.ts.map +1 -1
  136. package/dist/types/src/constants/cms-locale.d.ts +2 -1
  137. package/dist/types/src/constants/cms-locale.d.ts.map +1 -1
  138. package/dist/types/src/core/infrastructure/email/react-email-composer.d.ts.map +1 -1
  139. package/dist/types/src/shared/resolve-cms-text.d.ts +5 -0
  140. package/dist/types/src/shared/resolve-cms-text.d.ts.map +1 -0
  141. package/package.json +3 -3
@@ -0,0 +1,186 @@
1
+ const ui = {
2
+ retry: { text: "Th\u1EED l\u1EA1i" },
3
+ // ------------------------------------------------------
4
+ // common
5
+ // ------------------------------------------------------
6
+ "no-data": { text: "Kh\xF4ng c\xF3 d\u1EEF li\u1EC7u" },
7
+ list: {
8
+ expand: { text: "M\u1EDF r\u1ED9ng m\u1EE5c" },
9
+ collapse: { text: "Thu g\u1ECDn m\u1EE5c" }
10
+ },
11
+ loading: { text: "\u0110ang t\u1EA3i" },
12
+ search: { text: "T\xECm ki\u1EBFm" },
13
+ actions: { text: "Thao t\xE1c" },
14
+ copy: {
15
+ text: "Sao ch\xE9p",
16
+ success: { text: "\u0110\xE3 sao ch\xE9p" },
17
+ error: { text: "Sao ch\xE9p kh\xF4ng th\xE0nh c\xF4ng. Vui l\xF2ng th\u1EED l\u1EA1i." }
18
+ },
19
+ password: {
20
+ show: { text: "Hi\u1EC7n m\u1EADt kh\u1EA9u" },
21
+ hide: { text: "\u1EA8n m\u1EADt kh\u1EA9u" }
22
+ },
23
+ create: { text: "T\u1EA1o m\u1EDBi" },
24
+ "create-resource": { text: "T\u1EA1o {resource}" },
25
+ confirm: { text: "X\xE1c nh\u1EADn" },
26
+ edit: { text: "Ch\u1EC9nh s\u1EEDa" },
27
+ update: { text: "C\u1EADp nh\u1EADt" },
28
+ locked: { text: "\u0110\xE3 kh\xF3a" },
29
+ "move-to-trash": { text: "Chuy\u1EC3n v\xE0o th\xF9ng r\xE1c" },
30
+ "move-many-to-trash": { text: "Chuy\u1EC3n nhi\u1EC1u m\u1EE5c v\xE0o th\xF9ng r\xE1c" },
31
+ "dialog.move-to-trash": { text: "Chuy\u1EC3n c\xE1c m\u1EE5c \u0111\xE3 ch\u1ECDn v\xE0o th\xF9ng r\xE1c?" },
32
+ "dialog.purge": {
33
+ text: "X\xF3a v\u0129nh vi\u1EC5n c\xE1c m\u1EE5c \u0111\xE3 ch\u1ECDn? Kh\xF4ng th\u1EC3 ho\xE0n t\xE1c thao t\xE1c n\xE0y."
34
+ },
35
+ destroy: { text: "X\xF3a" },
36
+ purge: { text: "X\xF3a v\u0129nh vi\u1EC5n" },
37
+ restore: { text: "Kh\xF4i ph\u1EE5c" },
38
+ "create-many": { text: "T\u1EA1o nhi\u1EC1u m\u1EE5c" },
39
+ "delete-many": { text: "X\xF3a nhi\u1EC1u m\u1EE5c" },
40
+ "view-website-page": { text: "Xem trang website (m\u1EDF trong th\u1EBB m\u1EDBi)" },
41
+ show: { text: "Xem" },
42
+ manage: { text: "Qu\u1EA3n l\xFD" },
43
+ setting: { text: "C\xE0i \u0111\u1EB7t" },
44
+ return: { text: "Quay l\u1EA1i" },
45
+ cancel: { text: "H\u1EE7y" },
46
+ "string-array": {
47
+ item: { text: "M\u1EE5c" },
48
+ add: { text: "Th\xEAm m\u1EE5c" },
49
+ remove: { text: "X\xF3a m\u1EE5c" }
50
+ },
51
+ "dialog.confirm": { text: "B\u1EA1n c\xF3 ch\u1EAFc ch\u1EAFn kh\xF4ng?" },
52
+ // ------------------------------------------------------
53
+ // operation-error
54
+ // ------------------------------------------------------
55
+ "operation-error": {
56
+ "rate-limited": {
57
+ text: "B\u1EA1n \u0111\xE3 th\u1EED qu\xE1 nhi\u1EC1u l\u1EA7n. Vui l\xF2ng \u0111\u1EE3i r\u1ED3i th\u1EED l\u1EA1i."
58
+ },
59
+ unauthenticated: {
60
+ text: "Phi\xEAn \u0111\u0103ng nh\u1EADp kh\xF4ng kh\u1EA3 d\u1EE5ng ho\u1EB7c \u0111\xE3 h\u1EBFt h\u1EA1n. Vui l\xF2ng \u0111\u0103ng nh\u1EADp l\u1EA1i."
61
+ },
62
+ unauthorized: {
63
+ text: "B\u1EA1n kh\xF4ng c\xF3 quy\u1EC1n th\u1EF1c hi\u1EC7n thao t\xE1c n\xE0y."
64
+ },
65
+ validation: { text: "Vui l\xF2ng ki\u1EC3m tra th\xF4ng tin \u0111\xE3 nh\u1EADp r\u1ED3i th\u1EED l\u1EA1i." },
66
+ unknown: {
67
+ text: "Kh\xF4ng th\u1EC3 ho\xE0n t\u1EA5t thao t\xE1c. Vui l\xF2ng th\u1EED l\u1EA1i."
68
+ }
69
+ },
70
+ // ------------------------------------------------------
71
+ // field-error
72
+ // ------------------------------------------------------
73
+ "field-error": {
74
+ "password-confirmation-mismatch": {
75
+ text: "M\u1EADt kh\u1EA9u x\xE1c nh\u1EADn kh\xF4ng kh\u1EDBp."
76
+ },
77
+ "email-already-exists": { text: "\u0110\u1ECBa ch\u1EC9 email n\xE0y \u0111\xE3 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng." },
78
+ duplicate: { text: "Gi\xE1 tr\u1ECB n\xE0y \u0111\xE3 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng." },
79
+ "file-required": { text: "Vui l\xF2ng ch\u1ECDn m\u1ED9t t\u1EC7p." },
80
+ "file-too-large": { text: "T\u1EC7p v\u01B0\u1EE3t qu\xE1 dung l\u01B0\u1EE3ng cho ph\xE9p." },
81
+ "file-type-not-allowed": { text: "Lo\u1EA1i t\u1EC7p n\xE0y kh\xF4ng \u0111\u01B0\u1EE3c ph\xE9p." },
82
+ "too-many-items": { text: "S\u1ED1 l\u01B0\u1EE3ng m\u1EE5c v\u01B0\u1EE3t qu\xE1 gi\u1EDBi h\u1EA1n cho ph\xE9p." },
83
+ "invalid-selection": { text: "M\u1EE5c \u0111\xE3 ch\u1ECDn kh\xF4ng h\u1EE3p l\u1EC7." },
84
+ "invalid-json": { text: "Vui l\xF2ng nh\u1EADp JSON h\u1EE3p l\u1EC7." },
85
+ invalid: { text: "Vui l\xF2ng ki\u1EC3m tra d\u1EEF li\u1EC7u \u0111\xE3 nh\u1EADp r\u1ED3i th\u1EED l\u1EA1i." }
86
+ },
87
+ // ------------------------------------------------------
88
+ // navbar
89
+ // ------------------------------------------------------
90
+ navbar: {
91
+ "website-homepage": { text: "Trang ch\u1EE7 website" },
92
+ "i18n-selector": { label: { text: "Ng\xF4n ng\u1EEF qu\u1EA3n tr\u1ECB" } },
93
+ "theme-selector": {
94
+ label: { text: "Giao di\u1EC7n qu\u1EA3n tr\u1ECB" },
95
+ light: { text: "S\xE1ng" },
96
+ dark: { text: "T\u1ED1i" },
97
+ system: { text: "H\u1EC7 th\u1ED1ng" }
98
+ }
99
+ },
100
+ // ------------------------------------------------------
101
+ // list-container
102
+ // ------------------------------------------------------
103
+ "list-container": {
104
+ "per-page": { text: "S\u1ED1 m\u1EE5c m\u1ED7i trang" }
105
+ },
106
+ // ------------------------------------------------------
107
+ // blob-file
108
+ // ------------------------------------------------------
109
+ "blob-file": {
110
+ status: {
111
+ "created-select-from-list": {
112
+ text: "\u0110\xE3 t\u1EA1o t\u1EC7p. H\xE3y ch\u1ECDn t\u1EC7p trong danh s\xE1ch sau khi t\u1EA3i xong."
113
+ },
114
+ empty: { text: "Kh\xF4ng th\u1EC3 t\u1EA3i l\xEAn t\u1EC7p r\u1ED7ng." },
115
+ "too-large": { text: "T\u1EC7p v\u01B0\u1EE3t qu\xE1 gi\u1EDBi h\u1EA1n dung l\u01B0\u1EE3ng." },
116
+ "type-not-allowed": { text: "Lo\u1EA1i t\u1EC7p n\xE0y kh\xF4ng \u0111\u01B0\u1EE3c ph\xE9p." },
117
+ "single-only": { text: "Vui l\xF2ng ch\u1EC9 ch\u1ECDn m\u1ED9t t\u1EC7p." },
118
+ duplicates: { text: "\u0110\xE3 b\u1ECF qua c\xE1c t\u1EC7p tr\xF9ng l\u1EB7p." },
119
+ remove: { text: "B\u1ECF t\u1EC7p \u0111\xE3 ch\u1ECDn" },
120
+ "cancel-replacement": { text: "H\u1EE7y thay th\u1EBF" },
121
+ invalid: {
122
+ text: "Vui l\xF2ng kh\u1EAFc ph\u1EE5c c\xE1c l\u1ED7i c\u1EE7a t\u1EC7p \u0111\xE3 ch\u1ECDn tr\u01B0\u1EDBc khi t\u1EA3i l\xEAn."
123
+ },
124
+ reading: { text: "\u0110ang \u0111\u1ECDc th\xF4ng tin t\u1EC7p\u2026" },
125
+ "media-warning": {
126
+ text: "Kh\xF4ng th\u1EC3 \u0111\u1ECDc th\xF4ng tin \u0111a ph\u01B0\u01A1ng ti\u1EC7n. B\u1EA1n v\u1EABn c\xF3 th\u1EC3 t\u1EA3i t\u1EC7p n\xE0y l\xEAn."
127
+ },
128
+ uploading: { text: "\u0110ang t\u1EA3i l\xEAn\u2026" },
129
+ registering: { text: "\u0110ang l\u01B0u\u2026" },
130
+ success: { text: "\u0110\xE3 t\u1EA1o" },
131
+ "upload-error": {
132
+ text: "T\u1EA3i l\xEAn kh\xF4ng th\xE0nh c\xF4ng. Vui l\xF2ng g\u1EEDi l\u1EA1i \u0111\u1EC3 th\u1EED l\u1EA1i."
133
+ },
134
+ "registration-error": {
135
+ text: "L\u01B0u kh\xF4ng th\xE0nh c\xF4ng. Vui l\xF2ng g\u1EEDi l\u1EA1i \u0111\u1EC3 th\u1EED l\u1EA1i."
136
+ },
137
+ unknown: {
138
+ text: "Kh\xF4ng th\u1EC3 x\xE1c nh\u1EADn k\u1EBFt qu\u1EA3 l\u01B0u. Vui l\xF2ng ki\u1EC3m tra th\u01B0 vi\u1EC7n t\u1EC7p tr\u01B0\u1EDBc khi t\u1EA3i l\xEAn l\u1EA1i."
139
+ },
140
+ retry: { text: "Th\u1EED l\u1EA1i c\xE1c t\u1EC7p c\xF2n l\u1EA1i" }
141
+ },
142
+ "file-info": {
143
+ "file-link": { text: "Li\xEAn k\u1EBFt t\u1EC7p" },
144
+ "file-name": { text: "T\xEAn t\u1EC7p" },
145
+ "file-type": { text: "Lo\u1EA1i t\u1EC7p" },
146
+ "file-size": { text: "Dung l\u01B0\u1EE3ng t\u1EC7p" }
147
+ },
148
+ "file-preview-list": {
149
+ "file-details": { text: "Chi ti\u1EBFt t\u1EC7p" },
150
+ "no-file-selected": { text: "Ch\u01B0a ch\u1ECDn t\u1EC7p" }
151
+ },
152
+ "file-picker": {
153
+ "select-file": { text: "Ch\u1ECDn t\u1EC7p" },
154
+ "drag-hint": { text: "B\u1EA1n c\xF3 th\u1EC3 k\xE9o v\xE0 th\u1EA3 t\u1EC7p v\xE0o \u0111\xE2y" }
155
+ }
156
+ },
157
+ // ------------------------------------------------------
158
+ // pick-modal
159
+ // ------------------------------------------------------
160
+ "pick-modal": {
161
+ pick: { text: "Ch\u1ECDn" },
162
+ picked: { text: "\u0110\xE3 ch\u1ECDn" },
163
+ single: { text: "M\u1ED9t m\u1EE5c" },
164
+ multiple: { text: "Nhi\u1EC1u m\u1EE5c" },
165
+ clear: { text: "B\u1ECF ch\u1ECDn" }
166
+ },
167
+ // ------------------------------------------------------
168
+ // control-fields
169
+ // ------------------------------------------------------
170
+ "boolean-filter": {
171
+ clear: { text: "X\xF3a b\u1ED9 l\u1ECDc" },
172
+ yes: { text: "C\xF3" },
173
+ no: { text: "Kh\xF4ng" }
174
+ },
175
+ "control-fields": {
176
+ "is-active": { text: "\u0110ang ho\u1EA1t \u0111\u1ED9ng" },
177
+ "is-index-active": { text: "B\u1EADt s\u1EAFp x\u1EBFp" },
178
+ index: { text: "Th\u1EE9 t\u1EF1" },
179
+ "is-slug-active": { text: "B\u1EADt \u0111\u01B0\u1EDDng d\u1EABn" },
180
+ slug: { text: "Slug URL (ph\u1EA3i l\xE0 duy nh\u1EA5t)" },
181
+ "is-featured": { text: "N\u1ED5i b\u1EADt" },
182
+ "is-shown-on-home": { text: "Hi\u1EC3n th\u1ECB tr\xEAn trang ch\u1EE7" }
183
+ }
184
+ };
185
+
186
+ export { ui };
@@ -70,7 +70,7 @@ function AdminTable({
70
70
  const title = name ?? t("ui.no-data.text");
71
71
  const isSelecting = onSelect !== void 0;
72
72
  const selectionLabel = t(
73
- isPicked ? "ui.picked.text" : "ui.pick.text"
73
+ isPicked ? "ui.pick-modal.picked.text" : "ui.pick-modal.pick.text"
74
74
  );
75
75
  function activateRow() {
76
76
  if (onSelect) {
@@ -2,6 +2,7 @@
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { useTranslator } from 'intor/react';
4
4
  import { useRouter } from 'next/navigation';
5
+ import { resolveCmsText } from '../../../../../../shared/resolve-cms-text.js';
5
6
  import 'mime-types';
6
7
  import 'sitero-domain';
7
8
  import 'react';
@@ -93,7 +94,7 @@ function ConfigEditContent({
93
94
  return /* @__PURE__ */ jsx(ContentContainer, { isNotFound, children: /* @__PURE__ */ jsxs(Form, { onSubmit: () => void execute(), children: [
94
95
  /* @__PURE__ */ jsxs(FieldsContainer, { children: [
95
96
  /* @__PURE__ */ jsx(MainFields, { children: /* @__PURE__ */ jsx(Fragment, { children: Object.entries(fields).map(([key, field]) => {
96
- const label = field.label[locale];
97
+ const label = resolveCmsText(field.label, locale);
97
98
  if (key.startsWith("text")) {
98
99
  return /* @__PURE__ */ jsx(
99
100
  FormField,
@@ -4,6 +4,7 @@ import { useTranslator } from 'intor/react';
4
4
  import '../../../../../../constants/paths/redirect.js';
5
5
  import { DATE_FORMAT_OPTIONS } from '../../../../../../constants/date.js';
6
6
  import '../../../../../../constants/cms-locale.js';
7
+ import { resolveCmsText } from '../../../../../../shared/resolve-cms-text.js';
7
8
  import { ArrayList } from '../../ui/display/array-list.js';
8
9
  import 'mime-types';
9
10
  import 'sitero-domain';
@@ -56,7 +57,7 @@ function ConfigShowContent({
56
57
  const { t, locale, format } = useTranslator();
57
58
  return /* @__PURE__ */ jsx(ContentContainer, { isNotFound, children: /* @__PURE__ */ jsxs(FieldsContainer, { children: [
58
59
  /* @__PURE__ */ jsx(MainFields, { children: /* @__PURE__ */ jsx(Fragment, { children: Object.entries(fields).map(([key, field]) => {
59
- const label = field.label[locale];
60
+ const label = resolveCmsText(field.label, locale);
60
61
  if (key.startsWith("text")) {
61
62
  return /* @__PURE__ */ jsx(Field, { label, children: /* @__PURE__ */ jsx(
62
63
  FieldBody,
@@ -68,7 +68,7 @@ function FileTable({
68
68
  const title = name ?? t("ui.no-data.text");
69
69
  const isSelecting = onSelect !== void 0;
70
70
  const selectionLabel = t(
71
- isPicked ? "ui.picked.text" : "ui.pick.text"
71
+ isPicked ? "ui.pick-modal.picked.text" : "ui.pick-modal.pick.text"
72
72
  );
73
73
  function activateRow() {
74
74
  if (onSelect) {
@@ -4,6 +4,7 @@ import { useTranslator } from 'intor/react';
4
4
  import { useRouter } from 'next/navigation';
5
5
  import { Fragment } from 'react';
6
6
  import { PAGE_MEDIA_FIELDS, PAGE_TEXT_FIELDS } from 'sitero-domain';
7
+ import { resolveCmsText } from '../../../../../../../shared/resolve-cms-text.js';
7
8
  import 'mime-types';
8
9
  import 'ua-parser-js';
9
10
  import '../../../../../../../shared/client/react-query/client.js';
@@ -118,7 +119,7 @@ function createPageEditContent({
118
119
  const mediaField = field;
119
120
  const isMedia = PAGE_MEDIA_FIELDS.includes(field);
120
121
  const defaultLabel = isMedia ? t("resources.page.cover-media.text") : labels[labelKey];
121
- const label = config.label?.[locale] ?? (section ? `${t("resources.page.section.text")} ${section} \xB7 ${defaultLabel}` : defaultLabel);
122
+ const label = resolveCmsText(config.label, locale) ?? (section ? `${t("resources.page.section.text")} ${section} \xB7 ${defaultLabel}` : defaultLabel);
122
123
  if (isMedia)
123
124
  return /* @__PURE__ */ jsx(
124
125
  FormField,
@@ -3,6 +3,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
3
3
  import { useTranslator } from 'intor/react';
4
4
  import { Fragment } from 'react';
5
5
  import { PAGE_MEDIA_FIELDS } from 'sitero-domain';
6
+ import { resolveCmsText } from '../../../../../../../shared/resolve-cms-text.js';
6
7
  import '@radix-ui/react-avatar';
7
8
  import 'mime-types';
8
9
  import 'ua-parser-js';
@@ -71,7 +72,7 @@ function createPageShowContent({
71
72
  const base = field.replace(/^section\d+/, "");
72
73
  const labelKey = base.charAt(0).toLowerCase() + base.slice(1);
73
74
  const defaultLabel = isMedia ? t("resources.page.cover-media.text") : labels[labelKey];
74
- const label = fields[field]?.label?.[locale] ?? (section ? `${t("resources.page.section.text")} ${section} \xB7 ${defaultLabel}` : defaultLabel);
75
+ const label = resolveCmsText(fields[field]?.label, locale) ?? (section ? `${t("resources.page.section.text")} ${section} \xB7 ${defaultLabel}` : defaultLabel);
75
76
  if (isMedia)
76
77
  return /* @__PURE__ */ jsx(Field, { label, children: /* @__PURE__ */ jsx(
77
78
  FieldBody,
@@ -14,6 +14,7 @@ import '@tanstack/react-query';
14
14
  import 'clsx';
15
15
  import 'tailwind-merge';
16
16
  import { joinUrl } from '../../../../../../../shared/utils/join-url.js';
17
+ import { resolveCmsText } from '../../../../../../../shared/resolve-cms-text.js';
17
18
  import { ResourceCard } from '../../../ui/cards/resource-card.js';
18
19
  import 'intor/react';
19
20
  import '@radix-ui/react-avatar';
@@ -61,7 +62,10 @@ function createCategoryCard({
61
62
  }) {
62
63
  const resolvedTopicKey = category.topicKey ?? topicKey;
63
64
  const topicT = {
64
- title: topics[category.topicKey ?? ""]?.title[defaultWebLocale] ?? category.topicKey ?? ""
65
+ title: resolveCmsText(
66
+ topics[category.topicKey ?? ""]?.title,
67
+ defaultWebLocale
68
+ ) ?? category.topicKey ?? ""
65
69
  };
66
70
  const categoryT = findTranslation(category?.translations, defaultWebLocale);
67
71
  const href = isSubcategory ? joinUrl(
@@ -15,6 +15,7 @@ import '../../../../../../../shared/client/react-query/client.js';
15
15
  import '@tanstack/react-query';
16
16
  import { cn } from '../../../../../../../shared/utils/cn.js';
17
17
  import { joinUrl } from '../../../../../../../shared/utils/join-url.js';
18
+ import { resolveCmsText } from '../../../../../../../shared/resolve-cms-text.js';
18
19
  import '@radix-ui/react-avatar';
19
20
  import '../../../shadcn/badge.js';
20
21
  import '../../../shadcn/button.js';
@@ -64,7 +65,10 @@ function CategoryTable({
64
65
  ] }) }),
65
66
  /* @__PURE__ */ jsx(TableBody, { children: categories.map((category) => {
66
67
  const topicT = {
67
- title: topics[category.topicKey ?? ""]?.title[contentLocale] ?? category.topicKey ?? ""
68
+ title: resolveCmsText(
69
+ topics[category.topicKey ?? ""]?.title,
70
+ contentLocale
71
+ ) ?? category.topicKey ?? ""
68
72
  };
69
73
  const isPicked = !!pickedItems?.some(
70
74
  (item) => item.id === category.id
@@ -87,7 +91,7 @@ function CategoryTable({
87
91
  const title = categoryT.title || void 0;
88
92
  const isSelecting = onSelect !== void 0;
89
93
  const selectionLabel = t(
90
- isPicked ? "ui.picked.text" : "ui.pick.text"
94
+ isPicked ? "ui.pick-modal.picked.text" : "ui.pick-modal.pick.text"
91
95
  );
92
96
  function activateRow() {
93
97
  if (onSelect) {
@@ -59,6 +59,7 @@ import '../../../ui/inputs/switch-input.js';
59
59
  import '../../../ui/inputs/password-input.js';
60
60
  import '../../../ui/inputs/input.js';
61
61
  import { ObjectArrayInput } from '../../../ui/inputs/object-array-input.js';
62
+ import { resolveEditorLocale } from '../../../ui/inputs/editor/resolve-editor-locale.js';
62
63
  import 'intor/next';
63
64
  import { ContentContainer } from '../../../ui/layouts/content-container.js';
64
65
  import { CategoryTable } from '../category/category-table.js';
@@ -101,7 +102,7 @@ function createPostCreateContent({
101
102
  const router = useRouter();
102
103
  const parentPathname = useParentPathname();
103
104
  const { admin } = useAdmin();
104
- const editorLocale = cmsLocale.startsWith("zh") ? "zh" : "en";
105
+ const editorLocale = resolveEditorLocale(cmsLocale);
105
106
  const isFieldAllowed = (type, field, fieldRuleKey) => allowField({ topicKey, type, field, fieldRuleKey });
106
107
  const { formData, setFormData } = usePostCreateFormData({
107
108
  type: postType,
@@ -420,7 +421,7 @@ function createPostCreateContent({
420
421
  isError: activeErrors.length > 0,
421
422
  ...controlProps
422
423
  },
423
- contentLocale
424
+ `${contentLocale}-${editorLocale}`
424
425
  )
425
426
  }
426
427
  )
@@ -57,6 +57,7 @@ import '../../../ui/inputs/switch-input.js';
57
57
  import '../../../ui/inputs/password-input.js';
58
58
  import '../../../ui/inputs/input.js';
59
59
  import { ObjectArrayInput } from '../../../ui/inputs/object-array-input.js';
60
+ import { resolveEditorLocale } from '../../../ui/inputs/editor/resolve-editor-locale.js';
60
61
  import '../../../../../infrastructure/admin-session/admin-context.js';
61
62
  import 'intor/next';
62
63
  import { ContentContainer } from '../../../ui/layouts/content-container.js';
@@ -98,7 +99,7 @@ function createPostEditContent({
98
99
  const { t, locale: cmsLocale } = useTranslator();
99
100
  const router = useRouter();
100
101
  const parentPathname = useParentPathname();
101
- const editorLocale = cmsLocale.startsWith("zh") ? "zh" : "en";
102
+ const editorLocale = resolveEditorLocale(cmsLocale);
102
103
  const id = post?.id ?? "";
103
104
  const slug = post?.slug;
104
105
  const topicKey = post?.topicKey ?? void 0;
@@ -418,7 +419,7 @@ function createPostEditContent({
418
419
  isError: activeErrors.length > 0,
419
420
  ...controlProps
420
421
  },
421
- contentLocale
422
+ `${contentLocale}-${editorLocale}`
422
423
  )
423
424
  }
424
425
  )
@@ -1,9 +1,7 @@
1
- import { CMS_LOCALES_ARRAY, CMS_DEFAULT_LOCALE } from '../../../../../../../constants/cms-locale.js';
1
+ import { resolveCmsText } from '../../../../../../../shared/resolve-cms-text.js';
2
2
 
3
3
  function resolveControlFieldLabel(label, locale) {
4
- if (typeof label === "string") return label;
5
- const cmsLocale = CMS_LOCALES_ARRAY.find((supported) => supported === locale) ?? CMS_DEFAULT_LOCALE;
6
- return label[cmsLocale] ?? label[CMS_DEFAULT_LOCALE];
4
+ return typeof label === "string" ? label : resolveCmsText(label, locale);
7
5
  }
8
6
 
9
7
  export { resolveControlFieldLabel };
@@ -13,6 +13,7 @@ import '../../../../../../shared/client/react-query/client.js';
13
13
  import '@tanstack/react-query';
14
14
  import { cn } from '../../../../../../shared/utils/cn.js';
15
15
  import { joinUrl } from '../../../../../../shared/utils/join-url.js';
16
+ import { resolveCmsText } from '../../../../../../shared/resolve-cms-text.js';
16
17
  import { ResourceCard } from '../../ui/cards/resource-card.js';
17
18
  import 'intor/react';
18
19
  import '@radix-ui/react-avatar';
@@ -66,7 +67,7 @@ function createPostCard({
66
67
  }) {
67
68
  const resolvedTopicKey = post.topicKey ?? topicKey;
68
69
  const topicT = {
69
- title: topics[post.topicKey ?? ""]?.title[defaultWebLocale] ?? post.topicKey ?? ""
70
+ title: resolveCmsText(topics[post.topicKey ?? ""]?.title, defaultWebLocale) ?? post.topicKey ?? ""
70
71
  };
71
72
  const postT = findTranslation(post.translations, defaultWebLocale);
72
73
  const strategy = strategies?.[post.type]?.[resolvedTopicKey ?? ""] ?? {};
@@ -15,6 +15,7 @@ import '../../../../../../shared/client/react-query/client.js';
15
15
  import '@tanstack/react-query';
16
16
  import { cn } from '../../../../../../shared/utils/cn.js';
17
17
  import { joinUrl } from '../../../../../../shared/utils/join-url.js';
18
+ import { resolveCmsText } from '../../../../../../shared/resolve-cms-text.js';
18
19
  import '@radix-ui/react-avatar';
19
20
  import '../../shadcn/badge.js';
20
21
  import '../../shadcn/button.js';
@@ -68,7 +69,10 @@ function PostTable({
68
69
  ] }) }),
69
70
  /* @__PURE__ */ jsx(TableBody, { children: posts.map((post) => {
70
71
  const topicT = {
71
- title: topics[post.topicKey ?? ""]?.title[contentLocale] ?? post.topicKey ?? ""
72
+ title: resolveCmsText(
73
+ topics[post.topicKey ?? ""]?.title,
74
+ contentLocale
75
+ ) ?? post.topicKey ?? ""
72
76
  };
73
77
  const isPicked = !!pickedItems?.some((item) => item.id === post.id);
74
78
  const postT = findTranslation(post.translations, contentLocale);
@@ -83,7 +87,7 @@ function PostTable({
83
87
  const title = presentation.title;
84
88
  const isSelecting = onSelect !== void 0;
85
89
  const selectionLabel = t(
86
- isPicked ? "ui.picked.text" : "ui.pick.text"
90
+ isPicked ? "ui.pick-modal.picked.text" : "ui.pick-modal.pick.text"
87
91
  );
88
92
  function activateRow() {
89
93
  if (onSelect) {
@@ -68,7 +68,7 @@ function TagTable({
68
68
  const title = tagT.title || void 0;
69
69
  const isSelecting = onSelect !== void 0;
70
70
  const selectionLabel = t(
71
- isPicked ? "ui.picked.text" : "ui.pick.text"
71
+ isPicked ? "ui.pick-modal.picked.text" : "ui.pick-modal.pick.text"
72
72
  );
73
73
  function activateRow() {
74
74
  if (onSelect) {
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { ClassicEditor } from 'ckeditor5';
3
3
  import enTranslations from 'ckeditor5/translations/en.js';
4
+ import viTranslations from 'ckeditor5/translations/vi.js';
4
5
  import zhTranslations from 'ckeditor5/translations/zh.js';
5
6
  import { ASSET_MANAGER_PLUGIN_NAME } from '../plugins/asset-manager/asset-manager.js';
6
7
  import 'intor/react';
@@ -24,7 +25,7 @@ class BaseEditor extends ClassicEditor {
24
25
  static defaultConfig = {
25
26
  licenseKey: "GPL",
26
27
  //====== Translations ======
27
- translations: [zhTranslations, enTranslations],
28
+ translations: [zhTranslations, enTranslations, viTranslations],
28
29
  // schema: { allowIn: ["figure"], allowAttributes: ["src"] },
29
30
  //====== Toolbar ======
30
31
  toolbar: {
@@ -0,0 +1,6 @@
1
+ function resolveEditorLocale(locale) {
2
+ const language = locale.toLowerCase().split("-")[0];
3
+ return language === "zh" || language === "vi" ? language : "en";
4
+ }
5
+
6
+ export { resolveEditorLocale };
@@ -13,7 +13,6 @@ import '@tanstack/react-query';
13
13
  import 'clsx';
14
14
  import 'tailwind-merge';
15
15
  import { localeToFlagEmoji } from '../../../../../../../shared/utils/locale-to-flag-emoji.js';
16
- import { getLocaleLanguageCode } from '../../../../../../../shared/utils/get-locale-language-code.js';
17
16
  import '@radix-ui/react-avatar';
18
17
  import '../../../shadcn/badge.js';
19
18
  import '../../../shadcn/button.js';
@@ -36,19 +35,19 @@ import 'next/navigation';
36
35
  import '../../../../../../../constants/paths/redirect.js';
37
36
 
38
37
  function I18nSelector() {
39
- const { t, format } = useTranslator();
38
+ const { t } = useTranslator();
40
39
  return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
41
40
  /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(ActionButton, { variant: "outline", size: "icon-lg", children: [
42
41
  /* @__PURE__ */ jsx(Languages, {}),
43
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Select Languages" })
42
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("ui.navbar.i18n-selector.label.text") })
44
43
  ] }) }),
45
44
  /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", children: [
46
45
  /* @__PURE__ */ jsx(DropdownMenuLabel, { className: "text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7", children: t("ui.navbar.i18n-selector.label.text") }),
47
46
  CMS_LOCALES_ARRAY.map((locale) => {
48
- const language = getLocaleLanguageCode(locale);
47
+ const displayName = new Intl.DisplayNames([locale], { type: "language" }).of(locale) ?? locale;
49
48
  return /* @__PURE__ */ jsx(Link, { locale, children: /* @__PURE__ */ jsxs(DropdownMenuItem, { children: [
50
49
  /* @__PURE__ */ jsx("span", { className: "mr-1", children: localeToFlagEmoji(locale) }),
51
- language ? format.displayName(language, { type: "language" }) : locale
50
+ displayName
52
51
  ] }) }, locale);
53
52
  })
54
53
  ] })
@@ -15,6 +15,7 @@ import 'mime-types';
15
15
  import 'clsx';
16
16
  import 'tailwind-merge';
17
17
  import { ensureArray } from '../../../../../../../../../../../shared/utils/ensure-array.js';
18
+ import { resolveCmsText } from '../../../../../../../../../../../shared/resolve-cms-text.js';
18
19
  import { getControlMeta } from '../../../../../../../../../applications/form/get-control-meta.js';
19
20
  import '../../../../../../../../../../../constants/paths/redirect.js';
20
21
  import '../../../../../../../../../../../constants/cms-locale.js';
@@ -90,7 +91,7 @@ function createCategoryEditPage({
90
91
  titleProps: {
91
92
  icon: Notebook,
92
93
  title: t("resources.category.text"),
93
- leftChildren: /* @__PURE__ */ jsx(Badge, { children: topic?.title[locale] })
94
+ leftChildren: /* @__PURE__ */ jsx(Badge, { children: resolveCmsText(topic?.title, locale) })
94
95
  }
95
96
  }
96
97
  ),
@@ -18,6 +18,7 @@ import '@tanstack/react-query';
18
18
  import 'clsx';
19
19
  import 'tailwind-merge';
20
20
  import { joinUrl } from '../../../../../../../../../../shared/utils/join-url.js';
21
+ import { resolveCmsText } from '../../../../../../../../../../shared/resolve-cms-text.js';
21
22
  import 'next/link';
22
23
  import '@radix-ui/react-avatar';
23
24
  import '../../../../../../../components/shadcn/badge.js';
@@ -103,7 +104,7 @@ function createCategoryShowPage({
103
104
  titleProps: {
104
105
  icon: Notebook,
105
106
  title: t("resources.category.text"),
106
- leftChildren: /* @__PURE__ */ jsx(Badge, { children: topic?.title[locale] }),
107
+ leftChildren: /* @__PURE__ */ jsx(Badge, { children: resolveCmsText(topic?.title, locale) }),
107
108
  rightChildren: category?.isLocked && /* @__PURE__ */ jsx(
108
109
  Lock,
109
110
  {
@@ -18,6 +18,7 @@ import 'clsx';
18
18
  import 'tailwind-merge';
19
19
  import { ensureArray } from '../../../../../../../../../../shared/utils/ensure-array.js';
20
20
  import { joinUrl } from '../../../../../../../../../../shared/utils/join-url.js';
21
+ import { resolveCmsText } from '../../../../../../../../../../shared/resolve-cms-text.js';
21
22
  import { getControlMeta } from '../../../../../../../../applications/form/get-control-meta.js';
22
23
  import 'lucide-react';
23
24
  import { PageHeaderLayout } from '../../../../../../../components/ui/blocks/page-header/page-header-layout.js';
@@ -79,7 +80,7 @@ function createCategoryCreatePage({
79
80
  navigation: /* @__PURE__ */ jsx(ReturnButton, { useConfirm: true, href: returnHref }),
80
81
  titleProps: {
81
82
  title: t("resources.category.text"),
82
- leftChildren: /* @__PURE__ */ jsx(Badge, { children: topic?.title[locale] })
83
+ leftChildren: /* @__PURE__ */ jsx(Badge, { children: resolveCmsText(topic?.title, locale) })
83
84
  }
84
85
  }
85
86
  ),
@@ -18,6 +18,7 @@ import 'clsx';
18
18
  import 'tailwind-merge';
19
19
  import { joinUrl } from '../../../../../../../../shared/utils/join-url.js';
20
20
  import { DO_NOT_FETCH_KEY } from '../../../../../../../../shared/list-item.js';
21
+ import { resolveCmsText } from '../../../../../../../../shared/resolve-cms-text.js';
21
22
  import 'next/link';
22
23
  import '@radix-ui/react-avatar';
23
24
  import '../../../../../components/shadcn/badge.js';
@@ -75,7 +76,7 @@ function createTopicScopePage({
75
76
  POST_TYPES.SUBCATEGORY
76
77
  );
77
78
  const topic = Object.hasOwn(staticTopics, topicKey) ? staticTopics[topicKey] : void 0;
78
- const topicT = { title: topic?.title[locale] ?? "" };
79
+ const topicT = { title: resolveCmsText(topic?.title, locale) ?? "" };
79
80
  const [categoryStates, setCategoryStates] = useState({});
80
81
  const [subcategoryStates, setSubcategoryStates] = useState({});
81
82
  const [postStates, setPostStates] = useState(
@@ -18,6 +18,7 @@ import 'clsx';
18
18
  import 'tailwind-merge';
19
19
  import { ensureArray } from '../../../../../../../../../../../shared/utils/ensure-array.js';
20
20
  import { joinUrl } from '../../../../../../../../../../../shared/utils/join-url.js';
21
+ import { resolveCmsText } from '../../../../../../../../../../../shared/resolve-cms-text.js';
21
22
  import { getControlMeta } from '../../../../../../../../../applications/form/get-control-meta.js';
22
23
  import 'lucide-react';
23
24
  import { PageHeaderLayout } from '../../../../../../../../components/ui/blocks/page-header/page-header-layout.js';
@@ -105,7 +106,7 @@ function createPostEditPage({
105
106
  ),
106
107
  titleProps: {
107
108
  title: t("resources.post.text"),
108
- leftChildren: /* @__PURE__ */ jsx(Badge, { isLoading: isFetching, children: topic?.title[defaultWebLocale] })
109
+ leftChildren: /* @__PURE__ */ jsx(Badge, { isLoading: isFetching, children: resolveCmsText(topic?.title, defaultWebLocale) })
109
110
  }
110
111
  }
111
112
  ),
@@ -18,6 +18,7 @@ import '@tanstack/react-query';
18
18
  import 'clsx';
19
19
  import 'tailwind-merge';
20
20
  import { joinUrl } from '../../../../../../../../../../shared/utils/join-url.js';
21
+ import { resolveCmsText } from '../../../../../../../../../../shared/resolve-cms-text.js';
21
22
  import 'next/link';
22
23
  import '@radix-ui/react-avatar';
23
24
  import '../../../../../../../components/shadcn/badge.js';
@@ -106,7 +107,7 @@ function createPostShowPage({
106
107
  ),
107
108
  titleProps: {
108
109
  title: t("resources.post.text"),
109
- leftChildren: /* @__PURE__ */ jsx(Badge, { children: topic?.title[defaultWebLocale] }),
110
+ leftChildren: /* @__PURE__ */ jsx(Badge, { children: resolveCmsText(topic?.title, defaultWebLocale) }),
110
111
  rightChildren: post?.isLocked && /* @__PURE__ */ jsx(
111
112
  Lock,
112
113
  {