@strapi/i18n 0.0.0-experimental.30e5d19d03d07d2b73ac7ed4b376a833d4270bde → 0.0.0-experimental.30fcd2850fb6535b4990881d519998998db74e4f

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