-
+
+
@@ -8,12 +9,14 @@
@@ -30,7 +33,8 @@
.icon {
margin-right: 10px;
- path {
+ path,
+ circle {
stroke: $theme;
}
}
diff --git a/resources/js/i18n/lang/en.json b/resources/js/i18n/lang/en.json
index 83c8e385..30ed361a 100644
--- a/resources/js/i18n/lang/en.json
+++ b/resources/js/i18n/lang/en.json
@@ -25,7 +25,8 @@
"pages": "Pages",
"plans": "Plans",
"settings": "Settings",
- "users": "Users"
+ "users": "Users",
+ "language": "Language"
},
"admin_page_dashboard": {
"backer_button": "Become a Backer",
@@ -662,7 +663,8 @@
"users_list": "User Management",
"users_password": "Password",
"users_storage_usage": "Storage Usage",
- "users_user": "User"
+ "users_user": "User",
+ "language": "Language"
},
"rows": {
"card": {
diff --git a/resources/js/router.js b/resources/js/router.js
index e9f282f8..ccca7125 100644
--- a/resources/js/router.js
+++ b/resources/js/router.js
@@ -284,6 +284,17 @@ const routesAdmin = [
},
]
},
+
+ {
+ name: 'Language',
+ path: '/admin/language',
+ component: () =>
+ import(/* webpackChunkName: "chunks/app-language" */ './views/Admin/Languages/Language'),
+ meta: {
+ requiresAuth: true,
+ title: i18n.t('routes_title.language')
+ },
+ }
]
},
{
diff --git a/resources/js/store/modules/app.js b/resources/js/store/modules/app.js
index 53f58fe4..d6372c63 100644
--- a/resources/js/store/modules/app.js
+++ b/resources/js/store/modules/app.js
@@ -1,4 +1,5 @@
import i18n from '@/i18n/index'
+import Axios from 'axios'
const defaultState = {
fileInfoPanelVisible: localStorage.getItem('file_info_visibility') == 'true' || false,
@@ -8,6 +9,10 @@ const defaultState = {
authorized: undefined,
homeDirectory: undefined,
requestedPlan: undefined,
+ languages: {
+ allLanguages: undefined,
+ strings: undefined,
+ },
sorting: {
sort: localStorage.getItem('sorting') ? JSON.parse(localStorage.getItem('sorting')).sort : 'DESC',
field: localStorage.getItem('sorting') ? JSON.parse(localStorage.getItem('sorting')).field : 'created_at',
@@ -841,6 +846,35 @@ const defaultState = {
],
}
const actions = {
+ getLanguages: ({commit, state}) => {
+
+ return new Promise((resolve, reject) => {
+
+ axios
+ .get('/api/language/get')
+ .then((response) => {
+ commit('LOAD_LANGUAGES', response.data)
+ })
+ .catch(() => Vue.prototype.$isSomethingWrong())
+ .finally(() => {
+ resolve(true)
+ })
+ })
+ },
+ getLanguageStrings: ({ commit }, language) => {
+ return new Promise((resolve, reject) => {
+
+ axios
+ .get(`/api/language/${language.locale}/strings`)
+ .then(response => {
+ commit('LOAD_LANGUAGE_STRINGS', response.data)
+ })
+ .catch(() => Vue.prototype.$isSomethingWrong())
+ .finally(() => {
+ resolve(true)
+ })
+ })
+ },
changePreviewType: ({commit, state}, preview) => {
// Get preview type
@@ -865,6 +899,12 @@ const actions = {
},
}
const mutations = {
+ LOAD_LANGUAGE_STRINGS (state, data) {
+ state.languages.strings = data
+ },
+ LOAD_LANGUAGES(state, data) {
+ state.languages.allLanguages = data
+ },
UPDATE_SORTING(state) {
state.sorting.field = JSON.parse(localStorage.getItem('sorting')).field
state.sorting.sort = JSON.parse(localStorage.getItem('sorting')).sort
@@ -906,6 +946,7 @@ const getters = {
requestedPlan: state => state.requestedPlan,
currencyList: state => state.currencyList,
countries: state => state.countries,
+ languages: state => state.languages,
api: state => state.config.api,
config: state => state.config,
index: state => state.index,
diff --git a/resources/js/views/Admin.vue b/resources/js/views/Admin.vue
index 12ef9d51..f72d0d9d 100644
--- a/resources/js/views/Admin.vue
+++ b/resources/js/views/Admin.vue
@@ -30,6 +30,14 @@
{{ $t('admin_menu.settings') }}
+
@@ -69,7 +77,7 @@
diff --git a/resources/js/views/Admin/Languages/Language.vue b/resources/js/views/Admin/Languages/Language.vue
new file mode 100644
index 00000000..6eec3ad0
--- /dev/null
+++ b/resources/js/views/Admin/Languages/Language.vue
@@ -0,0 +1,100 @@
+