This commit is contained in:
Pieter Vander Vennet 2024-07-18 16:16:56 +02:00
parent a4db7178f4
commit 70510d1def
4 changed files with 183 additions and 212 deletions

View file

@ -23,16 +23,16 @@
export let assignTo: UIEventSource<string> = Locale.language export let assignTo: UIEventSource<string> = Locale.language
export let preferredLanguages: Store<string[]> = undefined export let preferredLanguages: Store<string[]> = undefined
let preferredFiltered: string[] = undefined let preferredFiltered: string[] = undefined
preferredLanguages?.addCallbackAndRunD((preferredLanguages) => { preferredLanguages?.addCallbackAndRunD((preferredLanguages) => {
let lng = navigator.language const lng = Locale.getBestSupportedLanguage()
if (lng === "en-US") {
lng = "en"
}
if (preferredLanguages?.indexOf(lng) < 0) { if (preferredLanguages?.indexOf(lng) < 0) {
preferredLanguages?.push(lng) preferredLanguages?.push(lng)
} }
preferredFiltered = preferredLanguages?.filter((l) => availableLanguages.indexOf(l) >= 0) preferredFiltered = preferredLanguages?.filter((l) => availableLanguages.indexOf(l) >= 0)
}) })
export let clss: string = undefined export let clss: string = undefined
let current = Locale.language let current = Locale.language
</script> </script>

View file

@ -2,6 +2,7 @@ import { UIEventSource } from "../../Logic/UIEventSource"
import { LocalStorageSource } from "../../Logic/Web/LocalStorageSource" import { LocalStorageSource } from "../../Logic/Web/LocalStorageSource"
import { Utils } from "../../Utils" import { Utils } from "../../Utils"
import { QueryParameters } from "../../Logic/Web/QueryParameters" import { QueryParameters } from "../../Logic/Web/QueryParameters"
import native from "../../assets/language_native.json"
export default class Locale { export default class Locale {
public static showLinkToWeblate: UIEventSource<boolean> = new UIEventSource<boolean>(false) public static showLinkToWeblate: UIEventSource<boolean> = new UIEventSource<boolean>(false)
@ -11,6 +12,23 @@ export default class Locale {
public static showLinkOnMobile: UIEventSource<boolean> = new UIEventSource<boolean>(false) public static showLinkOnMobile: UIEventSource<boolean> = new UIEventSource<boolean>(false)
public static language: UIEventSource<string> = Locale.setup() public static language: UIEventSource<string> = Locale.setup()
public static getBestSupportedLanguage(browserLanguage?: string){
browserLanguage ??= navigator.languages?.[0] ?? navigator.language ?? "en"
console.log("Browser language is", browserLanguage)
const availableLanguages = Object.keys(native)
const hasBrowserLang = availableLanguages.indexOf(browserLanguage) >= 0
if (hasBrowserLang) {
return browserLanguage
}
browserLanguage = browserLanguage.replace(/[-_].*/g, "")
const hasBrowserLangFallback = availableLanguages.indexOf(browserLanguage) >= 0
if(hasBrowserLangFallback){
return browserLanguage
}
console.log("Language",browserLanguage,"not supported, defaulting to english")
return "en"
}
/** /**
* Creates the UIEventSource containing the identifier of the current language * Creates the UIEventSource containing the identifier of the current language
* *
@ -54,11 +72,7 @@ export default class Locale {
} else { } else {
let browserLanguage = "en" let browserLanguage = "en"
if (typeof navigator !== "undefined") { if (typeof navigator !== "undefined") {
browserLanguage = navigator.languages?.[0] ?? navigator.language ?? "en" browserLanguage = Locale.getBestSupportedLanguage()
console.log("Browser language is", browserLanguage)
if (browserLanguage === "en-US") {
browserLanguage = "en"
}
} }
source = LocalStorageSource.Get("language", browserLanguage) source = LocalStorageSource.Get("language", browserLanguage)
} }

View file

@ -11,7 +11,7 @@
"gl": "lingua galega", "gl": "lingua galega",
"he": "עברית", "he": "עברית",
"hu": "magyar", "hu": "magyar",
"id": "Indonesia", "id": "bahasa Indonesia",
"it": "italiano", "it": "italiano",
"ja": "日本語", "ja": "日本語",
"nb_NO": "bokmål", "nb_NO": "bokmål",

File diff suppressed because it is too large Load diff