From 159383192955ef23456b8fcab1994f16aa2ff42e Mon Sep 17 00:00:00 2001
From: Ivan Borshchov
Date: Mon, 30 Dec 2024 00:25:55 +0200
Subject: [PATCH] Deploy website - based on
8d6c6b0f874a4217eaabc739a7e50762068827a2
---
404.html | 2 +-
assets/js/5dd1e9f0.d4b1ffbf.js | 1 +
assets/js/5dd1e9f0.dfb1cb62.js | 1 -
...n.8669c6ab.js => runtime~main.2df72af7.js} | 2 +-
blog/ai-blog/index.html | 2 +-
blog/archive/index.html | 2 +-
.../backup-database-to-aws-glacier/index.html | 2 +-
blog/chatgpt-plugin/index.html | 2 +-
.../index.html | 2 +-
blog/compose-ec2-deployment/index.html | 2 +-
blog/index.html | 2 +-
blog/tags/aws/index.html | 2 +-
blog/tags/chatgpt/index.html | 2 +-
blog/tags/github-actions/index.html | 2 +-
blog/tags/index.html | 2 +-
blog/tags/nuxt/index.html | 2 +-
blog/tags/plugin/index.html | 2 +-
blog/tags/terraform/index.html | 2 +-
docs/api/index.html | 2 +-
.../api/types/Back/classes/Filters/index.html | 2 +-
docs/api/types/Back/classes/Sorts/index.html | 2 +-
docs/api/types/Back/index.html | 2 +-
.../AdminForthBulkAction/index.html | 2 +-
.../interfaces/AdminForthConfig/index.html | 2 +-
.../AdminForthConfigCustomization/index.html | 2 +-
.../AdminForthForeignResource/index.html | 2 +-
.../AdminForthInputConfig/index.html | 2 +-
.../interfaces/AdminForthResource/index.html | 2 +-
.../AdminForthResourceColumn/index.html | 2 +-
.../AdminForthResourceInput/index.html | 2 +-
.../Back/interfaces/HttpExtra/index.html | 2 +-
.../Back/interfaces/IAdminForth/index.html | 2 +-
.../interfaces/IAdminForthAuth/index.html | 2 +-
.../IAdminForthDataSourceConnector/index.html | 2 +-
.../index.html | 2 +-
.../index.html | 2 +-
.../interfaces/IAdminForthFilter/index.html | 2 +-
.../IAdminForthHttpResponse/index.html | 2 +-
.../interfaces/IAdminForthPlugin/index.html | 2 +-
.../interfaces/IAdminForthRestAPI/index.html | 2 +-
.../interfaces/IAdminForthSort/index.html | 2 +-
.../Back/interfaces/ICodeInjector/index.html | 2 +-
.../interfaces/IConfigValidator/index.html | 2 +-
.../interfaces/IExpressHttpServer/index.html | 2 +-
.../Back/interfaces/IHttpServer/index.html | 2 +-
.../IOperationalResource/index.html | 2 +-
.../interfaces/IWebSocketBroker/index.html | 2 +-
.../interfaces/IWebSocketClient/index.html | 2 +-
.../interfaces/ResourceOptions/index.html | 2 +-
.../ResourceOptionsInput/index.html | 2 +-
.../AdminForthDataSource/index.html | 2 +-
.../AfterCreateSaveFunction/index.html | 2 +-
.../index.html | 2 +-
.../AfterDeleteSaveFunction/index.html | 2 +-
.../AfterEditSaveFunction/index.html | 2 +-
.../AllowedActionValue/index.html | 2 +-
.../type-aliases/AllowedActions/index.html | 2 +-
.../AllowedActionsInput/index.html | 2 +-
.../BeforeCreateSaveFunction/index.html | 2 +-
.../index.html | 2 +-
.../BeforeDeleteSaveFunction/index.html | 2 +-
.../BeforeEditSaveFunction/index.html | 2 +-
.../index.html | 2 +-
.../Back/type-aliases/FDataFilter/index.html | 2 +-
.../Back/type-aliases/FDataSort/index.html | 2 +-
.../enumerations/ActionCheckSource/index.html | 2 +-
.../AdminForthDataTypes/index.html | 2 +-
.../AdminForthFilterOperators/index.html | 2 +-
.../AdminForthMenuTypes/index.html | 2 +-
.../AdminForthResourcePages/index.html | 2 +-
.../AdminForthSortDirections/index.html | 2 +-
.../AllowedActionsEnum/index.html | 2 +-
docs/api/types/Common/index.html | 2 +-
.../AdminForthBulkActionCommon/index.html | 2 +-
.../AdminForthColumnEnumItem/index.html | 2 +-
.../index.html | 2 +-
.../AdminForthConfigForFrontend/index.html | 2 +-
.../AdminForthConfigMenuItem/index.html | 2 +-
.../AdminForthFieldComponents/index.html | 2 +-
.../index.html | 2 +-
.../AdminForthResourceColumnCommon/index.html | 2 +-
.../index.html | 2 +-
.../AdminForthResourceCommon/index.html | 2 +-
.../AdminForthResourceInputCommon/index.html | 2 +-
.../Common/interfaces/AdminUser/index.html | 2 +-
.../GetBaseConfigResponse/index.html | 2 +-
.../interfaces/ResourceVeryShort/index.html | 2 +-
.../Common/interfaces/UserData/index.html | 2 +-
.../AdminForthComponentDeclaration/index.html | 2 +-
.../AllowedActionsResolved/index.html | 2 +-
.../AnnouncementBadgeResponse/index.html | 2 +-
.../type-aliases/ValidationObject/index.html | 2 +-
.../enumerations/AlertVariant/index.html | 2 +-
docs/api/types/FrontendAPI/index.html | 2 +-
.../FrontendAPIInterface/index.html | 2 +-
.../type-aliases/AlertParams/index.html | 2 +-
.../type-aliases/ConfirmParams/index.html | 2 +-
.../Advanced/plugin-development/index.html | 2 +-
docs/tutorial/Customization/afcl/index.html | 2 +-
docs/tutorial/Customization/alert/index.html | 2 +-
.../Customization/branding/index.html | 2 +-
.../Customization/bulkActions/index.html | 2 +-
.../customFieldRendering/index.html | 2 +-
.../Customization/customPages/index.html | 2 +-
.../tutorial/Customization/dataApi/index.html | 2 +-
docs/tutorial/Customization/hooks/index.html | 2 +-
.../Customization/limitingAccess/index.html | 2 +-
.../menuConfiguration/index.html | 2 +-
.../Customization/pageInjections/index.html | 2 +-
.../Customization/security/index.html | 2 +-
.../standardPagesTuning/index.html | 2 +-
.../Customization/virtualColumns/index.html | 2 +-
.../Customization/websocket/index.html | 2 +-
docs/tutorial/Plugins/AuditLog/index.html | 2 +-
.../Plugins/ForeignInlineList/index.html | 2 +-
docs/tutorial/Plugins/RichEditor/index.html | 2 +-
.../Plugins/TwoFactorsAuth/index.html | 2 +-
.../Plugins/email-password-reset/index.html | 2 +-
docs/tutorial/Plugins/i18n/index.html | 26 +++++++++++++++++--
.../tutorial/Plugins/import-export/index.html | 2 +-
docs/tutorial/Plugins/open-signup/index.html | 2 +-
.../tutorial/Plugins/text-complete/index.html | 2 +-
docs/tutorial/Plugins/upload/index.html | 2 +-
docs/tutorial/deploy/index.html | 2 +-
docs/tutorial/gettingStarted/index.html | 2 +-
docs/tutorial/glossary/index.html | 2 +-
docs/tutorial/helloWorld/index.html | 2 +-
index.html | 2 +-
search/index.html | 2 +-
129 files changed, 151 insertions(+), 129 deletions(-)
create mode 100644 assets/js/5dd1e9f0.d4b1ffbf.js
delete mode 100644 assets/js/5dd1e9f0.dfb1cb62.js
rename assets/js/{runtime~main.8669c6ab.js => runtime~main.2df72af7.js} (98%)
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//diff-remove\n By logging in, you agree to our
Terms of Service and
Privacy Policy \n//diff-add\n {{$t(\'By logging in, you agree to our\')}}
{{$t(\'Terms of Service\')}} {{$t(\'and\')}}
{{$t(\'Privacy Policy\')}} \n
\n \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
\n {{ $t(\'Welcome, {name}\', { name: adminUser.username }) }}\n
\n
\n \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' , 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' , 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 ) => { 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 ) { const messages = await callAdminForthApi ( { path : ` /api/translations/?lang= ${ locale } ` , method : 'GET' , } ) ; 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 ) ; } ) ;