| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import path from 'path' |
| | import fs from 'fs' |
| | import dotenv from 'dotenv' |
| |
|
| | import { ROOT, TRANSLATIONS_ROOT, TRANSLATIONS_FIXTURE_ROOT } from '@/frame/lib/constants' |
| | import { languages as baseLanguages, type Language as BaseLanguage } from './languages' |
| |
|
| | dotenv.config({ quiet: true }) |
| |
|
| | |
| | export interface Language extends BaseLanguage { |
| | dir: string |
| | } |
| |
|
| | export interface Languages { |
| | [code: string]: Language |
| | } |
| |
|
| | function getRoot(languageCode: string): string { |
| | if (languageCode === 'en') return ROOT |
| |
|
| | |
| | |
| | |
| | if (TRANSLATIONS_FIXTURE_ROOT) { |
| | return path.join(TRANSLATIONS_FIXTURE_ROOT, languageCode) |
| | } |
| |
|
| | |
| | const possibleEnvVar = |
| | process.env[`TRANSLATIONS_ROOT_${languageCode.toUpperCase().replace(/-/g, '_')}`] |
| | if (possibleEnvVar) { |
| | return possibleEnvVar |
| | } |
| |
|
| | |
| | return path.join(TRANSLATIONS_ROOT, languageCode) |
| | } |
| |
|
| | |
| | const allLanguagesWithDirs: Languages = {} |
| | for (const [code, lang] of Object.entries(baseLanguages)) { |
| | allLanguagesWithDirs[code] = { |
| | ...lang, |
| | dir: getRoot(lang.locale || code), |
| | } |
| | } |
| |
|
| | Object.freeze(allLanguagesWithDirs) |
| |
|
| | const languages: Languages = { ...allLanguagesWithDirs } |
| |
|
| | if (TRANSLATIONS_FIXTURE_ROOT) { |
| | |
| | for (const [code, { dir }] of Object.entries(languages)) { |
| | if (code !== 'en' && !fs.existsSync(dir)) { |
| | delete languages[code] |
| | } |
| | } |
| | } else if (process.env.ENABLED_LANGUAGES) { |
| | if (process.env.ENABLED_LANGUAGES.toLowerCase() !== 'all') { |
| | for (const code of Object.keys(languages)) { |
| | if (!process.env.ENABLED_LANGUAGES!.includes(code)) { |
| | delete languages[code] |
| | } |
| | } |
| | |
| | |
| | } |
| | } else if (process.env.NODE_ENV === 'test') { |
| | |
| | for (const code of Object.keys(languages)) { |
| | if (code !== 'en') delete languages[code] |
| | } |
| | } |
| |
|
| | export const languageKeys: string[] = Object.keys(languages) |
| |
|
| | export const languagePrefixPathRegex: RegExp = new RegExp(`^/(${languageKeys.join('|')})(/|$)`) |
| |
|
| | |
| | |
| | |
| | |
| | export function pathLanguagePrefixed(urlPath: string): boolean { |
| | return languagePrefixPathRegex.test(urlPath) |
| | } |
| |
|
| | export default languages |
| |
|