diff --git a/zero.Backoffice.UI/app/core/zeroRuntime.ts b/zero.Backoffice.UI/app/core/zeroRuntime.ts
index e0af86d7..d8f876e6 100644
--- a/zero.Backoffice.UI/app/core/zeroRuntime.ts
+++ b/zero.Backoffice.UI/app/core/zeroRuntime.ts
@@ -9,7 +9,7 @@ import registerComponents from '../components/register';
import registerFormComponents from '../forms/register';
import registerEditorComponents from '../editor/register';
import { getRouterConfig, appendRouterGuards } from './router/routerConfig';
-import { countryPlugin, applicationPlugin, settingsPlugin } from '../modules';
+import { countryPlugin, applicationPlugin, settingsPlugin, languagePlugin } from '../modules';
import { ZeroSchema } from 'zero/schemas';
import { ZeroSchemaProp } from './zero';
import * as zeroOptions from '../options';
@@ -85,6 +85,7 @@ export class ZeroRuntime implements Zero
countryPlugin.install(pluginOptions);
applicationPlugin.install(pluginOptions);
settingsPlugin.install(pluginOptions);
+ languagePlugin.install(pluginOptions);
}
diff --git a/zero.Backoffice.UI/app/modules/index.ts b/zero.Backoffice.UI/app/modules/index.ts
index 9e664321..78545f26 100644
--- a/zero.Backoffice.UI/app/modules/index.ts
+++ b/zero.Backoffice.UI/app/modules/index.ts
@@ -1,4 +1,5 @@
export * from './countries';
export * from './applications';
-export * from './settings';
\ No newline at end of file
+export * from './settings';
+export * from './languages';
\ No newline at end of file
diff --git a/zero.Backoffice.UI/app/modules/languages/api.ts b/zero.Backoffice.UI/app/modules/languages/api.ts
new file mode 100644
index 00000000..b65365a9
--- /dev/null
+++ b/zero.Backoffice.UI/app/modules/languages/api.ts
@@ -0,0 +1,16 @@
+import { get, post, put, del, ApiRequestConfig, ApiRequestQuery } from '../../services/request';
+
+export default {
+
+ getEmpty: (flavor?: string, config?: ApiRequestConfig) => get("languages/empty", { ...config, params: { flavor } }),
+
+ getById: (id: string, changeVector?: string, config?: ApiRequestConfig) => get('languages/' + id, { ...config, params: { changeVector } }),
+
+ getByQuery: (query: ApiRequestQuery, config?: ApiRequestConfig) => get('languages', { ...config, params: { ...query } }),
+
+ create: (model: any, config?: ApiRequestConfig) => post('languages', model, config),
+
+ update: (model: any, config?: ApiRequestConfig) => put('languages/' + model.id, model, config),
+
+ delete: (id: string, config?: ApiRequestConfig) => del('languages/' + id, config),
+};
\ No newline at end of file
diff --git a/zero.Backoffice.UI/app/modules/languages/index.ts b/zero.Backoffice.UI/app/modules/languages/index.ts
new file mode 100644
index 00000000..bee7ee3a
--- /dev/null
+++ b/zero.Backoffice.UI/app/modules/languages/index.ts
@@ -0,0 +1,11 @@
+import api from './api';
+import editor from './schemas/editor';
+import list from './schemas/list';
+import plugin from './plugin';
+
+export {
+ api as languageApi,
+ editor as languageSchema,
+ list as languageListSchema,
+ plugin as languagePlugin
+};
\ No newline at end of file
diff --git a/zero.Backoffice.UI/app/modules/languages/language.vue b/zero.Backoffice.UI/app/modules/languages/language.vue
new file mode 100644
index 00000000..95acabd3
--- /dev/null
+++ b/zero.Backoffice.UI/app/modules/languages/language.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zero.Backoffice.UI/app/modules/languages/languages.vue b/zero.Backoffice.UI/app/modules/languages/languages.vue
new file mode 100644
index 00000000..89bfabf2
--- /dev/null
+++ b/zero.Backoffice.UI/app/modules/languages/languages.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zero.Backoffice.UI/app/modules/languages/plugin.ts b/zero.Backoffice.UI/app/modules/languages/plugin.ts
new file mode 100644
index 00000000..f7c1fd5e
--- /dev/null
+++ b/zero.Backoffice.UI/app/modules/languages/plugin.ts
@@ -0,0 +1,17 @@
+import { ZeroPlugin, ZeroPluginOptions } from '../../core';
+import { defineAsyncComponent } from 'vue';
+
+export default {
+ name: "zero.languages",
+
+ install(app: ZeroPluginOptions)
+ {
+ //app.vue.component('ui-countrypicker', defineAsyncComponent(() => import('./ui-countrypicker.vue')));
+
+ app.route({ name: 'languages', path: '/settings/languages', component: () => import('./languages.vue') });
+ app.route({ name: 'languages-edit', path: '/settings/languages/edit/:id?', component: () => import('./language.vue'), props: true });
+
+ app.schema('languages', () => import('./schemas/list'));
+ app.schema('languages:edit', () => import('./schemas/editor'));
+ }
+} as ZeroPlugin;
\ No newline at end of file
diff --git a/zero.Backoffice.UI/old_app/renderers/editors/language.js b/zero.Backoffice.UI/app/modules/languages/schemas/editor.ts
similarity index 72%
rename from zero.Backoffice.UI/old_app/renderers/editors/language.js
rename to zero.Backoffice.UI/app/modules/languages/schemas/editor.ts
index 0646b9ec..a8a1a1d1 100644
--- a/zero.Backoffice.UI/old_app/renderers/editors/language.js
+++ b/zero.Backoffice.UI/app/modules/languages/schemas/editor.ts
@@ -1,7 +1,7 @@
-import Editor from 'zero/core/editor.ts';
+import Editor from '../../../editor/editor';
-const editor = new Editor('language', '@language.fields.');
+const editor = new Editor('languages:edit', '@language.fields.');
editor.blueprintAlias = 'language';
editor.field('name', { label: '@ui.name' }).text(60).required();
editor.field('code').text(10).required();
diff --git a/zero.Backoffice.UI/old_app/renderers/lists/languages.js b/zero.Backoffice.UI/app/modules/languages/schemas/list.ts
similarity index 55%
rename from zero.Backoffice.UI/old_app/renderers/lists/languages.js
rename to zero.Backoffice.UI/app/modules/languages/schemas/list.ts
index 03f469c1..8d611550 100644
--- a/zero.Backoffice.UI/old_app/renderers/lists/languages.js
+++ b/zero.Backoffice.UI/app/modules/languages/schemas/list.ts
@@ -1,14 +1,14 @@
-import List from 'zero/core/list.ts';
-import LanguagesApi from 'zero/api/languages.js';
+import List from '../../../schemas/list/list';
+import api from '../api';
const list = new List('languages');
const prefix = '@language.fields.';
list.templateLabel = x => prefix + x;
-list.link = zero.alias.settings.languages + '-edit';
+list.link = 'languages-edit';
-list.onFetch(filter => LanguagesApi.getByQuery(filter));
+list.onFetch(filter => api.getByQuery(filter));
list.column('name').name();
list.column('code').text();
diff --git a/zero.Backoffice.UI/app/modules/languages/ui-countrypicker.vue b/zero.Backoffice.UI/app/modules/languages/ui-countrypicker.vue
new file mode 100644
index 00000000..34356f88
--- /dev/null
+++ b/zero.Backoffice.UI/app/modules/languages/ui-countrypicker.vue
@@ -0,0 +1,61 @@
+
+
+ country picker
+
+
+
+
+
+
\ No newline at end of file