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 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>
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue