forked from MapComplete/MapComplete
Fix #2028
This commit is contained in:
parent
a4db7178f4
commit
70510d1def
4 changed files with 183 additions and 212 deletions
|
@ -23,16 +23,16 @@
|
|||
export let assignTo: UIEventSource<string> = Locale.language
|
||||
export let preferredLanguages: Store<string[]> = undefined
|
||||
let preferredFiltered: string[] = undefined
|
||||
|
||||
preferredLanguages?.addCallbackAndRunD((preferredLanguages) => {
|
||||
let lng = navigator.language
|
||||
if (lng === "en-US") {
|
||||
lng = "en"
|
||||
}
|
||||
const lng = Locale.getBestSupportedLanguage()
|
||||
if (preferredLanguages?.indexOf(lng) < 0) {
|
||||
preferredLanguages?.push(lng)
|
||||
}
|
||||
preferredFiltered = preferredLanguages?.filter((l) => availableLanguages.indexOf(l) >= 0)
|
||||
})
|
||||
|
||||
|
||||
export let clss: string = undefined
|
||||
let current = Locale.language
|
||||
</script>
|
||||
|
|
|
@ -2,6 +2,7 @@ import { UIEventSource } from "../../Logic/UIEventSource"
|
|||
import { LocalStorageSource } from "../../Logic/Web/LocalStorageSource"
|
||||
import { Utils } from "../../Utils"
|
||||
import { QueryParameters } from "../../Logic/Web/QueryParameters"
|
||||
import native from "../../assets/language_native.json"
|
||||
|
||||
export default class Locale {
|
||||
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 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
|
||||
*
|
||||
|
@ -54,11 +72,7 @@ export default class Locale {
|
|||
} else {
|
||||
let browserLanguage = "en"
|
||||
if (typeof navigator !== "undefined") {
|
||||
browserLanguage = navigator.languages?.[0] ?? navigator.language ?? "en"
|
||||
console.log("Browser language is", browserLanguage)
|
||||
if (browserLanguage === "en-US") {
|
||||
browserLanguage = "en"
|
||||
}
|
||||
browserLanguage = Locale.getBestSupportedLanguage()
|
||||
}
|
||||
source = LocalStorageSource.Get("language", browserLanguage)
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"gl": "lingua galega",
|
||||
"he": "עברית",
|
||||
"hu": "magyar",
|
||||
"id": "Indonesia",
|
||||
"id": "bahasa Indonesia",
|
||||
"it": "italiano",
|
||||
"ja": "日本語",
|
||||
"nb_NO": "bokmål",
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue