Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "hosting": {
- "public": "dist",
- "ignore": [
- "firebase.json",
- "**/.*",
- "**/node_modules/**"
- ],
- "rewrites": [
- {
- "source": "/en-us/**",
- "destination": "/en-us/index.html"
- },
- {
- "source": "/es-co/**",
- "destination": "/es-co/index.html"
- },
- {
- "source": "/zh-hans/**",
- "destination": "/zh-hans/index.html"
- },
- {
- "source": "**",
- "destination": "/en-us/index.html"
- }
- ]
- }
- }
- {
- "functions": {
- "predeploy": [
- "npm --prefix "$RESOURCE_DIR" run lint"
- ]
- },
- "hosting": {
- "public": "dist",
- "ignore": [
- "firebase.json",
- "**/.*",
- "**/node_modules/**"
- ],
- "rewrites": [
- {
- "source": "**",
- "function": "multilang"
- }
- ]
- }
- }
- const express = require('express')
- const expressLocale = require('express-locale')
- const cookieParser = require('cookie-parser')
- const functions = require('firebase-functions')
- const path = require('path')
- const fs = require('fs')
- const _ = require('lodash')
- const app = express()
- const localeMap = {
- en: 'en_US',
- es: 'es_CO',
- zh: 'zh_TW',
- 'en-US': 'en_US',
- 'es-CO': 'es_CO',
- 'zh-TW': 'zh_TW',
- 'zh-Hans': 'zh_TW',
- en_US: 'en_US',
- es_CO: 'es_CO',
- zh_TW: 'zh_TW',
- zh_Hans: 'zh_TW'
- }
- const defaultLocale = 'en_US'
- const baseMap = {
- en_US: 'en-us',
- es_CO: 'es-co',
- zh_TW: 'zh-hans'
- }
- app
- .use(cookieParser())
- .use(expressLocale({
- priority: ['cookie', 'accept-language', 'map', 'default'],
- default: defaultLocale,
- map: localeMap
- }))
- .use('**', (req, res, next) => {
- const locale = localeMap[req.locale.language]
- const sanitized = req.originalUrl.replace(/.{2,}/g, '').replace(//{2,}/g, '/')
- const url = sanitized.split('/')
- const idx = url.length === 1 ? 0 : 1
- url[0] = _.values(baseMap).includes(url[idx]) ?
- url[idx] : (baseMap[locale] || baseMap[defaultLocale])
- if (url.length > 1 && url[0] === url[1]) {
- url.shift()
- }
- let file = path.resolve(`dist/${url.join('/')}`)
- if (!url[url.length - 1].match(/^[w,s-]+.[a-z0-9]{2,4}$/) || !fs.existsSync(file)) {
- file = path.resolve(`dist/${url[0]}/index.html`)
- }
- res.sendFile(file)
- })
- exports.multilang = functions.https.onRequest(app)
Add Comment
Please, Sign In to add comment