wikijs-fork/server/models/locales.js

64 lines
1.5 KiB
JavaScript

const Model = require('objection').Model
/* global WIKI */
/**
* Locales model
*/
module.exports = class Locale extends Model {
static get tableName() { return 'locales' }
static get idColumn() { return 'code' }
static get jsonSchema () {
return {
type: 'object',
required: ['code', 'name'],
properties: {
code: {type: 'string'},
isRTL: {type: 'boolean', default: false},
name: {type: 'string'},
nativeName: {type: 'string'},
createdAt: {type: 'string'},
updatedAt: {type: 'string'},
availability: {type: 'integer'}
}
}
}
static get jsonAttributes() {
return ['strings']
}
$beforeUpdate() {
this.updatedAt = new Date().toISOString()
}
$beforeInsert() {
this.createdAt = new Date().toISOString()
this.updatedAt = new Date().toISOString()
}
static async getNavLocales({ cache = false } = {}) {
if (!WIKI.config.lang.namespacing) {
return []
}
if (cache) {
const navLocalesCached = await WIKI.cache.get('nav:locales')
if (navLocalesCached) {
return navLocalesCached
}
}
const navLocales = await WIKI.models.locales.query().select('code', 'nativeName AS name').whereIn('code', WIKI.config.lang.namespaces).orderBy('code')
if (navLocales) {
if (cache) {
await WIKI.cache.set('nav:locales', navLocales, 300)
}
return navLocales
} else {
WIKI.logger.warn('Site Locales for navigation are missing or corrupted.')
return []
}
}
}