Commit d74683b5 authored by Nick's avatar Nick

fix: i18n client caching

parent 69748116
...@@ -3,11 +3,30 @@ ...@@ -3,11 +3,30 @@
v-toolbar(flat, color='primary', dark, dense) v-toolbar(flat, color='primary', dark, dense)
.subheading {{ $t('admin:utilities.contentTitle') }} .subheading {{ $t('admin:utilities.contentTitle') }}
v-card-text v-card-text
v-subheader.pl-0.primary--text Migrate all pages to base language v-subheader.pl-0.primary--text Migrate all pages to target locale
.body-1 If you created content before selecting a different locale and activating the namespacing capabilities, you may want to transfer all content to the base locale. .body-1 If you created content before selecting a different locale and activating the namespacing capabilities, you may want to transfer all content to the base locale.
.body-1.red--text: strong This operation is destructive and cannot be reversed! Make sure you have proper backups! .body-1.red--text: strong This operation is destructive and cannot be reversed! Make sure you have proper backups!
.body-1.mt-3 Based on your current configuration, all pages will be migrated to the locale #[v-chip(label, small): strong {{currentLocale.toUpperCase()}}] v-toolbar.radius-7.mt-3.wiki-form(flat, color='grey lighten-4', height='80')
.body-1.mt-3 Pages that are already in the target locale will not be touched. If a page already exists at the target, the source page will not be modified as it would create a conflict. If you want to overwrite the target content, you must first delete that page. v-select(
label='Source Locale'
outline
hide-details
:items='locales'
item-text='name'
item-value='code'
v-model='sourceLocale'
)
v-icon.mx-3(large) arrow_forward
v-select(
label='Target Locale'
outline
hide-details
:items='locales'
item-text='name'
item-value='code'
v-model='targetLocale'
)
.body-1.mt-3 Pages that are already in the target locale will not be touched. If a page already exists at the target, the source page will not be modified as it would create a conflict. If you want to overwrite the target page, you must first delete it.
v-btn(outline, color='primary', @click='migrateToLocale', :disabled='loading').ml-0.mt-3 v-btn(outline, color='primary', @click='migrateToLocale', :disabled='loading').ml-0.mt-3
v-icon(left) build v-icon(left) build
span Proceed span Proceed
...@@ -17,17 +36,22 @@ ...@@ -17,17 +36,22 @@
import _ from 'lodash' import _ from 'lodash'
import utilityContentMigrateLocaleMutation from 'gql/admin/utilities/utilities-mutation-content-migratelocale.gql' import utilityContentMigrateLocaleMutation from 'gql/admin/utilities/utilities-mutation-content-migratelocale.gql'
/* global siteLang */ /* global siteLangs, siteConfig */
export default { export default {
data: () => { data: () => {
return { return {
loading: false loading: false,
sourceLocale: '',
targetLocale: ''
} }
}, },
computed: { computed: {
currentLocale() { currentLocale () {
return siteConfig.lang return siteConfig.lang
},
locales () {
return siteLangs
} }
}, },
methods: { methods: {
...@@ -39,7 +63,8 @@ export default { ...@@ -39,7 +63,8 @@ export default {
const respRaw = await this.$apollo.mutate({ const respRaw = await this.$apollo.mutate({
mutation: utilityContentMigrateLocaleMutation, mutation: utilityContentMigrateLocaleMutation,
variables: { variables: {
targetLocale: siteConfig.lang sourceLocale: this.sourceLocale,
targetLocale: this.targetLocale
} }
}) })
const resp = _.get(respRaw, 'data.pages.migrateToLocale.responseResult', {}) const resp = _.get(respRaw, 'data.pages.migrateToLocale.responseResult', {})
......
mutation { mutation($sourceLocale: String!, $targetLocale: String!) {
pages { pages {
migrateToLocale { migrateToLocale(sourceLocale: $sourceLocale, targetLocale: $targetLocale) {
responseResult { responseResult {
succeeded succeeded
errorCode errorCode
......
import i18next from 'i18next' import i18next from 'i18next'
import Backend from 'i18next-chained-backend'
import LocalStorageBackend from 'i18next-localstorage-backend'
import i18nextXHR from 'i18next-xhr-backend' import i18nextXHR from 'i18next-xhr-backend'
import i18nextCache from 'i18next-localstorage-cache'
import VueI18Next from '@panter/vue-i18next' import VueI18Next from '@panter/vue-i18next'
import _ from 'lodash' import _ from 'lodash'
...@@ -12,10 +13,18 @@ export default { ...@@ -12,10 +13,18 @@ export default {
VueI18Next, VueI18Next,
init() { init() {
i18next i18next
.use(i18nextXHR) .use(Backend)
.use(i18nextCache)
.init({ .init({
backend: { backend: {
backends: [
LocalStorageBackend,
i18nextXHR
],
backendOptions: [
{
expirationTime: 1000*60*60*24 // 24h
},
{
loadPath: '{{lng}}/{{ns}}', loadPath: '{{lng}}/{{ns}}',
parse: (data) => data, parse: (data) => data,
ajax: (url, opts, cb, data) => { ajax: (url, opts, cb, data) => {
...@@ -39,10 +48,8 @@ export default { ...@@ -39,10 +48,8 @@ export default {
return cb(null, {status: '404'}) return cb(null, {status: '404'})
}) })
} }
}, }
cache: { ]
enabled: true,
expiration: 60 * 60 * 1000
}, },
defaultNS: 'common', defaultNS: 'common',
lng: siteConfig.lang, lng: siteConfig.lang,
......
...@@ -79,7 +79,6 @@ ...@@ -79,7 +79,6 @@
"highlight.js": "9.15.8", "highlight.js": "9.15.8",
"i18next": "17.0.4", "i18next": "17.0.4",
"i18next-express-middleware": "1.8.0", "i18next-express-middleware": "1.8.0",
"i18next-localstorage-cache": "1.1.1",
"i18next-node-fs-backend": "2.1.3", "i18next-node-fs-backend": "2.1.3",
"image-size": "0.7.4", "image-size": "0.7.4",
"js-base64": "2.5.1", "js-base64": "2.5.1",
...@@ -231,6 +230,8 @@ ...@@ -231,6 +230,8 @@
"hammerjs": "2.0.8", "hammerjs": "2.0.8",
"html-webpack-plugin": "3.2.0", "html-webpack-plugin": "3.2.0",
"html-webpack-pug-plugin": "2.0.0", "html-webpack-pug-plugin": "2.0.0",
"i18next-chained-backend": "2.0.0",
"i18next-localstorage-backend": "3.0.0",
"i18next-xhr-backend": "3.0.0", "i18next-xhr-backend": "3.0.0",
"ignore-loader": "0.1.2", "ignore-loader": "0.1.2",
"js-cookie": "2.2.0", "js-cookie": "2.2.0",
......
...@@ -74,7 +74,10 @@ type PageMutation { ...@@ -74,7 +74,10 @@ type PageMutation {
flushCache: DefaultResponse @auth(requires: ["manage:system"]) flushCache: DefaultResponse @auth(requires: ["manage:system"])
migrateToLocale: DefaultResponse @auth(requires: ["manage:system"]) migrateToLocale(
sourceLocale: String!
targetLocale: String!
): DefaultResponse @auth(requires: ["manage:system"])
} }
# ----------------------------------------------- # -----------------------------------------------
......
This diff was suppressed by a .gitattributes entry.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment