First commit
This commit is contained in:
42
frontend/app/utils/languages.ts
Normal file
42
frontend/app/utils/languages.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* The languages an article can be written in: an ISO 639-1 code with the
|
||||
* name of the language in its own script, as the editor's picker lists them.
|
||||
*/
|
||||
export const LANGUAGES: ReadonlyArray<{ code: string; name: string }> = [
|
||||
{ code: 'en', name: 'English' },
|
||||
{ code: 'fr', name: 'Français' },
|
||||
{ code: 'de', name: 'Deutsch' },
|
||||
{ code: 'es', name: 'Español' },
|
||||
{ code: 'ca', name: 'Català' },
|
||||
{ code: 'pt', name: 'Português' },
|
||||
{ code: 'it', name: 'Italiano' },
|
||||
{ code: 'nl', name: 'Nederlands' },
|
||||
{ code: 'pl', name: 'Polski' },
|
||||
{ code: 'ru', name: 'Русский' },
|
||||
{ code: 'uk', name: 'Українська' },
|
||||
{ code: 'tr', name: 'Türkçe' },
|
||||
{ code: 'ar', name: 'العربية' },
|
||||
{ code: 'fa', name: 'فارسی' },
|
||||
{ code: 'hi', name: 'हिन्दी' },
|
||||
{ code: 'zh', name: '中文' },
|
||||
{ code: 'ja', name: '日本語' },
|
||||
{ code: 'ko', name: '한국어' },
|
||||
]
|
||||
|
||||
export const DEFAULT_LANGUAGE = 'en'
|
||||
|
||||
/** The language an article is written in; articles predating the field are English. */
|
||||
export function articleLanguage(article: { language?: string }): string {
|
||||
return article.language?.trim().toLowerCase() || DEFAULT_LANGUAGE
|
||||
}
|
||||
|
||||
/** Display name for a code — the code itself in upper case if it is unfamiliar. */
|
||||
export function languageName(code: string): string {
|
||||
return LANGUAGES.find((l) => l.code === code)?.name ?? code.toUpperCase()
|
||||
}
|
||||
|
||||
/** The first language no version of an article has been written in yet. */
|
||||
export function nextFreeLanguage(taken: readonly string[]): string {
|
||||
const takenCodes = taken.map((c) => c.trim().toLowerCase())
|
||||
return LANGUAGES.find((l) => !takenCodes.includes(l.code))?.code ?? DEFAULT_LANGUAGE
|
||||
}
|
||||
Reference in New Issue
Block a user