@justanarthur/payload-plugin-translator 1.3.6

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 (124) hide show
  1. package/README.md +215 -0
  2. package/dist/client/api/index.d.ts +8 -0
  3. package/dist/client/api/index.d.ts.map +1 -0
  4. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts +5 -0
  5. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts.map +1 -0
  6. package/dist/client/components/CustomButton/index.d.ts +3 -0
  7. package/dist/client/components/CustomButton/index.d.ts.map +1 -0
  8. package/dist/client/components/CustomButton/styles.scss +5 -0
  9. package/dist/client/components/LocaleLabel/LocaleLabel.d.ts +5 -0
  10. package/dist/client/components/LocaleLabel/LocaleLabel.d.ts.map +1 -0
  11. package/dist/client/components/LocaleLabel/index.d.ts +2 -0
  12. package/dist/client/components/LocaleLabel/index.d.ts.map +1 -0
  13. package/dist/client/components/ResolverButton/ResolverButton.d.ts +5 -0
  14. package/dist/client/components/ResolverButton/ResolverButton.d.ts.map +1 -0
  15. package/dist/client/components/ResolverButton/index.d.ts +2 -0
  16. package/dist/client/components/ResolverButton/index.d.ts.map +1 -0
  17. package/dist/client/components/TranslatorModal/Content.d.ts +2 -0
  18. package/dist/client/components/TranslatorModal/Content.d.ts.map +1 -0
  19. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts +3 -0
  20. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts.map +1 -0
  21. package/dist/client/components/TranslatorModal/index.d.ts +2 -0
  22. package/dist/client/components/TranslatorModal/index.d.ts.map +1 -0
  23. package/dist/client/components/TranslatorModal/styles.scss +76 -0
  24. package/dist/client/providers/Translator/TranslatorProvider.d.ts +5 -0
  25. package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +1 -0
  26. package/dist/client/providers/Translator/context.d.ts +21 -0
  27. package/dist/client/providers/Translator/context.d.ts.map +1 -0
  28. package/dist/exports/client.d.ts +2 -0
  29. package/dist/exports/client.d.ts.map +1 -0
  30. package/dist/i18n-translations.d.ts +87 -0
  31. package/dist/i18n-translations.d.ts.map +1 -0
  32. package/dist/index.d.ts +11 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/resolvers/copy.d.ts +3 -0
  35. package/dist/resolvers/copy.d.ts.map +1 -0
  36. package/dist/resolvers/google.d.ts +11 -0
  37. package/dist/resolvers/google.d.ts.map +1 -0
  38. package/dist/resolvers/libreTranslate.d.ts +16 -0
  39. package/dist/resolvers/libreTranslate.d.ts.map +1 -0
  40. package/dist/resolvers/openAI.d.ts +22 -0
  41. package/dist/resolvers/openAI.d.ts.map +1 -0
  42. package/dist/resolvers/types.d.ts +20 -0
  43. package/dist/resolvers/types.d.ts.map +1 -0
  44. package/dist/src/client/api/index.js +28 -0
  45. package/dist/src/client/api/index.js.map +1 -0
  46. package/dist/src/client/components/CustomButton/CustomButtonWithTranslator.js +28 -0
  47. package/dist/src/client/components/CustomButton/CustomButtonWithTranslator.js.map +1 -0
  48. package/dist/src/client/components/CustomButton/index.js +10 -0
  49. package/dist/src/client/components/CustomButton/index.js.map +1 -0
  50. package/dist/src/client/components/LocaleLabel/LocaleLabel.js +28 -0
  51. package/dist/src/client/components/LocaleLabel/LocaleLabel.js.map +1 -0
  52. package/dist/src/client/components/LocaleLabel/index.js +3 -0
  53. package/dist/src/client/components/LocaleLabel/index.js.map +1 -0
  54. package/dist/src/client/components/ResolverButton/ResolverButton.js +16 -0
  55. package/dist/src/client/components/ResolverButton/ResolverButton.js.map +1 -0
  56. package/dist/src/client/components/ResolverButton/index.js +3 -0
  57. package/dist/src/client/components/ResolverButton/index.js.map +1 -0
  58. package/dist/src/client/components/TranslatorModal/Content.js +60 -0
  59. package/dist/src/client/components/TranslatorModal/Content.js.map +1 -0
  60. package/dist/src/client/components/TranslatorModal/TranslatorModal.js +26 -0
  61. package/dist/src/client/components/TranslatorModal/TranslatorModal.js.map +1 -0
  62. package/dist/src/client/components/TranslatorModal/index.js +3 -0
  63. package/dist/src/client/components/TranslatorModal/index.js.map +1 -0
  64. package/dist/src/client/providers/Translator/TranslatorProvider.js +109 -0
  65. package/dist/src/client/providers/Translator/TranslatorProvider.js.map +1 -0
  66. package/dist/src/client/providers/Translator/context.js +9 -0
  67. package/dist/src/client/providers/Translator/context.js.map +1 -0
  68. package/dist/src/exports/client.js +3 -0
  69. package/dist/src/exports/client.js.map +1 -0
  70. package/dist/src/i18n-translations.js +88 -0
  71. package/dist/src/i18n-translations.js.map +1 -0
  72. package/dist/src/index.js +87 -0
  73. package/dist/src/index.js.map +1 -0
  74. package/dist/src/resolvers/copy.js +14 -0
  75. package/dist/src/resolvers/copy.js.map +1 -0
  76. package/dist/src/resolvers/google.js +47 -0
  77. package/dist/src/resolvers/google.js.map +1 -0
  78. package/dist/src/resolvers/libreTranslate.js +48 -0
  79. package/dist/src/resolvers/libreTranslate.js.map +1 -0
  80. package/dist/src/resolvers/openAI.js +100 -0
  81. package/dist/src/resolvers/openAI.js.map +1 -0
  82. package/dist/src/resolvers/types.js +3 -0
  83. package/dist/src/resolvers/types.js.map +1 -0
  84. package/dist/src/translate/endpoint.js +23 -0
  85. package/dist/src/translate/endpoint.js.map +1 -0
  86. package/dist/src/translate/findEntityWithConfig.js +34 -0
  87. package/dist/src/translate/findEntityWithConfig.js.map +1 -0
  88. package/dist/src/translate/operation.js +76 -0
  89. package/dist/src/translate/operation.js.map +1 -0
  90. package/dist/src/translate/traverseFields.js +190 -0
  91. package/dist/src/translate/traverseFields.js.map +1 -0
  92. package/dist/src/translate/traverseRichText.js +17 -0
  93. package/dist/src/translate/traverseRichText.js.map +1 -0
  94. package/dist/src/translate/types.js +3 -0
  95. package/dist/src/translate/types.js.map +1 -0
  96. package/dist/src/translate/updateEntity.js +26 -0
  97. package/dist/src/translate/updateEntity.js.map +1 -0
  98. package/dist/src/types.js +3 -0
  99. package/dist/src/types.js.map +1 -0
  100. package/dist/src/utils/chunkArray.js +7 -0
  101. package/dist/src/utils/chunkArray.js.map +1 -0
  102. package/dist/src/utils/isEmpty.js +8 -0
  103. package/dist/src/utils/isEmpty.js.map +1 -0
  104. package/dist/translate/endpoint.d.ts +3 -0
  105. package/dist/translate/endpoint.d.ts.map +1 -0
  106. package/dist/translate/findEntityWithConfig.d.ts +15 -0
  107. package/dist/translate/findEntityWithConfig.d.ts.map +1 -0
  108. package/dist/translate/operation.d.ts +9 -0
  109. package/dist/translate/operation.d.ts.map +1 -0
  110. package/dist/translate/traverseFields.d.ts +13 -0
  111. package/dist/translate/traverseFields.d.ts.map +1 -0
  112. package/dist/translate/traverseRichText.d.ts +6 -0
  113. package/dist/translate/traverseRichText.d.ts.map +1 -0
  114. package/dist/translate/types.d.ts +25 -0
  115. package/dist/translate/types.d.ts.map +1 -0
  116. package/dist/translate/updateEntity.d.ts +14 -0
  117. package/dist/translate/updateEntity.d.ts.map +1 -0
  118. package/dist/types.d.ts +21 -0
  119. package/dist/types.d.ts.map +1 -0
  120. package/dist/utils/chunkArray.d.ts +2 -0
  121. package/dist/utils/chunkArray.d.ts.map +1 -0
  122. package/dist/utils/isEmpty.d.ts +2 -0
  123. package/dist/utils/isEmpty.d.ts.map +1 -0
  124. package/package.json +89 -0
@@ -0,0 +1,28 @@
1
+ export const createClient = ({ api, serverURL })=>{
2
+ const translate = async (args)=>{
3
+ try {
4
+ const response = await fetch(`${serverURL}${api}/translator/translate`, {
5
+ body: JSON.stringify(args),
6
+ credentials: 'include',
7
+ headers: {
8
+ 'Content-Type': 'application/json'
9
+ },
10
+ method: 'POST'
11
+ });
12
+ if (!response.ok) return {
13
+ success: false
14
+ };
15
+ return response.json();
16
+ } catch (e) {
17
+ if (e instanceof Error) console.error(e.message);
18
+ return {
19
+ success: false
20
+ };
21
+ }
22
+ };
23
+ return {
24
+ translate
25
+ };
26
+ };
27
+
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/client/api/index.ts"],"sourcesContent":["import type { TranslateEndpointArgs, TranslateResult } from '../../translate/types'\n\nexport const createClient = ({ api, serverURL }: { api: string; serverURL: string }) => {\n const translate = async (args: TranslateEndpointArgs): Promise<TranslateResult> => {\n try {\n const response = await fetch(`${serverURL}${api}/translator/translate`, {\n body: JSON.stringify(args),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) return { success: false }\n\n return response.json()\n } catch (e) {\n if (e instanceof Error) console.error(e.message)\n\n return { success: false }\n }\n }\n\n return {\n translate,\n }\n}\n"],"names":["createClient","api","serverURL","translate","args","response","fetch","body","JSON","stringify","credentials","headers","method","ok","success","json","e","Error","console","error","message"],"mappings":"AAEA,OAAO,MAAMA,eAAe,CAAC,EAAEC,GAAG,EAAEC,SAAS,EAAsC;IACjF,MAAMC,YAAY,OAAOC;QACvB,IAAI;YACF,MAAMC,WAAW,MAAMC,MAAM,GAAGJ,YAAYD,IAAI,qBAAqB,CAAC,EAAE;gBACtEM,MAAMC,KAAKC,SAAS,CAACL;gBACrBM,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAEA,IAAI,CAACP,SAASQ,EAAE,EAAE,OAAO;gBAAEC,SAAS;YAAM;YAE1C,OAAOT,SAASU,IAAI;QACtB,EAAE,OAAOC,GAAG;YACV,IAAIA,aAAaC,OAAOC,QAAQC,KAAK,CAACH,EAAEI,OAAO;YAE/C,OAAO;gBAAEN,SAAS;YAAM;QAC1B;IACF;IAEA,OAAO;QACLX;IACF;AACF,EAAC"}
@@ -0,0 +1,28 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import './styles.scss';
4
+ import { PublishButton, SaveButton, useConfig, useDocumentInfo } from '@payloadcms/ui';
5
+ import { TranslatorProvider } from '../../providers/Translator/TranslatorProvider';
6
+ import { ResolverButton } from '../ResolverButton';
7
+ import { TranslatorModal } from '../TranslatorModal';
8
+ export const CustomButtonWithTranslator = ({ type })=>{
9
+ const { config } = useConfig();
10
+ const DefaultButton = type === 'publish' ? PublishButton : SaveButton;
11
+ const { globalSlug, id } = useDocumentInfo();
12
+ const resolvers = config.admin?.custom?.translator?.resolvers ?? [];
13
+ if (!id && !globalSlug) return /*#__PURE__*/ _jsx(DefaultButton, {});
14
+ return /*#__PURE__*/ _jsx(TranslatorProvider, {
15
+ children: /*#__PURE__*/ _jsxs("div", {
16
+ className: 'translator__custom-save-button',
17
+ children: [
18
+ /*#__PURE__*/ _jsx(TranslatorModal, {}),
19
+ resolvers.map((resolver)=>/*#__PURE__*/ _jsx(ResolverButton, {
20
+ resolver: resolver
21
+ }, resolver.key)),
22
+ /*#__PURE__*/ _jsx(DefaultButton, {})
23
+ ]
24
+ })
25
+ });
26
+ };
27
+
28
+ //# sourceMappingURL=CustomButtonWithTranslator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/components/CustomButton/CustomButtonWithTranslator.tsx"],"sourcesContent":["'use client'\n\nimport './styles.scss'\n\nimport { PublishButton, SaveButton, useConfig, useDocumentInfo } from '@payloadcms/ui'\n\nimport type { TranslateResolver } from '../../../resolvers/types'\nimport { TranslatorProvider } from '../../providers/Translator/TranslatorProvider'\nimport { ResolverButton } from '../ResolverButton'\nimport { TranslatorModal } from '../TranslatorModal'\n\nexport const CustomButtonWithTranslator = ({ type }: { type: 'publish' | 'save' }) => {\n const { config } = useConfig()\n\n const DefaultButton = type === 'publish' ? PublishButton : SaveButton\n\n const { globalSlug, id } = useDocumentInfo()\n\n const resolvers = (config.admin?.custom?.translator?.resolvers as TranslateResolver[]) ?? []\n\n if (!id && !globalSlug) return <DefaultButton />\n\n return (\n <TranslatorProvider>\n <div className={'translator__custom-save-button'}>\n <TranslatorModal />\n {resolvers.map((resolver) => (\n <ResolverButton key={resolver.key} resolver={resolver} />\n ))}\n {<DefaultButton />}\n </div>\n </TranslatorProvider>\n )\n}\n"],"names":["PublishButton","SaveButton","useConfig","useDocumentInfo","TranslatorProvider","ResolverButton","TranslatorModal","CustomButtonWithTranslator","type","config","DefaultButton","globalSlug","id","resolvers","admin","custom","translator","div","className","map","resolver","key"],"mappings":"AAAA;;AAEA,OAAO,gBAAe;AAEtB,SAASA,aAAa,EAAEC,UAAU,EAAEC,SAAS,EAAEC,eAAe,QAAQ,iBAAgB;AAGtF,SAASC,kBAAkB,QAAQ,gDAA+C;AAClF,SAASC,cAAc,QAAQ,oBAAmB;AAClD,SAASC,eAAe,QAAQ,qBAAoB;AAEpD,OAAO,MAAMC,6BAA6B,CAAC,EAAEC,IAAI,EAAgC;IAC/E,MAAM,EAAEC,MAAM,EAAE,GAAGP;IAEnB,MAAMQ,gBAAgBF,SAAS,YAAYR,gBAAgBC;IAE3D,MAAM,EAAEU,UAAU,EAAEC,EAAE,EAAE,GAAGT;IAE3B,MAAMU,YAAY,AAACJ,OAAOK,KAAK,EAAEC,QAAQC,YAAYH,aAAqC,EAAE;IAE5F,IAAI,CAACD,MAAM,CAACD,YAAY,qBAAO,KAACD;IAEhC,qBACE,KAACN;kBACC,cAAA,MAACa;YAAIC,WAAW;;8BACd,KAACZ;gBACAO,UAAUM,GAAG,CAAC,CAACC,yBACd,KAACf;wBAAkCe,UAAUA;uBAAxBA,SAASC,GAAG;8BAElC,KAACX;;;;AAIV,EAAC"}
@@ -0,0 +1,10 @@
1
+ export const CustomButton = (type)=>{
2
+ return {
3
+ clientProps: {
4
+ type
5
+ },
6
+ path: '@payload-starter/translator/client#CustomButtonWithTranslator'
7
+ };
8
+ };
9
+
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/components/CustomButton/index.tsx"],"sourcesContent":["import type { CustomPublishButton, CustomSaveButton } from 'payload'\n\nexport const CustomButton = (type: 'publish' | 'save'): CustomPublishButton | CustomSaveButton => {\n return {\n clientProps: {\n type,\n },\n path: '@payload-starter/translator/client#CustomButtonWithTranslator',\n }\n}\n"],"names":["CustomButton","type","clientProps","path"],"mappings":"AAEA,OAAO,MAAMA,eAAe,CAACC;IAC3B,OAAO;QACLC,aAAa;YACXD;QACF;QACAE,MAAM;IACR;AACF,EAAC"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getTranslation } from '@payloadcms/translations';
3
+ import { ChevronIcon, useTranslation } from '@payloadcms/ui';
4
+ const baseClass = 'localizer-button';
5
+ export const LocaleLabel = ({ locale })=>{
6
+ const { i18n, t } = useTranslation();
7
+ return /*#__PURE__*/ _jsxs("div", {
8
+ "aria-label": t('general:locale'),
9
+ className: baseClass,
10
+ children: [
11
+ /*#__PURE__*/ _jsx("div", {
12
+ className: `${baseClass}__label`,
13
+ children: `${t('general:locale')}:`
14
+ }),
15
+ "  ",
16
+ /*#__PURE__*/ _jsx("span", {
17
+ className: `${baseClass}__current-label`,
18
+ children: `${getTranslation(locale.label, i18n)}`
19
+ }),
20
+ " ",
21
+ /*#__PURE__*/ _jsx(ChevronIcon, {
22
+ className: `${baseClass}__chevron`
23
+ })
24
+ ]
25
+ });
26
+ };
27
+
28
+ //# sourceMappingURL=LocaleLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/components/LocaleLabel/LocaleLabel.tsx"],"sourcesContent":["import { getTranslation } from '@payloadcms/translations'\nimport { ChevronIcon, useTranslation } from '@payloadcms/ui'\nimport type { Locale } from 'payload'\n\nconst baseClass = 'localizer-button'\n\nexport const LocaleLabel = ({ locale }: { locale: Locale }) => {\n const { i18n, t } = useTranslation()\n\n return (\n <div aria-label={t('general:locale')} className={baseClass}>\n <div className={`${baseClass}__label`}>{`${t('general:locale')}:`}</div>\n &nbsp;&nbsp;\n <span className={`${baseClass}__current-label`}>\n {`${getTranslation(locale.label, i18n)}`}\n </span>\n &nbsp;\n <ChevronIcon className={`${baseClass}__chevron`} />\n </div>\n )\n}\n"],"names":["getTranslation","ChevronIcon","useTranslation","baseClass","LocaleLabel","locale","i18n","t","div","aria-label","className","span","label"],"mappings":";AAAA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,SAASC,WAAW,EAAEC,cAAc,QAAQ,iBAAgB;AAG5D,MAAMC,YAAY;AAElB,OAAO,MAAMC,cAAc,CAAC,EAAEC,MAAM,EAAsB;IACxD,MAAM,EAAEC,IAAI,EAAEC,CAAC,EAAE,GAAGL;IAEpB,qBACE,MAACM;QAAIC,cAAYF,EAAE;QAAmBG,WAAWP;;0BAC/C,KAACK;gBAAIE,WAAW,GAAGP,UAAU,OAAO,CAAC;0BAAG,GAAGI,EAAE,kBAAkB,CAAC,CAAC;;YAAO;0BAExE,KAACI;gBAAKD,WAAW,GAAGP,UAAU,eAAe,CAAC;0BAC3C,GAAGH,eAAeK,OAAOO,KAAK,EAAEN,OAAO;;YACnC;0BAEP,KAACL;gBAAYS,WAAW,GAAGP,UAAU,SAAS,CAAC;;;;AAGrD,EAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './LocaleLabel';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/components/LocaleLabel/index.ts"],"sourcesContent":["export * from './LocaleLabel'\n"],"names":[],"mappings":"AAAA,cAAc,gBAAe"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button, useTranslation } from '@payloadcms/ui';
3
+ import { useTranslator } from '../../providers/Translator/context';
4
+ export const ResolverButton = ({ resolver: { key: resolverKey } })=>{
5
+ const { openTranslator } = useTranslator();
6
+ const { t } = useTranslation();
7
+ const handleClick = ()=>openTranslator({
8
+ resolverKey
9
+ });
10
+ return /*#__PURE__*/ _jsx(Button, {
11
+ onClick: handleClick,
12
+ children: t(`plugin-translator:resolver_${resolverKey}_buttonLabel`)
13
+ });
14
+ };
15
+
16
+ //# sourceMappingURL=ResolverButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/components/ResolverButton/ResolverButton.tsx"],"sourcesContent":["import { Button, useTranslation } from '@payloadcms/ui'\n\nimport type { TranslateResolver } from '../../../resolvers/types'\nimport { useTranslator } from '../../providers/Translator/context'\n\nexport const ResolverButton = ({\n resolver: { key: resolverKey },\n}: {\n resolver: TranslateResolver\n}) => {\n const { openTranslator } = useTranslator()\n\n const { t } = useTranslation()\n\n const handleClick = () => openTranslator({ resolverKey })\n\n return (\n <Button onClick={handleClick}>\n {t(`plugin-translator:resolver_${resolverKey}_buttonLabel` as Parameters<typeof t>[0])}\n </Button>\n )\n}\n"],"names":["Button","useTranslation","useTranslator","ResolverButton","resolver","key","resolverKey","openTranslator","t","handleClick","onClick"],"mappings":";AAAA,SAASA,MAAM,EAAEC,cAAc,QAAQ,iBAAgB;AAGvD,SAASC,aAAa,QAAQ,qCAAoC;AAElE,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,UAAU,EAAEC,KAAKC,WAAW,EAAE,EAG/B;IACC,MAAM,EAAEC,cAAc,EAAE,GAAGL;IAE3B,MAAM,EAAEM,CAAC,EAAE,GAAGP;IAEd,MAAMQ,cAAc,IAAMF,eAAe;YAAED;QAAY;IAEvD,qBACE,KAACN;QAAOU,SAASD;kBACdD,EAAE,CAAC,2BAA2B,EAAEF,YAAY,YAAY,CAAC;;AAGhE,EAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './ResolverButton';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/components/ResolverButton/index.ts"],"sourcesContent":["export * from './ResolverButton'\n"],"names":[],"mappings":"AAAA,cAAc,mBAAkB"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getTranslation } from '@payloadcms/translations';
3
+ import { Button, Popup, PopupList, useTranslation } from '@payloadcms/ui';
4
+ import { useTranslator } from '../../providers/Translator/context';
5
+ import { LocaleLabel } from '../LocaleLabel';
6
+ export const Content = ()=>{
7
+ const { localeToTranslateFrom: localeCodeToTranslateFrom, localesOptions, resolverT, setLocaleToTranslateFrom, submit } = useTranslator();
8
+ const { i18n } = useTranslation();
9
+ const localeToTranslateFrom = localesOptions.find((each)=>each.code === localeCodeToTranslateFrom);
10
+ return /*#__PURE__*/ _jsxs("div", {
11
+ className: 'translator__content',
12
+ children: [
13
+ /*#__PURE__*/ _jsx("h2", {
14
+ children: resolverT('modalTitle')
15
+ }),
16
+ localeToTranslateFrom && /*#__PURE__*/ _jsx(Popup, {
17
+ button: /*#__PURE__*/ _jsx(LocaleLabel, {
18
+ locale: localeToTranslateFrom
19
+ }),
20
+ horizontalAlign: "center",
21
+ render: ({ close })=>/*#__PURE__*/ _jsx(PopupList.ButtonGroup, {
22
+ children: localesOptions.map((option)=>{
23
+ const label = getTranslation(option.label, i18n);
24
+ return /*#__PURE__*/ _jsxs(PopupList.Button, {
25
+ active: option.code === localeCodeToTranslateFrom,
26
+ onClick: ()=>{
27
+ setLocaleToTranslateFrom(option.code);
28
+ close();
29
+ },
30
+ children: [
31
+ label,
32
+ label !== option.code && ` (${option.code})`
33
+ ]
34
+ }, option.code);
35
+ })
36
+ }),
37
+ verticalAlign: "bottom"
38
+ }),
39
+ /*#__PURE__*/ _jsxs("div", {
40
+ className: 'translator__buttons',
41
+ children: [
42
+ /*#__PURE__*/ _jsx(Button, {
43
+ onClick: ()=>submit({
44
+ emptyOnly: false
45
+ }),
46
+ children: resolverT('submitButtonLabelFull')
47
+ }),
48
+ /*#__PURE__*/ _jsx(Button, {
49
+ onClick: ()=>submit({
50
+ emptyOnly: true
51
+ }),
52
+ children: resolverT('submitButtonLabelEmpty')
53
+ })
54
+ ]
55
+ })
56
+ ]
57
+ });
58
+ };
59
+
60
+ //# sourceMappingURL=Content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/components/TranslatorModal/Content.tsx"],"sourcesContent":["import { getTranslation } from '@payloadcms/translations'\nimport { Button, Popup, PopupList, useTranslation } from '@payloadcms/ui'\n\nimport { useTranslator } from '../../providers/Translator/context'\nimport { LocaleLabel } from '../LocaleLabel'\n\nexport const Content = () => {\n const {\n localeToTranslateFrom: localeCodeToTranslateFrom,\n localesOptions,\n resolverT,\n setLocaleToTranslateFrom,\n submit,\n } = useTranslator()\n\n const { i18n } = useTranslation()\n\n const localeToTranslateFrom = localesOptions.find(\n (each) => each.code === localeCodeToTranslateFrom,\n )\n\n return (\n <div className={'translator__content'}>\n <h2>{resolverT('modalTitle')}</h2>\n {localeToTranslateFrom && (\n <Popup\n button={<LocaleLabel locale={localeToTranslateFrom} />}\n horizontalAlign=\"center\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {localesOptions.map((option) => {\n const label = getTranslation(option.label, i18n)\n\n return (\n <PopupList.Button\n active={option.code === localeCodeToTranslateFrom}\n key={option.code}\n onClick={() => {\n setLocaleToTranslateFrom(option.code)\n close()\n }}\n >\n {label}\n {label !== option.code && ` (${option.code})`}\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n verticalAlign=\"bottom\"\n />\n )}\n <div className={'translator__buttons'}>\n <Button onClick={() => submit({ emptyOnly: false })}>\n {resolverT('submitButtonLabelFull')}\n </Button>\n <Button onClick={() => submit({ emptyOnly: true })}>\n {resolverT('submitButtonLabelEmpty')}\n </Button>\n </div>\n </div>\n )\n}\n"],"names":["getTranslation","Button","Popup","PopupList","useTranslation","useTranslator","LocaleLabel","Content","localeToTranslateFrom","localeCodeToTranslateFrom","localesOptions","resolverT","setLocaleToTranslateFrom","submit","i18n","find","each","code","div","className","h2","button","locale","horizontalAlign","render","close","ButtonGroup","map","option","label","active","onClick","verticalAlign","emptyOnly"],"mappings":";AAAA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,SAASC,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,cAAc,QAAQ,iBAAgB;AAEzE,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,WAAW,QAAQ,iBAAgB;AAE5C,OAAO,MAAMC,UAAU;IACrB,MAAM,EACJC,uBAAuBC,yBAAyB,EAChDC,cAAc,EACdC,SAAS,EACTC,wBAAwB,EACxBC,MAAM,EACP,GAAGR;IAEJ,MAAM,EAAES,IAAI,EAAE,GAAGV;IAEjB,MAAMI,wBAAwBE,eAAeK,IAAI,CAC/C,CAACC,OAASA,KAAKC,IAAI,KAAKR;IAG1B,qBACE,MAACS;QAAIC,WAAW;;0BACd,KAACC;0BAAIT,UAAU;;YACdH,uCACC,KAACN;gBACCmB,sBAAQ,KAACf;oBAAYgB,QAAQd;;gBAC7Be,iBAAgB;gBAChBC,QAAQ,CAAC,EAAEC,KAAK,EAAE,iBAChB,KAACtB,UAAUuB,WAAW;kCACnBhB,eAAeiB,GAAG,CAAC,CAACC;4BACnB,MAAMC,QAAQ7B,eAAe4B,OAAOC,KAAK,EAAEf;4BAE3C,qBACE,MAACX,UAAUF,MAAM;gCACf6B,QAAQF,OAAOX,IAAI,KAAKR;gCAExBsB,SAAS;oCACPnB,yBAAyBgB,OAAOX,IAAI;oCACpCQ;gCACF;;oCAECI;oCACAA,UAAUD,OAAOX,IAAI,IAAI,CAAC,EAAE,EAAEW,OAAOX,IAAI,CAAC,CAAC,CAAC;;+BAPxCW,OAAOX,IAAI;wBAUtB;;gBAGJe,eAAc;;0BAGlB,MAACd;gBAAIC,WAAW;;kCACd,KAAClB;wBAAO8B,SAAS,IAAMlB,OAAO;gCAAEoB,WAAW;4BAAM;kCAC9CtB,UAAU;;kCAEb,KAACV;wBAAO8B,SAAS,IAAMlB,OAAO;gCAAEoB,WAAW;4BAAK;kCAC7CtB,UAAU;;;;;;AAKrB,EAAC"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './styles.scss';
3
+ import { Modal } from '@payloadcms/ui';
4
+ import { useTranslator } from '../../providers/Translator/context';
5
+ import { Content } from './Content';
6
+ export const TranslatorModal = ()=>{
7
+ const { closeTranslator, modalSlug, resolver } = useTranslator();
8
+ if (!resolver) return;
9
+ return /*#__PURE__*/ _jsx(Modal, {
10
+ className: 'translator__modal',
11
+ slug: modalSlug,
12
+ children: /*#__PURE__*/ _jsxs("div", {
13
+ className: 'translator__wrapper',
14
+ children: [
15
+ /*#__PURE__*/ _jsx("button", {
16
+ "aria-label": "Close",
17
+ className: 'translator__close',
18
+ onClick: closeTranslator
19
+ }),
20
+ /*#__PURE__*/ _jsx(Content, {})
21
+ ]
22
+ })
23
+ });
24
+ };
25
+
26
+ //# sourceMappingURL=TranslatorModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/components/TranslatorModal/TranslatorModal.tsx"],"sourcesContent":["import './styles.scss'\n\nimport { Modal } from '@payloadcms/ui'\n\nimport { useTranslator } from '../../providers/Translator/context'\nimport { Content } from './Content'\n\nexport const TranslatorModal = () => {\n const { closeTranslator, modalSlug, resolver } = useTranslator()\n\n if (!resolver) return\n\n return (\n <Modal className={'translator__modal'} slug={modalSlug}>\n <div className={'translator__wrapper'}>\n <button aria-label=\"Close\" className={'translator__close'} onClick={closeTranslator} />\n <Content />\n </div>\n </Modal>\n )\n}\n"],"names":["Modal","useTranslator","Content","TranslatorModal","closeTranslator","modalSlug","resolver","className","slug","div","button","aria-label","onClick"],"mappings":";AAAA,OAAO,gBAAe;AAEtB,SAASA,KAAK,QAAQ,iBAAgB;AAEtC,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,OAAO,QAAQ,YAAW;AAEnC,OAAO,MAAMC,kBAAkB;IAC7B,MAAM,EAAEC,eAAe,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGL;IAEjD,IAAI,CAACK,UAAU;IAEf,qBACE,KAACN;QAAMO,WAAW;QAAqBC,MAAMH;kBAC3C,cAAA,MAACI;YAAIF,WAAW;;8BACd,KAACG;oBAAOC,cAAW;oBAAQJ,WAAW;oBAAqBK,SAASR;;8BACpE,KAACF;;;;AAIT,EAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './TranslatorModal';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/components/TranslatorModal/index.ts"],"sourcesContent":["export * from './TranslatorModal'\n"],"names":[],"mappings":"AAAA,cAAc,oBAAmB"}
@@ -0,0 +1,109 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { toast, useAllFormFields, useConfig, useDocumentInfo, useForm, useLocale, useModal, useServerFunctions, useTranslation } from '@payloadcms/ui';
3
+ import { reduceFieldsToValues } from 'payload/shared';
4
+ import { useEffect, useMemo, useState } from 'react';
5
+ import { createClient } from '../../api';
6
+ import { TranslatorContext } from './context';
7
+ const modalSlug = 'translator-modal';
8
+ export const TranslatorProvider = ({ children })=>{
9
+ const [resolver, setResolver] = useState(null);
10
+ const [data, dispatch] = useAllFormFields();
11
+ const { getFormState } = useServerFunctions();
12
+ const { collectionSlug, getDocPreferences, globalSlug, id } = useDocumentInfo();
13
+ const { setModified } = useForm();
14
+ const modal = useModal();
15
+ const { t } = useTranslation();
16
+ const resolverT = (key)=>{
17
+ if (!resolver) return '';
18
+ return t(`plugin-translator:resolver_${resolver}_${key}`);
19
+ };
20
+ const locale = useLocale();
21
+ const { config: { admin: { custom }, localization, routes: { api }, serverURL } } = useConfig();
22
+ const apiClient = createClient({
23
+ api,
24
+ serverURL
25
+ });
26
+ const resolverConfig = useMemo(()=>{
27
+ if (!resolver) return null;
28
+ const resolvers = custom?.translator?.resolvers || undefined;
29
+ if (!resolvers) return null;
30
+ const resolverConfig = resolvers.find((each)=>each.key === resolver);
31
+ return resolverConfig ?? null;
32
+ }, [
33
+ custom,
34
+ resolver
35
+ ]);
36
+ if (!localization) throw new Error('Localization config is not provided and PluginTranslator is used');
37
+ const localesOptions = localization.locales.filter((each)=>each.code !== locale.code);
38
+ const [localeToTranslateFrom, setLocaleToTranslateFrom] = useState('');
39
+ useEffect(()=>{
40
+ const defaultFromOptions = localesOptions.find((each)=>localization.defaultLocale === each.code);
41
+ if (defaultFromOptions) setLocaleToTranslateFrom(defaultFromOptions.code);
42
+ setLocaleToTranslateFrom(localesOptions[0].code);
43
+ }, [
44
+ locale,
45
+ localesOptions,
46
+ localization.defaultLocale
47
+ ]);
48
+ const closeTranslator = ()=>modal.closeModal(modalSlug);
49
+ const submit = async ({ emptyOnly })=>{
50
+ if (!resolver) return;
51
+ const args = {
52
+ collectionSlug,
53
+ data: reduceFieldsToValues(data, true),
54
+ emptyOnly,
55
+ globalSlug,
56
+ id: id === null ? undefined : id,
57
+ locale: locale.code,
58
+ localeFrom: localeToTranslateFrom,
59
+ resolver
60
+ };
61
+ const result = await apiClient.translate(args);
62
+ if (!result.success) {
63
+ toast.error(resolverT('errorMessage'));
64
+ return;
65
+ }
66
+ const { state } = await getFormState({
67
+ collectionSlug,
68
+ data: result.translatedData,
69
+ docPermissions: {
70
+ fields: true,
71
+ update: true
72
+ },
73
+ docPreferences: await getDocPreferences(),
74
+ globalSlug,
75
+ locale: locale.code,
76
+ operation: 'update',
77
+ renderAllFields: true,
78
+ schemaPath: collectionSlug || globalSlug || ''
79
+ });
80
+ if (state) {
81
+ dispatch({
82
+ state,
83
+ type: 'REPLACE_STATE'
84
+ });
85
+ setModified(true);
86
+ toast.success(resolverT('successMessage'));
87
+ }
88
+ closeTranslator();
89
+ };
90
+ return /*#__PURE__*/ _jsx(TranslatorContext.Provider, {
91
+ value: {
92
+ closeTranslator,
93
+ localeToTranslateFrom,
94
+ localesOptions,
95
+ modalSlug,
96
+ openTranslator: ({ resolverKey })=>{
97
+ setResolver(resolverKey);
98
+ modal.openModal(modalSlug);
99
+ },
100
+ resolver: resolverConfig,
101
+ resolverT,
102
+ setLocaleToTranslateFrom,
103
+ submit
104
+ },
105
+ children: children
106
+ });
107
+ };
108
+
109
+ //# sourceMappingURL=TranslatorProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/providers/Translator/TranslatorProvider.tsx"],"sourcesContent":["import {\n toast,\n useAllFormFields,\n useConfig,\n useDocumentInfo,\n useForm,\n useLocale,\n useModal,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { reduceFieldsToValues } from 'payload/shared'\nimport { type ReactNode, useEffect, useMemo, useState } from 'react'\n\nimport type { TranslateResolver } from '../../../resolvers/types'\nimport type { TranslateArgs } from '../../../translate/types'\nimport { createClient } from '../../api'\nimport { TranslatorContext } from './context'\n\nconst modalSlug = 'translator-modal'\n\nexport const TranslatorProvider = ({ children }: { children: ReactNode }) => {\n const [resolver, setResolver] = useState<null | string>(null)\n\n const [data, dispatch] = useAllFormFields()\n\n const { getFormState } = useServerFunctions()\n\n const { collectionSlug, getDocPreferences, globalSlug, id } = useDocumentInfo()\n\n const { setModified } = useForm()\n\n const modal = useModal()\n\n const { t } = useTranslation()\n\n const resolverT = (\n key:\n | 'buttonLabel'\n | 'errorMessage'\n | 'modalTitle'\n | 'submitButtonLabelEmpty'\n | 'submitButtonLabelFull'\n | 'successMessage',\n ) => {\n if (!resolver) return ''\n\n return t(`plugin-translator:resolver_${resolver}_${key}` as Parameters<typeof t>[0])\n }\n\n const locale = useLocale()\n\n const {\n config: {\n admin: { custom },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const apiClient = createClient({ api, serverURL })\n\n const resolverConfig = useMemo(() => {\n if (!resolver) return null\n\n const resolvers = (custom?.translator?.resolvers as TranslateResolver[]) || undefined\n\n if (!resolvers) return null\n\n const resolverConfig = resolvers.find((each) => each.key === resolver)\n\n return resolverConfig ?? null\n }, [custom, resolver])\n\n if (!localization)\n throw new Error('Localization config is not provided and PluginTranslator is used')\n\n const localesOptions = localization.locales.filter((each) => each.code !== locale.code)\n\n const [localeToTranslateFrom, setLocaleToTranslateFrom] = useState<string>('')\n\n useEffect(() => {\n const defaultFromOptions = localesOptions.find(\n (each) => localization.defaultLocale === each.code,\n )\n\n if (defaultFromOptions) setLocaleToTranslateFrom(defaultFromOptions.code)\n setLocaleToTranslateFrom(localesOptions[0].code)\n }, [locale, localesOptions, localization.defaultLocale])\n\n const closeTranslator = () => modal.closeModal(modalSlug)\n\n const submit = async ({ emptyOnly }: { emptyOnly: boolean }) => {\n if (!resolver) return\n\n const args: TranslateArgs = {\n collectionSlug,\n data: reduceFieldsToValues(data, true),\n emptyOnly,\n globalSlug,\n id: id === null ? undefined : id,\n locale: locale.code,\n localeFrom: localeToTranslateFrom,\n resolver,\n }\n\n const result = await apiClient.translate(args)\n\n if (!result.success) {\n toast.error(resolverT('errorMessage'))\n\n return\n }\n\n const { state } = await getFormState({\n collectionSlug,\n data: result.translatedData,\n docPermissions: {\n fields: true,\n update: true,\n },\n docPreferences: await getDocPreferences(),\n globalSlug,\n locale: locale.code,\n operation: 'update',\n renderAllFields: true,\n schemaPath: collectionSlug || globalSlug || '',\n })\n\n if (state) {\n dispatch({\n state,\n type: 'REPLACE_STATE',\n })\n setModified(true)\n toast.success(resolverT('successMessage'))\n }\n closeTranslator()\n }\n\n return (\n <TranslatorContext.Provider\n value={{\n closeTranslator,\n localeToTranslateFrom,\n localesOptions,\n modalSlug,\n openTranslator: ({ resolverKey }) => {\n setResolver(resolverKey)\n modal.openModal(modalSlug)\n },\n resolver: resolverConfig,\n resolverT,\n setLocaleToTranslateFrom,\n submit,\n }}\n >\n {children}\n </TranslatorContext.Provider>\n )\n}\n"],"names":["toast","useAllFormFields","useConfig","useDocumentInfo","useForm","useLocale","useModal","useServerFunctions","useTranslation","reduceFieldsToValues","useEffect","useMemo","useState","createClient","TranslatorContext","modalSlug","TranslatorProvider","children","resolver","setResolver","data","dispatch","getFormState","collectionSlug","getDocPreferences","globalSlug","id","setModified","modal","t","resolverT","key","locale","config","admin","custom","localization","routes","api","serverURL","apiClient","resolverConfig","resolvers","translator","undefined","find","each","Error","localesOptions","locales","filter","code","localeToTranslateFrom","setLocaleToTranslateFrom","defaultFromOptions","defaultLocale","closeTranslator","closeModal","submit","emptyOnly","args","localeFrom","result","translate","success","error","state","translatedData","docPermissions","fields","update","docPreferences","operation","renderAllFields","schemaPath","type","Provider","value","openTranslator","resolverKey","openModal"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const TranslatorContext = createContext(null);
3
+ export const useTranslator = ()=>{
4
+ const context = useContext(TranslatorContext);
5
+ if (context === null) throw new Error('useTranslator must be used within TranslatorProvider');
6
+ return context;
7
+ };
8
+
9
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/providers/Translator/context.ts"],"sourcesContent":["import type { Locale } from 'payload'\nimport { createContext, useContext } from 'react'\n\nimport type { TranslateResolver } from '../../../resolvers/types'\n\ntype TranslatorContextData = {\n closeTranslator: () => void\n localeToTranslateFrom: string\n localesOptions: Locale[]\n modalSlug: string\n openTranslator: (args: { resolverKey: string }) => void\n resolver: TranslateResolver | null\n resolverT: (\n key:\n | 'buttonLabel'\n | 'errorMessage'\n | 'modalTitle'\n | 'submitButtonLabelEmpty'\n | 'submitButtonLabelFull'\n | 'successMessage',\n ) => string\n setLocaleToTranslateFrom: (code: string) => void\n submit: (args: { emptyOnly: boolean }) => Promise<void>\n}\n\nexport const TranslatorContext = createContext<TranslatorContextData | null>(null)\n\nexport const useTranslator = () => {\n const context = useContext(TranslatorContext)\n\n if (context === null) throw new Error('useTranslator must be used within TranslatorProvider')\n\n return context\n}\n"],"names":["createContext","useContext","TranslatorContext","useTranslator","context","Error"],"mappings":"AACA,SAASA,aAAa,EAAEC,UAAU,QAAQ,QAAO;AAwBjD,OAAO,MAAMC,oBAAoBF,cAA4C,MAAK;AAElF,OAAO,MAAMG,gBAAgB;IAC3B,MAAMC,UAAUH,WAAWC;IAE3B,IAAIE,YAAY,MAAM,MAAM,IAAIC,MAAM;IAEtC,OAAOD;AACT,EAAC"}
@@ -0,0 +1,3 @@
1
+ export { CustomButtonWithTranslator } from '../client/components/CustomButton/CustomButtonWithTranslator';
2
+
3
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/exports/client.ts"],"sourcesContent":["export { CustomButtonWithTranslator } from '../client/components/CustomButton/CustomButtonWithTranslator'\n"],"names":["CustomButtonWithTranslator"],"mappings":"AAAA,SAASA,0BAA0B,QAAQ,+DAA8D"}
@@ -0,0 +1,88 @@
1
+ export const translations = {
2
+ en: {
3
+ 'plugin-translator': {
4
+ resolver_copy_buttonLabel: 'Copy from other locale',
5
+ resolver_copy_errorMessage: 'An error occurred when trying to translate the data',
6
+ resolver_copy_modalTitle: 'Choose the locale to copy from',
7
+ resolver_copy_submitButtonLabelEmpty: 'Copy only empty fields',
8
+ resolver_copy_submitButtonLabelFull: 'Copy all',
9
+ resolver_copy_successMessage: 'Successfully copied. Press "Save" to apply the changes.',
10
+ resolver_google_buttonLabel: 'Google Translate',
11
+ resolver_google_errorMessage: 'An error occurred when trying to translate the data',
12
+ resolver_google_modalTitle: 'Choose the locale to translate from',
13
+ resolver_google_submitButtonLabelEmpty: 'Translate only empty fields',
14
+ resolver_google_submitButtonLabelFull: 'Translate all',
15
+ resolver_google_successMessage: 'Successfully translated. Press "Save" to apply the changes.',
16
+ resolver_libre_buttonLabel: 'Libre Translate',
17
+ resolver_libre_errorMessage: 'An error occurred when trying to translate the data',
18
+ resolver_libre_modalTitle: 'Choose the locale to translate from',
19
+ resolver_libre_submitButtonLabelEmpty: 'Translate only empty fields',
20
+ resolver_libre_submitButtonLabelFull: 'Translate all',
21
+ resolver_libre_successMessage: 'Successfully translated. Press "Save" to apply the changes.',
22
+ resolver_openai_buttonLabel: 'AI Translate',
23
+ resolver_openai_errorMessage: 'An error occurred when trying to translate the data',
24
+ resolver_openai_modalTitle: 'Choose the locale to translate from',
25
+ resolver_openai_submitButtonLabelEmpty: 'Translate only empty fields',
26
+ resolver_openai_submitButtonLabelFull: 'Translate all',
27
+ resolver_openai_successMessage: 'Successfully translated. Press "Save" to apply the changes.'
28
+ }
29
+ },
30
+ uk: {
31
+ 'plugin-translator': {
32
+ resolver_copy_buttonLabel: 'Копіювати з іншої локалі',
33
+ resolver_copy_errorMessage: 'Сталася помилка під час спроби перекладу даних',
34
+ resolver_copy_modalTitle: 'Виберіть локаль для копіювання',
35
+ resolver_copy_submitButtonLabelEmpty: 'Копіювати лише порожні поля',
36
+ resolver_copy_submitButtonLabelFull: 'Копіювати все',
37
+ resolver_copy_successMessage: 'Успішно скопійовано. Натисніть "Зберегти", щоб застосувати зміни.',
38
+ resolver_google_buttonLabel: 'Переклад Google',
39
+ resolver_google_errorMessage: 'Сталася помилка під час спроби перекладу даних',
40
+ resolver_google_modalTitle: 'Виберіть локаль для перекладу',
41
+ resolver_google_submitButtonLabelEmpty: 'Перекласти лише порожні поля',
42
+ resolver_google_submitButtonLabelFull: 'Перекласти все',
43
+ resolver_google_successMessage: 'Успішно перекладено. Натисніть "Зберегти", щоб застосувати зміни.',
44
+ resolver_libre_buttonLabel: 'Переклад Libre',
45
+ resolver_libre_errorMessage: 'Сталася помилка під час спроби перекладу даних',
46
+ resolver_libre_modalTitle: 'Виберіть локаль для перекладу',
47
+ resolver_libre_submitButtonLabelEmpty: 'Перекласти лише порожні поля',
48
+ resolver_libre_submitButtonLabelFull: 'Перекласти все',
49
+ resolver_libre_successMessage: 'Успішно перекладено. Натисніть "Зберегти", щоб застосувати зміни.',
50
+ resolver_openai_buttonLabel: 'Переклад AI',
51
+ resolver_openai_errorMessage: 'Сталася помилка під час спроби перекладу даних',
52
+ resolver_openai_modalTitle: 'Виберіть локаль для перекладу',
53
+ resolver_openai_submitButtonLabelEmpty: 'Перекласти лише порожні поля',
54
+ resolver_openai_submitButtonLabelFull: 'Перекласти все',
55
+ resolver_openai_successMessage: 'Успішно перекладено. Натисніть "Зберегти", щоб застосувати зміни.'
56
+ }
57
+ },
58
+ zh: {
59
+ 'plugin-translator': {
60
+ resolver_copy_buttonLabel: '从其他语言复制',
61
+ resolver_copy_errorMessage: '尝试翻译数据时发生错误',
62
+ resolver_copy_modalTitle: '选择要复制的语言',
63
+ resolver_copy_submitButtonLabelEmpty: '仅复制空字段',
64
+ resolver_copy_submitButtonLabelFull: '复制全部',
65
+ resolver_copy_successMessage: '复制成功。按下“保存”以应用更改。',
66
+ resolver_google_buttonLabel: '谷歌翻译',
67
+ resolver_google_errorMessage: '尝试翻译数据时发生错误',
68
+ resolver_google_modalTitle: '选择要翻译的语言',
69
+ resolver_google_submitButtonLabelEmpty: '仅翻译空字段',
70
+ resolver_google_submitButtonLabelFull: '翻译全部',
71
+ resolver_google_successMessage: '翻译成功。按下“保存”以应用更改。',
72
+ resolver_libre_buttonLabel: '自由翻译',
73
+ resolver_libre_errorMessage: '尝试翻译数据时发生错误',
74
+ resolver_libre_modalTitle: '选择要翻译的语言',
75
+ resolver_libre_submitButtonLabelEmpty: '仅翻译空字段',
76
+ resolver_libre_submitButtonLabelFull: '翻译全部',
77
+ resolver_libre_successMessage: '翻译成功。按下“保存”以应用更改。',
78
+ resolver_openai_buttonLabel: 'AI翻译',
79
+ resolver_openai_errorMessage: '尝试翻译数据时发生错误',
80
+ resolver_openai_modalTitle: '选择要翻译的语言',
81
+ resolver_openai_submitButtonLabelEmpty: '仅翻译空字段',
82
+ resolver_openai_submitButtonLabelFull: '翻译全部',
83
+ resolver_openai_successMessage: '翻译成功。按下“保存”以应用更改。'
84
+ }
85
+ }
86
+ };
87
+
88
+ //# sourceMappingURL=i18n-translations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/i18n-translations.ts"],"sourcesContent":["export const translations = {\n en: {\n 'plugin-translator': {\n resolver_copy_buttonLabel: 'Copy from other locale',\n resolver_copy_errorMessage: 'An error occurred when trying to translate the data',\n resolver_copy_modalTitle: 'Choose the locale to copy from',\n resolver_copy_submitButtonLabelEmpty: 'Copy only empty fields',\n resolver_copy_submitButtonLabelFull: 'Copy all',\n resolver_copy_successMessage: 'Successfully copied. Press \"Save\" to apply the changes.',\n\n resolver_google_buttonLabel: 'Google Translate',\n resolver_google_errorMessage: 'An error occurred when trying to translate the data',\n resolver_google_modalTitle: 'Choose the locale to translate from',\n resolver_google_submitButtonLabelEmpty: 'Translate only empty fields',\n resolver_google_submitButtonLabelFull: 'Translate all',\n resolver_google_successMessage: 'Successfully translated. Press \"Save\" to apply the changes.',\n\n resolver_libre_buttonLabel: 'Libre Translate',\n resolver_libre_errorMessage: 'An error occurred when trying to translate the data',\n resolver_libre_modalTitle: 'Choose the locale to translate from',\n resolver_libre_submitButtonLabelEmpty: 'Translate only empty fields',\n resolver_libre_submitButtonLabelFull: 'Translate all',\n resolver_libre_successMessage: 'Successfully translated. Press \"Save\" to apply the changes.',\n\n resolver_openai_buttonLabel: 'AI Translate',\n resolver_openai_errorMessage: 'An error occurred when trying to translate the data',\n resolver_openai_modalTitle: 'Choose the locale to translate from',\n resolver_openai_submitButtonLabelEmpty: 'Translate only empty fields',\n resolver_openai_submitButtonLabelFull: 'Translate all',\n resolver_openai_successMessage: 'Successfully translated. Press \"Save\" to apply the changes.',\n },\n },\n uk: {\n 'plugin-translator': {\n resolver_copy_buttonLabel: 'Копіювати з іншої локалі',\n resolver_copy_errorMessage: 'Сталася помилка під час спроби перекладу даних',\n resolver_copy_modalTitle: 'Виберіть локаль для копіювання',\n resolver_copy_submitButtonLabelEmpty: 'Копіювати лише порожні поля',\n resolver_copy_submitButtonLabelFull: 'Копіювати все',\n resolver_copy_successMessage:\n 'Успішно скопійовано. Натисніть \"Зберегти\", щоб застосувати зміни.',\n\n resolver_google_buttonLabel: 'Переклад Google',\n resolver_google_errorMessage: 'Сталася помилка під час спроби перекладу даних',\n resolver_google_modalTitle: 'Виберіть локаль для перекладу',\n resolver_google_submitButtonLabelEmpty: 'Перекласти лише порожні поля',\n resolver_google_submitButtonLabelFull: 'Перекласти все',\n resolver_google_successMessage:\n 'Успішно перекладено. Натисніть \"Зберегти\", щоб застосувати зміни.',\n\n resolver_libre_buttonLabel: 'Переклад Libre',\n resolver_libre_errorMessage: 'Сталася помилка під час спроби перекладу даних',\n resolver_libre_modalTitle: 'Виберіть локаль для перекладу',\n resolver_libre_submitButtonLabelEmpty: 'Перекласти лише порожні поля',\n resolver_libre_submitButtonLabelFull: 'Перекласти все',\n resolver_libre_successMessage:\n 'Успішно перекладено. Натисніть \"Зберегти\", щоб застосувати зміни.',\n\n resolver_openai_buttonLabel: 'Переклад AI',\n resolver_openai_errorMessage: 'Сталася помилка під час спроби перекладу даних',\n resolver_openai_modalTitle: 'Виберіть локаль для перекладу',\n resolver_openai_submitButtonLabelEmpty: 'Перекласти лише порожні поля',\n resolver_openai_submitButtonLabelFull: 'Перекласти все',\n resolver_openai_successMessage:\n 'Успішно перекладено. Натисніть \"Зберегти\", щоб застосувати зміни.',\n },\n },\n zh: {\n 'plugin-translator': {\n resolver_copy_buttonLabel: '从其他语言复制',\n resolver_copy_errorMessage: '尝试翻译数据时发生错误',\n resolver_copy_modalTitle: '选择要复制的语言',\n resolver_copy_submitButtonLabelEmpty: '仅复制空字段',\n resolver_copy_submitButtonLabelFull: '复制全部',\n resolver_copy_successMessage: '复制成功。按下“保存”以应用更改。',\n\n resolver_google_buttonLabel: '谷歌翻译',\n resolver_google_errorMessage: '尝试翻译数据时发生错误',\n resolver_google_modalTitle: '选择要翻译的语言',\n resolver_google_submitButtonLabelEmpty: '仅翻译空字段',\n resolver_google_submitButtonLabelFull: '翻译全部',\n resolver_google_successMessage: '翻译成功。按下“保存”以应用更改。',\n\n resolver_libre_buttonLabel: '自由翻译',\n resolver_libre_errorMessage: '尝试翻译数据时发生错误',\n resolver_libre_modalTitle: '选择要翻译的语言',\n resolver_libre_submitButtonLabelEmpty: '仅翻译空字段',\n resolver_libre_submitButtonLabelFull: '翻译全部',\n resolver_libre_successMessage: '翻译成功。按下“保存”以应用更改。',\n\n resolver_openai_buttonLabel: 'AI翻译',\n resolver_openai_errorMessage: '尝试翻译数据时发生错误',\n resolver_openai_modalTitle: '选择要翻译的语言',\n resolver_openai_submitButtonLabelEmpty: '仅翻译空字段',\n resolver_openai_submitButtonLabelFull: '翻译全部',\n resolver_openai_successMessage: '翻译成功。按下“保存”以应用更改。',\n },\n },\n}\n"],"names":["translations","en","resolver_copy_buttonLabel","resolver_copy_errorMessage","resolver_copy_modalTitle","resolver_copy_submitButtonLabelEmpty","resolver_copy_submitButtonLabelFull","resolver_copy_successMessage","resolver_google_buttonLabel","resolver_google_errorMessage","resolver_google_modalTitle","resolver_google_submitButtonLabelEmpty","resolver_google_submitButtonLabelFull","resolver_google_successMessage","resolver_libre_buttonLabel","resolver_libre_errorMessage","resolver_libre_modalTitle","resolver_libre_submitButtonLabelEmpty","resolver_libre_submitButtonLabelFull","resolver_libre_successMessage","resolver_openai_buttonLabel","resolver_openai_errorMessage","resolver_openai_modalTitle","resolver_openai_submitButtonLabelEmpty","resolver_openai_submitButtonLabelFull","resolver_openai_successMessage","uk","zh"],"mappings":"AAAA,OAAO,MAAMA,eAAe;IAC1BC,IAAI;QACF,qBAAqB;YACnBC,2BAA2B;YAC3BC,4BAA4B;YAC5BC,0BAA0B;YAC1BC,sCAAsC;YACtCC,qCAAqC;YACrCC,8BAA8B;YAE9BC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCAAgC;YAEhCC,4BAA4B;YAC5BC,6BAA6B;YAC7BC,2BAA2B;YAC3BC,uCAAuC;YACvCC,sCAAsC;YACtCC,+BAA+B;YAE/BC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCAAgC;QAClC;IACF;IACAC,IAAI;QACF,qBAAqB;YACnBxB,2BAA2B;YAC3BC,4BAA4B;YAC5BC,0BAA0B;YAC1BC,sCAAsC;YACtCC,qCAAqC;YACrCC,8BACE;YAEFC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCACE;YAEFC,4BAA4B;YAC5BC,6BAA6B;YAC7BC,2BAA2B;YAC3BC,uCAAuC;YACvCC,sCAAsC;YACtCC,+BACE;YAEFC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCACE;QACJ;IACF;IACAE,IAAI;QACF,qBAAqB;YACnBzB,2BAA2B;YAC3BC,4BAA4B;YAC5BC,0BAA0B;YAC1BC,sCAAsC;YACtCC,qCAAqC;YACrCC,8BAA8B;YAE9BC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCAAgC;YAEhCC,4BAA4B;YAC5BC,6BAA6B;YAC7BC,2BAA2B;YAC3BC,uCAAuC;YACvCC,sCAAsC;YACtCC,+BAA+B;YAE/BC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCAAgC;QAClC;IACF;AACF,EAAC"}