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