@strapi/i18n 0.0.0-experimental.2cfaca2410c03f1dee31ca18c06aedfb313e0fb4 → 0.0.0-experimental.2d0a5401e9f3f5c797448e48890c9dd0c05ebad2

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 (381) hide show
  1. package/dist/admin/components/BulkLocaleActionModal.js +262 -0
  2. package/dist/admin/components/BulkLocaleActionModal.js.map +1 -0
  3. package/dist/admin/components/BulkLocaleActionModal.mjs +260 -0
  4. package/dist/admin/components/BulkLocaleActionModal.mjs.map +1 -0
  5. package/dist/admin/components/CMHeaderActions.js +721 -0
  6. package/dist/admin/components/CMHeaderActions.js.map +1 -0
  7. package/dist/admin/components/CMHeaderActions.mjs +696 -0
  8. package/dist/admin/components/CMHeaderActions.mjs.map +1 -0
  9. package/dist/admin/components/CMListViewModalsAdditionalInformation.js +69 -0
  10. package/dist/admin/components/CMListViewModalsAdditionalInformation.js.map +1 -0
  11. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs +65 -0
  12. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs.map +1 -0
  13. package/dist/admin/components/CheckboxConfirmation.js +155 -0
  14. package/dist/admin/components/CheckboxConfirmation.js.map +1 -0
  15. package/dist/admin/components/CheckboxConfirmation.mjs +134 -0
  16. package/dist/admin/components/CheckboxConfirmation.mjs.map +1 -0
  17. package/dist/admin/components/CreateLocale.js +395 -0
  18. package/dist/admin/components/CreateLocale.js.map +1 -0
  19. package/dist/admin/components/CreateLocale.mjs +369 -0
  20. package/dist/admin/components/CreateLocale.mjs.map +1 -0
  21. package/dist/admin/components/DeleteLocale.js +90 -0
  22. package/dist/admin/components/DeleteLocale.js.map +1 -0
  23. package/dist/admin/components/DeleteLocale.mjs +69 -0
  24. package/dist/admin/components/DeleteLocale.mjs.map +1 -0
  25. package/dist/admin/components/EditLocale.js +212 -0
  26. package/dist/admin/components/EditLocale.js.map +1 -0
  27. package/dist/admin/components/EditLocale.mjs +190 -0
  28. package/dist/admin/components/EditLocale.mjs.map +1 -0
  29. package/dist/admin/components/LocaleListCell.js +82 -0
  30. package/dist/admin/components/LocaleListCell.js.map +1 -0
  31. package/dist/admin/components/LocaleListCell.mjs +80 -0
  32. package/dist/admin/components/LocaleListCell.mjs.map +1 -0
  33. package/dist/admin/components/LocalePicker.js +98 -0
  34. package/dist/admin/components/LocalePicker.js.map +1 -0
  35. package/dist/admin/components/LocalePicker.mjs +77 -0
  36. package/dist/admin/components/LocalePicker.mjs.map +1 -0
  37. package/dist/admin/components/LocaleTable.js +143 -0
  38. package/dist/admin/components/LocaleTable.js.map +1 -0
  39. package/dist/admin/components/LocaleTable.mjs +122 -0
  40. package/dist/admin/components/LocaleTable.mjs.map +1 -0
  41. package/dist/admin/constants.js +37 -0
  42. package/dist/admin/constants.js.map +1 -0
  43. package/dist/admin/constants.mjs +35 -0
  44. package/dist/admin/constants.mjs.map +1 -0
  45. package/dist/admin/contentManagerHooks/editView.js +106 -0
  46. package/dist/admin/contentManagerHooks/editView.js.map +1 -0
  47. package/dist/admin/contentManagerHooks/editView.mjs +85 -0
  48. package/dist/admin/contentManagerHooks/editView.mjs.map +1 -0
  49. package/dist/admin/contentManagerHooks/listView.js +43 -0
  50. package/dist/admin/contentManagerHooks/listView.js.map +1 -0
  51. package/dist/admin/contentManagerHooks/listView.mjs +41 -0
  52. package/dist/admin/contentManagerHooks/listView.mjs.map +1 -0
  53. package/dist/admin/contentReleasesHooks/releaseDetailsView.js +20 -0
  54. package/dist/admin/contentReleasesHooks/releaseDetailsView.js.map +1 -0
  55. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs +18 -0
  56. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs.map +1 -0
  57. package/dist/admin/hooks/useI18n.js +78 -0
  58. package/dist/admin/hooks/useI18n.js.map +1 -0
  59. package/dist/admin/hooks/useI18n.mjs +57 -0
  60. package/dist/admin/hooks/useI18n.mjs.map +1 -0
  61. package/dist/admin/index.js +226 -5
  62. package/dist/admin/index.js.map +1 -1
  63. package/dist/admin/index.mjs +202 -5
  64. package/dist/admin/index.mjs.map +1 -1
  65. package/dist/admin/middlewares/extendCTBAttributeInitialData.js +61 -0
  66. package/dist/admin/middlewares/extendCTBAttributeInitialData.js.map +1 -0
  67. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs +59 -0
  68. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs.map +1 -0
  69. package/dist/admin/middlewares/extendCTBInitialData.js +40 -0
  70. package/dist/admin/middlewares/extendCTBInitialData.js.map +1 -0
  71. package/dist/admin/middlewares/extendCTBInitialData.mjs +38 -0
  72. package/dist/admin/middlewares/extendCTBInitialData.mjs.map +1 -0
  73. package/dist/admin/middlewares/rbac-middleware.js +49 -0
  74. package/dist/admin/middlewares/rbac-middleware.js.map +1 -0
  75. package/dist/admin/middlewares/rbac-middleware.mjs +28 -0
  76. package/dist/admin/middlewares/rbac-middleware.mjs.map +1 -0
  77. package/dist/admin/pages/SettingsPage.js +107 -0
  78. package/dist/admin/pages/SettingsPage.js.map +1 -0
  79. package/dist/admin/pages/SettingsPage.mjs +85 -0
  80. package/dist/admin/pages/SettingsPage.mjs.map +1 -0
  81. package/dist/admin/pluginId.js +6 -0
  82. package/dist/admin/pluginId.js.map +1 -0
  83. package/dist/admin/pluginId.mjs +4 -0
  84. package/dist/admin/pluginId.mjs.map +1 -0
  85. package/dist/admin/services/api.js +12 -0
  86. package/dist/admin/services/api.js.map +1 -0
  87. package/dist/admin/services/api.mjs +10 -0
  88. package/dist/admin/services/api.mjs.map +1 -0
  89. package/dist/admin/services/locales.js +70 -0
  90. package/dist/admin/services/locales.js.map +1 -0
  91. package/dist/admin/services/locales.mjs +64 -0
  92. package/dist/admin/services/locales.mjs.map +1 -0
  93. package/dist/admin/services/relations.js +23 -0
  94. package/dist/admin/services/relations.js.map +1 -0
  95. package/dist/admin/services/relations.mjs +21 -0
  96. package/dist/admin/services/relations.mjs.map +1 -0
  97. package/dist/admin/src/components/CMHeaderActions.d.ts +6 -4
  98. package/dist/admin/src/components/CreateLocale.d.ts +6 -6
  99. package/dist/admin/src/components/LocaleListCell.d.ts +4 -4
  100. package/dist/admin/src/components/tests/CreateLocale.test.d.ts +1 -0
  101. package/dist/admin/src/components/tests/DeleteLocale.test.d.ts +1 -0
  102. package/dist/admin/src/components/tests/EditLocale.test.d.ts +1 -0
  103. package/dist/admin/src/components/tests/LocaleListCell.test.d.ts +1 -0
  104. package/dist/admin/src/contentReleasesHooks/releaseDetailsView.d.ts +1 -1
  105. package/dist/admin/src/pages/tests/SettingsPage.test.d.ts +1 -0
  106. package/dist/admin/tests/server.d.ts +1 -0
  107. package/dist/admin/tests/utils.d.ts +6 -0
  108. package/dist/admin/translations/de.json.js +66 -0
  109. package/dist/admin/translations/de.json.js.map +1 -0
  110. package/dist/admin/translations/de.json.mjs +64 -0
  111. package/dist/admin/translations/de.json.mjs.map +1 -0
  112. package/dist/admin/translations/dk.json.js +66 -0
  113. package/dist/admin/translations/dk.json.js.map +1 -0
  114. package/dist/admin/translations/dk.json.mjs +64 -0
  115. package/dist/admin/translations/dk.json.mjs.map +1 -0
  116. package/dist/admin/translations/en.json.js +81 -0
  117. package/dist/admin/translations/en.json.js.map +1 -0
  118. package/dist/admin/translations/en.json.mjs +79 -0
  119. package/dist/admin/translations/en.json.mjs.map +1 -0
  120. package/dist/admin/translations/es.json.js +66 -0
  121. package/dist/admin/translations/es.json.js.map +1 -0
  122. package/dist/admin/translations/es.json.mjs +64 -0
  123. package/dist/admin/translations/es.json.mjs.map +1 -0
  124. package/dist/admin/translations/fr.json.js +66 -0
  125. package/dist/admin/translations/fr.json.js.map +1 -0
  126. package/dist/admin/translations/fr.json.mjs +64 -0
  127. package/dist/admin/translations/fr.json.mjs.map +1 -0
  128. package/dist/admin/translations/ko.json.js +65 -0
  129. package/dist/admin/translations/ko.json.js.map +1 -0
  130. package/dist/admin/translations/ko.json.mjs +63 -0
  131. package/dist/admin/translations/ko.json.mjs.map +1 -0
  132. package/dist/admin/translations/pl.json.js +66 -0
  133. package/dist/admin/translations/pl.json.js.map +1 -0
  134. package/dist/admin/translations/pl.json.mjs +64 -0
  135. package/dist/admin/translations/pl.json.mjs.map +1 -0
  136. package/dist/admin/translations/ru.json.js +68 -0
  137. package/dist/admin/translations/ru.json.js.map +1 -0
  138. package/dist/admin/translations/ru.json.mjs +66 -0
  139. package/dist/admin/translations/ru.json.mjs.map +1 -0
  140. package/dist/admin/translations/tr.json.js +66 -0
  141. package/dist/admin/translations/tr.json.js.map +1 -0
  142. package/dist/admin/translations/tr.json.mjs +64 -0
  143. package/dist/admin/translations/tr.json.mjs.map +1 -0
  144. package/dist/admin/translations/uk.json.js +82 -0
  145. package/dist/admin/translations/uk.json.js.map +1 -0
  146. package/dist/admin/translations/uk.json.mjs +80 -0
  147. package/dist/admin/translations/uk.json.mjs.map +1 -0
  148. package/dist/admin/translations/zh-Hans.json.js +57 -0
  149. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  150. package/dist/admin/translations/zh-Hans.json.mjs +55 -0
  151. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  152. package/dist/admin/translations/zh.json.js +66 -0
  153. package/dist/admin/translations/zh.json.js.map +1 -0
  154. package/dist/admin/translations/zh.json.mjs +64 -0
  155. package/dist/admin/translations/zh.json.mjs.map +1 -0
  156. package/dist/admin/utils/baseQuery.js +8 -0
  157. package/dist/admin/utils/baseQuery.js.map +1 -0
  158. package/dist/admin/utils/baseQuery.mjs +6 -0
  159. package/dist/admin/utils/baseQuery.mjs.map +1 -0
  160. package/dist/admin/utils/clean.js +70 -0
  161. package/dist/admin/utils/clean.js.map +1 -0
  162. package/dist/admin/utils/clean.mjs +68 -0
  163. package/dist/admin/utils/clean.mjs.map +1 -0
  164. package/dist/admin/utils/fields.js +29 -0
  165. package/dist/admin/utils/fields.js.map +1 -0
  166. package/dist/admin/utils/fields.mjs +26 -0
  167. package/dist/admin/utils/fields.mjs.map +1 -0
  168. package/dist/admin/utils/getTranslation.js +8 -0
  169. package/dist/admin/utils/getTranslation.js.map +1 -0
  170. package/dist/admin/utils/getTranslation.mjs +6 -0
  171. package/dist/admin/utils/getTranslation.mjs.map +1 -0
  172. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  173. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  174. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  175. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  176. package/dist/admin/utils/schemas.js +68 -0
  177. package/dist/admin/utils/schemas.js.map +1 -0
  178. package/dist/admin/utils/schemas.mjs +66 -0
  179. package/dist/admin/utils/schemas.mjs.map +1 -0
  180. package/dist/admin/utils/strings.js +6 -0
  181. package/dist/admin/utils/strings.js.map +1 -0
  182. package/dist/admin/utils/strings.mjs +4 -0
  183. package/dist/admin/utils/strings.mjs.map +1 -0
  184. package/dist/server/bootstrap.js +79 -0
  185. package/dist/server/bootstrap.js.map +1 -0
  186. package/dist/server/bootstrap.mjs +77 -0
  187. package/dist/server/bootstrap.mjs.map +1 -0
  188. package/dist/server/constants/index.js +29 -0
  189. package/dist/server/constants/index.js.map +1 -0
  190. package/dist/server/constants/index.mjs +25 -0
  191. package/dist/server/constants/index.mjs.map +1 -0
  192. package/dist/server/constants/iso-locales.json.js +2423 -0
  193. package/dist/server/constants/iso-locales.json.js.map +1 -0
  194. package/dist/server/constants/iso-locales.json.mjs +2421 -0
  195. package/dist/server/constants/iso-locales.json.mjs.map +1 -0
  196. package/dist/server/content-types/index.js +10 -0
  197. package/dist/server/content-types/index.js.map +1 -0
  198. package/dist/server/content-types/index.mjs +8 -0
  199. package/dist/server/content-types/index.mjs.map +1 -0
  200. package/dist/server/content-types/locale/index.js +10 -0
  201. package/dist/server/content-types/locale/index.js.map +1 -0
  202. package/dist/server/content-types/locale/index.mjs +8 -0
  203. package/dist/server/content-types/locale/index.mjs.map +1 -0
  204. package/dist/server/content-types/locale/schema.json.js +46 -0
  205. package/dist/server/content-types/locale/schema.json.js.map +1 -0
  206. package/dist/server/content-types/locale/schema.json.mjs +38 -0
  207. package/dist/server/content-types/locale/schema.json.mjs.map +1 -0
  208. package/dist/server/controllers/content-types.js +76 -0
  209. package/dist/server/controllers/content-types.js.map +1 -0
  210. package/dist/server/controllers/content-types.mjs +74 -0
  211. package/dist/server/controllers/content-types.mjs.map +1 -0
  212. package/dist/server/controllers/index.js +14 -0
  213. package/dist/server/controllers/index.js.map +1 -0
  214. package/dist/server/controllers/index.mjs +12 -0
  215. package/dist/server/controllers/index.mjs.map +1 -0
  216. package/dist/server/controllers/iso-locales.js +13 -0
  217. package/dist/server/controllers/iso-locales.js.map +1 -0
  218. package/dist/server/controllers/iso-locales.mjs +11 -0
  219. package/dist/server/controllers/iso-locales.mjs.map +1 -0
  220. package/dist/server/controllers/locales.js +108 -0
  221. package/dist/server/controllers/locales.js.map +1 -0
  222. package/dist/server/controllers/locales.mjs +87 -0
  223. package/dist/server/controllers/locales.mjs.map +1 -0
  224. package/dist/server/controllers/validate-locale-creation.js +47 -0
  225. package/dist/server/controllers/validate-locale-creation.js.map +1 -0
  226. package/dist/server/controllers/validate-locale-creation.mjs +45 -0
  227. package/dist/server/controllers/validate-locale-creation.mjs.map +1 -0
  228. package/dist/server/domain/locale.js +11 -0
  229. package/dist/server/domain/locale.js.map +1 -0
  230. package/dist/server/domain/locale.mjs +9 -0
  231. package/dist/server/domain/locale.mjs.map +1 -0
  232. package/dist/server/graphql.js +115 -0
  233. package/dist/server/graphql.js.map +1 -0
  234. package/dist/server/graphql.mjs +113 -0
  235. package/dist/server/graphql.mjs.map +1 -0
  236. package/dist/server/index.js +18 -3483
  237. package/dist/server/index.js.map +1 -1
  238. package/dist/server/index.mjs +17 -3465
  239. package/dist/server/index.mjs.map +1 -1
  240. package/dist/server/register.js +79 -0
  241. package/dist/server/register.js.map +1 -0
  242. package/dist/server/register.mjs +77 -0
  243. package/dist/server/register.mjs.map +1 -0
  244. package/dist/server/routes/admin.js +102 -0
  245. package/dist/server/routes/admin.js.map +1 -0
  246. package/dist/server/routes/admin.mjs +100 -0
  247. package/dist/server/routes/admin.mjs.map +1 -0
  248. package/dist/server/routes/content-api.js +15 -0
  249. package/dist/server/routes/content-api.js.map +1 -0
  250. package/dist/server/routes/content-api.mjs +13 -0
  251. package/dist/server/routes/content-api.mjs.map +1 -0
  252. package/dist/server/routes/index.js +12 -0
  253. package/dist/server/routes/index.js.map +1 -0
  254. package/dist/server/routes/index.mjs +10 -0
  255. package/dist/server/routes/index.mjs.map +1 -0
  256. package/dist/server/services/content-types.js +157 -0
  257. package/dist/server/services/content-types.js.map +1 -0
  258. package/dist/server/services/content-types.mjs +155 -0
  259. package/dist/server/services/content-types.mjs.map +1 -0
  260. package/dist/server/services/index.js +22 -0
  261. package/dist/server/services/index.js.map +1 -0
  262. package/dist/server/services/index.mjs +20 -0
  263. package/dist/server/services/index.mjs.map +1 -0
  264. package/dist/server/services/iso-locales.js +12 -0
  265. package/dist/server/services/iso-locales.js.map +1 -0
  266. package/dist/server/services/iso-locales.mjs +10 -0
  267. package/dist/server/services/iso-locales.mjs.map +1 -0
  268. package/dist/server/services/locales.js +114 -0
  269. package/dist/server/services/locales.js.map +1 -0
  270. package/dist/server/services/locales.mjs +112 -0
  271. package/dist/server/services/locales.mjs.map +1 -0
  272. package/dist/server/services/localizations.js +68 -0
  273. package/dist/server/services/localizations.js.map +1 -0
  274. package/dist/server/services/localizations.mjs +66 -0
  275. package/dist/server/services/localizations.mjs.map +1 -0
  276. package/dist/server/services/metrics.js +30 -0
  277. package/dist/server/services/metrics.js.map +1 -0
  278. package/dist/server/services/metrics.mjs +28 -0
  279. package/dist/server/services/metrics.mjs.map +1 -0
  280. package/dist/server/services/permissions/actions.js +136 -0
  281. package/dist/server/services/permissions/actions.js.map +1 -0
  282. package/dist/server/services/permissions/actions.mjs +134 -0
  283. package/dist/server/services/permissions/actions.mjs.map +1 -0
  284. package/dist/server/services/permissions/engine.js +52 -0
  285. package/dist/server/services/permissions/engine.js.map +1 -0
  286. package/dist/server/services/permissions/engine.mjs +50 -0
  287. package/dist/server/services/permissions/engine.mjs.map +1 -0
  288. package/dist/server/services/permissions/sections-builder.js +45 -0
  289. package/dist/server/services/permissions/sections-builder.js.map +1 -0
  290. package/dist/server/services/permissions/sections-builder.mjs +43 -0
  291. package/dist/server/services/permissions/sections-builder.mjs.map +1 -0
  292. package/dist/server/services/permissions.js +14 -0
  293. package/dist/server/services/permissions.js.map +1 -0
  294. package/dist/server/services/permissions.mjs +12 -0
  295. package/dist/server/services/permissions.mjs.map +1 -0
  296. package/dist/server/services/sanitize/index.js +34 -0
  297. package/dist/server/services/sanitize/index.js.map +1 -0
  298. package/dist/server/services/sanitize/index.mjs +32 -0
  299. package/dist/server/services/sanitize/index.mjs.map +1 -0
  300. package/dist/server/src/index.d.ts +6 -0
  301. package/dist/server/src/index.d.ts.map +1 -1
  302. package/dist/server/src/register.d.ts.map +1 -1
  303. package/dist/server/src/services/index.d.ts +6 -0
  304. package/dist/server/src/services/index.d.ts.map +1 -1
  305. package/dist/server/src/services/localizations.d.ts +1 -1
  306. package/dist/server/src/services/localizations.d.ts.map +1 -1
  307. package/dist/server/src/services/sanitize/index.d.ts +11 -0
  308. package/dist/server/src/services/sanitize/index.d.ts.map +1 -0
  309. package/dist/server/src/utils/index.d.ts +2 -0
  310. package/dist/server/src/utils/index.d.ts.map +1 -1
  311. package/dist/server/utils/index.js +16 -0
  312. package/dist/server/utils/index.js.map +1 -0
  313. package/dist/server/utils/index.mjs +13 -0
  314. package/dist/server/utils/index.mjs.map +1 -0
  315. package/dist/server/validation/content-types.js +18 -0
  316. package/dist/server/validation/content-types.js.map +1 -0
  317. package/dist/server/validation/content-types.mjs +16 -0
  318. package/dist/server/validation/content-types.mjs.map +1 -0
  319. package/dist/server/validation/locales.js +23 -0
  320. package/dist/server/validation/locales.js.map +1 -0
  321. package/dist/server/validation/locales.mjs +20 -0
  322. package/dist/server/validation/locales.mjs.map +1 -0
  323. package/dist/shared/contracts/content-manager.d.ts +1 -1
  324. package/dist/shared/contracts/shared.d.ts +1 -1
  325. package/package.json +18 -16
  326. package/dist/_chunks/SettingsPage-BIZrSFGY.mjs +0 -554
  327. package/dist/_chunks/SettingsPage-BIZrSFGY.mjs.map +0 -1
  328. package/dist/_chunks/SettingsPage-kMDCxWLw.js +0 -574
  329. package/dist/_chunks/SettingsPage-kMDCxWLw.js.map +0 -1
  330. package/dist/_chunks/de-9eCAqqrB.mjs +0 -66
  331. package/dist/_chunks/de-9eCAqqrB.mjs.map +0 -1
  332. package/dist/_chunks/de-DtWiGdHl.js +0 -66
  333. package/dist/_chunks/de-DtWiGdHl.js.map +0 -1
  334. package/dist/_chunks/dk-2qBjxt-P.mjs +0 -66
  335. package/dist/_chunks/dk-2qBjxt-P.mjs.map +0 -1
  336. package/dist/_chunks/dk-D8C-casx.js +0 -66
  337. package/dist/_chunks/dk-D8C-casx.js.map +0 -1
  338. package/dist/_chunks/en-B6327hMz.js +0 -80
  339. package/dist/_chunks/en-B6327hMz.js.map +0 -1
  340. package/dist/_chunks/en-DZXpOMHo.mjs +0 -80
  341. package/dist/_chunks/en-DZXpOMHo.mjs.map +0 -1
  342. package/dist/_chunks/es-DS-XFGSw.js +0 -66
  343. package/dist/_chunks/es-DS-XFGSw.js.map +0 -1
  344. package/dist/_chunks/es-DlmMVaBG.mjs +0 -66
  345. package/dist/_chunks/es-DlmMVaBG.mjs.map +0 -1
  346. package/dist/_chunks/fr-3S6ke71d.mjs +0 -66
  347. package/dist/_chunks/fr-3S6ke71d.mjs.map +0 -1
  348. package/dist/_chunks/fr-BTjekDpq.js +0 -66
  349. package/dist/_chunks/fr-BTjekDpq.js.map +0 -1
  350. package/dist/_chunks/index-DXrgAtCA.mjs +0 -1571
  351. package/dist/_chunks/index-DXrgAtCA.mjs.map +0 -1
  352. package/dist/_chunks/index-Dncj9Inq.js +0 -1593
  353. package/dist/_chunks/index-Dncj9Inq.js.map +0 -1
  354. package/dist/_chunks/ko-DmcGUBQ3.js +0 -65
  355. package/dist/_chunks/ko-DmcGUBQ3.js.map +0 -1
  356. package/dist/_chunks/ko-qTjQ8IMw.mjs +0 -65
  357. package/dist/_chunks/ko-qTjQ8IMw.mjs.map +0 -1
  358. package/dist/_chunks/pl-B67TSHqT.mjs +0 -66
  359. package/dist/_chunks/pl-B67TSHqT.mjs.map +0 -1
  360. package/dist/_chunks/pl-Cn5RYonZ.js +0 -66
  361. package/dist/_chunks/pl-Cn5RYonZ.js.map +0 -1
  362. package/dist/_chunks/ru-BMBgVL3s.js +0 -68
  363. package/dist/_chunks/ru-BMBgVL3s.js.map +0 -1
  364. package/dist/_chunks/ru-hagMa57T.mjs +0 -68
  365. package/dist/_chunks/ru-hagMa57T.mjs.map +0 -1
  366. package/dist/_chunks/tr-CarUU76c.js +0 -66
  367. package/dist/_chunks/tr-CarUU76c.js.map +0 -1
  368. package/dist/_chunks/tr-Dw_jmkG-.mjs +0 -66
  369. package/dist/_chunks/tr-Dw_jmkG-.mjs.map +0 -1
  370. package/dist/_chunks/zh-57YM4amO.mjs +0 -66
  371. package/dist/_chunks/zh-57YM4amO.mjs.map +0 -1
  372. package/dist/_chunks/zh-CukOviB0.js +0 -66
  373. package/dist/_chunks/zh-CukOviB0.js.map +0 -1
  374. package/dist/_chunks/zh-Hans-DSHIXAa3.js +0 -57
  375. package/dist/_chunks/zh-Hans-DSHIXAa3.js.map +0 -1
  376. package/dist/_chunks/zh-Hans-Dyc-aR-h.mjs +0 -57
  377. package/dist/_chunks/zh-Hans-Dyc-aR-h.mjs.map +0 -1
  378. package/dist/server/src/migrations/content-type/disable/index.d.ts +0 -3
  379. package/dist/server/src/migrations/content-type/disable/index.d.ts.map +0 -1
  380. package/dist/server/src/migrations/content-type/enable/index.d.ts +0 -3
  381. package/dist/server/src/migrations/content-type/enable/index.d.ts.map +0 -1
@@ -1,3466 +1,18 @@
1
- import _ from "lodash";
2
- import { get, identity, propEq, isArray, prop, getOr, isEmpty, reduce, cloneDeep, isNil, pipe, pick, has, map, flatten, uniq } from "lodash/fp";
3
- import * as utils from "@strapi/utils";
4
- import { errors, async, contentTypes as contentTypes$2, yup, validateYupSchema } from "@strapi/utils";
5
- const getCoreStore = () => {
6
- return strapi.store({ type: "plugin", name: "i18n" });
7
- };
8
- const getService = (name) => {
9
- return strapi.plugin("i18n").service(name);
10
- };
11
- const registerModelsHooks = () => {
12
- strapi.db.lifecycles.subscribe({
13
- models: ["plugin::i18n.locale"],
14
- async afterCreate() {
15
- await getService("permissions").actions.syncSuperAdminPermissionsWithLocales();
16
- },
17
- async afterDelete() {
18
- await getService("permissions").actions.syncSuperAdminPermissionsWithLocales();
19
- }
20
- });
21
- strapi.documents.use(async (context, next) => {
22
- const schema2 = context.contentType;
23
- if (!["create", "update", "discardDraft", "publish"].includes(context.action)) {
24
- return next();
25
- }
26
- if (!getService("content-types").isLocalizedContentType(schema2)) {
27
- return next();
28
- }
29
- const { getNestedPopulateOfNonLocalizedAttributes: getNestedPopulateOfNonLocalizedAttributes2 } = getService("content-types");
30
- const attributesToPopulate = getNestedPopulateOfNonLocalizedAttributes2(schema2.uid);
31
- const result = await next();
32
- let resultID;
33
- if (Array.isArray(result?.entries) && result.entries[0]?.id) {
34
- resultID = result.entries[0].id;
35
- } else if (result?.id) {
36
- resultID = result.id;
37
- } else {
38
- return result;
39
- }
40
- if (attributesToPopulate.length > 0) {
41
- const populatedResult = await strapi.db.query(schema2.uid).findOne({ where: { id: resultID }, populate: attributesToPopulate });
42
- await getService("localizations").syncNonLocalizedAttributes(populatedResult, schema2);
43
- }
44
- return result;
45
- });
46
- };
47
- const bootstrap = async () => {
48
- const { sendDidInitializeEvent: sendDidInitializeEvent2 } = getService("metrics");
49
- const { initDefaultLocale: initDefaultLocale2 } = getService("locales");
50
- const { sectionsBuilder, actions: actions2, engine } = getService("permissions");
51
- await initDefaultLocale2();
52
- sectionsBuilder.registerLocalesPropertyHandler();
53
- await actions2.registerI18nActions();
54
- actions2.registerI18nActionsHooks();
55
- actions2.updateActionsProperties();
56
- engine.registerI18nPermissionsHandlers();
57
- registerModelsHooks();
58
- sendDidInitializeEvent2();
59
- };
60
- const { ApplicationError: ApplicationError$3 } = errors;
61
- const validateLocaleCreation = async (ctx, next) => {
62
- const { model } = ctx.params;
63
- const { query } = ctx.request;
64
- if (!ctx.request.body) {
65
- ctx.request.body = {};
66
- }
67
- const body = ctx.request.body;
68
- const { getValidLocale: getValidLocale2, isLocalizedContentType: isLocalizedContentType2 } = getService("content-types");
69
- const modelDef = strapi.getModel(model);
70
- if (!isLocalizedContentType2(modelDef)) {
71
- return next();
72
- }
73
- const locale2 = get("locale", query) || get("locale", body) || void 0;
74
- ctx.request.query = {};
75
- let entityLocale;
76
- try {
77
- entityLocale = await getValidLocale2(locale2);
78
- } catch (e) {
79
- throw new ApplicationError$3("This locale doesn't exist");
80
- }
81
- body.locale = entityLocale;
82
- if (modelDef.kind === "singleType") {
83
- const entity = await strapi.entityService.findMany(modelDef.uid, {
84
- locale: entityLocale
85
- });
86
- ctx.request.query.locale = body.locale;
87
- if (entity) {
88
- return next();
89
- }
90
- }
91
- return next();
92
- };
93
- const { ValidationError } = errors;
94
- const LOCALE_SCALAR_TYPENAME = "I18NLocaleCode";
95
- const LOCALE_ARG_PLUGIN_NAME = "I18NLocaleArg";
96
- const graphqlProvider = ({ strapi: strapi2 }) => ({
97
- register() {
98
- const { service: getGraphQLService } = strapi2.plugin("graphql");
99
- const { service: getI18NService } = strapi2.plugin("i18n");
100
- const { isLocalizedContentType: isLocalizedContentType2 } = getI18NService("content-types");
101
- const extensionService = getGraphQLService("extension");
102
- extensionService.shadowCRUD("plugin::i18n.locale").disableMutations();
103
- Object.entries(strapi2.contentTypes).forEach(([uid, ct]) => {
104
- if (isLocalizedContentType2(ct)) {
105
- extensionService.shadowCRUD(uid).field("locale").disableInput();
106
- extensionService.shadowCRUD(uid).field("localizations").disableInput();
107
- }
108
- });
109
- extensionService.use(({ nexus, typeRegistry }) => {
110
- const i18nLocaleArgPlugin = getI18nLocaleArgPlugin({ nexus, typeRegistry });
111
- const i18nLocaleScalar = getLocaleScalar({ nexus });
112
- return {
113
- plugins: [i18nLocaleArgPlugin],
114
- types: [i18nLocaleScalar],
115
- resolversConfig: {
116
- // Modify the default scope associated to find and findOne locale queries to match the actual action name
117
- "Query.i18NLocale": { auth: { scope: "plugin::i18n.locales.listLocales" } },
118
- "Query.i18NLocales": { auth: { scope: "plugin::i18n.locales.listLocales" } }
119
- }
120
- };
121
- });
122
- }
123
- });
124
- const getLocaleScalar = ({ nexus }) => {
125
- const { service: getI18NService } = strapi.plugin("i18n");
126
- const locales2 = getI18NService("iso-locales").getIsoLocales();
127
- return nexus.scalarType({
128
- name: LOCALE_SCALAR_TYPENAME,
129
- description: "A string used to identify an i18n locale",
130
- serialize: identity,
131
- parseValue: identity,
132
- parseLiteral(ast) {
133
- if (ast.kind !== "StringValue") {
134
- throw new ValidationError("Locale cannot represent non string type");
135
- }
136
- const isValidLocale = ast.value === "*" || locales2.find(propEq("code", ast.value));
137
- if (!isValidLocale) {
138
- throw new ValidationError("Unknown locale supplied");
139
- }
140
- return ast.value;
141
- }
142
- });
143
- };
144
- const getI18nLocaleArgPlugin = ({ nexus, typeRegistry }) => {
145
- const { service: getI18NService } = strapi.plugin("i18n");
146
- const { isLocalizedContentType: isLocalizedContentType2 } = getI18NService("content-types");
147
- return nexus.plugin({
148
- name: LOCALE_ARG_PLUGIN_NAME,
149
- onAddOutputField(config) {
150
- const { parentType } = config;
151
- if (parentType !== "Query" && parentType !== "Mutation") {
152
- return;
153
- }
154
- let contentType;
155
- if (config?.extensions?.strapi?.contentType) {
156
- contentType = config.extensions.strapi.contentType;
157
- } else {
158
- const registryType = typeRegistry.get(config.type);
159
- if (!registryType) {
160
- return;
161
- }
162
- contentType = registryType.config.contentType;
163
- }
164
- if (!isLocalizedContentType2(contentType)) {
165
- return;
166
- }
167
- if (!config.args) {
168
- config.args = {};
169
- }
170
- config.args.locale = nexus.arg({
171
- type: LOCALE_SCALAR_TYPENAME,
172
- description: "The locale to use for the query"
173
- });
174
- }
175
- });
176
- };
177
- const isoLocales = [
178
- {
179
- code: "af",
180
- name: "Afrikaans (af)"
181
- },
182
- {
183
- code: "af-NA",
184
- name: "Afrikaans (Namibia) (af-NA)"
185
- },
186
- {
187
- code: "af-ZA",
188
- name: "Afrikaans (South Africa) (af-ZA)"
189
- },
190
- {
191
- code: "agq",
192
- name: "Aghem (agq)"
193
- },
194
- {
195
- code: "agq-CM",
196
- name: "Aghem (Cameroon) (agq-CM)"
197
- },
198
- {
199
- code: "ak",
200
- name: "Akan (ak)"
201
- },
202
- {
203
- code: "ak-GH",
204
- name: "Akan (Ghana) (ak-GH)"
205
- },
206
- {
207
- code: "sq",
208
- name: "Albanian (sq)"
209
- },
210
- {
211
- code: "sq-AL",
212
- name: "Albanian (Albania) (sq-AL)"
213
- },
214
- {
215
- code: "am",
216
- name: "Amharic (am)"
217
- },
218
- {
219
- code: "am-ET",
220
- name: "Amharic (Ethiopia) (am-ET)"
221
- },
222
- {
223
- code: "aig",
224
- name: "Antigua and Barbuda Creole English"
225
- },
226
- {
227
- code: "ar",
228
- name: "Arabic (ar)"
229
- },
230
- {
231
- code: "ar-DZ",
232
- name: "Arabic (Algeria) (ar-DZ)"
233
- },
234
- {
235
- code: "ar-BH",
236
- name: "Arabic (Bahrain) (ar-BH)"
237
- },
238
- {
239
- code: "ar-EG",
240
- name: "Arabic (Egypt) (ar-EG)"
241
- },
242
- {
243
- code: "ar-IQ",
244
- name: "Arabic (Iraq) (ar-IQ)"
245
- },
246
- {
247
- code: "ar-JO",
248
- name: "Arabic (Jordan) (ar-JO)"
249
- },
250
- {
251
- code: "ar-KW",
252
- name: "Arabic (Kuwait) (ar-KW)"
253
- },
254
- {
255
- code: "ar-LB",
256
- name: "Arabic (Lebanon) (ar-LB)"
257
- },
258
- {
259
- code: "ar-LY",
260
- name: "Arabic (Libya) (ar-LY)"
261
- },
262
- {
263
- code: "ar-MA",
264
- name: "Arabic (Morocco) (ar-MA)"
265
- },
266
- {
267
- code: "ar-OM",
268
- name: "Arabic (Oman) (ar-OM)"
269
- },
270
- {
271
- code: "ar-QA",
272
- name: "Arabic (Qatar) (ar-QA)"
273
- },
274
- {
275
- code: "ar-SA",
276
- name: "Arabic (Saudi Arabia) (ar-SA)"
277
- },
278
- {
279
- code: "ar-SD",
280
- name: "Arabic (Sudan) (ar-SD)"
281
- },
282
- {
283
- code: "ar-SY",
284
- name: "Arabic (Syria) (ar-SY)"
285
- },
286
- {
287
- code: "ar-TN",
288
- name: "Arabic (Tunisia) (ar-TN)"
289
- },
290
- {
291
- code: "ar-AE",
292
- name: "Arabic (United Arab Emirates) (ar-AE)"
293
- },
294
- {
295
- code: "ar-001",
296
- name: "Arabic (World) (ar-001)"
297
- },
298
- {
299
- code: "ar-YE",
300
- name: "Arabic (Yemen) (ar-YE)"
301
- },
302
- {
303
- code: "hy",
304
- name: "Armenian (hy)"
305
- },
306
- {
307
- code: "hy-AM",
308
- name: "Armenian (Armenia) (hy-AM)"
309
- },
310
- {
311
- code: "as",
312
- name: "Assamese (as)"
313
- },
314
- {
315
- code: "as-IN",
316
- name: "Assamese (India) (as-IN)"
317
- },
318
- {
319
- code: "ast",
320
- name: "Asturian (ast)"
321
- },
322
- {
323
- code: "ast-ES",
324
- name: "Asturian (Spain) (ast-ES)"
325
- },
326
- {
327
- code: "asa",
328
- name: "Asu (asa)"
329
- },
330
- {
331
- code: "asa-TZ",
332
- name: "Asu (Tanzania) (asa-TZ)"
333
- },
334
- {
335
- code: "az",
336
- name: "Azerbaijani (az)"
337
- },
338
- {
339
- code: "az-Cyrl",
340
- name: "Azerbaijani (Cyrillic) (az-Cyrl)"
341
- },
342
- {
343
- code: "az-Cyrl-AZ",
344
- name: "Azerbaijani (Cyrillic, Azerbaijan) (az-Cyrl-AZ)"
345
- },
346
- {
347
- code: "az-Latn",
348
- name: "Azerbaijani (Latin) (az-Latn)"
349
- },
350
- {
351
- code: "az-Latn-AZ",
352
- name: "Azerbaijani (Latin, Azerbaijan) (az-Latn-AZ)"
353
- },
354
- {
355
- code: "ksf",
356
- name: "Bafia (ksf)"
357
- },
358
- {
359
- code: "ksf-CM",
360
- name: "Bafia (Cameroon) (ksf-CM)"
361
- },
362
- {
363
- code: "bah",
364
- name: "Bahamas Creole English"
365
- },
366
- {
367
- code: "bm",
368
- name: "Bambara (bm)"
369
- },
370
- {
371
- code: "bm-ML",
372
- name: "Bambara (Mali) (bm-ML)"
373
- },
374
- {
375
- code: "bas",
376
- name: "Basaa (bas)"
377
- },
378
- {
379
- code: "bas-CM",
380
- name: "Basaa (Cameroon) (bas-CM)"
381
- },
382
- {
383
- code: "eu",
384
- name: "Basque (eu)"
385
- },
386
- {
387
- code: "eu-ES",
388
- name: "Basque (Spain) (eu-ES)"
389
- },
390
- {
391
- code: "be",
392
- name: "Belarusian (be)"
393
- },
394
- {
395
- code: "be-BY",
396
- name: "Belarusian (Belarus) (be-BY)"
397
- },
398
- {
399
- code: "bem",
400
- name: "Bemba (bem)"
401
- },
402
- {
403
- code: "bem-ZM",
404
- name: "Bemba (Zambia) (bem-ZM)"
405
- },
406
- {
407
- code: "bez",
408
- name: "Bena (bez)"
409
- },
410
- {
411
- code: "bez-TZ",
412
- name: "Bena (Tanzania) (bez-TZ)"
413
- },
414
- {
415
- code: "bn",
416
- name: "Bengali (bn)"
417
- },
418
- {
419
- code: "bn-BD",
420
- name: "Bengali (Bangladesh) (bn-BD)"
421
- },
422
- {
423
- code: "bn-IN",
424
- name: "Bengali (India) (bn-IN)"
425
- },
426
- {
427
- code: "brx",
428
- name: "Bodo (brx)"
429
- },
430
- {
431
- code: "brx-IN",
432
- name: "Bodo (India) (brx-IN)"
433
- },
434
- {
435
- code: "bs",
436
- name: "Bosnian (bs)"
437
- },
438
- {
439
- code: "bs-BA",
440
- name: "Bosnian (Bosnia and Herzegovina) (bs-BA)"
441
- },
442
- {
443
- code: "br",
444
- name: "Breton (br)"
445
- },
446
- {
447
- code: "br-FR",
448
- name: "Breton (France) (br-FR)"
449
- },
450
- {
451
- code: "bg",
452
- name: "Bulgarian (bg)"
453
- },
454
- {
455
- code: "bg-BG",
456
- name: "Bulgarian (Bulgaria) (bg-BG)"
457
- },
458
- {
459
- code: "my",
460
- name: "Burmese (my)"
461
- },
462
- {
463
- code: "my-MM",
464
- name: "Burmese (Myanmar [Burma]) (my-MM)"
465
- },
466
- {
467
- code: "ca",
468
- name: "Catalan (ca)"
469
- },
470
- {
471
- code: "ca-ES",
472
- name: "Catalan (Spain) (ca-ES)"
473
- },
474
- {
475
- code: "ckb",
476
- name: "Central Kurdish (ckb)"
477
- },
478
- {
479
- code: "kmr",
480
- name: "Northern Kurdish (kmr)"
481
- },
482
- {
483
- code: "sdh",
484
- name: "Southern Kurdish (sdh)"
485
- },
486
- {
487
- code: "tzm",
488
- name: "Central Morocco Tamazight (tzm)"
489
- },
490
- {
491
- code: "tzm-Latn",
492
- name: "Central Morocco Tamazight (Latin) (tzm-Latn)"
493
- },
494
- {
495
- code: "tzm-Latn-MA",
496
- name: "Central Morocco Tamazight (Latin, Morocco) (tzm-Latn-MA) "
497
- },
498
- {
499
- code: "chr",
500
- name: "Cherokee (chr)"
501
- },
502
- {
503
- code: "chr-US",
504
- name: "Cherokee (United States) (chr-US)"
505
- },
506
- {
507
- code: "cgg",
508
- name: "Chiga (cgg)"
509
- },
510
- {
511
- code: "cgg-UG",
512
- name: "Chiga (Uganda) (cgg-UG)"
513
- },
514
- {
515
- code: "zh",
516
- name: "Chinese (zh)"
517
- },
518
- {
519
- code: "zh-Hans",
520
- name: "Chinese (Simplified) (zh-Hans)"
521
- },
522
- {
523
- code: "zh-CN",
524
- name: "Chinese (Simplified, China) (zh-CN)"
525
- },
526
- {
527
- code: "zh-Hans-CN",
528
- name: "Chinese (Simplified, China) (zh-Hans-CN)"
529
- },
530
- {
531
- code: "zh-Hans-HK",
532
- name: "Chinese (Simplified, Hong Kong SAR China) (zh-Hans-HK)"
533
- },
534
- {
535
- code: "zh-Hans-MO",
536
- name: "Chinese (Simplified, Macau SAR China) (zh-Hans-MO) "
537
- },
538
- {
539
- code: "zh-Hans-SG",
540
- name: "Chinese (Simplified, Singapore) (zh-Hans-SG)"
541
- },
542
- {
543
- code: "zh-Hant",
544
- name: "Chinese (Traditional) (zh-Hant)"
545
- },
546
- {
547
- code: "zh-Hant-HK",
548
- name: "Chinese (Traditional, Hong Kong SAR China) (zh-Hant-HK) "
549
- },
550
- {
551
- code: "zh-Hant-MO",
552
- name: "Chinese (Traditional, Macau SAR China) (zh-Hant-MO) "
553
- },
554
- {
555
- code: "zh-Hant-TW",
556
- name: "Chinese (Traditional, Taiwan) (zh-Hant-TW)"
557
- },
558
- {
559
- code: "swc",
560
- name: "Congo Swahili (swc)"
561
- },
562
- {
563
- code: "swc-CD",
564
- name: "Congo Swahili (Congo - Kinshasa) (swc-CD)"
565
- },
566
- {
567
- code: "kw",
568
- name: "Cornish (kw)"
569
- },
570
- {
571
- code: "kw-GB",
572
- name: "Cornish (United Kingdom) (kw-GB)"
573
- },
574
- {
575
- code: "hr",
576
- name: "Croatian (hr)"
577
- },
578
- {
579
- code: "hr-HR",
580
- name: "Croatian (Croatia) (hr-HR)"
581
- },
582
- {
583
- code: "cs",
584
- name: "Czech (cs)"
585
- },
586
- {
587
- code: "cs-CZ",
588
- name: "Czech (Czech Republic) (cs-CZ)"
589
- },
590
- {
591
- code: "da",
592
- name: "Danish (da)"
593
- },
594
- {
595
- code: "da-DK",
596
- name: "Danish (Denmark) (da-DK)"
597
- },
598
- {
599
- code: "dua",
600
- name: "Duala (dua)"
601
- },
602
- {
603
- code: "dua-CM",
604
- name: "Duala (Cameroon) (dua-CM)"
605
- },
606
- {
607
- code: "dv",
608
- name: "Dhivehi (Maldives)"
609
- },
610
- {
611
- code: "nl",
612
- name: "Dutch (nl)"
613
- },
614
- {
615
- code: "nl-AW",
616
- name: "Dutch (Aruba) (nl-AW)"
617
- },
618
- {
619
- code: "nl-BE",
620
- name: "Dutch (Belgium) (nl-BE)"
621
- },
622
- {
623
- code: "nl-CW",
624
- name: "Dutch (Curaçao) (nl-CW)"
625
- },
626
- {
627
- code: "nl-NL",
628
- name: "Dutch (Netherlands) (nl-NL)"
629
- },
630
- {
631
- code: "nl-SX",
632
- name: "Dutch (Sint Maarten) (nl-SX)"
633
- },
634
- {
635
- code: "ebu",
636
- name: "Embu (ebu)"
637
- },
638
- {
639
- code: "ebu-KE",
640
- name: "Embu (Kenya) (ebu-KE)"
641
- },
642
- {
643
- code: "en",
644
- name: "English (en)"
645
- },
646
- {
647
- code: "en-AI",
648
- name: "English (Anguilla) (en-AI)"
649
- },
650
- {
651
- code: "en-AS",
652
- name: "English (American Samoa) (en-AS)"
653
- },
654
- {
655
- code: "en-AU",
656
- name: "English (Australia) (en-AU)"
657
- },
658
- {
659
- code: "en-AT",
660
- name: "English (Austria) (en-AT)"
661
- },
662
- {
663
- code: "en-BB",
664
- name: "English (Barbados) (en-BB)"
665
- },
666
- {
667
- code: "en-BE",
668
- name: "English (Belgium) (en-BE)"
669
- },
670
- {
671
- code: "en-BZ",
672
- name: "English (Belize) (en-BZ)"
673
- },
674
- {
675
- code: "en-BM",
676
- name: "English (Bermuda) (en-BM)"
677
- },
678
- {
679
- code: "en-BW",
680
- name: "English (Botswana) (en-BW)"
681
- },
682
- {
683
- code: "en-IO",
684
- name: "English (British Indian Ocean Territory) (en-IO)"
685
- },
686
- {
687
- code: "en-BI",
688
- name: "English (Burundi) (en-BI)"
689
- },
690
- {
691
- code: "en-CM",
692
- name: "English (Cameroon) (en-CM)"
693
- },
694
- {
695
- code: "en-CA",
696
- name: "English (Canada) (en-CA)"
697
- },
698
- {
699
- code: "en-KY",
700
- name: "English (Cayman Islands) (en-KY)"
701
- },
702
- {
703
- code: "en-CX",
704
- name: "English (Christmas Island) (en-CX)"
705
- },
706
- {
707
- code: "en-CC",
708
- name: "English (Cocos [Keeling] Islands) (en-CC)"
709
- },
710
- {
711
- code: "en-CK",
712
- name: "English (Cook Islands) (en-CK)"
713
- },
714
- {
715
- code: "en-CY",
716
- name: "English (Cyprus) (en-CY)"
717
- },
718
- {
719
- code: "en-DK",
720
- name: "English (Denmark) (en-DK)"
721
- },
722
- {
723
- code: "en-DG",
724
- name: "English (Diego Garcia) (en-DG)"
725
- },
726
- {
727
- code: "en-DM",
728
- name: "English (Dominica) (en-DM)"
729
- },
730
- {
731
- code: "en-EG",
732
- name: "English (Egypt) (en-EG)"
733
- },
734
- {
735
- code: "en-ER",
736
- name: "English (Eritrea) (en-ER)"
737
- },
738
- {
739
- code: "en-EU",
740
- name: "English (Europe) (en-EU)"
741
- },
742
- {
743
- code: "en-FK",
744
- name: "English (Falkland Islands) (en-FK)"
745
- },
746
- {
747
- code: "en-FJ",
748
- name: "English (Fiji) (en-FJ)"
749
- },
750
- {
751
- code: "en-FI",
752
- name: "English (Finland) (en-FI)"
753
- },
754
- {
755
- code: "en-GM",
756
- name: "English (Gambia) (en-GM)"
757
- },
758
- {
759
- code: "en-DE",
760
- name: "English (Germany) (en-DE)"
761
- },
762
- {
763
- code: "en-GH",
764
- name: "English (Ghana) (en-GH)"
765
- },
766
- {
767
- code: "en-GI",
768
- name: "English (Gibraltar) (en-GI)"
769
- },
770
- {
771
- code: "en-GD",
772
- name: "English (Grenada) (en-GD)"
773
- },
774
- {
775
- code: "en-GU",
776
- name: "English (Guam) (en-GU)"
777
- },
778
- {
779
- code: "en-GG",
780
- name: "English (Guernsey) (en-GG)"
781
- },
782
- {
783
- code: "en-GY",
784
- name: "English (Guyana) (en-GY)"
785
- },
786
- {
787
- code: "en-HK",
788
- name: "English (Hong Kong SAR China) (en-HK)"
789
- },
790
- {
791
- code: "en-IN",
792
- name: "English (India) (en-IN)"
793
- },
794
- {
795
- code: "en-IE",
796
- name: "English (Ireland) (en-IE)"
797
- },
798
- {
799
- code: "en-IM",
800
- name: "English (Isle of Man) (en-IM)"
801
- },
802
- {
803
- code: "en-IL",
804
- name: "English (Israel) (en-IL)"
805
- },
806
- {
807
- code: "en-JM",
808
- name: "English (Jamaica) (en-JM)"
809
- },
810
- {
811
- code: "en-JE",
812
- name: "English (Jersey) (en-JE)"
813
- },
814
- {
815
- code: "en-KE",
816
- name: "English (Kenya) (en-KE)"
817
- },
818
- {
819
- code: "en-KI",
820
- name: "English (Kiribati) (en-KI)"
821
- },
822
- {
823
- code: "en-KW",
824
- name: "English (Kuwait) (en-KW)"
825
- },
826
- {
827
- code: "en-LS",
828
- name: "English (Lesotho) (en-LS)"
829
- },
830
- {
831
- code: "en-MO",
832
- name: "English (Macao SAR China) (en-MO)"
833
- },
834
- {
835
- code: "en-MG",
836
- name: "English (Madagascar) (en-MG)"
837
- },
838
- {
839
- code: "en-MW",
840
- name: "English (Malawi) (en-MW)"
841
- },
842
- {
843
- code: "en-MY",
844
- name: "English (Malaysia) (en-MY)"
845
- },
846
- {
847
- code: "en-MT",
848
- name: "English (Malta) (en-MT)"
849
- },
850
- {
851
- code: "en-MH",
852
- name: "English (Marshall Islands) (en-MH)"
853
- },
854
- {
855
- code: "en-MU",
856
- name: "English (Mauritius) (en-MU)"
857
- },
858
- {
859
- code: "en-FM",
860
- name: "English (Micronesia) (en-FM)"
861
- },
862
- {
863
- code: "en-MS",
864
- name: "English (Montserrat) (en-MS)"
865
- },
866
- {
867
- code: "en-NA",
868
- name: "English (Namibia) (en-NA)"
869
- },
870
- {
871
- code: "en-NR",
872
- name: "English (Nauru) (en-NR)"
873
- },
874
- {
875
- code: "en-NL",
876
- name: "English (Netherlands) (en-NL)"
877
- },
878
- {
879
- code: "en-NZ",
880
- name: "English (New Zealand) (en-NZ)"
881
- },
882
- {
883
- code: "en-NG",
884
- name: "English (Nigeria) (en-NG)"
885
- },
886
- {
887
- code: "en-NU",
888
- name: "English (Niue) (en-NU)"
889
- },
890
- {
891
- code: "en-NF",
892
- name: "English (Norfolk Island) (en-NF)"
893
- },
894
- {
895
- code: "en-MP",
896
- name: "English (Northern Mariana Islands) (en-MP)"
897
- },
898
- {
899
- code: "en-NO",
900
- name: "English (Norway) (en-NO)"
901
- },
902
- {
903
- code: "en-PA",
904
- name: "English (Panama) (en-PA)"
905
- },
906
- {
907
- code: "en-PK",
908
- name: "English (Pakistan) (en-PK)"
909
- },
910
- {
911
- code: "en-PW",
912
- name: "English (Palau) (en-PW)"
913
- },
914
- {
915
- code: "en-PG",
916
- name: "English (Papua New Guinea) (en-PG)"
917
- },
918
- {
919
- code: "en-PH",
920
- name: "English (Philippines) (en-PH)"
921
- },
922
- {
923
- code: "en-PN",
924
- name: "English (Pitcairn Islands) (en-PN)"
925
- },
926
- {
927
- code: "en-PR",
928
- name: "English (Puerto Rico) (en-PR)"
929
- },
930
- {
931
- code: "en-RW",
932
- name: "English (Rwanda) (en-RW)"
933
- },
934
- {
935
- code: "en-WS",
936
- name: "English (Samoa) (en-WS)"
937
- },
938
- {
939
- code: "en-SA",
940
- name: "English (Saudi Arabia) (en-SA)"
941
- },
942
- {
943
- code: "en-SC",
944
- name: "English (Seychelles) (en-SC)"
945
- },
946
- {
947
- code: "en-SL",
948
- name: "English (Sierra Leone) (en-SL)"
949
- },
950
- {
951
- code: "en-SG",
952
- name: "English (Singapore) (en-SG)"
953
- },
954
- {
955
- code: "en-SX",
956
- name: "English (Sint Maarten) (en-SX)"
957
- },
958
- {
959
- code: "en-SI",
960
- name: "English (Slovenia) (en-SI)"
961
- },
962
- {
963
- code: "en-SB",
964
- name: "English (Solomon Islands) (en-SB)"
965
- },
966
- {
967
- code: "en-SS",
968
- name: "English (South Sudan) (en-SS)"
969
- },
970
- {
971
- code: "en-SH",
972
- name: "English (St Helena) (en-SH)"
973
- },
974
- {
975
- code: "en-KN",
976
- name: "English (St Kitts & Nevis) (en-KN)"
977
- },
978
- {
979
- code: "en-LC",
980
- name: "English (St Lucia) (en-LC)"
981
- },
982
- {
983
- code: "svc",
984
- name: "Vincentian Creole English"
985
- },
986
- {
987
- code: "vic",
988
- name: "Virgin Islands Creole English"
989
- },
990
- {
991
- code: "en-SD",
992
- name: "English (Sudan) (en-SD)"
993
- },
994
- {
995
- code: "en-SZ",
996
- name: "English (Swaziland) (en-SZ)"
997
- },
998
- {
999
- code: "en-SE",
1000
- name: "English (Sweden) (en-SE)"
1001
- },
1002
- {
1003
- code: "en-CH",
1004
- name: "English (Switzerland) (en-CH)"
1005
- },
1006
- {
1007
- code: "en-TZ",
1008
- name: "English (Tanzania) (en-TZ)"
1009
- },
1010
- {
1011
- code: "en-TK",
1012
- name: "English (Tokelau) (en-TK)"
1013
- },
1014
- {
1015
- code: "en-TO",
1016
- name: "English (Tonga) (en-TO)"
1017
- },
1018
- {
1019
- code: "en-TT",
1020
- name: "English (Trinidad and Tobago) (en-TT)"
1021
- },
1022
- {
1023
- code: "en-TV",
1024
- name: "English (Tuvalu) (en-TV)"
1025
- },
1026
- {
1027
- code: "en-ZA",
1028
- name: "English (South Africa) (en-ZA)"
1029
- },
1030
- {
1031
- code: "en-AE",
1032
- name: "English (U.A.E.) (en-AE)"
1033
- },
1034
- {
1035
- code: "en-UM",
1036
- name: "English (U.S. Minor Outlying Islands) (en-UM)"
1037
- },
1038
- {
1039
- code: "en-VI",
1040
- name: "English (U.S. Virgin Islands) (en-VI)"
1041
- },
1042
- {
1043
- code: "en-US-POSIX",
1044
- name: "English (U.S., Computer) (en-US-POSIX)"
1045
- },
1046
- {
1047
- code: "en-UG",
1048
- name: "English (Uganda) (en-UG)"
1049
- },
1050
- {
1051
- code: "en-GB",
1052
- name: "English (United Kingdom) (en-GB)"
1053
- },
1054
- {
1055
- code: "en-US",
1056
- name: "English (United States) (en-US)"
1057
- },
1058
- {
1059
- code: "en-VU",
1060
- name: "English (Vanuatu) (en-VU)"
1061
- },
1062
- {
1063
- code: "en-ZM",
1064
- name: "English (Zambia) (en-ZM)"
1065
- },
1066
- {
1067
- code: "en-ZW",
1068
- name: "English (Zimbabwe) (en-ZW)"
1069
- },
1070
- {
1071
- code: "eo",
1072
- name: "Esperanto (eo)"
1073
- },
1074
- {
1075
- code: "et",
1076
- name: "Estonian (et)"
1077
- },
1078
- {
1079
- code: "et-EE",
1080
- name: "Estonian (Estonia) (et-EE)"
1081
- },
1082
- {
1083
- code: "ee",
1084
- name: "Ewe (ee)"
1085
- },
1086
- {
1087
- code: "ee-GH",
1088
- name: "Ewe (Ghana) (ee-GH)"
1089
- },
1090
- {
1091
- code: "ee-TG",
1092
- name: "Ewe (Togo) (ee-TG)"
1093
- },
1094
- {
1095
- code: "ewo",
1096
- name: "Ewondo (ewo)"
1097
- },
1098
- {
1099
- code: "ewo-CM",
1100
- name: "Ewondo (Cameroon) (ewo-CM)"
1101
- },
1102
- {
1103
- code: "fo",
1104
- name: "Faroese (fo)"
1105
- },
1106
- {
1107
- code: "fo-FO",
1108
- name: "Faroese (Faroe Islands) (fo-FO)"
1109
- },
1110
- {
1111
- code: "fil",
1112
- name: "Filipino (fil)"
1113
- },
1114
- {
1115
- code: "fil-PH",
1116
- name: "Filipino (Philippines) (fil-PH)"
1117
- },
1118
- {
1119
- code: "fi",
1120
- name: "Finnish (fi)"
1121
- },
1122
- {
1123
- code: "fi-FI",
1124
- name: "Finnish (Finland) (fi-FI)"
1125
- },
1126
- {
1127
- code: "fr",
1128
- name: "French (fr)"
1129
- },
1130
- {
1131
- code: "fr-BE",
1132
- name: "French (Belgium) (fr-BE)"
1133
- },
1134
- {
1135
- code: "fr-BJ",
1136
- name: "French (Benin) (fr-BJ)"
1137
- },
1138
- {
1139
- code: "fr-BF",
1140
- name: "French (Burkina Faso) (fr-BF)"
1141
- },
1142
- {
1143
- code: "fr-BI",
1144
- name: "French (Burundi) (fr-BI)"
1145
- },
1146
- {
1147
- code: "fr-CM",
1148
- name: "French (Cameroon) (fr-CM)"
1149
- },
1150
- {
1151
- code: "fr-CA",
1152
- name: "French (Canada) (fr-CA)"
1153
- },
1154
- {
1155
- code: "fr-CF",
1156
- name: "French (Central African Republic) (fr-CF)"
1157
- },
1158
- {
1159
- code: "fr-TD",
1160
- name: "French (Chad) (fr-TD)"
1161
- },
1162
- {
1163
- code: "fr-KM",
1164
- name: "French (Comoros) (fr-KM)"
1165
- },
1166
- {
1167
- code: "fr-CG",
1168
- name: "French (Congo - Brazzaville) (fr-CG)"
1169
- },
1170
- {
1171
- code: "fr-CD",
1172
- name: "French (Congo - Kinshasa) (fr-CD)"
1173
- },
1174
- {
1175
- code: "fr-CI",
1176
- name: "French (Côte d’Ivoire) (fr-CI)"
1177
- },
1178
- {
1179
- code: "fr-DJ",
1180
- name: "French (Djibouti) (fr-DJ)"
1181
- },
1182
- {
1183
- code: "fr-GQ",
1184
- name: "French (Equatorial Guinea) (fr-GQ)"
1185
- },
1186
- {
1187
- code: "fr-FR",
1188
- name: "French (France) (fr-FR)"
1189
- },
1190
- {
1191
- code: "fr-GF",
1192
- name: "French (French Guiana) (fr-GF)"
1193
- },
1194
- {
1195
- code: "fr-GA",
1196
- name: "French (Gabon) (fr-GA)"
1197
- },
1198
- {
1199
- code: "fr-GP",
1200
- name: "French (Guadeloupe) (fr-GP)"
1201
- },
1202
- {
1203
- code: "fr-GN",
1204
- name: "French (Guinea) (fr-GN)"
1205
- },
1206
- {
1207
- code: "fr-LU",
1208
- name: "French (Luxembourg) (fr-LU)"
1209
- },
1210
- {
1211
- code: "fr-MG",
1212
- name: "French (Madagascar) (fr-MG)"
1213
- },
1214
- {
1215
- code: "fr-ML",
1216
- name: "French (Mali) (fr-ML)"
1217
- },
1218
- {
1219
- code: "fr-MQ",
1220
- name: "French (Martinique) (fr-MQ)"
1221
- },
1222
- {
1223
- code: "fr-YT",
1224
- name: "French (Mayotte) (fr-YT)"
1225
- },
1226
- {
1227
- code: "fr-MC",
1228
- name: "French (Monaco) (fr-MC)"
1229
- },
1230
- {
1231
- code: "fr-NE",
1232
- name: "French (Niger) (fr-NE)"
1233
- },
1234
- {
1235
- code: "fr-RW",
1236
- name: "French (Rwanda) (fr-RW)"
1237
- },
1238
- {
1239
- code: "fr-RE",
1240
- name: "French (Réunion) (fr-RE)"
1241
- },
1242
- {
1243
- code: "fr-BL",
1244
- name: "French (Saint Barthélemy) (fr-BL)"
1245
- },
1246
- {
1247
- code: "fr-MF",
1248
- name: "French (Saint Martin) (fr-MF)"
1249
- },
1250
- {
1251
- code: "fr-MU",
1252
- name: "French (Mauritius) (fr-MU)"
1253
- },
1254
- {
1255
- code: "fr-SN",
1256
- name: "French (Senegal) (fr-SN)"
1257
- },
1258
- {
1259
- code: "fr-CH",
1260
- name: "French (Switzerland) (fr-CH)"
1261
- },
1262
- {
1263
- code: "fr-TG",
1264
- name: "French (Togo) (fr-TG)"
1265
- },
1266
- {
1267
- code: "ff",
1268
- name: "Fulah (ff)"
1269
- },
1270
- {
1271
- code: "ff-SN",
1272
- name: "Fulah (Senegal) (ff-SN)"
1273
- },
1274
- {
1275
- code: "gl",
1276
- name: "Galician (gl)"
1277
- },
1278
- {
1279
- code: "gl-ES",
1280
- name: "Galician (Spain) (gl-ES)"
1281
- },
1282
- {
1283
- code: "lao",
1284
- name: "Laotian (Laos) (lao)"
1285
- },
1286
- {
1287
- code: "lg",
1288
- name: "Ganda (lg)"
1289
- },
1290
- {
1291
- code: "lg-UG",
1292
- name: "Ganda (Uganda) (lg-UG)"
1293
- },
1294
- {
1295
- code: "ka",
1296
- name: "Georgian (ka)"
1297
- },
1298
- {
1299
- code: "ka-GE",
1300
- name: "Georgian (Georgia) (ka-GE)"
1301
- },
1302
- {
1303
- code: "de",
1304
- name: "German (de)"
1305
- },
1306
- {
1307
- code: "de-AT",
1308
- name: "German (Austria) (de-AT)"
1309
- },
1310
- {
1311
- code: "de-BE",
1312
- name: "German (Belgium) (de-BE)"
1313
- },
1314
- {
1315
- code: "de-DE",
1316
- name: "German (Germany) (de-DE)"
1317
- },
1318
- {
1319
- code: "de-LI",
1320
- name: "German (Liechtenstein) (de-LI)"
1321
- },
1322
- {
1323
- code: "de-LU",
1324
- name: "German (Luxembourg) (de-LU)"
1325
- },
1326
- {
1327
- code: "de-CH",
1328
- name: "German (Switzerland) (de-CH)"
1329
- },
1330
- {
1331
- code: "el",
1332
- name: "Greek (el)"
1333
- },
1334
- {
1335
- code: "el-CY",
1336
- name: "Greek (Cyprus) (el-CY)"
1337
- },
1338
- {
1339
- code: "el-GR",
1340
- name: "Greek (Greece) (el-GR)"
1341
- },
1342
- {
1343
- code: "gu",
1344
- name: "Gujarati (gu)"
1345
- },
1346
- {
1347
- code: "gu-IN",
1348
- name: "Gujarati (India) (gu-IN)"
1349
- },
1350
- {
1351
- code: "guz",
1352
- name: "Gusii (guz)"
1353
- },
1354
- {
1355
- code: "guz-KE",
1356
- name: "Gusii (Kenya) (guz-KE)"
1357
- },
1358
- {
1359
- code: "ha",
1360
- name: "Hausa (ha)"
1361
- },
1362
- {
1363
- code: "ha-Latn",
1364
- name: "Hausa (Latin) (ha-Latn)"
1365
- },
1366
- {
1367
- code: "ha-Latn-GH",
1368
- name: "Hausa (Latin, Ghana) (ha-Latn-GH)"
1369
- },
1370
- {
1371
- code: "ha-Latn-NE",
1372
- name: "Hausa (Latin, Niger) (ha-Latn-NE)"
1373
- },
1374
- {
1375
- code: "ha-Latn-NG",
1376
- name: "Hausa (Latin, Nigeria) (ha-Latn-NG)"
1377
- },
1378
- {
1379
- code: "haw",
1380
- name: "Hawaiian (haw)"
1381
- },
1382
- {
1383
- code: "haw-US",
1384
- name: "Hawaiian (United States) (haw-US)"
1385
- },
1386
- {
1387
- code: "he",
1388
- name: "Hebrew (he)"
1389
- },
1390
- {
1391
- code: "he-IL",
1392
- name: "Hebrew (Israel) (he-IL)"
1393
- },
1394
- {
1395
- code: "hi",
1396
- name: "Hindi (hi)"
1397
- },
1398
- {
1399
- code: "hi-IN",
1400
- name: "Hindi (India) (hi-IN)"
1401
- },
1402
- {
1403
- code: "hu",
1404
- name: "Hungarian (hu)"
1405
- },
1406
- {
1407
- code: "hu-HU",
1408
- name: "Hungarian (Hungary) (hu-HU)"
1409
- },
1410
- {
1411
- code: "is",
1412
- name: "Icelandic (is)"
1413
- },
1414
- {
1415
- code: "is-IS",
1416
- name: "Icelandic (Iceland) (is-IS)"
1417
- },
1418
- {
1419
- code: "ig",
1420
- name: "Igbo (ig)"
1421
- },
1422
- {
1423
- code: "ig-NG",
1424
- name: "Igbo (Nigeria) (ig-NG)"
1425
- },
1426
- {
1427
- code: "smn",
1428
- name: "Inari Sami"
1429
- },
1430
- {
1431
- code: "smn-FI",
1432
- name: "Inari Sami (Finland)"
1433
- },
1434
- {
1435
- code: "id",
1436
- name: "Indonesian (id)"
1437
- },
1438
- {
1439
- code: "id-ID",
1440
- name: "Indonesian (Indonesia) (id-ID)"
1441
- },
1442
- {
1443
- code: "ga",
1444
- name: "Irish (ga)"
1445
- },
1446
- {
1447
- code: "ga-IE",
1448
- name: "Irish (Ireland) (ga-IE)"
1449
- },
1450
- {
1451
- code: "it",
1452
- name: "Italian (it)"
1453
- },
1454
- {
1455
- code: "it-IT",
1456
- name: "Italian (Italy) (it-IT)"
1457
- },
1458
- {
1459
- code: "it-CH",
1460
- name: "Italian (Switzerland) (it-CH)"
1461
- },
1462
- {
1463
- code: "ja",
1464
- name: "Japanese (ja)"
1465
- },
1466
- {
1467
- code: "ja-JP",
1468
- name: "Japanese (Japan) (ja-JP)"
1469
- },
1470
- {
1471
- code: "dyo",
1472
- name: "Jola-Fonyi (dyo)"
1473
- },
1474
- {
1475
- code: "dyo-SN",
1476
- name: "Jola-Fonyi (Senegal) (dyo-SN)"
1477
- },
1478
- {
1479
- code: "kea",
1480
- name: "Kabuverdianu (kea)"
1481
- },
1482
- {
1483
- code: "kea-CV",
1484
- name: "Kabuverdianu (Cape Verde) (kea-CV)"
1485
- },
1486
- {
1487
- code: "kab",
1488
- name: "Kabyle (kab)"
1489
- },
1490
- {
1491
- code: "kab-DZ",
1492
- name: "Kabyle (Algeria) (kab-DZ)"
1493
- },
1494
- {
1495
- code: "kl",
1496
- name: "Kalaallisut (kl)"
1497
- },
1498
- {
1499
- code: "kl-GL",
1500
- name: "Kalaallisut (Greenland) (kl-GL)"
1501
- },
1502
- {
1503
- code: "kln",
1504
- name: "Kalenjin (kln)"
1505
- },
1506
- {
1507
- code: "kln-KE",
1508
- name: "Kalenjin (Kenya) (kln-KE)"
1509
- },
1510
- {
1511
- code: "kam",
1512
- name: "Kamba (kam)"
1513
- },
1514
- {
1515
- code: "kam-KE",
1516
- name: "Kamba (Kenya) (kam-KE)"
1517
- },
1518
- {
1519
- code: "kn",
1520
- name: "Kannada (kn)"
1521
- },
1522
- {
1523
- code: "kn-IN",
1524
- name: "Kannada (India) (kn-IN)"
1525
- },
1526
- {
1527
- code: "kaa",
1528
- name: "Kara-Kalpak (kaa)"
1529
- },
1530
- {
1531
- code: "kk",
1532
- name: "Kazakh (kk)"
1533
- },
1534
- {
1535
- code: "kk-Cyrl",
1536
- name: "Kazakh (Cyrillic) (kk-Cyrl)"
1537
- },
1538
- {
1539
- code: "kk-Cyrl-KZ",
1540
- name: "Kazakh (Cyrillic, Kazakhstan) (kk-Cyrl-KZ)"
1541
- },
1542
- {
1543
- code: "km",
1544
- name: "Khmer (km)"
1545
- },
1546
- {
1547
- code: "km-KH",
1548
- name: "Khmer (Cambodia) (km-KH)"
1549
- },
1550
- {
1551
- code: "ki",
1552
- name: "Kikuyu (ki)"
1553
- },
1554
- {
1555
- code: "ki-KE",
1556
- name: "Kikuyu (Kenya) (ki-KE)"
1557
- },
1558
- {
1559
- code: "rw",
1560
- name: "Kinyarwanda (rw)"
1561
- },
1562
- {
1563
- code: "rw-RW",
1564
- name: "Kinyarwanda (Rwanda) (rw-RW)"
1565
- },
1566
- {
1567
- code: "kok",
1568
- name: "Konkani (kok)"
1569
- },
1570
- {
1571
- code: "kok-IN",
1572
- name: "Konkani (India) (kok-IN)"
1573
- },
1574
- {
1575
- code: "ko",
1576
- name: "Korean (ko)"
1577
- },
1578
- {
1579
- code: "ko-KR",
1580
- name: "Korean (South Korea) (ko-KR)"
1581
- },
1582
- {
1583
- code: "khq",
1584
- name: "Koyra Chiini (khq)"
1585
- },
1586
- {
1587
- code: "khq-ML",
1588
- name: "Koyra Chiini (Mali) (khq-ML)"
1589
- },
1590
- {
1591
- code: "ses",
1592
- name: "Koyraboro Senni (ses)"
1593
- },
1594
- {
1595
- code: "ses-ML",
1596
- name: "Koyraboro Senni (Mali) (ses-ML)"
1597
- },
1598
- {
1599
- code: "nmg",
1600
- name: "Kwasio (nmg)"
1601
- },
1602
- {
1603
- code: "nmg-CM",
1604
- name: "Kwasio (Cameroon) (nmg-CM)"
1605
- },
1606
- {
1607
- code: "ky",
1608
- name: "Kyrgyz (ky)"
1609
- },
1610
- {
1611
- code: "lag",
1612
- name: "Langi (lag)"
1613
- },
1614
- {
1615
- code: "lag-TZ",
1616
- name: "Langi (Tanzania) (lag-TZ)"
1617
- },
1618
- {
1619
- code: "lv",
1620
- name: "Latvian (lv)"
1621
- },
1622
- {
1623
- code: "lv-LV",
1624
- name: "Latvian (Latvia) (lv-LV)"
1625
- },
1626
- {
1627
- code: "lir",
1628
- name: "Liberian English"
1629
- },
1630
- {
1631
- code: "ln",
1632
- name: "Lingala (ln)"
1633
- },
1634
- {
1635
- code: "ln-CG",
1636
- name: "Lingala (Congo - Brazzaville) (ln-CG)"
1637
- },
1638
- {
1639
- code: "ln-CD",
1640
- name: "Lingala (Congo - Kinshasa) (ln-CD)"
1641
- },
1642
- {
1643
- code: "lt",
1644
- name: "Lithuanian (lt)"
1645
- },
1646
- {
1647
- code: "lt-LT",
1648
- name: "Lithuanian (Lithuania) (lt-LT)"
1649
- },
1650
- {
1651
- code: "lu",
1652
- name: "Luba-Katanga (lu)"
1653
- },
1654
- {
1655
- code: "lu-CD",
1656
- name: "Luba-Katanga (Congo - Kinshasa) (lu-CD)"
1657
- },
1658
- {
1659
- code: "luo",
1660
- name: "Luo (luo)"
1661
- },
1662
- {
1663
- code: "luo-KE",
1664
- name: "Luo (Kenya) (luo-KE)"
1665
- },
1666
- {
1667
- code: "luy",
1668
- name: "Luyia (luy)"
1669
- },
1670
- {
1671
- code: "luy-KE",
1672
- name: "Luyia (Kenya) (luy-KE)"
1673
- },
1674
- {
1675
- code: "mk",
1676
- name: "Macedonian (mk)"
1677
- },
1678
- {
1679
- code: "mk-MK",
1680
- name: "Macedonian (Macedonia) (mk-MK)"
1681
- },
1682
- {
1683
- code: "jmc",
1684
- name: "Machame (jmc)"
1685
- },
1686
- {
1687
- code: "jmc-TZ",
1688
- name: "Machame (Tanzania) (jmc-TZ)"
1689
- },
1690
- {
1691
- code: "mgh",
1692
- name: "Makhuwa-Meetto (mgh)"
1693
- },
1694
- {
1695
- code: "mgh-MZ",
1696
- name: "Makhuwa-Meetto (Mozambique) (mgh-MZ)"
1697
- },
1698
- {
1699
- code: "kde",
1700
- name: "Makonde (kde)"
1701
- },
1702
- {
1703
- code: "kde-TZ",
1704
- name: "Makonde (Tanzania) (kde-TZ)"
1705
- },
1706
- {
1707
- code: "mg",
1708
- name: "Malagasy (mg)"
1709
- },
1710
- {
1711
- code: "mg-MG",
1712
- name: "Malagasy (Madagascar) (mg-MG)"
1713
- },
1714
- {
1715
- code: "ms",
1716
- name: "Malay (ms)"
1717
- },
1718
- {
1719
- code: "ms-BN",
1720
- name: "Malay (Brunei) (ms-BN)"
1721
- },
1722
- {
1723
- code: "ms-MY",
1724
- name: "Malay (Malaysia) (ms-MY)"
1725
- },
1726
- {
1727
- code: "ml",
1728
- name: "Malayalam (ml)"
1729
- },
1730
- {
1731
- code: "ml-IN",
1732
- name: "Malayalam (India) (ml-IN)"
1733
- },
1734
- {
1735
- code: "mt",
1736
- name: "Maltese (mt)"
1737
- },
1738
- {
1739
- code: "mt-MT",
1740
- name: "Maltese (Malta) (mt-MT)"
1741
- },
1742
- {
1743
- code: "gv",
1744
- name: "Manx (gv)"
1745
- },
1746
- {
1747
- code: "gv-GB",
1748
- name: "Manx (United Kingdom) (gv-GB)"
1749
- },
1750
- {
1751
- code: "mr",
1752
- name: "Marathi (mr)"
1753
- },
1754
- {
1755
- code: "mr-IN",
1756
- name: "Marathi (India) (mr-IN)"
1757
- },
1758
- {
1759
- code: "mas",
1760
- name: "Masai (mas)"
1761
- },
1762
- {
1763
- code: "mas-KE",
1764
- name: "Masai (Kenya) (mas-KE)"
1765
- },
1766
- {
1767
- code: "mas-TZ",
1768
- name: "Masai (Tanzania) (mas-TZ)"
1769
- },
1770
- {
1771
- code: "mer",
1772
- name: "Meru (mer)"
1773
- },
1774
- {
1775
- code: "mer-KE",
1776
- name: "Meru (Kenya) (mer-KE)"
1777
- },
1778
- {
1779
- code: "mn",
1780
- name: "Mongolian (mn)"
1781
- },
1782
- {
1783
- code: "mfe",
1784
- name: "Morisyen (mfe)"
1785
- },
1786
- {
1787
- code: "mfe-MU",
1788
- name: "Morisyen (Mauritius) (mfe-MU)"
1789
- },
1790
- {
1791
- code: "mua",
1792
- name: "Mundang (mua)"
1793
- },
1794
- {
1795
- code: "mua-CM",
1796
- name: "Mundang (Cameroon) (mua-CM)"
1797
- },
1798
- {
1799
- code: "naq",
1800
- name: "Nama (naq)"
1801
- },
1802
- {
1803
- code: "naq-NA",
1804
- name: "Nama (Namibia) (naq-NA)"
1805
- },
1806
- {
1807
- code: "ne",
1808
- name: "Nepali (ne)"
1809
- },
1810
- {
1811
- code: "ne-IN",
1812
- name: "Nepali (India) (ne-IN)"
1813
- },
1814
- {
1815
- code: "ne-NP",
1816
- name: "Nepali (Nepal) (ne-NP)"
1817
- },
1818
- {
1819
- code: "se",
1820
- name: "Northern Sami"
1821
- },
1822
- {
1823
- code: "se-FI",
1824
- name: "Northern Sami (Finland)"
1825
- },
1826
- {
1827
- code: "se-NO",
1828
- name: "Northern Sami (Norway)"
1829
- },
1830
- {
1831
- code: "se-SE",
1832
- name: "Northern Sami (Sweden)"
1833
- },
1834
- {
1835
- code: "nd",
1836
- name: "North Ndebele (nd)"
1837
- },
1838
- {
1839
- code: "nd-ZW",
1840
- name: "North Ndebele (Zimbabwe) (nd-ZW)"
1841
- },
1842
- {
1843
- code: "nb",
1844
- name: "Norwegian Bokmål (nb)"
1845
- },
1846
- {
1847
- code: "nb-NO",
1848
- name: "Norwegian Bokmål (Norway) (nb-NO)"
1849
- },
1850
- {
1851
- code: "nn",
1852
- name: "Norwegian Nynorsk (nn)"
1853
- },
1854
- {
1855
- code: "nn-NO",
1856
- name: "Norwegian Nynorsk (Norway) (nn-NO)"
1857
- },
1858
- {
1859
- code: "nus",
1860
- name: "Nuer (nus)"
1861
- },
1862
- {
1863
- code: "nus-SD",
1864
- name: "Nuer (Sudan) (nus-SD)"
1865
- },
1866
- {
1867
- code: "nyn",
1868
- name: "Nyankole (nyn)"
1869
- },
1870
- {
1871
- code: "nyn-UG",
1872
- name: "Nyankole (Uganda) (nyn-UG)"
1873
- },
1874
- {
1875
- code: "or",
1876
- name: "Oriya (or)"
1877
- },
1878
- {
1879
- code: "or-IN",
1880
- name: "Oriya (India) (or-IN)"
1881
- },
1882
- {
1883
- code: "om",
1884
- name: "Oromo (om)"
1885
- },
1886
- {
1887
- code: "om-ET",
1888
- name: "Oromo (Ethiopia) (om-ET)"
1889
- },
1890
- {
1891
- code: "om-KE",
1892
- name: "Oromo (Kenya) (om-KE)"
1893
- },
1894
- {
1895
- code: "ps",
1896
- name: "Pashto (ps)"
1897
- },
1898
- {
1899
- code: "ps-AF",
1900
- name: "Pashto (Afghanistan) (ps-AF)"
1901
- },
1902
- {
1903
- code: "fa",
1904
- name: "Persian (fa)"
1905
- },
1906
- {
1907
- code: "fa-AF",
1908
- name: "Persian (Afghanistan) (fa-AF)"
1909
- },
1910
- {
1911
- code: "fa-IR",
1912
- name: "Persian (Iran) (fa-IR)"
1913
- },
1914
- {
1915
- code: "pl",
1916
- name: "Polish (pl)"
1917
- },
1918
- {
1919
- code: "pl-PL",
1920
- name: "Polish (Poland) (pl-PL)"
1921
- },
1922
- {
1923
- code: "pt",
1924
- name: "Portuguese (pt)"
1925
- },
1926
- {
1927
- code: "pt-AO",
1928
- name: "Portuguese (Angola) (pt-AO)"
1929
- },
1930
- {
1931
- code: "pt-BR",
1932
- name: "Portuguese (Brazil) (pt-BR)"
1933
- },
1934
- {
1935
- code: "pt-GW",
1936
- name: "Portuguese (Guinea-Bissau) (pt-GW)"
1937
- },
1938
- {
1939
- code: "pt-MZ",
1940
- name: "Portuguese (Mozambique) (pt-MZ)"
1941
- },
1942
- {
1943
- code: "pt-PT",
1944
- name: "Portuguese (Portugal) (pt-PT)"
1945
- },
1946
- {
1947
- code: "pt-ST",
1948
- name: "Portuguese (São Tomé and Príncipe) (pt-ST)"
1949
- },
1950
- {
1951
- code: "pa",
1952
- name: "Punjabi (pa)"
1953
- },
1954
- {
1955
- code: "pa-Arab",
1956
- name: "Punjabi (Arabic) (pa-Arab)"
1957
- },
1958
- {
1959
- code: "pa-Arab-PK",
1960
- name: "Punjabi (Arabic, Pakistan) (pa-Arab-PK)"
1961
- },
1962
- {
1963
- code: "pa-Guru",
1964
- name: "Punjabi (Gurmukhi) (pa-Guru)"
1965
- },
1966
- {
1967
- code: "pa-Guru-IN",
1968
- name: "Punjabi (Gurmukhi, India) (pa-Guru-IN)"
1969
- },
1970
- {
1971
- code: "ro",
1972
- name: "Romanian (ro)"
1973
- },
1974
- {
1975
- code: "ro-MD",
1976
- name: "Romanian (Moldova) (ro-MD)"
1977
- },
1978
- {
1979
- code: "ro-RO",
1980
- name: "Romanian (Romania) (ro-RO)"
1981
- },
1982
- {
1983
- code: "rm",
1984
- name: "Romansh (rm)"
1985
- },
1986
- {
1987
- code: "rm-CH",
1988
- name: "Romansh (Switzerland) (rm-CH)"
1989
- },
1990
- {
1991
- code: "rof",
1992
- name: "Rombo (rof)"
1993
- },
1994
- {
1995
- code: "rof-TZ",
1996
- name: "Rombo (Tanzania) (rof-TZ)"
1997
- },
1998
- {
1999
- code: "rn",
2000
- name: "Rundi (rn)"
2001
- },
2002
- {
2003
- code: "rn-BI",
2004
- name: "Rundi (Burundi) (rn-BI)"
2005
- },
2006
- {
2007
- code: "ru",
2008
- name: "Russian (ru)"
2009
- },
2010
- {
2011
- code: "ru-MD",
2012
- name: "Russian (Moldova) (ru-MD)"
2013
- },
2014
- {
2015
- code: "ru-RU",
2016
- name: "Russian (Russia) (ru-RU)"
2017
- },
2018
- {
2019
- code: "ru-UA",
2020
- name: "Russian (Ukraine) (ru-UA)"
2021
- },
2022
- {
2023
- code: "rwk",
2024
- name: "Rwa (rwk)"
2025
- },
2026
- {
2027
- code: "rwk-TZ",
2028
- name: "Rwa (Tanzania) (rwk-TZ)"
2029
- },
2030
- {
2031
- code: "saq",
2032
- name: "Samburu (saq)"
2033
- },
2034
- {
2035
- code: "saq-KE",
2036
- name: "Samburu (Kenya) (saq-KE)"
2037
- },
2038
- {
2039
- code: "sg",
2040
- name: "Sango (sg)"
2041
- },
2042
- {
2043
- code: "sg-CF",
2044
- name: "Sango (Central African Republic) (sg-CF)"
2045
- },
2046
- {
2047
- code: "sbp",
2048
- name: "Sangu (sbp)"
2049
- },
2050
- {
2051
- code: "sbp-TZ",
2052
- name: "Sangu (Tanzania) (sbp-TZ)"
2053
- },
2054
- {
2055
- code: "sa",
2056
- name: "Sanskrit (sa)"
2057
- },
2058
- {
2059
- code: "gd",
2060
- name: "Scottish Gaelic (gd)"
2061
- },
2062
- {
2063
- code: "gd-GB",
2064
- name: "Scottish Gaelic (United Kingdom)"
2065
- },
2066
- {
2067
- code: "seh",
2068
- name: "Sena (seh)"
2069
- },
2070
- {
2071
- code: "seh-MZ",
2072
- name: "Sena (Mozambique) (seh-MZ)"
2073
- },
2074
- {
2075
- code: "sr",
2076
- name: "Serbian (sr)"
2077
- },
2078
- {
2079
- code: "sr-Cyrl",
2080
- name: "Serbian (Cyrillic) (sr-Cyrl)"
2081
- },
2082
- {
2083
- code: "sr-Cyrl-BA",
2084
- name: "Serbian (Cyrillic, Bosnia and Herzegovina)(sr-Cyrl-BA) "
2085
- },
2086
- {
2087
- code: "sr-Cyrl-ME",
2088
- name: "Serbian (Cyrillic, Montenegro) (sr-Cyrl-ME)"
2089
- },
2090
- {
2091
- code: "sr-Cyrl-RS",
2092
- name: "Serbian (Cyrillic, Serbia) (sr-Cyrl-RS)"
2093
- },
2094
- {
2095
- code: "sr-Latn",
2096
- name: "Serbian (Latin) (sr-Latn)"
2097
- },
2098
- {
2099
- code: "sr-Latn-BA",
2100
- name: "Serbian (Latin, Bosnia and Herzegovina) (sr-Latn-BA) "
2101
- },
2102
- {
2103
- code: "sr-Latn-ME",
2104
- name: "Serbian (Latin, Montenegro) (sr-Latn-ME)"
2105
- },
2106
- {
2107
- code: "sr-Latn-RS",
2108
- name: "Serbian (Latin, Serbia) (sr-Latn-RS)"
2109
- },
2110
- {
2111
- code: "ksb",
2112
- name: "Shambala (ksb)"
2113
- },
2114
- {
2115
- code: "ksb-TZ",
2116
- name: "Shambala (Tanzania) (ksb-TZ)"
2117
- },
2118
- {
2119
- code: "sn",
2120
- name: "Shona (sn)"
2121
- },
2122
- {
2123
- code: "sn-ZW",
2124
- name: "Shona (Zimbabwe) (sn-ZW)"
2125
- },
2126
- {
2127
- code: "ii",
2128
- name: "Sichuan Yi (ii)"
2129
- },
2130
- {
2131
- code: "ii-CN",
2132
- name: "Sichuan Yi (China) (ii-CN)"
2133
- },
2134
- {
2135
- code: "si",
2136
- name: "Sinhala (si)"
2137
- },
2138
- {
2139
- code: "si-LK",
2140
- name: "Sinhala (Sri Lanka) (si-LK)"
2141
- },
2142
- {
2143
- code: "sk",
2144
- name: "Slovak (sk)"
2145
- },
2146
- {
2147
- code: "sk-SK",
2148
- name: "Slovak (Slovakia) (sk-SK)"
2149
- },
2150
- {
2151
- code: "sl",
2152
- name: "Slovenian (sl)"
2153
- },
2154
- {
2155
- code: "sl-SI",
2156
- name: "Slovenian (Slovenia) (sl-SI)"
2157
- },
2158
- {
2159
- code: "xog",
2160
- name: "Soga (xog)"
2161
- },
2162
- {
2163
- code: "xog-UG",
2164
- name: "Soga (Uganda) (xog-UG)"
2165
- },
2166
- {
2167
- code: "so",
2168
- name: "Somali (so)"
2169
- },
2170
- {
2171
- code: "so-DJ",
2172
- name: "Somali (Djibouti) (so-DJ)"
2173
- },
2174
- {
2175
- code: "so-ET",
2176
- name: "Somali (Ethiopia) (so-ET)"
2177
- },
2178
- {
2179
- code: "so-KE",
2180
- name: "Somali (Kenya) (so-KE)"
2181
- },
2182
- {
2183
- code: "so-SO",
2184
- name: "Somali (Somalia) (so-SO)"
2185
- },
2186
- {
2187
- code: "es",
2188
- name: "Spanish (es)"
2189
- },
2190
- {
2191
- code: "es-AR",
2192
- name: "Spanish (Argentina) (es-AR)"
2193
- },
2194
- {
2195
- code: "es-BO",
2196
- name: "Spanish (Bolivia) (es-BO)"
2197
- },
2198
- {
2199
- code: "es-CL",
2200
- name: "Spanish (Chile) (es-CL)"
2201
- },
2202
- {
2203
- code: "es-CO",
2204
- name: "Spanish (Colombia) (es-CO)"
2205
- },
2206
- {
2207
- code: "es-CR",
2208
- name: "Spanish (Costa Rica) (es-CR)"
2209
- },
2210
- {
2211
- code: "es-DO",
2212
- name: "Spanish (Dominican Republic) (es-DO)"
2213
- },
2214
- {
2215
- code: "es-EC",
2216
- name: "Spanish (Ecuador) (es-EC)"
2217
- },
2218
- {
2219
- code: "es-SV",
2220
- name: "Spanish (El Salvador) (es-SV)"
2221
- },
2222
- {
2223
- code: "es-GQ",
2224
- name: "Spanish (Equatorial Guinea) (es-GQ)"
2225
- },
2226
- {
2227
- code: "es-GT",
2228
- name: "Spanish (Guatemala) (es-GT)"
2229
- },
2230
- {
2231
- code: "es-HN",
2232
- name: "Spanish (Honduras) (es-HN)"
2233
- },
2234
- {
2235
- code: "es-419",
2236
- name: "Spanish (Latin America) (es-419)"
2237
- },
2238
- {
2239
- code: "es-MX",
2240
- name: "Spanish (Mexico) (es-MX)"
2241
- },
2242
- {
2243
- code: "es-NI",
2244
- name: "Spanish (Nicaragua) (es-NI)"
2245
- },
2246
- {
2247
- code: "es-PA",
2248
- name: "Spanish (Panama) (es-PA)"
2249
- },
2250
- {
2251
- code: "es-PY",
2252
- name: "Spanish (Paraguay) (es-PY)"
2253
- },
2254
- {
2255
- code: "es-PE",
2256
- name: "Spanish (Peru) (es-PE)"
2257
- },
2258
- {
2259
- code: "es-PR",
2260
- name: "Spanish (Puerto Rico) (es-PR)"
2261
- },
2262
- {
2263
- code: "es-ES",
2264
- name: "Spanish (Spain) (es-ES)"
2265
- },
2266
- {
2267
- code: "es-US",
2268
- name: "Spanish (United States) (es-US)"
2269
- },
2270
- {
2271
- code: "es-UY",
2272
- name: "Spanish (Uruguay) (es-UY)"
2273
- },
2274
- {
2275
- code: "es-VE",
2276
- name: "Spanish (Venezuela) (es-VE)"
2277
- },
2278
- {
2279
- code: "sw",
2280
- name: "Swahili (sw)"
2281
- },
2282
- {
2283
- code: "sw-KE",
2284
- name: "Swahili (Kenya) (sw-KE)"
2285
- },
2286
- {
2287
- code: "sw-TZ",
2288
- name: "Swahili (Tanzania) (sw-TZ)"
2289
- },
2290
- {
2291
- code: "sv",
2292
- name: "Swedish (sv)"
2293
- },
2294
- {
2295
- code: "sv-FI",
2296
- name: "Swedish (Finland) (sv-FI)"
2297
- },
2298
- {
2299
- code: "sv-SE",
2300
- name: "Swedish (Sweden) (sv-SE)"
2301
- },
2302
- {
2303
- code: "gsw",
2304
- name: "Swiss German (gsw)"
2305
- },
2306
- {
2307
- code: "gsw-CH",
2308
- name: "Swiss German (Switzerland) (gsw-CH)"
2309
- },
2310
- {
2311
- code: "shi",
2312
- name: "Tachelhit (shi)"
2313
- },
2314
- {
2315
- code: "shi-Latn",
2316
- name: "Tachelhit (Latin) (shi-Latn)"
2317
- },
2318
- {
2319
- code: "shi-Latn-MA",
2320
- name: "Tachelhit (Latin, Morocco) (shi-Latn-MA)"
2321
- },
2322
- {
2323
- code: "shi-Tfng",
2324
- name: "Tachelhit (Tifinagh) (shi-Tfng)"
2325
- },
2326
- {
2327
- code: "shi-Tfng-MA",
2328
- name: "Tachelhit (Tifinagh, Morocco) (shi-Tfng-MA)"
2329
- },
2330
- {
2331
- code: "dav",
2332
- name: "Taita (dav)"
2333
- },
2334
- {
2335
- code: "dav-KE",
2336
- name: "Taita (Kenya) (dav-KE)"
2337
- },
2338
- {
2339
- code: "tg",
2340
- name: "Tajik (tg)"
2341
- },
2342
- {
2343
- code: "ta",
2344
- name: "Tamil (ta)"
2345
- },
2346
- {
2347
- code: "ta-IN",
2348
- name: "Tamil (India) (ta-IN)"
2349
- },
2350
- {
2351
- code: "ta-LK",
2352
- name: "Tamil (Sri Lanka) (ta-LK)"
2353
- },
2354
- {
2355
- code: "twq",
2356
- name: "Tasawaq (twq)"
2357
- },
2358
- {
2359
- code: "twq-NE",
2360
- name: "Tasawaq (Niger) (twq-NE)"
2361
- },
2362
- {
2363
- code: "mi",
2364
- name: "Te Reo Māori (mi)"
2365
- },
2366
- {
2367
- code: "te",
2368
- name: "Telugu (te)"
2369
- },
2370
- {
2371
- code: "te-IN",
2372
- name: "Telugu (India) (te-IN)"
2373
- },
2374
- {
2375
- code: "teo",
2376
- name: "Teso (teo)"
2377
- },
2378
- {
2379
- code: "teo-KE",
2380
- name: "Teso (Kenya) (teo-KE)"
2381
- },
2382
- {
2383
- code: "teo-UG",
2384
- name: "Teso (Uganda) (teo-UG)"
2385
- },
2386
- {
2387
- code: "th",
2388
- name: "Thai (th)"
2389
- },
2390
- {
2391
- code: "th-TH",
2392
- name: "Thai (Thailand) (th-TH)"
2393
- },
2394
- {
2395
- code: "bo",
2396
- name: "Tibetan (bo)"
2397
- },
2398
- {
2399
- code: "bo-CN",
2400
- name: "Tibetan (China) (bo-CN)"
2401
- },
2402
- {
2403
- code: "bo-IN",
2404
- name: "Tibetan (India) (bo-IN)"
2405
- },
2406
- {
2407
- code: "ti",
2408
- name: "Tigrinya (ti)"
2409
- },
2410
- {
2411
- code: "ti-ER",
2412
- name: "Tigrinya (Eritrea) (ti-ER)"
2413
- },
2414
- {
2415
- code: "ti-ET",
2416
- name: "Tigrinya (Ethiopia) (ti-ET)"
2417
- },
2418
- {
2419
- code: "to",
2420
- name: "Tongan (to)"
2421
- },
2422
- {
2423
- code: "to-TO",
2424
- name: "Tongan (Tonga) (to-TO)"
2425
- },
2426
- {
2427
- code: "tr",
2428
- name: "Turkish (tr)"
2429
- },
2430
- {
2431
- code: "tk",
2432
- name: "Turkmen (tk)"
2433
- },
2434
- {
2435
- code: "tr-TR",
2436
- name: "Turkish (Turkey) (tr-TR)"
2437
- },
2438
- {
2439
- code: "tch",
2440
- name: "Turks And Caicos Creole English"
2441
- },
2442
- {
2443
- code: "uk",
2444
- name: "Ukrainian (uk)"
2445
- },
2446
- {
2447
- code: "uk-UA",
2448
- name: "Ukrainian (Ukraine) (uk-UA)"
2449
- },
2450
- {
2451
- code: "ur",
2452
- name: "Urdu (ur)"
2453
- },
2454
- {
2455
- code: "ur-IN",
2456
- name: "Urdu (India) (ur-IN)"
2457
- },
2458
- {
2459
- code: "ur-PK",
2460
- name: "Urdu (Pakistan) (ur-PK)"
2461
- },
2462
- {
2463
- code: "ug",
2464
- name: "Uyghur"
2465
- },
2466
- {
2467
- code: "ug-CN",
2468
- name: "Uyghur (China)"
2469
- },
2470
- {
2471
- code: "uz",
2472
- name: "Uzbek (uz)"
2473
- },
2474
- {
2475
- code: "uz-Arab",
2476
- name: "Uzbek (Arabic) (uz-Arab)"
2477
- },
2478
- {
2479
- code: "uz-Arab-AF",
2480
- name: "Uzbek (Arabic, Afghanistan) (uz-Arab-AF)"
2481
- },
2482
- {
2483
- code: "uz-Cyrl",
2484
- name: "Uzbek (Cyrillic) (uz-Cyrl)"
2485
- },
2486
- {
2487
- code: "uz-Cyrl-UZ",
2488
- name: "Uzbek (Cyrillic, Uzbekistan) (uz-Cyrl-UZ)"
2489
- },
2490
- {
2491
- code: "uz-Latn",
2492
- name: "Uzbek (Latin) (uz-Latn)"
2493
- },
2494
- {
2495
- code: "uz-Latn-UZ",
2496
- name: "Uzbek (Latin, Uzbekistan) (uz-Latn-UZ)"
2497
- },
2498
- {
2499
- code: "vai",
2500
- name: "Vai (vai)"
2501
- },
2502
- {
2503
- code: "vai-Latn",
2504
- name: "Vai (Latin) (vai-Latn)"
2505
- },
2506
- {
2507
- code: "vai-Latn-LR",
2508
- name: "Vai (Latin, Liberia) (vai-Latn-LR)"
2509
- },
2510
- {
2511
- code: "vai-Vaii",
2512
- name: "Vai (Vai) (vai-Vaii)"
2513
- },
2514
- {
2515
- code: "vai-Vaii-LR",
2516
- name: "Vai (Vai, Liberia) (vai-Vaii-LR)"
2517
- },
2518
- {
2519
- code: "val",
2520
- name: "Valencian (val)"
2521
- },
2522
- {
2523
- code: "val-ES",
2524
- name: "Valencian (Spain) (val-ES)"
2525
- },
2526
- {
2527
- code: "ca-ES-valencia",
2528
- name: "Valencian (Spain Catalan) (ca-ES-valencia)"
2529
- },
2530
- {
2531
- code: "vi",
2532
- name: "Vietnamese (vi)"
2533
- },
2534
- {
2535
- code: "vi-VN",
2536
- name: "Vietnamese (Vietnam) (vi-VN)"
2537
- },
2538
- {
2539
- code: "vun",
2540
- name: "Vunjo (vun)"
2541
- },
2542
- {
2543
- code: "vun-TZ",
2544
- name: "Vunjo (Tanzania) (vun-TZ)"
2545
- },
2546
- {
2547
- code: "cy",
2548
- name: "Welsh (cy)"
2549
- },
2550
- {
2551
- code: "cy-GB",
2552
- name: "Welsh (United Kingdom) (cy-GB)"
2553
- },
2554
- {
2555
- code: "yav",
2556
- name: "Yangben (yav)"
2557
- },
2558
- {
2559
- code: "yav-CM",
2560
- name: "Yangben (Cameroon) (yav-CM)"
2561
- },
2562
- {
2563
- code: "yo",
2564
- name: "Yoruba (yo)"
2565
- },
2566
- {
2567
- code: "yo-NG",
2568
- name: "Yoruba (Nigeria) (yo-NG)"
2569
- },
2570
- {
2571
- code: "dje",
2572
- name: "Zarma (dje)"
2573
- },
2574
- {
2575
- code: "dje-NE",
2576
- name: "Zarma (Niger) (dje-NE)"
2577
- },
2578
- {
2579
- code: "zu",
2580
- name: "Zulu (zu)"
2581
- },
2582
- {
2583
- code: "zu-ZA",
2584
- name: "Zulu (South Africa) (zu-ZA)"
2585
- }
2586
- ];
2587
- const getInitLocale = () => {
2588
- const envLocaleCode = process.env.STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE;
2589
- if (envLocaleCode) {
2590
- const matchingLocale = isoLocales.find(({ code }) => code === envLocaleCode);
2591
- if (!matchingLocale) {
2592
- throw new Error(
2593
- "Unknown locale code provided in the environment variable STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE"
2594
- );
2595
- }
2596
- return { ...matchingLocale };
2597
- }
2598
- return {
2599
- code: "en",
2600
- name: "English (en)"
2601
- };
2602
- };
2603
- const DEFAULT_LOCALE = getInitLocale();
2604
- const enableContentType = async ({ oldContentTypes, contentTypes: contentTypes2 }) => {
2605
- const { isLocalizedContentType: isLocalizedContentType2 } = getService("content-types");
2606
- const { getDefaultLocale: getDefaultLocale2 } = getService("locales");
2607
- if (!oldContentTypes) {
2608
- return;
2609
- }
2610
- for (const uid in contentTypes2) {
2611
- if (!oldContentTypes[uid]) {
2612
- continue;
2613
- }
2614
- const oldContentType = oldContentTypes[uid];
2615
- const contentType = contentTypes2[uid];
2616
- if (!isLocalizedContentType2(oldContentType) && isLocalizedContentType2(contentType)) {
2617
- const defaultLocale = await getDefaultLocale2() || DEFAULT_LOCALE.code;
2618
- await strapi.db.query(uid).updateMany({
2619
- where: { locale: null },
2620
- data: { locale: defaultLocale }
2621
- });
2622
- }
2623
- }
2624
- };
2625
- const disableContentType = async ({ oldContentTypes, contentTypes: contentTypes2 }) => {
2626
- const { isLocalizedContentType: isLocalizedContentType2 } = getService("content-types");
2627
- const { getDefaultLocale: getDefaultLocale2 } = getService("locales");
2628
- if (!oldContentTypes) {
2629
- return;
2630
- }
2631
- for (const uid in contentTypes2) {
2632
- if (!oldContentTypes[uid]) {
2633
- continue;
2634
- }
2635
- const oldContentType = oldContentTypes[uid];
2636
- const contentType = contentTypes2[uid];
2637
- if (isLocalizedContentType2(oldContentType) && !isLocalizedContentType2(contentType)) {
2638
- const defaultLocale = await getDefaultLocale2() || DEFAULT_LOCALE.code;
2639
- await Promise.all([
2640
- // Delete all entities that are not in the default locale
2641
- strapi.db.query(uid).deleteMany({
2642
- where: { locale: { $ne: defaultLocale } }
2643
- }),
2644
- // Set locale to null for the rest
2645
- strapi.db.query(uid).updateMany({
2646
- where: { locale: { $eq: defaultLocale } },
2647
- data: { locale: null }
2648
- })
2649
- ]);
2650
- }
2651
- }
2652
- };
2653
- const register = ({ strapi: strapi2 }) => {
2654
- extendContentTypes(strapi2);
2655
- addContentManagerLocaleMiddleware(strapi2);
2656
- addContentTypeSyncHooks(strapi2);
2657
- };
2658
- const addContentManagerLocaleMiddleware = (strapi2) => {
2659
- strapi2.server.router.use("/content-manager/collection-types/:model", (ctx, next) => {
2660
- if (ctx.method === "POST" || ctx.method === "PUT") {
2661
- return validateLocaleCreation(ctx, next);
2662
- }
2663
- return next();
2664
- });
2665
- strapi2.server.router.use("/content-manager/single-types/:model", (ctx, next) => {
2666
- if (ctx.method === "POST" || ctx.method === "PUT") {
2667
- return validateLocaleCreation(ctx, next);
2668
- }
2669
- return next();
2670
- });
2671
- };
2672
- const addContentTypeSyncHooks = (strapi2) => {
2673
- strapi2.hook("strapi::content-types.beforeSync").register(disableContentType);
2674
- strapi2.hook("strapi::content-types.afterSync").register(enableContentType);
2675
- };
2676
- const extendContentTypes = (strapi2) => {
2677
- Object.values(strapi2.contentTypes).forEach((contentType) => {
2678
- const { attributes: attributes2 } = contentType;
2679
- _.set(attributes2, "locale", {
2680
- writable: true,
2681
- private: false,
2682
- configurable: false,
2683
- visible: false,
2684
- type: "string"
2685
- });
2686
- _.set(attributes2, "localizations", {
2687
- type: "relation",
2688
- relation: "oneToMany",
2689
- target: contentType.uid,
2690
- writable: false,
2691
- private: false,
2692
- configurable: false,
2693
- visible: false,
2694
- joinColumn: {
2695
- name: "document_id",
2696
- referencedColumn: "document_id",
2697
- referencedTable: strapi2.db.metadata.identifiers.getTableName(contentType.collectionName),
2698
- // ensure the population will not include the results we already loaded
2699
- on({ results }) {
2700
- return {
2701
- id: {
2702
- $notIn: results.map((r) => r.id)
2703
- }
2704
- };
2705
- }
2706
- }
2707
- });
2708
- });
2709
- if (strapi2.plugin("graphql")) {
2710
- graphqlProvider({ strapi: strapi2 }).register();
2711
- }
2712
- };
2713
- const info = {
2714
- singularName: "locale",
2715
- pluralName: "locales",
2716
- collectionName: "locales",
2717
- displayName: "Locale",
2718
- description: ""
2719
- };
2720
- const options = {};
2721
- const pluginOptions = {
2722
- "content-manager": {
2723
- visible: false
2724
- },
2725
- "content-type-builder": {
2726
- visible: false
2727
- }
2728
- };
2729
- const attributes = {
2730
- name: {
2731
- type: "string",
2732
- min: 1,
2733
- max: 50,
2734
- configurable: false
2735
- },
2736
- code: {
2737
- type: "string",
2738
- unique: true,
2739
- configurable: false
2740
- }
2741
- };
2742
- const schema = {
2743
- info,
2744
- options,
2745
- pluginOptions,
2746
- attributes
2747
- };
2748
- const locale = {
2749
- schema
2750
- };
2751
- const contentTypes$1 = {
2752
- locale
2753
- };
2754
- const actions = [
2755
- {
2756
- section: "settings",
2757
- category: "Internationalization",
2758
- subCategory: "Locales",
2759
- pluginName: "i18n",
2760
- displayName: "Create",
2761
- uid: "locale.create"
2762
- },
2763
- {
2764
- section: "settings",
2765
- category: "Internationalization",
2766
- subCategory: "Locales",
2767
- pluginName: "i18n",
2768
- displayName: "Read",
2769
- uid: "locale.read",
2770
- aliases: [
2771
- { actionId: "plugin::content-manager.explorer.read", subjects: ["plugin::i18n.locale"] }
2772
- ]
2773
- },
2774
- {
2775
- section: "settings",
2776
- category: "Internationalization",
2777
- subCategory: "Locales",
2778
- pluginName: "i18n",
2779
- displayName: "Update",
2780
- uid: "locale.update"
2781
- },
2782
- {
2783
- section: "settings",
2784
- category: "Internationalization",
2785
- subCategory: "Locales",
2786
- pluginName: "i18n",
2787
- displayName: "Delete",
2788
- uid: "locale.delete"
2789
- }
2790
- ];
2791
- const addLocalesPropertyIfNeeded = ({ value: action }) => {
2792
- const {
2793
- section,
2794
- options: { applyToProperties }
2795
- } = action;
2796
- if (section !== "contentTypes") {
2797
- return;
2798
- }
2799
- if (isArray(applyToProperties) && applyToProperties.includes("locales")) {
2800
- return;
2801
- }
2802
- action.options.applyToProperties = isArray(applyToProperties) ? applyToProperties.concat("locales") : ["locales"];
2803
- };
2804
- const shouldApplyLocalesPropertyToSubject = ({ property, subject }) => {
2805
- if (property === "locales") {
2806
- const model = strapi.getModel(subject);
2807
- return getService("content-types").isLocalizedContentType(model);
2808
- }
2809
- return true;
2810
- };
2811
- const addAllLocalesToPermissions = async (permissions2) => {
2812
- const { actionProvider } = strapi.service("admin::permission");
2813
- const { find: findAllLocales } = getService("locales");
2814
- const allLocales = await findAllLocales();
2815
- const allLocalesCode = allLocales.map(prop("code"));
2816
- return Promise.all(
2817
- permissions2.map(async (permission) => {
2818
- const { action, subject } = permission;
2819
- const appliesToLocalesProperty = await actionProvider.appliesToProperty(
2820
- "locales",
2821
- action,
2822
- subject
2823
- );
2824
- if (!appliesToLocalesProperty) {
2825
- return permission;
2826
- }
2827
- const oldPermissionProperties = getOr({}, "properties", permission);
2828
- return { ...permission, properties: { ...oldPermissionProperties, locales: allLocalesCode } };
2829
- })
2830
- );
2831
- };
2832
- const syncSuperAdminPermissionsWithLocales = async () => {
2833
- const roleService = strapi.service("admin::role");
2834
- const permissionService = strapi.service("admin::permission");
2835
- const superAdminRole = await roleService.getSuperAdmin();
2836
- if (!superAdminRole) {
2837
- return;
2838
- }
2839
- const superAdminPermissions = await permissionService.findMany({
2840
- where: {
2841
- role: {
2842
- id: superAdminRole.id
2843
- }
2844
- }
2845
- });
2846
- const newSuperAdminPermissions = await addAllLocalesToPermissions(superAdminPermissions);
2847
- await roleService.assignPermissions(superAdminRole.id, newSuperAdminPermissions);
2848
- };
2849
- const registerI18nActions = async () => {
2850
- const { actionProvider } = strapi.service("admin::permission");
2851
- await actionProvider.registerMany(actions);
2852
- };
2853
- const registerI18nActionsHooks = () => {
2854
- const { actionProvider } = strapi.service("admin::permission");
2855
- const { hooks } = strapi.service("admin::role");
2856
- actionProvider.hooks.appliesPropertyToSubject.register(shouldApplyLocalesPropertyToSubject);
2857
- hooks.willResetSuperAdminPermissions.register(addAllLocalesToPermissions);
2858
- };
2859
- const updateActionsProperties = () => {
2860
- const { actionProvider } = strapi.service("admin::permission");
2861
- actionProvider.hooks.willRegister.register(addLocalesPropertyIfNeeded);
2862
- actionProvider.values().forEach((action) => addLocalesPropertyIfNeeded({ value: action }));
2863
- };
2864
- const i18nActionsService = {
2865
- actions,
2866
- registerI18nActions,
2867
- registerI18nActionsHooks,
2868
- updateActionsProperties,
2869
- syncSuperAdminPermissionsWithLocales
2870
- };
2871
- const localesPropertyHandler = async ({ action, section }) => {
2872
- const { actionProvider } = strapi.service("admin::permission");
2873
- const locales2 = await getService("locales").find();
2874
- if (isEmpty(locales2)) {
2875
- return;
2876
- }
2877
- for (const subject of section.subjects) {
2878
- const applies = await actionProvider.appliesToProperty("locales", action.actionId, subject.uid);
2879
- const hasLocalesProperty = subject.properties.find(
2880
- (property) => property.value === "locales"
2881
- );
2882
- if (applies && !hasLocalesProperty) {
2883
- subject.properties.push({
2884
- label: "Locales",
2885
- value: "locales",
2886
- children: locales2.map(({ name, code }) => ({ label: name || code, value: code }))
2887
- });
2888
- }
2889
- }
2890
- };
2891
- const registerLocalesPropertyHandler = () => {
2892
- const { sectionsBuilder } = strapi.service("admin::permission");
2893
- sectionsBuilder.addHandler("singleTypes", localesPropertyHandler);
2894
- sectionsBuilder.addHandler("collectionTypes", localesPropertyHandler);
2895
- };
2896
- const sectionsBuilderService = {
2897
- localesPropertyHandler,
2898
- registerLocalesPropertyHandler
2899
- };
2900
- const willRegisterPermission = (context) => {
2901
- const { permission, condition, user } = context;
2902
- const { subject, properties } = permission;
2903
- const isSuperAdmin = strapi.service("admin::role").hasSuperAdminRole(user);
2904
- if (isSuperAdmin) {
2905
- return;
2906
- }
2907
- const { locales: locales2 } = properties || {};
2908
- const { isLocalizedContentType: isLocalizedContentType2 } = getService("content-types");
2909
- if (!subject) {
2910
- return;
2911
- }
2912
- const ct = strapi.contentTypes[subject];
2913
- if (!isLocalizedContentType2(ct)) {
2914
- return;
2915
- }
2916
- if (locales2 === null) {
2917
- return;
2918
- }
2919
- condition.and({
2920
- locale: {
2921
- $in: locales2 || []
2922
- }
2923
- });
2924
- };
2925
- const registerI18nPermissionsHandlers = () => {
2926
- const { engine } = strapi.service("admin::permission");
2927
- engine.hooks["before-register.permission"].register(willRegisterPermission);
2928
- };
2929
- const engineService = {
2930
- willRegisterPermission,
2931
- registerI18nPermissionsHandlers
2932
- };
2933
- const permissions = () => ({
2934
- actions: i18nActionsService,
2935
- sectionsBuilder: sectionsBuilderService,
2936
- engine: engineService
2937
- });
2938
- const sendDidInitializeEvent = async () => {
2939
- const { isLocalizedContentType: isLocalizedContentType2 } = getService("content-types");
2940
- const numberOfContentTypes = reduce(
2941
- (sum, contentType) => isLocalizedContentType2(contentType) ? sum + 1 : sum,
2942
- 0
2943
- )(strapi.contentTypes);
2944
- await strapi.telemetry.send("didInitializeI18n", { groupProperties: { numberOfContentTypes } });
2945
- };
2946
- const sendDidUpdateI18nLocalesEvent = async () => {
2947
- const numberOfLocales = await getService("locales").count();
2948
- await strapi.telemetry.send("didUpdateI18nLocales", {
2949
- groupProperties: { numberOfLocales }
2950
- });
2951
- };
2952
- const metrics = () => ({
2953
- sendDidInitializeEvent,
2954
- sendDidUpdateI18nLocalesEvent
2955
- });
2956
- const syncNonLocalizedAttributes = async (sourceEntry, model) => {
2957
- const { copyNonLocalizedAttributes: copyNonLocalizedAttributes2 } = getService("content-types");
2958
- const nonLocalizedAttributes = copyNonLocalizedAttributes2(model, sourceEntry);
2959
- if (isEmpty(nonLocalizedAttributes)) {
2960
- return;
2961
- }
2962
- const uid = model.uid;
2963
- const documentId = sourceEntry.documentId;
2964
- const locale2 = sourceEntry.locale;
2965
- const status = sourceEntry?.publishedAt ? "published" : "draft";
2966
- const localeEntriesToUpdate = await strapi.db.query(uid).findMany({
2967
- where: {
2968
- documentId,
2969
- publishedAt: status === "published" ? { $ne: null } : null,
2970
- locale: { $ne: locale2 }
2971
- },
2972
- select: ["locale", "id"]
2973
- });
2974
- const entryData = await strapi.documents(uid).omitComponentData(nonLocalizedAttributes);
2975
- await async.map(localeEntriesToUpdate, async (entry) => {
2976
- const transformedData = await strapi.documents.utils.transformData(
2977
- cloneDeep(nonLocalizedAttributes),
2978
- {
2979
- uid,
2980
- status,
2981
- locale: entry.locale,
2982
- allowMissingId: true
2983
- }
2984
- );
2985
- const componentData = await strapi.documents(uid).updateComponents(entry, transformedData);
2986
- await strapi.db.query(uid).update({
2987
- where: {
2988
- documentId,
2989
- publishedAt: status === "published" ? { $ne: null } : null,
2990
- locale: { $eq: entry.locale }
2991
- },
2992
- // The data we send to the update function is the entry data merged with
2993
- // the updated component data
2994
- data: Object.assign(cloneDeep(entryData), componentData)
2995
- });
2996
- });
2997
- };
2998
- const localizations = () => ({
2999
- syncNonLocalizedAttributes
3000
- });
3001
- const find = (params = {}) => strapi.db.query("plugin::i18n.locale").findMany({ where: params });
3002
- const findById = (id) => strapi.db.query("plugin::i18n.locale").findOne({ where: { id } });
3003
- const findByCode = (code) => strapi.db.query("plugin::i18n.locale").findOne({ where: { code } });
3004
- const count = (params = {}) => strapi.db.query("plugin::i18n.locale").count({ where: params });
3005
- const create = async (locale2) => {
3006
- const result = await strapi.db.query("plugin::i18n.locale").create({ data: locale2 });
3007
- getService("metrics").sendDidUpdateI18nLocalesEvent();
3008
- return result;
3009
- };
3010
- const update = async (params, updates) => {
3011
- const result = await strapi.db.query("plugin::i18n.locale").update({ where: params, data: updates });
3012
- getService("metrics").sendDidUpdateI18nLocalesEvent();
3013
- return result;
3014
- };
3015
- const deleteFn = async ({ id }) => {
3016
- const localeToDelete = await findById(id);
3017
- if (localeToDelete) {
3018
- await deleteAllLocalizedEntriesFor({ locale: localeToDelete.code });
3019
- const result = await strapi.db.query("plugin::i18n.locale").delete({ where: { id } });
3020
- getService("metrics").sendDidUpdateI18nLocalesEvent();
3021
- return result;
3022
- }
3023
- return localeToDelete;
3024
- };
3025
- const setDefaultLocale = ({ code }) => getCoreStore().set({ key: "default_locale", value: code });
3026
- const getDefaultLocale = () => getCoreStore().get({ key: "default_locale" });
3027
- const setIsDefault = async (locales2) => {
3028
- if (isNil(locales2)) {
3029
- return locales2;
3030
- }
3031
- const actualDefault = await getDefaultLocale();
3032
- if (Array.isArray(locales2)) {
3033
- return locales2.map((locale2) => ({ ...locale2, isDefault: actualDefault === locale2.code }));
3034
- }
3035
- return { ...locales2, isDefault: actualDefault === locales2.code };
3036
- };
3037
- const initDefaultLocale = async () => {
3038
- const existingLocalesNb = await strapi.db.query("plugin::i18n.locale").count();
3039
- if (existingLocalesNb === 0) {
3040
- await create(DEFAULT_LOCALE);
3041
- await setDefaultLocale({ code: DEFAULT_LOCALE.code });
3042
- }
3043
- };
3044
- const deleteAllLocalizedEntriesFor = async ({ locale: locale2 }) => {
3045
- const { isLocalizedContentType: isLocalizedContentType2 } = getService("content-types");
3046
- const localizedModels = Object.values(strapi.contentTypes).filter(isLocalizedContentType2);
3047
- for (const model of localizedModels) {
3048
- await strapi.db.query(model.uid).deleteMany({ where: { locale: locale2 } });
3049
- }
3050
- };
3051
- const locales = () => ({
3052
- find,
3053
- findById,
3054
- findByCode,
3055
- create,
3056
- update,
3057
- count,
3058
- setDefaultLocale,
3059
- getDefaultLocale,
3060
- setIsDefault,
3061
- delete: deleteFn,
3062
- initDefaultLocale
3063
- });
3064
- const getIsoLocales = () => isoLocales;
3065
- const isoLocalesService = () => ({
3066
- getIsoLocales
3067
- });
3068
- const {
3069
- isRelationalAttribute,
3070
- getVisibleAttributes,
3071
- isTypedAttribute,
3072
- getScalarAttributes,
3073
- getRelationalAttributes
3074
- } = contentTypes$2;
3075
- const { ApplicationError: ApplicationError$2 } = errors;
3076
- const hasLocalizedOption = (modelOrAttribute) => {
3077
- return prop("pluginOptions.i18n.localized", modelOrAttribute) === true;
3078
- };
3079
- const getValidLocale = async (locale2) => {
3080
- const localesService = getService("locales");
3081
- if (isNil(locale2)) {
3082
- return localesService.getDefaultLocale();
3083
- }
3084
- const foundLocale = await localesService.findByCode(locale2);
3085
- if (!foundLocale) {
3086
- throw new ApplicationError$2("Locale not found");
3087
- }
3088
- return locale2;
3089
- };
3090
- const isLocalizedAttribute = (attribute) => {
3091
- return hasLocalizedOption(attribute) || isRelationalAttribute(attribute) || isTypedAttribute(attribute, "uid");
3092
- };
3093
- const isLocalizedContentType = (model) => {
3094
- return hasLocalizedOption(model);
3095
- };
3096
- const getNonLocalizedAttributes = (model) => {
3097
- return getVisibleAttributes(model).filter(
3098
- (attrName) => !isLocalizedAttribute(model.attributes[attrName])
3099
- );
3100
- };
3101
- const removeId = (value) => {
3102
- if (typeof value === "object" && has("id", value)) {
3103
- delete value.id;
3104
- }
3105
- };
3106
- const removeIds = (model) => (entry) => removeIdsMut(model, cloneDeep(entry));
3107
- const removeIdsMut = (model, entry) => {
3108
- if (isNil(entry)) {
3109
- return entry;
3110
- }
3111
- removeId(entry);
3112
- _.forEach(model.attributes, (attr, attrName) => {
3113
- const value = entry[attrName];
3114
- if (attr.type === "dynamiczone" && isArray(value)) {
3115
- value.forEach((compo) => {
3116
- if (has("__component", compo)) {
3117
- const model2 = strapi.components[compo.__component];
3118
- removeIdsMut(model2, compo);
3119
- }
3120
- });
3121
- } else if (attr.type === "component") {
3122
- const model2 = strapi.components[attr.component];
3123
- if (isArray(value)) {
3124
- value.forEach((compo) => removeIdsMut(model2, compo));
3125
- } else {
3126
- removeIdsMut(model2, value);
3127
- }
3128
- }
3129
- });
3130
- return entry;
3131
- };
3132
- const copyNonLocalizedAttributes = (model, entry) => {
3133
- const nonLocalizedAttributes = getNonLocalizedAttributes(model);
3134
- return pipe(pick(nonLocalizedAttributes), removeIds(model))(entry);
3135
- };
3136
- const getLocalizedAttributes = (model) => {
3137
- return getVisibleAttributes(model).filter(
3138
- (attrName) => isLocalizedAttribute(model.attributes[attrName])
3139
- );
3140
- };
3141
- const fillNonLocalizedAttributes = (entry, relatedEntry, { model }) => {
3142
- if (isNil(relatedEntry)) {
3143
- return;
3144
- }
3145
- const modelDef = strapi.getModel(model);
3146
- const relatedEntryCopy = copyNonLocalizedAttributes(modelDef, relatedEntry);
3147
- _.forEach(relatedEntryCopy, (value, field) => {
3148
- if (isNil(entry[field])) {
3149
- entry[field] = value;
3150
- }
3151
- });
3152
- };
3153
- const getNestedPopulateOfNonLocalizedAttributes = (modelUID) => {
3154
- const schema2 = strapi.getModel(modelUID);
3155
- const scalarAttributes = getScalarAttributes(schema2);
3156
- const nonLocalizedAttributes = getNonLocalizedAttributes(schema2);
3157
- const allAttributes = [...scalarAttributes, ...nonLocalizedAttributes];
3158
- if (schema2.modelType === "component") {
3159
- allAttributes.push(...getRelationalAttributes(schema2));
3160
- }
3161
- const currentAttributesToPopulate = allAttributes.filter((value, index2, self) => {
3162
- return self.indexOf(value) === index2 && self.lastIndexOf(value) === index2;
3163
- });
3164
- const attributesToPopulate = [...currentAttributesToPopulate];
3165
- for (const attrName of currentAttributesToPopulate) {
3166
- const attr = schema2.attributes[attrName];
3167
- if (attr.type === "component") {
3168
- const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(attr.component).map(
3169
- (nestedAttr) => `${attrName}.${nestedAttr}`
3170
- );
3171
- attributesToPopulate.push(...nestedPopulate);
3172
- } else if (attr.type === "dynamiczone") {
3173
- attr.components.forEach((componentName) => {
3174
- const nestedPopulate = getNestedPopulateOfNonLocalizedAttributes(componentName).map(
3175
- (nestedAttr) => `${attrName}.${nestedAttr}`
3176
- );
3177
- attributesToPopulate.push(...nestedPopulate);
3178
- });
3179
- }
3180
- }
3181
- return attributesToPopulate;
3182
- };
3183
- const contentTypes = () => ({
3184
- isLocalizedContentType,
3185
- getValidLocale,
3186
- getLocalizedAttributes,
3187
- getNonLocalizedAttributes,
3188
- copyNonLocalizedAttributes,
3189
- fillNonLocalizedAttributes,
3190
- getNestedPopulateOfNonLocalizedAttributes
3191
- });
3192
- const services = {
3193
- permissions,
3194
- metrics,
3195
- localizations,
3196
- locales,
3197
- "iso-locales": isoLocalesService,
3198
- "content-types": contentTypes
3199
- };
3200
- const admin = {
3201
- type: "admin",
3202
- routes: [
3203
- {
3204
- method: "GET",
3205
- path: "/iso-locales",
3206
- handler: "iso-locales.listIsoLocales",
3207
- config: {
3208
- policies: [
3209
- "admin::isAuthenticatedAdmin",
3210
- {
3211
- name: "plugin::content-manager.hasPermissions",
3212
- config: { actions: ["plugin::i18n.locale.read"] }
3213
- }
3214
- ]
3215
- }
3216
- },
3217
- {
3218
- method: "GET",
3219
- path: "/locales",
3220
- handler: "locales.listLocales",
3221
- config: {
3222
- policies: ["admin::isAuthenticatedAdmin"]
3223
- }
3224
- },
3225
- {
3226
- method: "POST",
3227
- path: "/locales",
3228
- handler: "locales.createLocale",
3229
- config: {
3230
- policies: [
3231
- "admin::isAuthenticatedAdmin",
3232
- {
3233
- name: "plugin::content-manager.hasPermissions",
3234
- config: { actions: ["plugin::i18n.locale.create"] }
3235
- }
3236
- ]
3237
- }
3238
- },
3239
- {
3240
- method: "PUT",
3241
- path: "/locales/:id",
3242
- handler: "locales.updateLocale",
3243
- config: {
3244
- policies: [
3245
- "admin::isAuthenticatedAdmin",
3246
- {
3247
- name: "plugin::content-manager.hasPermissions",
3248
- config: { actions: ["plugin::i18n.locale.update"] }
3249
- }
3250
- ]
3251
- }
3252
- },
3253
- {
3254
- method: "DELETE",
3255
- path: "/locales/:id",
3256
- handler: "locales.deleteLocale",
3257
- config: {
3258
- policies: [
3259
- "admin::isAuthenticatedAdmin",
3260
- {
3261
- name: "plugin::content-manager.hasPermissions",
3262
- config: { actions: ["plugin::i18n.locale.delete"] }
3263
- }
3264
- ]
3265
- }
3266
- },
3267
- {
3268
- method: "POST",
3269
- path: "/content-manager/actions/get-non-localized-fields",
3270
- handler: "content-types.getNonLocalizedAttributes",
3271
- config: {
3272
- policies: ["admin::isAuthenticatedAdmin"]
3273
- }
3274
- }
3275
- ]
3276
- };
3277
- const contentApi = {
3278
- type: "content-api",
3279
- routes: [
3280
- {
3281
- method: "GET",
3282
- path: "/locales",
3283
- handler: "locales.listLocales"
3284
- }
3285
- ]
3286
- };
3287
- const routes = {
3288
- admin,
3289
- "content-api": contentApi
3290
- };
3291
- const allowedLocaleCodes = isoLocales.map(prop("code"));
3292
- const createLocaleSchema = yup.object().shape({
3293
- name: yup.string().max(50).nullable(),
3294
- code: yup.string().oneOf(allowedLocaleCodes).required(),
3295
- isDefault: yup.boolean().required()
3296
- }).noUnknown();
3297
- const updateLocaleSchema = yup.object().shape({
3298
- name: yup.string().min(1).max(50).nullable(),
3299
- isDefault: yup.boolean()
3300
- }).noUnknown();
3301
- const validateCreateLocaleInput = validateYupSchema(createLocaleSchema);
3302
- const validateUpdateLocaleInput = validateYupSchema(updateLocaleSchema);
3303
- const formatLocale = (locale2) => {
3304
- return {
3305
- ...locale2,
3306
- name: locale2.name || null
3307
- };
3308
- };
3309
- const { setCreatorFields } = utils;
3310
- const { ApplicationError: ApplicationError$1 } = utils.errors;
3311
- const sanitizeLocale = (locale2) => {
3312
- const model = strapi.getModel("plugin::i18n.locale");
3313
- return strapi.contentAPI.sanitize.output(locale2, model);
3314
- };
3315
- const controller$2 = {
3316
- async listLocales(ctx) {
3317
- const localesService = getService("locales");
3318
- const locales2 = await localesService.find();
3319
- const sanitizedLocales = await sanitizeLocale(locales2);
3320
- ctx.body = await localesService.setIsDefault(sanitizedLocales);
3321
- },
3322
- async createLocale(ctx) {
3323
- const { user } = ctx.state;
3324
- const body = ctx.request.body;
3325
- const { isDefault, ...localeToCreate } = body;
3326
- await validateCreateLocaleInput(body);
3327
- const localesService = getService("locales");
3328
- const existingLocale = await localesService.findByCode(body.code);
3329
- if (existingLocale) {
3330
- throw new ApplicationError$1("This locale already exists");
3331
- }
3332
- const localeToPersist = setCreatorFields({ user })(formatLocale(localeToCreate));
3333
- const locale2 = await localesService.create(localeToPersist);
3334
- if (isDefault) {
3335
- await localesService.setDefaultLocale(locale2);
3336
- }
3337
- const sanitizedLocale = await sanitizeLocale(locale2);
3338
- ctx.body = await localesService.setIsDefault(sanitizedLocale);
3339
- },
3340
- async updateLocale(ctx) {
3341
- const { user } = ctx.state;
3342
- const { id } = ctx.params;
3343
- const body = ctx.request.body;
3344
- const { isDefault, ...updates } = body;
3345
- await validateUpdateLocaleInput(body);
3346
- const localesService = getService("locales");
3347
- const existingLocale = await localesService.findById(id);
3348
- if (!existingLocale) {
3349
- return ctx.notFound("locale.notFound");
3350
- }
3351
- const allowedParams = ["name"];
3352
- const cleanUpdates = setCreatorFields({ user, isEdition: true })(pick(allowedParams, updates));
3353
- const updatedLocale = await localesService.update({ id }, cleanUpdates);
3354
- if (isDefault) {
3355
- await localesService.setDefaultLocale(updatedLocale);
3356
- }
3357
- const sanitizedLocale = await sanitizeLocale(updatedLocale);
3358
- ctx.body = await localesService.setIsDefault(sanitizedLocale);
3359
- },
3360
- async deleteLocale(ctx) {
3361
- const { id } = ctx.params;
3362
- const localesService = getService("locales");
3363
- const existingLocale = await localesService.findById(id);
3364
- if (!existingLocale) {
3365
- return ctx.notFound("locale.notFound");
3366
- }
3367
- const defaultLocaleCode = await localesService.getDefaultLocale();
3368
- if (existingLocale.code === defaultLocaleCode) {
3369
- throw new ApplicationError$1("Cannot delete the default locale");
3370
- }
3371
- await localesService.delete({ id });
3372
- const sanitizedLocale = await sanitizeLocale(existingLocale);
3373
- ctx.body = await localesService.setIsDefault(sanitizedLocale);
3374
- }
3375
- };
3376
- const validateGetNonLocalizedAttributesSchema = yup.object().shape({
3377
- model: yup.string().required(),
3378
- id: yup.mixed().when("model", {
3379
- is: (model) => get("kind", strapi.contentType(model)) === "singleType",
3380
- then: yup.strapiID().nullable(),
3381
- otherwise: yup.strapiID().required()
3382
- }),
3383
- locale: yup.string().required()
3384
- }).noUnknown().required();
3385
- const validateGetNonLocalizedAttributesInput = validateYupSchema(
3386
- validateGetNonLocalizedAttributesSchema
3387
- );
3388
- const { ApplicationError } = errors;
3389
- const { PUBLISHED_AT_ATTRIBUTE } = contentTypes$2.constants;
3390
- const getLocalesProperty = getOr([], "properties.locales");
3391
- const getFieldsProperty = prop("properties.fields");
3392
- const getFirstLevelPath = map((path) => path.split(".")[0]);
3393
- const controller$1 = {
3394
- async getNonLocalizedAttributes(ctx) {
3395
- const { user } = ctx.state;
3396
- const body = ctx.request.body;
3397
- const { model, id, locale: locale2 } = body;
3398
- await validateGetNonLocalizedAttributesInput({ model, id, locale: locale2 });
3399
- const {
3400
- copyNonLocalizedAttributes: copyNonLocalizedAttributes2,
3401
- isLocalizedContentType: isLocalizedContentType2,
3402
- getNestedPopulateOfNonLocalizedAttributes: getNestedPopulateOfNonLocalizedAttributes2
3403
- } = getService("content-types");
3404
- const {
3405
- default: { READ_ACTION, CREATE_ACTION }
3406
- } = strapi.service("admin::constants");
3407
- const modelDef = strapi.contentType(model);
3408
- const attributesToPopulate = getNestedPopulateOfNonLocalizedAttributes2(model);
3409
- if (!isLocalizedContentType2(modelDef)) {
3410
- throw new ApplicationError(`Model ${model} is not localized`);
3411
- }
3412
- const params = modelDef.kind === "singleType" ? {} : { id };
3413
- const entity = await strapi.db.query(model).findOne({ where: params, populate: attributesToPopulate });
3414
- if (!entity) {
3415
- return ctx.notFound();
3416
- }
3417
- const permissions2 = await strapi.admin.services.permission.findMany({
3418
- where: {
3419
- action: [READ_ACTION, CREATE_ACTION],
3420
- subject: model,
3421
- role: {
3422
- id: user.roles.map(prop("id"))
3423
- }
3424
- }
3425
- });
3426
- const localePermissions = permissions2.filter((perm) => getLocalesProperty(perm).includes(locale2)).map(getFieldsProperty);
3427
- const permittedFields = pipe(flatten, getFirstLevelPath, uniq)(localePermissions);
3428
- const nonLocalizedFields = copyNonLocalizedAttributes2(modelDef, entity);
3429
- const sanitizedNonLocalizedFields = pick(permittedFields, nonLocalizedFields);
3430
- const availableLocalesResult = await strapi.plugins["content-manager"].service("document-metadata").getMetadata(model, entity, {
3431
- availableLocales: true
3432
- });
3433
- const availableLocales = availableLocalesResult.availableLocales.map(
3434
- (localeResult) => pick(["id", "locale", PUBLISHED_AT_ATTRIBUTE], localeResult)
3435
- );
3436
- ctx.body = {
3437
- nonLocalizedFields: sanitizedNonLocalizedFields,
3438
- localizations: availableLocales.concat(
3439
- pick(["id", "locale", PUBLISHED_AT_ATTRIBUTE], entity)
3440
- )
3441
- };
3442
- }
3443
- };
3444
- const controller = {
3445
- listIsoLocales(ctx) {
3446
- const isoLocalesService2 = getService("iso-locales");
3447
- ctx.body = isoLocalesService2.getIsoLocales();
3448
- }
3449
- };
3450
- const controllers = {
3451
- locales: controller$2,
3452
- "iso-locales": controller,
3453
- "content-types": controller$1
3454
- };
3455
- const index = () => ({
3456
- register,
3457
- bootstrap,
3458
- routes,
3459
- controllers,
3460
- contentTypes: contentTypes$1,
3461
- services
3462
- });
3463
- export {
3464
- index as default
3465
- };
1
+ import bootstrap from './bootstrap.mjs';
2
+ import register from './register.mjs';
3
+ import contentTypes from './content-types/index.mjs';
4
+ import services from './services/index.mjs';
5
+ import routes from './routes/index.mjs';
6
+ import controllers from './controllers/index.mjs';
7
+
8
+ var index = (()=>({
9
+ register,
10
+ bootstrap,
11
+ routes,
12
+ controllers,
13
+ contentTypes,
14
+ services
15
+ }));
16
+
17
+ export { index as default };
3466
18
  //# sourceMappingURL=index.mjs.map