| 
									
										
										
										
											2020-11-05 13:34:48 +01:00
										 |  |  | import {DropDown} from "./Input/DropDown"; | 
					
						
							|  |  |  | import Locale from "./i18n/Locale"; | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  | import BaseUIElement from "./BaseUIElement"; | 
					
						
							| 
									
										
										
										
											2022-02-24 02:33:20 +01:00
										 |  |  | import * as native from "../assets/language_native.json" | 
					
						
							|  |  |  | import * as language_translations from "../assets/language_translations.json" | 
					
						
							|  |  |  | import {Translation} from "./i18n/Translation"; | 
					
						
							| 
									
										
										
										
											2022-04-03 03:00:45 +02:00
										 |  |  | import * as used_languages from "../assets/generated/used_languages.json" | 
					
						
							|  |  |  | import Lazy from "./Base/Lazy"; | 
					
						
							|  |  |  | import Toggle from "./Input/Toggle"; | 
					
						
							| 
									
										
										
										
											2020-11-05 13:34:48 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default class LanguagePicker { | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 13:34:48 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public static CreateLanguagePicker( | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |         languages: string[], | 
					
						
							| 
									
										
										
										
											2022-04-03 03:00:45 +02:00
										 |  |  |         label: string | BaseUIElement = "") : BaseUIElement{ | 
					
						
							| 
									
										
										
										
											2020-11-05 13:34:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-30 21:29:17 +01:00
										 |  |  |         if (languages === undefined || languages.length <= 1) { | 
					
						
							| 
									
										
										
										
											2020-11-05 13:34:48 +01:00
										 |  |  |             return undefined; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-02-24 02:33:20 +01:00
										 |  |  |          | 
					
						
							| 
									
										
										
										
											2022-04-03 03:00:45 +02:00
										 |  |  |         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) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private static dropdownFor(languages: string[], label: string | BaseUIElement): BaseUIElement { | 
					
						
							| 
									
										
										
										
											2022-04-08 18:03:15 +02:00
										 |  |  |        return new DropDown(label, languages | 
					
						
							|  |  |  |            .filter(lang => lang !== "_context") | 
					
						
							|  |  |  |            .map(lang => { | 
					
						
							| 
									
										
										
										
											2022-02-24 02:33:20 +01:00
										 |  |  |                 return {value: lang, shown: LanguagePicker.hybrid(lang) } | 
					
						
							| 
									
										
										
										
											2020-11-05 13:34:48 +01:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2022-04-03 03:00:45 +02:00
										 |  |  |         ), Locale.language) | 
					
						
							| 
									
										
										
										
											2020-11-05 13:34:48 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-24 02:33:20 +01:00
										 |  |  |     private static hybrid(lang: string): Translation { | 
					
						
							|  |  |  |         const nativeText = native[lang] ?? lang | 
					
						
							|  |  |  |         const allTranslations =  (language_translations["default"] ?? language_translations) | 
					
						
							|  |  |  |         const translation = {} | 
					
						
							|  |  |  |         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()){ | 
					
						
							|  |  |  |                 translation[key] = nativeText | 
					
						
							|  |  |  |             }else{ | 
					
						
							|  |  |  |                 translation[key] = nativeText + " ("+translationInKey+")" | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return new Translation(translation) | 
					
						
							|  |  |  |     }  | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 13:34:48 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | } |