@@ -24,7 +24,7 @@ export interface Binding {
2424
2525export const languageCodeURIBase = 'https://www.w3.org/ns/iana/language-code/' /// @@ unsupported on the web (2021)
2626
27- export const defaultPreferedLangages = [ 'en' , 'fr' , 'de' , 'it' ]
27+ export const defaultPreferedLangages = [ 'en' , 'fr' , 'de' , 'it' , 'ar' ]
2828
2929export async function getPreferredLanagugesFor ( person : NamedNode ) {
3030 await kb . fetcher . load ( person . doc ( ) )
@@ -60,20 +60,25 @@ export async function getPreferredLanagugesFor (person: NamedNode) {
6060 */
6161export async function getPreferredLanguages ( ) {
6262 // In future: cache in the login session for speed, but get from profile and private prefs
63+ // We append the defaults so if someone's first choice is not available they don't get something very obscure
64+ // See https://github.com/solid/solidos/issues/42
65+ function addDefaults ( array ) {
66+ return array . concat ( defaultPreferedLangages . filter ( code => ! array . includes ( code ) ) )
67+ }
6368 const me = await authn . currentUser ( ) as NamedNode
6469 if ( me ) { // If logged in
6570 const solidLanguagePrefs = await getPreferredLanagugesFor ( me )
66- if ( solidLanguagePrefs ) return solidLanguagePrefs
71+ if ( solidLanguagePrefs ) return addDefaults ( solidLanguagePrefs )
6772 }
6873 if ( typeof navigator !== 'undefined' ) { // use browser settings
6974 if ( navigator . languages ) {
70- return navigator . languages . map ( longForm => longForm . split ( '-' ) [ 0 ] )
75+ return addDefaults ( navigator . languages . map ( longForm => longForm . split ( '-' ) [ 0 ] ) )
7176 }
7277 if ( navigator . language ) {
73- return [ navigator . language . split ( '-' ) [ 0 ] ]
78+ return addDefaults ( [ navigator . language . split ( '-' ) [ 0 ] ] )
7479 }
7580 }
76- return defaultPreferedLangages // @@ or null?
81+ return defaultPreferedLangages
7782}
7883
7984/* From an array of bindings with a names for each row,
0 commit comments