@strapi/i18n 0.0.0-experimental.5a34dd1236f692f16e40784fcca5c11e0e55dc5a → 0.0.0-experimental.5a4d501fa348721471ac552dcecac1b0c8146ae7

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