forked from MapComplete/MapComplete
		
	LanguagePicker now has a proper constructor
This commit is contained in:
		
							parent
							
								
									8047f69fea
								
							
						
					
					
						commit
						51a6756dd4
					
				
					 6 changed files with 29 additions and 30 deletions
				
			
		|  | @ -8,52 +8,52 @@ import * as used_languages from "../assets/generated/used_languages.json" | |||
| import Lazy from "./Base/Lazy"; | ||||
| import Toggle from "./Input/Toggle"; | ||||
| 
 | ||||
| export default class LanguagePicker { | ||||
| export default class LanguagePicker extends Toggle { | ||||
| 
 | ||||
| 
 | ||||
|     public static CreateLanguagePicker( | ||||
|         languages: string[], | ||||
|         label: string | BaseUIElement = "") : BaseUIElement{ | ||||
|     constructor(languages: string[], | ||||
|                 label: string | BaseUIElement = "") { | ||||
| 
 | ||||
| 
 | ||||
|         if (languages === undefined || languages.length <= 1) { | ||||
|             return undefined; | ||||
|         } | ||||
|          | ||||
|         const allLanguages : string[] = used_languages.languages; | ||||
|          | ||||
| 
 | ||||
|         const allLanguages: string[] = used_languages.languages; | ||||
| 
 | ||||
|         const normalPicker = LanguagePicker.dropdownFor(languages, label); | ||||
|         const fullPicker = new Lazy(() => LanguagePicker.dropdownFor(allLanguages, label)) | ||||
|         return new Toggle(fullPicker, normalPicker, Locale.showLinkToWeblate) | ||||
|         super(fullPicker, normalPicker, Locale.showLinkToWeblate); | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     private static dropdownFor(languages: string[], label: string | BaseUIElement): BaseUIElement { | ||||
|        return new DropDown(label, languages | ||||
|            .filter(lang => lang !== "_context") | ||||
|            .map(lang => { | ||||
|                 return {value: lang, shown: LanguagePicker.hybrid(lang) } | ||||
|             } | ||||
|         ), Locale.language) | ||||
|         return new DropDown(label, languages | ||||
|             .filter(lang => lang !== "_context") | ||||
|             .map(lang => { | ||||
|                     return {value: lang, shown: LanguagePicker.hybrid(lang)} | ||||
|                 } | ||||
|             ), Locale.language) | ||||
|     } | ||||
| 
 | ||||
|     private static hybrid(lang: string): Translation { | ||||
|         const nativeText = native[lang] ?? lang | ||||
|         const allTranslations =  (language_translations["default"] ?? language_translations) | ||||
|         const allTranslations = (language_translations["default"] ?? language_translations) | ||||
|         const translation = {} | ||||
|         const trans =  allTranslations[lang] | ||||
|         if(trans === undefined){ | ||||
|         const trans = allTranslations[lang] | ||||
|         if (trans === undefined) { | ||||
|             return new Translation({"*": nativeText}) | ||||
|         } | ||||
|         for (const key in trans) { | ||||
|             const translationInKey = allTranslations[lang][key] | ||||
|             if(nativeText.toLowerCase() === translationInKey.toLowerCase()){ | ||||
|             if (nativeText.toLowerCase() === translationInKey.toLowerCase()) { | ||||
|                 translation[key] = nativeText | ||||
|             }else{ | ||||
|                 translation[key] = nativeText + " ("+translationInKey+")" | ||||
|             } else { | ||||
|                 translation[key] = nativeText + " (" + translationInKey + ")" | ||||
|             } | ||||
|              | ||||
| 
 | ||||
|         } | ||||
|         return new Translation(translation) | ||||
|     }  | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue