feat: GraphQL translations + login form
This commit is contained in:
		
							
								
								
									
										57
									
								
								client/js/modules/localization.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								client/js/modules/localization.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| import i18next from 'i18next' | ||||
| import i18nextXHR from 'i18next-xhr-backend' | ||||
| import i18nextCache from 'i18next-localstorage-cache' | ||||
| import gql from 'graphql-tag' | ||||
| import VueI18Next from '@panter/vue-i18next' | ||||
| import loSet from 'lodash/set' | ||||
|  | ||||
| /* global siteConfig */ | ||||
|  | ||||
| module.exports = { | ||||
|   VueI18Next, | ||||
|   init() { | ||||
|     i18next | ||||
|       .use(i18nextXHR) | ||||
|       .use(i18nextCache) | ||||
|       .init({ | ||||
|         backend: { | ||||
|           loadPath: '{{lng}}/{{ns}}', | ||||
|           parse: (data) => data, | ||||
|           ajax: (url, opts, cb, data) => { | ||||
|             let langParams = url.split('/') | ||||
|             console.info(langParams) | ||||
|             window.apollo.query({ | ||||
|               query: gql` | ||||
|                 { | ||||
|                   translations(locale:"${langParams[0]}", namespace:"${langParams[1]}") { | ||||
|                     key | ||||
|                     value | ||||
|                   } | ||||
|                 } | ||||
|               ` | ||||
|             }).then(resp => { | ||||
|               let ns = {} | ||||
|               if (resp.data.translations.length > 0) { | ||||
|                 resp.data.translations.forEach(entry => { | ||||
|                   loSet(ns, entry.key, entry.value) | ||||
|                 }) | ||||
|               } | ||||
|               return cb(ns, {status: '200'}) | ||||
|             }).catch(err => { | ||||
|               console.error(err) | ||||
|               return cb(null, {status: '404'}) | ||||
|             }) | ||||
|           } | ||||
|         }, | ||||
|         cache: { | ||||
|           enabled: true, | ||||
|           expiration: 60 * 60 * 1000 | ||||
|         }, | ||||
|         defaultNS: 'common', | ||||
|         lng: siteConfig.lang, | ||||
|         fallbackLng: siteConfig.lang, | ||||
|         ns: ['common', 'admin', 'auth'] | ||||
|       }) | ||||
|     return new VueI18Next(i18next) | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user