-
+
+
@@ -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 b3466c5b..0430a2ac 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": "Help Us Improve",
@@ -672,7 +673,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..8a5ff47a 100644
--- a/resources/js/router.js
+++ b/resources/js/router.js
@@ -284,6 +284,16 @@ 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 427cc02a..43a5a1d5 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' || true,
@@ -9,6 +10,10 @@ const defaultState = {
homeDirectory: undefined,
requestedPlan: undefined,
emojis: 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',
@@ -983,6 +988,36 @@ 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
@@ -1010,6 +1045,12 @@ const mutations = {
LOAD_EMOJIS_LIST(state, data) {
state.emojis = data
},
+ 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
@@ -1052,6 +1093,7 @@ const getters = {
currencyList: state => state.currencyList,
countries: state => state.countries,
timezones: state=> state.timezones,
+ languages: state => state.languages,
api: state => state.config.api,
config: state => state.config,
emojis: state => state.emojis,
diff --git a/resources/js/views/Admin.vue b/resources/js/views/Admin.vue
index 9ad7d86c..e3e45268 100644
--- a/resources/js/views/Admin.vue
+++ b/resources/js/views/Admin.vue
@@ -38,6 +38,14 @@
{{ $t('admin_menu.pages') }}
+
@@ -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..09f00b56
--- /dev/null
+++ b/resources/js/views/Admin/Languages/Language.vue
@@ -0,0 +1,106 @@
+