@strapi/i18n 0.0.0-experimental.c222e1c4de12dd05c26938a605a1128fb3481d1d → 0.0.0-experimental.c23f51fc41b3ef5de081f427d07e87af93cdcb2c

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