47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
// Author: fruit.com.cn
|
|
|
|
export interface ContentLanguage {
|
|
code: string
|
|
label: string
|
|
}
|
|
|
|
export const CONTENT_LANGUAGES: ContentLanguage[] = [
|
|
{ code: 'zh', label: '中文' },
|
|
{ code: 'en', label: '英文' },
|
|
{ code: 'id', label: '印尼语' }
|
|
]
|
|
|
|
export function languageLabel(code: string) {
|
|
return CONTENT_LANGUAGES.find((item) => item.code === code)?.label || code
|
|
}
|
|
|
|
export function languageCodes(locales?: Record<string, string> | null) {
|
|
const source = locales || {}
|
|
return CONTENT_LANGUAGES.map((item) => item.code).filter((code) => source[code])
|
|
}
|
|
|
|
export function localesFromColumns(
|
|
locales: Record<string, string> | null | undefined,
|
|
zh?: string,
|
|
en?: string,
|
|
id?: string
|
|
) {
|
|
if (locales && Object.keys(locales).length) {
|
|
return { ...locales }
|
|
}
|
|
const result: Record<string, string> = {}
|
|
if (zh) result.zh = zh
|
|
if (en) result.en = en
|
|
if (id) result.id = id
|
|
if (!result.zh) result.zh = ''
|
|
return result
|
|
}
|
|
|
|
export function payloadLocales(locales: Record<string, string>, codes: string[]) {
|
|
const result: Record<string, string> = {}
|
|
codes.forEach((code) => {
|
|
result[code] = String(locales[code] || '').trim()
|
|
})
|
|
return result
|
|
}
|