diff --git a/404.html b/404.html index 81480aae6..ccb3979ce 100644 --- a/404.html +++ b/404.html @@ -15,7 +15,7 @@ - + diff --git a/assets/js/5dd1e9f0.d4b1ffbf.js b/assets/js/5dd1e9f0.d4b1ffbf.js new file mode 100644 index 000000000..dfd5be086 --- /dev/null +++ b/assets/js/5dd1e9f0.d4b1ffbf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[5653],{7519:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var a=t(4848),s=t(8453);const i={},r="Internationalization (i18n)",o={id:"tutorial/Plugins/i18n",title:"Internationalization (i18n)",description:"This plugin allows you translate your AdminForth application to multiple languages.",source:"@site/docs/tutorial/05-Plugins/10-i18n.md",sourceDirName:"tutorial/05-Plugins",slug:"/tutorial/Plugins/i18n",permalink:"/docs/tutorial/Plugins/i18n",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Open Signup",permalink:"/docs/tutorial/Plugins/open-signup"},next:{title:"Plugin development guide",permalink:"/docs/tutorial/Advanced/plugin-development"}},l={},d=[{value:"Installation",id:"installation",level:2},{value:"Translation for custom components",id:"translation-for-custom-components",level:2},{value:"Variables in frontend translations",id:"variables-in-frontend-translations",level:3},{value:"HTML in translations",id:"html-in-translations",level:3},{value:"Pluralization",id:"pluralization",level:3},{value:"Limiting access to translating",id:"limiting-access-to-translating",level:2},{value:"Translations in custom APIs",id:"translations-in-custom-apis",level:2},{value:"Translating messaged within bulk action",id:"translating-messaged-within-bulk-action",level:2},{value:"Translating external application",id:"translating-external-application",level:2}];function c(n){const e={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...n.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e.h1,{id:"internationalization-i18n",children:"Internationalization (i18n)"}),"\n",(0,a.jsx)(e.p,{children:"This plugin allows you translate your AdminForth application to multiple languages.\nMain features:"}),"\n",(0,a.jsxs)(e.ul,{children:["\n",(0,a.jsxs)(e.li,{children:["Stores all translation strings in your application in a single AdminForth resource. You can set ",(0,a.jsx)(e.a,{href:"/docs/tutorial/Customization/limitingAccess/#disable-some-action-based-on-logged-in-user-record-or-role",children:"allowed actions"})," only to Developers/Translators role if you don't want other users to see/edit the translations."]}),"\n",(0,a.jsx)(e.li,{children:"Supports AI completion adapters to help with translations. For example, you can use OpenAI ChatGPT to generate translations. Supports correct pluralization, even for Slavic languages."}),"\n",(0,a.jsx)(e.li,{children:"Supports any number of languages."}),"\n"]}),"\n",(0,a.jsx)(e.p,{children:"Under the hood it uses vue-i18n library and provides several additional facilities to make the translation process easier."}),"\n",(0,a.jsx)(e.h2,{id:"installation",children:"Installation"}),"\n",(0,a.jsx)(e.p,{children:"To install the plugin:"}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-bash",children:"npm install @adminforth/i18n --save\nnpm install @adminforth/completion-adapter-open-ai-chat-gpt --save\n"})}),"\n",(0,a.jsx)(e.p,{children:"For example lets add translations to next 4 languages: Ukrainian, Japanese, French, Spanish. Also we will support basic translation for English."}),"\n",(0,a.jsx)(e.p,{children:"Add a model for translations, if you are using prisma, add something like this:"}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-ts",metastring:"title='./schema.prisma'",children:"model translations {\n id String @id\n en_string String\n created_at DateTime\n uk_string String? // translation for Ukrainian language\n ja_string String? // translation for Japanese language\n fr_string String? // translation for French language\n es_string String? // translation for Spanish language\n category String\n source String?\n completedLangs String?\n \n // we need both indexes on en_string+category and separately on category\n @@index([en_string, category])\n @@index([category])\n}\n"})}),"\n",(0,a.jsxs)(e.p,{children:["If you want more languages, just add more fields like ",(0,a.jsx)(e.code,{children:"uk_string"}),", ",(0,a.jsx)(e.code,{children:"ja_string"}),", ",(0,a.jsx)(e.code,{children:"fr_string"}),", ",(0,a.jsx)(e.code,{children:"es_string"})," to the model."]}),"\n",(0,a.jsx)(e.p,{children:"Next, add resource for translations:"}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-ts",metastring:"title='./resources/translations.ts'",children:"\nimport AdminForth, { AdminForthDataTypes, AdminForthResourceInput } from \"adminforth\";\nimport CompletionAdapterOpenAIChatGPT from \"@adminforth/completion-adapter-open-ai-chat-gpt\";\nimport I18nPlugin from \"@adminforth/i18n\";\nimport { v1 as uuid } from \"uuid\";\n\n\nexport default {\n dataSource: \"maindb\",\n table: \"translations\",\n resourceId: \"translations\",\n label: \"Translations\",\n\n recordLabel: (r: any) => `\u270d\ufe0f ${r.en_string}`,\n plugins: [\n new I18nPlugin({\n supportedLanguages: ['en', 'uk', 'ja', 'fr'],\n\n // names of the fields in the resource which will store translations\n translationFieldNames: {\n en: 'en_string',\n uk: 'uk_string',\n ja: 'ja_string',\n fr: 'fr_string',\n },\n\n // name of the field which will store the category of the string\n // this helps to categorize strings and deliver them efficiently\n categoryFieldName: 'category',\n\n // optional field to store the source (e.g. source file name)\n sourceFieldName: 'source',\n\n // optional field store list of completed translations\n // will hel to filter out incomplete translations\n completedFieldName: 'completedLangs',\n\n completeAdapter: new CompletionAdapterOpenAIChatGPT({\n openAiApiKey: process.env.OPENAI_API_KEY as string,\n model: 'gpt-4o-mini',\n expert: {\n // for UI translation it is better to lower down the temperature from default 0.7. Less creative and more accurate\n temperature: 0.5,\n },\n }),\n }),\n\n ],\n options: {\n listPageSize: 30,\n },\n columns: [\n {\n name: \"id\",\n fillOnCreate: ({ initialRecord, adminUser }: any) => uuid(),\n primaryKey: true,\n showIn: [],\n },\n {\n name: \"en_string\",\n type: AdminForthDataTypes.STRING,\n label: 'English',\n },\n {\n name: \"created_at\",\n fillOnCreate: ({ initialRecord, adminUser }: any) => new Date().toISOString(),\n },\n {\n name: \"uk_string\",\n type: AdminForthDataTypes.STRING,\n label: 'Ukrainian',\n },\n {\n name: \"ja_string\",\n type: AdminForthDataTypes.STRING,\n label: 'Japanese',\n },\n {\n name: \"fr_string\",\n type: AdminForthDataTypes.STRING,\n label: 'French',\n },\n {\n name: \"completedLangs\",\n },\n {\n name: \"source\",\n showIn: ['filter', 'show'],\n type: AdminForthDataTypes.STRING,\n },\n {\n name: \"category\",\n showIn: ['filter', 'show', 'list'],\n type: AdminForthDataTypes.STRING,\n }\n ],\n} as AdminForthResourceInput;\n"})}),"\n",(0,a.jsxs)(e.p,{children:["Add ",(0,a.jsx)(e.code,{children:"OPENAI_API_KEY"})," to your ",(0,a.jsx)(e.code,{children:".env"})," file:"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-bash",children:"OPENAI_API_KEY=your_openai_api_key\n"})}),"\n",(0,a.jsxs)(e.p,{children:["Also add the resource to main file and add menu item in ",(0,a.jsx)(e.code,{children:"./index.ts"}),":"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-ts",metastring:"title='./index.ts'",children:"\n//diff-add\nimport translations from \"./resources/translations\";\n...\n\nconst adminForth = new AdminForth({\n ...\n resources: [\n ...\n//diff-add\n translations,\n ],\n menu: [\n ...\n//diff-add\n {\n//diff-add\n label: 'Translations',\n//diff-add\n icon: 'material-symbols:translate',\n//diff-add\n resourceId: 'translations',\n//diff-add\n },\n ],\n ...\n});\n\n"})}),"\n",(0,a.jsx)(e.p,{children:"This is it, now you should restart your app and see the translations resource in the menu."}),"\n",(0,a.jsx)(e.p,{children:"You can add translations for each language manually or use Bulk actions to generate translations with AI completion adapter."}),"\n",(0,a.jsx)(e.p,{children:'For simplicity you can also use filter to get only untranslated strings and complete them one by one (filter name "Fully translated" in the filter).'}),"\n",(0,a.jsx)(e.h2,{id:"translation-for-custom-components",children:"Translation for custom components"}),"\n",(0,a.jsx)(e.p,{children:"To translate custom components, you should simply wrap all strings in $t function. For example:"}),"\n",(0,a.jsxs)(e.p,{children:["Now create file ",(0,a.jsx)(e.code,{children:"CustomLoginFooter.vue"})," in the ",(0,a.jsx)(e.code,{children:"custom"})," folder of your project:"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-html",metastring:'title="./custom/CustomLoginFooter.vue"',children:'\n'})}),"\n",(0,a.jsx)(e.h3,{id:"variables-in-frontend-translations",children:"Variables in frontend translations"}),"\n",(0,a.jsx)(e.p,{children:"You can use variables in translations in same way like you would do it with vue-i18n library."}),"\n",(0,a.jsx)(e.p,{children:"This is generally helps to understand the context of the translation for AI completion adapters and simplifies the translation process, even if done manually."}),"\n",(0,a.jsx)(e.p,{children:'For example if you have string "Showing 1 to 10 of 100 entries" you can of course simply do'}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-html",children:"{{ $t('Showing')}} {{from}} {{$t('to')}} {{to}} {{$t('of')}} {{total}} {{$t('entries') }}\n"})}),"\n",(0,a.jsx)(e.p,{children:"And it will form 4 translation strings. But it is much better to have it as single string with variables like this:"}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-html",children:"{{ $t('Showing {from} to {to} of {total} entries', { from, to, total } ) }}\n"})}),"\n",(0,a.jsx)(e.p,{children:"For example, let's add user greeting to the header."}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-html",metastring:'title="./custom/Header.vue"',children:'\n\n - + diff --git a/blog/archive/index.html b/blog/archive/index.html index ac83ecd39..aa6b36cb6 100644 --- a/blog/archive/index.html +++ b/blog/archive/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/backup-database-to-aws-glacier/index.html b/blog/backup-database-to-aws-glacier/index.html index dffbadfd4..ac9deeb6f 100644 --- a/blog/backup-database-to-aws-glacier/index.html +++ b/blog/backup-database-to-aws-glacier/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/chatgpt-plugin/index.html b/blog/chatgpt-plugin/index.html index fb0534190..4bdc5f665 100644 --- a/blog/chatgpt-plugin/index.html +++ b/blog/chatgpt-plugin/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/compose-ec2-deployment-github-actions/index.html b/blog/compose-ec2-deployment-github-actions/index.html index 30234028b..1a18e5ae1 100644 --- a/blog/compose-ec2-deployment-github-actions/index.html +++ b/blog/compose-ec2-deployment-github-actions/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/compose-ec2-deployment/index.html b/blog/compose-ec2-deployment/index.html index e44a540a7..053a81d07 100644 --- a/blog/compose-ec2-deployment/index.html +++ b/blog/compose-ec2-deployment/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/index.html b/blog/index.html index 9d4ad7adc..6163004ec 100644 --- a/blog/index.html +++ b/blog/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/aws/index.html b/blog/tags/aws/index.html index 02c26f806..6ff0e1b89 100644 --- a/blog/tags/aws/index.html +++ b/blog/tags/aws/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/chatgpt/index.html b/blog/tags/chatgpt/index.html index 505575900..6224772d9 100644 --- a/blog/tags/chatgpt/index.html +++ b/blog/tags/chatgpt/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/github-actions/index.html b/blog/tags/github-actions/index.html index 19d389b48..1e430a0b8 100644 --- a/blog/tags/github-actions/index.html +++ b/blog/tags/github-actions/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/index.html b/blog/tags/index.html index 1128c07d3..54f3ac070 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/nuxt/index.html b/blog/tags/nuxt/index.html index c47e38159..721e8f1bd 100644 --- a/blog/tags/nuxt/index.html +++ b/blog/tags/nuxt/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/plugin/index.html b/blog/tags/plugin/index.html index a689ba7c5..9adbd99fe 100644 --- a/blog/tags/plugin/index.html +++ b/blog/tags/plugin/index.html @@ -15,7 +15,7 @@ - + diff --git a/blog/tags/terraform/index.html b/blog/tags/terraform/index.html index 942b50f38..92518232d 100644 --- a/blog/tags/terraform/index.html +++ b/blog/tags/terraform/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/index.html b/docs/api/index.html index 72088486f..361ec8f3d 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/classes/Filters/index.html b/docs/api/types/Back/classes/Filters/index.html index 240033ce0..eb2109f29 100644 --- a/docs/api/types/Back/classes/Filters/index.html +++ b/docs/api/types/Back/classes/Filters/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/classes/Sorts/index.html b/docs/api/types/Back/classes/Sorts/index.html index d044b20a4..ee09b5cfe 100644 --- a/docs/api/types/Back/classes/Sorts/index.html +++ b/docs/api/types/Back/classes/Sorts/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/index.html b/docs/api/types/Back/index.html index 5f6a494d6..a2b449fa3 100644 --- a/docs/api/types/Back/index.html +++ b/docs/api/types/Back/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthBulkAction/index.html b/docs/api/types/Back/interfaces/AdminForthBulkAction/index.html index 578efeff2..0a79715cb 100644 --- a/docs/api/types/Back/interfaces/AdminForthBulkAction/index.html +++ b/docs/api/types/Back/interfaces/AdminForthBulkAction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthConfig/index.html b/docs/api/types/Back/interfaces/AdminForthConfig/index.html index 8fcaff20f..1837d24cf 100644 --- a/docs/api/types/Back/interfaces/AdminForthConfig/index.html +++ b/docs/api/types/Back/interfaces/AdminForthConfig/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthConfigCustomization/index.html b/docs/api/types/Back/interfaces/AdminForthConfigCustomization/index.html index 42d2b5d96..eaa90bdd7 100644 --- a/docs/api/types/Back/interfaces/AdminForthConfigCustomization/index.html +++ b/docs/api/types/Back/interfaces/AdminForthConfigCustomization/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthForeignResource/index.html b/docs/api/types/Back/interfaces/AdminForthForeignResource/index.html index dc5cac1f0..877ed2e56 100644 --- a/docs/api/types/Back/interfaces/AdminForthForeignResource/index.html +++ b/docs/api/types/Back/interfaces/AdminForthForeignResource/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthInputConfig/index.html b/docs/api/types/Back/interfaces/AdminForthInputConfig/index.html index 2e75ac693..a87e5159f 100644 --- a/docs/api/types/Back/interfaces/AdminForthInputConfig/index.html +++ b/docs/api/types/Back/interfaces/AdminForthInputConfig/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthResource/index.html b/docs/api/types/Back/interfaces/AdminForthResource/index.html index eec2e8043..014fb7432 100644 --- a/docs/api/types/Back/interfaces/AdminForthResource/index.html +++ b/docs/api/types/Back/interfaces/AdminForthResource/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthResourceColumn/index.html b/docs/api/types/Back/interfaces/AdminForthResourceColumn/index.html index 6e1ee29bb..edd2770a1 100644 --- a/docs/api/types/Back/interfaces/AdminForthResourceColumn/index.html +++ b/docs/api/types/Back/interfaces/AdminForthResourceColumn/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/AdminForthResourceInput/index.html b/docs/api/types/Back/interfaces/AdminForthResourceInput/index.html index 2fb552399..bb338e1cc 100644 --- a/docs/api/types/Back/interfaces/AdminForthResourceInput/index.html +++ b/docs/api/types/Back/interfaces/AdminForthResourceInput/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/HttpExtra/index.html b/docs/api/types/Back/interfaces/HttpExtra/index.html index 34fa0affa..a3b911cdc 100644 --- a/docs/api/types/Back/interfaces/HttpExtra/index.html +++ b/docs/api/types/Back/interfaces/HttpExtra/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForth/index.html b/docs/api/types/Back/interfaces/IAdminForth/index.html index 2eae05c2e..c8406e801 100644 --- a/docs/api/types/Back/interfaces/IAdminForth/index.html +++ b/docs/api/types/Back/interfaces/IAdminForth/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthAuth/index.html b/docs/api/types/Back/interfaces/IAdminForthAuth/index.html index 5791126b9..61c1823e8 100644 --- a/docs/api/types/Back/interfaces/IAdminForthAuth/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthAuth/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector/index.html b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector/index.html index d2e6c761b..7d83a64d0 100644 --- a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase/index.html b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase/index.html index 462874092..bc2066f6b 100644 --- a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor/index.html b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor/index.html index 76125791b..6c1de00c5 100644 --- a/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthFilter/index.html b/docs/api/types/Back/interfaces/IAdminForthFilter/index.html index 27caf62e9..bed4ff0b4 100644 --- a/docs/api/types/Back/interfaces/IAdminForthFilter/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthFilter/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthHttpResponse/index.html b/docs/api/types/Back/interfaces/IAdminForthHttpResponse/index.html index 3691c4685..46ca6616a 100644 --- a/docs/api/types/Back/interfaces/IAdminForthHttpResponse/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthHttpResponse/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthPlugin/index.html b/docs/api/types/Back/interfaces/IAdminForthPlugin/index.html index e5d8932be..8b3015479 100644 --- a/docs/api/types/Back/interfaces/IAdminForthPlugin/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthPlugin/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthRestAPI/index.html b/docs/api/types/Back/interfaces/IAdminForthRestAPI/index.html index 98d022382..1921e473c 100644 --- a/docs/api/types/Back/interfaces/IAdminForthRestAPI/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthRestAPI/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IAdminForthSort/index.html b/docs/api/types/Back/interfaces/IAdminForthSort/index.html index 5a7e55c64..c0a02c8d6 100644 --- a/docs/api/types/Back/interfaces/IAdminForthSort/index.html +++ b/docs/api/types/Back/interfaces/IAdminForthSort/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/ICodeInjector/index.html b/docs/api/types/Back/interfaces/ICodeInjector/index.html index dea458ab4..f5ed334dd 100644 --- a/docs/api/types/Back/interfaces/ICodeInjector/index.html +++ b/docs/api/types/Back/interfaces/ICodeInjector/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IConfigValidator/index.html b/docs/api/types/Back/interfaces/IConfigValidator/index.html index 1f30c9be7..23e580cb3 100644 --- a/docs/api/types/Back/interfaces/IConfigValidator/index.html +++ b/docs/api/types/Back/interfaces/IConfigValidator/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IExpressHttpServer/index.html b/docs/api/types/Back/interfaces/IExpressHttpServer/index.html index fe8a09056..a8f954fb2 100644 --- a/docs/api/types/Back/interfaces/IExpressHttpServer/index.html +++ b/docs/api/types/Back/interfaces/IExpressHttpServer/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IHttpServer/index.html b/docs/api/types/Back/interfaces/IHttpServer/index.html index b6f4e1d55..c4ef30b62 100644 --- a/docs/api/types/Back/interfaces/IHttpServer/index.html +++ b/docs/api/types/Back/interfaces/IHttpServer/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IOperationalResource/index.html b/docs/api/types/Back/interfaces/IOperationalResource/index.html index 902db8846..51579c2a0 100644 --- a/docs/api/types/Back/interfaces/IOperationalResource/index.html +++ b/docs/api/types/Back/interfaces/IOperationalResource/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IWebSocketBroker/index.html b/docs/api/types/Back/interfaces/IWebSocketBroker/index.html index 62bcaba3a..197ddca3f 100644 --- a/docs/api/types/Back/interfaces/IWebSocketBroker/index.html +++ b/docs/api/types/Back/interfaces/IWebSocketBroker/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/IWebSocketClient/index.html b/docs/api/types/Back/interfaces/IWebSocketClient/index.html index d3039ed86..de3c07ede 100644 --- a/docs/api/types/Back/interfaces/IWebSocketClient/index.html +++ b/docs/api/types/Back/interfaces/IWebSocketClient/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/ResourceOptions/index.html b/docs/api/types/Back/interfaces/ResourceOptions/index.html index 7ce5aedf4..633fa0f1f 100644 --- a/docs/api/types/Back/interfaces/ResourceOptions/index.html +++ b/docs/api/types/Back/interfaces/ResourceOptions/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/interfaces/ResourceOptionsInput/index.html b/docs/api/types/Back/interfaces/ResourceOptionsInput/index.html index aa8aacece..c33fa3ca6 100644 --- a/docs/api/types/Back/interfaces/ResourceOptionsInput/index.html +++ b/docs/api/types/Back/interfaces/ResourceOptionsInput/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AdminForthDataSource/index.html b/docs/api/types/Back/type-aliases/AdminForthDataSource/index.html index dade08560..ac40a0053 100644 --- a/docs/api/types/Back/type-aliases/AdminForthDataSource/index.html +++ b/docs/api/types/Back/type-aliases/AdminForthDataSource/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AfterCreateSaveFunction/index.html b/docs/api/types/Back/type-aliases/AfterCreateSaveFunction/index.html index de4026a02..f8a3d9692 100644 --- a/docs/api/types/Back/type-aliases/AfterCreateSaveFunction/index.html +++ b/docs/api/types/Back/type-aliases/AfterCreateSaveFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction/index.html b/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction/index.html index 2391ab12c..be7b9c27b 100644 --- a/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction/index.html +++ b/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AfterDeleteSaveFunction/index.html b/docs/api/types/Back/type-aliases/AfterDeleteSaveFunction/index.html index 5e517ed0f..4ddc3ff29 100644 --- a/docs/api/types/Back/type-aliases/AfterDeleteSaveFunction/index.html +++ b/docs/api/types/Back/type-aliases/AfterDeleteSaveFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AfterEditSaveFunction/index.html b/docs/api/types/Back/type-aliases/AfterEditSaveFunction/index.html index 30af565cc..b4d2f5efa 100644 --- a/docs/api/types/Back/type-aliases/AfterEditSaveFunction/index.html +++ b/docs/api/types/Back/type-aliases/AfterEditSaveFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AllowedActionValue/index.html b/docs/api/types/Back/type-aliases/AllowedActionValue/index.html index ca883a464..8afb09556 100644 --- a/docs/api/types/Back/type-aliases/AllowedActionValue/index.html +++ b/docs/api/types/Back/type-aliases/AllowedActionValue/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AllowedActions/index.html b/docs/api/types/Back/type-aliases/AllowedActions/index.html index 7f234b937..9045662a4 100644 --- a/docs/api/types/Back/type-aliases/AllowedActions/index.html +++ b/docs/api/types/Back/type-aliases/AllowedActions/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/AllowedActionsInput/index.html b/docs/api/types/Back/type-aliases/AllowedActionsInput/index.html index 12124e2cc..056b09861 100644 --- a/docs/api/types/Back/type-aliases/AllowedActionsInput/index.html +++ b/docs/api/types/Back/type-aliases/AllowedActionsInput/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction/index.html b/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction/index.html index 732001cbe..5062d4b4b 100644 --- a/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction/index.html +++ b/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction/index.html b/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction/index.html index cbbc35595..e097a5080 100644 --- a/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction/index.html +++ b/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/BeforeDeleteSaveFunction/index.html b/docs/api/types/Back/type-aliases/BeforeDeleteSaveFunction/index.html index 953b64f27..e67054ef1 100644 --- a/docs/api/types/Back/type-aliases/BeforeDeleteSaveFunction/index.html +++ b/docs/api/types/Back/type-aliases/BeforeDeleteSaveFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/BeforeEditSaveFunction/index.html b/docs/api/types/Back/type-aliases/BeforeEditSaveFunction/index.html index 4e1f1decc..0d76c2611 100644 --- a/docs/api/types/Back/type-aliases/BeforeEditSaveFunction/index.html +++ b/docs/api/types/Back/type-aliases/BeforeEditSaveFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction/index.html b/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction/index.html index fbb083371..87bcec05a 100644 --- a/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction/index.html +++ b/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/FDataFilter/index.html b/docs/api/types/Back/type-aliases/FDataFilter/index.html index 9c1cc61e8..15f0071e5 100644 --- a/docs/api/types/Back/type-aliases/FDataFilter/index.html +++ b/docs/api/types/Back/type-aliases/FDataFilter/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Back/type-aliases/FDataSort/index.html b/docs/api/types/Back/type-aliases/FDataSort/index.html index 14da804d1..49c7f37a2 100644 --- a/docs/api/types/Back/type-aliases/FDataSort/index.html +++ b/docs/api/types/Back/type-aliases/FDataSort/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/ActionCheckSource/index.html b/docs/api/types/Common/enumerations/ActionCheckSource/index.html index b8bcb5b53..66bb99404 100644 --- a/docs/api/types/Common/enumerations/ActionCheckSource/index.html +++ b/docs/api/types/Common/enumerations/ActionCheckSource/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AdminForthDataTypes/index.html b/docs/api/types/Common/enumerations/AdminForthDataTypes/index.html index 7a30a4243..8416de767 100644 --- a/docs/api/types/Common/enumerations/AdminForthDataTypes/index.html +++ b/docs/api/types/Common/enumerations/AdminForthDataTypes/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AdminForthFilterOperators/index.html b/docs/api/types/Common/enumerations/AdminForthFilterOperators/index.html index 260466519..7e030e843 100644 --- a/docs/api/types/Common/enumerations/AdminForthFilterOperators/index.html +++ b/docs/api/types/Common/enumerations/AdminForthFilterOperators/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AdminForthMenuTypes/index.html b/docs/api/types/Common/enumerations/AdminForthMenuTypes/index.html index 041f275aa..3201e5724 100644 --- a/docs/api/types/Common/enumerations/AdminForthMenuTypes/index.html +++ b/docs/api/types/Common/enumerations/AdminForthMenuTypes/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AdminForthResourcePages/index.html b/docs/api/types/Common/enumerations/AdminForthResourcePages/index.html index d14335cf8..2e8922b12 100644 --- a/docs/api/types/Common/enumerations/AdminForthResourcePages/index.html +++ b/docs/api/types/Common/enumerations/AdminForthResourcePages/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AdminForthSortDirections/index.html b/docs/api/types/Common/enumerations/AdminForthSortDirections/index.html index 86ef91020..da79793ad 100644 --- a/docs/api/types/Common/enumerations/AdminForthSortDirections/index.html +++ b/docs/api/types/Common/enumerations/AdminForthSortDirections/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/enumerations/AllowedActionsEnum/index.html b/docs/api/types/Common/enumerations/AllowedActionsEnum/index.html index 182d6f4e2..80a227cb8 100644 --- a/docs/api/types/Common/enumerations/AllowedActionsEnum/index.html +++ b/docs/api/types/Common/enumerations/AllowedActionsEnum/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/index.html b/docs/api/types/Common/index.html index c1b7d9eca..43bd19e69 100644 --- a/docs/api/types/Common/index.html +++ b/docs/api/types/Common/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthBulkActionCommon/index.html b/docs/api/types/Common/interfaces/AdminForthBulkActionCommon/index.html index 5247ee1bb..f2d141935 100644 --- a/docs/api/types/Common/interfaces/AdminForthBulkActionCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthBulkActionCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthColumnEnumItem/index.html b/docs/api/types/Common/interfaces/AdminForthColumnEnumItem/index.html index ec335cd9e..4ac905c10 100644 --- a/docs/api/types/Common/interfaces/AdminForthColumnEnumItem/index.html +++ b/docs/api/types/Common/interfaces/AdminForthColumnEnumItem/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull/index.html b/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull/index.html index 42c9e41f3..eda21b0f4 100644 --- a/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull/index.html +++ b/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthConfigForFrontend/index.html b/docs/api/types/Common/interfaces/AdminForthConfigForFrontend/index.html index 2330b6c12..6be5ba568 100644 --- a/docs/api/types/Common/interfaces/AdminForthConfigForFrontend/index.html +++ b/docs/api/types/Common/interfaces/AdminForthConfigForFrontend/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthConfigMenuItem/index.html b/docs/api/types/Common/interfaces/AdminForthConfigMenuItem/index.html index 38166fbc6..9a3546f62 100644 --- a/docs/api/types/Common/interfaces/AdminForthConfigMenuItem/index.html +++ b/docs/api/types/Common/interfaces/AdminForthConfigMenuItem/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthFieldComponents/index.html b/docs/api/types/Common/interfaces/AdminForthFieldComponents/index.html index bb939444e..f3ed9654e 100644 --- a/docs/api/types/Common/interfaces/AdminForthFieldComponents/index.html +++ b/docs/api/types/Common/interfaces/AdminForthFieldComponents/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon/index.html b/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon/index.html index a46a8ebe5..d5b66d2b5 100644 --- a/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon/index.html b/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon/index.html index c5277e511..4a547c153 100644 --- a/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon/index.html b/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon/index.html index 27ae16344..377c463a4 100644 --- a/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthResourceCommon/index.html b/docs/api/types/Common/interfaces/AdminForthResourceCommon/index.html index aaf76f1d9..04915fe39 100644 --- a/docs/api/types/Common/interfaces/AdminForthResourceCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthResourceCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminForthResourceInputCommon/index.html b/docs/api/types/Common/interfaces/AdminForthResourceInputCommon/index.html index a9ea34cd5..42ada4dfc 100644 --- a/docs/api/types/Common/interfaces/AdminForthResourceInputCommon/index.html +++ b/docs/api/types/Common/interfaces/AdminForthResourceInputCommon/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/AdminUser/index.html b/docs/api/types/Common/interfaces/AdminUser/index.html index ad91aaea8..b0e514577 100644 --- a/docs/api/types/Common/interfaces/AdminUser/index.html +++ b/docs/api/types/Common/interfaces/AdminUser/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/GetBaseConfigResponse/index.html b/docs/api/types/Common/interfaces/GetBaseConfigResponse/index.html index 1c1b253da..8812d0702 100644 --- a/docs/api/types/Common/interfaces/GetBaseConfigResponse/index.html +++ b/docs/api/types/Common/interfaces/GetBaseConfigResponse/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/ResourceVeryShort/index.html b/docs/api/types/Common/interfaces/ResourceVeryShort/index.html index 0068c4a27..c21c03a94 100644 --- a/docs/api/types/Common/interfaces/ResourceVeryShort/index.html +++ b/docs/api/types/Common/interfaces/ResourceVeryShort/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/interfaces/UserData/index.html b/docs/api/types/Common/interfaces/UserData/index.html index b859ad4a9..2ee3963b5 100644 --- a/docs/api/types/Common/interfaces/UserData/index.html +++ b/docs/api/types/Common/interfaces/UserData/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration/index.html b/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration/index.html index ff025a448..694e55c8d 100644 --- a/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration/index.html +++ b/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/type-aliases/AllowedActionsResolved/index.html b/docs/api/types/Common/type-aliases/AllowedActionsResolved/index.html index 8ae440602..d03d9314f 100644 --- a/docs/api/types/Common/type-aliases/AllowedActionsResolved/index.html +++ b/docs/api/types/Common/type-aliases/AllowedActionsResolved/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse/index.html b/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse/index.html index cb8656e76..bcb2af4a4 100644 --- a/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse/index.html +++ b/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/Common/type-aliases/ValidationObject/index.html b/docs/api/types/Common/type-aliases/ValidationObject/index.html index 48724cc49..9688d4a41 100644 --- a/docs/api/types/Common/type-aliases/ValidationObject/index.html +++ b/docs/api/types/Common/type-aliases/ValidationObject/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html b/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html index ad294aab1..8195a4983 100644 --- a/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html +++ b/docs/api/types/FrontendAPI/enumerations/AlertVariant/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/FrontendAPI/index.html b/docs/api/types/FrontendAPI/index.html index 4df1c186a..c2a3f8d5e 100644 --- a/docs/api/types/FrontendAPI/index.html +++ b/docs/api/types/FrontendAPI/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html b/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html index 78a3af635..c8e904cad 100644 --- a/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html +++ b/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html b/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html index 6e194f3df..d696948eb 100644 --- a/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html +++ b/docs/api/types/FrontendAPI/type-aliases/AlertParams/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html b/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html index 9c281c93f..a40fe6d78 100644 --- a/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html +++ b/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Advanced/plugin-development/index.html b/docs/tutorial/Advanced/plugin-development/index.html index 368792e03..ddbd7d0e6 100644 --- a/docs/tutorial/Advanced/plugin-development/index.html +++ b/docs/tutorial/Advanced/plugin-development/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/afcl/index.html b/docs/tutorial/Customization/afcl/index.html index 718ff7a67..b88b12805 100644 --- a/docs/tutorial/Customization/afcl/index.html +++ b/docs/tutorial/Customization/afcl/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/alert/index.html b/docs/tutorial/Customization/alert/index.html index 47604e49f..b2d45f1fe 100644 --- a/docs/tutorial/Customization/alert/index.html +++ b/docs/tutorial/Customization/alert/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/branding/index.html b/docs/tutorial/Customization/branding/index.html index d716bd99d..8fb309ec6 100644 --- a/docs/tutorial/Customization/branding/index.html +++ b/docs/tutorial/Customization/branding/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/bulkActions/index.html b/docs/tutorial/Customization/bulkActions/index.html index 5103efa0d..f27a24673 100644 --- a/docs/tutorial/Customization/bulkActions/index.html +++ b/docs/tutorial/Customization/bulkActions/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/customFieldRendering/index.html b/docs/tutorial/Customization/customFieldRendering/index.html index 890afd0ba..ab1623917 100644 --- a/docs/tutorial/Customization/customFieldRendering/index.html +++ b/docs/tutorial/Customization/customFieldRendering/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/customPages/index.html b/docs/tutorial/Customization/customPages/index.html index a8b1e5e23..4315aae1b 100644 --- a/docs/tutorial/Customization/customPages/index.html +++ b/docs/tutorial/Customization/customPages/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/dataApi/index.html b/docs/tutorial/Customization/dataApi/index.html index b0194c892..9d58ee1c8 100644 --- a/docs/tutorial/Customization/dataApi/index.html +++ b/docs/tutorial/Customization/dataApi/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/hooks/index.html b/docs/tutorial/Customization/hooks/index.html index 930b80b5f..80bf45775 100644 --- a/docs/tutorial/Customization/hooks/index.html +++ b/docs/tutorial/Customization/hooks/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/limitingAccess/index.html b/docs/tutorial/Customization/limitingAccess/index.html index 6d42b6611..6cea88d86 100644 --- a/docs/tutorial/Customization/limitingAccess/index.html +++ b/docs/tutorial/Customization/limitingAccess/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/menuConfiguration/index.html b/docs/tutorial/Customization/menuConfiguration/index.html index 77655adff..04758247d 100644 --- a/docs/tutorial/Customization/menuConfiguration/index.html +++ b/docs/tutorial/Customization/menuConfiguration/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/pageInjections/index.html b/docs/tutorial/Customization/pageInjections/index.html index 73bd45b90..db1478b97 100644 --- a/docs/tutorial/Customization/pageInjections/index.html +++ b/docs/tutorial/Customization/pageInjections/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/security/index.html b/docs/tutorial/Customization/security/index.html index a106581a4..773055342 100644 --- a/docs/tutorial/Customization/security/index.html +++ b/docs/tutorial/Customization/security/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/standardPagesTuning/index.html b/docs/tutorial/Customization/standardPagesTuning/index.html index fd5e82e53..101fb5278 100644 --- a/docs/tutorial/Customization/standardPagesTuning/index.html +++ b/docs/tutorial/Customization/standardPagesTuning/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/virtualColumns/index.html b/docs/tutorial/Customization/virtualColumns/index.html index 544e8ae7b..0c2e9d2fa 100644 --- a/docs/tutorial/Customization/virtualColumns/index.html +++ b/docs/tutorial/Customization/virtualColumns/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Customization/websocket/index.html b/docs/tutorial/Customization/websocket/index.html index 2fd145407..54da049a0 100644 --- a/docs/tutorial/Customization/websocket/index.html +++ b/docs/tutorial/Customization/websocket/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/AuditLog/index.html b/docs/tutorial/Plugins/AuditLog/index.html index 50163c999..ec352b59e 100644 --- a/docs/tutorial/Plugins/AuditLog/index.html +++ b/docs/tutorial/Plugins/AuditLog/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/ForeignInlineList/index.html b/docs/tutorial/Plugins/ForeignInlineList/index.html index af1c48a33..a485e04cc 100644 --- a/docs/tutorial/Plugins/ForeignInlineList/index.html +++ b/docs/tutorial/Plugins/ForeignInlineList/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/RichEditor/index.html b/docs/tutorial/Plugins/RichEditor/index.html index 23f7fc779..91b9d31da 100644 --- a/docs/tutorial/Plugins/RichEditor/index.html +++ b/docs/tutorial/Plugins/RichEditor/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/TwoFactorsAuth/index.html b/docs/tutorial/Plugins/TwoFactorsAuth/index.html index e052d8d8c..efb7a2e0b 100644 --- a/docs/tutorial/Plugins/TwoFactorsAuth/index.html +++ b/docs/tutorial/Plugins/TwoFactorsAuth/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/email-password-reset/index.html b/docs/tutorial/Plugins/email-password-reset/index.html index 133a0ac3b..b0a907ed8 100644 --- a/docs/tutorial/Plugins/email-password-reset/index.html +++ b/docs/tutorial/Plugins/email-password-reset/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/i18n/index.html b/docs/tutorial/Plugins/i18n/index.html index 6f0960ded..6efc7f463 100644 --- a/docs/tutorial/Plugins/i18n/index.html +++ b/docs/tutorial/Plugins/i18n/index.html @@ -15,7 +15,7 @@ - + @@ -90,6 +90,28 @@

bulkActions to use translations:

-
./resources/apartments.ts
import { AdminUser } from 'adminforth';
import { admin } from '../index';

{
...
resourceId: 'aparts',
...
options: {
bulkActions: [
{
label: 'Mark as listed',
icon: 'flowbite:eye-solid',
// if optional `confirm` is provided, user will be asked to confirm action
confirm: 'Are you sure you want to mark all selected apartments as listed?',
action: function ({selectedIds, adminUser }: {selectedIds: any[], adminUser: AdminUser }) {
const stmt = admin.resource('aparts').dataConnector.db.prepare(`UPDATE apartments SET listed = 1 WHERE id IN (${selectedIds.map(() => '?').join(',')})`);
stmt.run(...selectedIds);
return { ok: true, error: false, successMessage: `Marked ${selectedIds.length} apartments as listed` };
return { ok: true, error: false, successMessage: await tr('Marked {count} apartments as listed', 'apartments', { count: selectedIds.length }) };
},
}
],
}
}
+
./resources/apartments.ts
import { AdminUser } from 'adminforth';
import { admin } from '../index';

{
...
resourceId: 'aparts',
...
options: {
bulkActions: [
{
label: 'Mark as listed',
icon: 'flowbite:eye-solid',
// if optional `confirm` is provided, user will be asked to confirm action
confirm: 'Are you sure you want to mark all selected apartments as listed?',
action: function ({selectedIds, adminUser }: {selectedIds: any[], adminUser: AdminUser }) {
const stmt = admin.resource('aparts').dataConnector.db.prepare(`UPDATE apartments SET listed = 1 WHERE id IN (${selectedIds.map(() => '?').join(',')})`);
stmt.run(...selectedIds);
return { ok: true, error: false, successMessage: `Marked ${selectedIds.length} apartments as listed` };
return { ok: true, error: false, successMessage: await tr('Marked {count} apartments as listed', 'apartments', { count: selectedIds.length }) };
},
}
],
}
}
+

Translating external application

+

You can use this module not only to translate Admin area of your application but also to translate other services of your application. +This will allow you to reuse the same functionality and AI completion adapters for all your translations. For example in this app we +will consider that we have a Nuxt.js SEO-centric frontend which we want to translate with vue-i18n.

+

To do it you need to use 2 exposed methods from the plugin: feedCategoryTranslations and getCategoryTranslations.

+

First of all, at some step, e.g. CI pipeline you should get all translation strings from your external app and feed them ao an own rest API like '/feed-nuxt-strings', this API might look like this

+
./index.ts
  app.get(`${ADMIN_BASE_URL}/feed-nuxt-strings`, 
async (req, res) => {
// req.body will be an array of objects like:
// [{
// path: 'Login',
// file: 'src/views/Login.vue:35',
// }]

const messagesForFeed = req.body.map((mk: any) => {
return {
en_string: mk.path,
source: mk.file,
};
});

admin.getPluginByClassName<I18nPlugin>('I18nPlugin').feedCategoryTranslations(
messagesForFeed,
'nextApp'
)

res.json({
ok: true
});
}
);

+

For extracting 18n messages we use vue-i18n-extract package. +You can add extract command to package.json:

+
{
"scripts": {
"i18n:extract": "echo '{}' > i18n-empty.json && vue-i18n-extract report --vueFiles './src/**/*.?(js|vue)' --output ./i18n-messages.json --languageFiles 'i18n-empty.json' --add",
"i18n:feed-to-backoffice": "npm run i18n:extract && curl -X POST -H 'Content-Type: application/json' -d @i18n-messages.json http://adminforth:3000/feed-nuxt-strings"
""
}
}
+

Make sure to replace adminforth:3000 with AdminForth API URL. We are assuming it is docker container name in internal docker network.

+

So in the pipeline you should run npm run i18n:feed-to-backoffice to extract messages from your Nuxt.js app and feed them to AdminForth.

+
+

👆 The example method is just a stub, please make sure you not expose endpoint to public or add some simple authorization on it, +otherwise someone might flood you with dump translations requests.

+
+

Then in your Nuxt.js app you should call this API and store the strings in the same.

+

Next part. When we will need translations on the nuxt instance, we should use vue-i18n's lazy loading feature:

+
./your-buxt-app-source-file.ts
import { callAdminForthApi } from '@/utils';

export async function loadLocaleMessages(i18n, locale) {
// load locale messages with dynamic import
const messages = await callAdminForthApi({
path: `/api/translations/?lang=${locale}`,
method: 'GET',
});

// set locale and locale message
i18n.global.setLocaleMessage(locale, messages.default)

return nextTick()
}
+

See vue-i18n's lazy loading feature to understand where better to call loadLocaleMessages function.

+

Here is how API for messages will look:

+
./index.ts
app.get(`${ADMIN_BASE_URL}/api/translations/`, 
async (req, res) => {
const lang = req.query.lang;
const messages = await admin.getPluginByClassName<I18nPlugin>('I18nPlugin').getCategoryTranslations('nextApp', lang);
res.json(messages);
}
);
\ No newline at end of file diff --git a/docs/tutorial/Plugins/import-export/index.html b/docs/tutorial/Plugins/import-export/index.html index 9d378761e..fc365ec72 100644 --- a/docs/tutorial/Plugins/import-export/index.html +++ b/docs/tutorial/Plugins/import-export/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/open-signup/index.html b/docs/tutorial/Plugins/open-signup/index.html index d06ef77ca..b4733f610 100644 --- a/docs/tutorial/Plugins/open-signup/index.html +++ b/docs/tutorial/Plugins/open-signup/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/text-complete/index.html b/docs/tutorial/Plugins/text-complete/index.html index bd0ba6457..dd85b6a43 100644 --- a/docs/tutorial/Plugins/text-complete/index.html +++ b/docs/tutorial/Plugins/text-complete/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/Plugins/upload/index.html b/docs/tutorial/Plugins/upload/index.html index 168304317..d1cb11218 100644 --- a/docs/tutorial/Plugins/upload/index.html +++ b/docs/tutorial/Plugins/upload/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/deploy/index.html b/docs/tutorial/deploy/index.html index 819875495..796fbca7b 100644 --- a/docs/tutorial/deploy/index.html +++ b/docs/tutorial/deploy/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/gettingStarted/index.html b/docs/tutorial/gettingStarted/index.html index 8148ed708..4afbfcf16 100644 --- a/docs/tutorial/gettingStarted/index.html +++ b/docs/tutorial/gettingStarted/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/glossary/index.html b/docs/tutorial/glossary/index.html index f6c99cc47..2d0ca97eb 100644 --- a/docs/tutorial/glossary/index.html +++ b/docs/tutorial/glossary/index.html @@ -15,7 +15,7 @@ - + diff --git a/docs/tutorial/helloWorld/index.html b/docs/tutorial/helloWorld/index.html index a1a41d186..e2d722ec0 100644 --- a/docs/tutorial/helloWorld/index.html +++ b/docs/tutorial/helloWorld/index.html @@ -15,7 +15,7 @@ - + diff --git a/index.html b/index.html index d3bdc50b5..456983b85 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ - + diff --git a/search/index.html b/search/index.html index 64f3df24b..655a90028 100644 --- a/search/index.html +++ b/search/index.html @@ -15,7 +15,7 @@ - +