| 
									
										
										
										
											2022-07-11 09:14:26 +02:00
										 |  |  | export default class WikidataUtils { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Mapping from wikidata-codes to weblate-codes. The wikidata-code is the key, mapcomplete/weblate is the value | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public static readonly languageRemapping = { | 
					
						
							|  |  |  |         nb: "nb_NO", | 
					
						
							|  |  |  |         "zh-hant": "zh_Hant", | 
					
						
							|  |  |  |         "zh-hans": "zh_Hans", | 
					
						
							|  |  |  |         "pt-br": "pt_BR", | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Extract languages and their language in every language from the data source. | 
					
						
							|  |  |  |      * The returned mapping will be {languageCode --> {languageCode0 --> language as written in languageCode0  }  } | 
					
						
							|  |  |  |      * @param data | 
					
						
							|  |  |  |      * @param remapLanguages | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public static extractLanguageData( | 
					
						
							| 
									
										
										
										
											2022-11-02 13:47:34 +01:00
										 |  |  |         data: { | 
					
						
							|  |  |  |             lang: { value: string } | 
					
						
							|  |  |  |             code: { value: string } | 
					
						
							|  |  |  |             label: { value: string } | 
					
						
							|  |  |  |             directionalityLabel?: { value?: string } | 
					
						
							|  |  |  |         }[], | 
					
						
							| 
									
										
										
										
											2022-07-11 09:14:26 +02:00
										 |  |  |         remapLanguages: Record<string, string> | 
					
						
							| 
									
										
										
										
											2022-11-02 13:47:34 +01:00
										 |  |  |     ): Map<string, { translations: Map<string, string>; directionality?: string[] }> { | 
					
						
							| 
									
										
										
										
											2022-07-11 09:14:26 +02:00
										 |  |  |         console.log("Got " + data.length + " entries") | 
					
						
							| 
									
										
										
										
											2022-11-02 13:47:34 +01:00
										 |  |  |         const perId = new Map< | 
					
						
							|  |  |  |             string, | 
					
						
							|  |  |  |             { translations: Map<string, string>; directionality?: string[] } | 
					
						
							|  |  |  |         >() | 
					
						
							| 
									
										
										
										
											2022-07-11 09:14:26 +02:00
										 |  |  |         for (const element of data) { | 
					
						
							|  |  |  |             let id = element.code.value | 
					
						
							|  |  |  |             id = remapLanguages[id] ?? id | 
					
						
							|  |  |  |             let labelLang = element.label["xml:lang"] | 
					
						
							|  |  |  |             labelLang = remapLanguages[labelLang] ?? labelLang | 
					
						
							|  |  |  |             const value = element.label.value | 
					
						
							|  |  |  |             if (!perId.has(id)) { | 
					
						
							| 
									
										
										
										
											2022-11-02 13:47:34 +01:00
										 |  |  |                 perId.set(id, { translations: new Map<string, string>(), directionality: [] }) | 
					
						
							| 
									
										
										
										
											2022-10-29 03:05:29 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |             const entry = perId.get(id) | 
					
						
							|  |  |  |             entry.translations.set(labelLang, value) | 
					
						
							|  |  |  |             const dir = element.directionalityLabel?.value | 
					
						
							|  |  |  |             if (dir) { | 
					
						
							| 
									
										
										
										
											2022-11-02 13:47:34 +01:00
										 |  |  |                 if (entry.directionality.indexOf(dir) < 0) { | 
					
						
							| 
									
										
										
										
											2022-10-29 03:05:29 +02:00
										 |  |  |                     entry.directionality.push(dir) | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2022-07-11 09:14:26 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         console.log("Got " + perId.size + " languages") | 
					
						
							|  |  |  |         return perId | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |