Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
commit
03634b1ca3
11340 files changed
+3442369
No files matched your search
@@ -0,0 +1,41 @@
|
||||
import { en } from './en'
|
||||
import type { Translations } from './types'
|
||||
|
||||
type TranslationOverride<T> = T extends (...args: never[]) => string
|
||||
? T
|
||||
: T extends readonly unknown[]
|
||||
? T
|
||||
: T extends string
|
||||
? string
|
||||
: T extends object
|
||||
? { [K in keyof T]?: TranslationOverride<T[K]> }
|
||||
: T
|
||||
|
||||
export type TranslationOverrides = TranslationOverride<Translations>
|
||||
|
||||
function isRecord(value: unknown): value is Record<string, unknown> {
|
||||
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
||||
}
|
||||
|
||||
function mergeTranslations<T>(base: T, overrides: TranslationOverride<T> | undefined): T {
|
||||
if (!isRecord(base) || !isRecord(overrides)) {
|
||||
return (overrides ?? base) as T
|
||||
}
|
||||
|
||||
const result: Record<string, unknown> = { ...base }
|
||||
|
||||
for (const [key, value] of Object.entries(overrides)) {
|
||||
if (value === undefined) {
|
||||
continue
|
||||
}
|
||||
|
||||
const baseValue = result[key]
|
||||
result[key] = isRecord(baseValue) && isRecord(value) ? mergeTranslations(baseValue, value) : value
|
||||
}
|
||||
|
||||
return result as T
|
||||
}
|
||||
|
||||
export function defineLocale(overrides: TranslationOverrides): Translations {
|
||||
return mergeTranslations<Translations>(en, overrides)
|
||||
}
|
||||
Reference in new issue
Block a user